Skip to main content
Blog

Jamf App Installers Health Check

  • June 18, 2026
  • 18 replies
  • 705 views

ThomM
Forum|alt.badge.img+22

Mac Apps, App Installers, Jamf Apps, Jamf App Catalog… whatever name you know it by, the feature found in your Jamf Pro server at Computers – Mac apps – Jamf App Catalog is a great tool for deploying and patching many commonly used Apps which aren’t available through Apple’s App Store. For the sake of clarity, I will refer to them as App Installers for the remainder of this post. 

App Installers do have some caveats which are documented here. Being aware of those is well and good, but even the most experienced admins can make mistakes. Jamf Pro will not alert you if you have done something like overlapped scopes for different deployments of the same App Installer title.

If this occurs, that App Installer will likely cease to recalculate its deployment as more Macs are added to the Computer Group it is scoped to. If you toggle the “stuck” app’s deployment off and back on again, it’ll force it to recalculate and the Macs it was missing will begin to receive it.

This overlapping scope behavior is not limited to the offending App Installer, however.  When one App Installer’s deployment recalculation “locks up” because of overlapping scopes, it can cause other App Installers which do not have any scoping issues to also stop recalculating. Currently the only way for a Jamf admin to know this has occurred is either if someone reports expected apps are not installing, or if that admin just happens to be comparing App Installer deployment numbers to Smart Computer Group memberships.

This led me to write a script which can be run periodically as an App Installer “health check”. It will scan all the App Installers currently configured on your Jamf Pro server, calculate how many Macs Jamf Pro thinks should be in each deployment, grab the number of Macs in the Smart Group that each App Installer is scoped to, then compare the two numbers. Any App Installers whose numbers do not match will be written in a report to your Desktop for review. That report looks something like this:
 

 

In this example, Jamf Pro thinks this copy of an Outlook installer is scoped to 81 Macs (Deployment Count) but there are 82 Macs in the Smart Group it is scoped to (Smart Group Count). Toggling this title off and back on will force the Deployment Count to update to 82.

There does not appear to be an API endpoint to toggle the deployment of offending App Installers, but at least this gives us a list of titles which need a kickstart as well as insight into possible overlapping scopes.

Get the script at https://github.com/3panman/scripts/blob/main/JamfAppsCheck-Sanitized.zsh 

Before running this script, you’ll need to set up a few things:

  • In Jamf Pro:
    • Create an API role with “Read Smart Computer Groups” and “Read Mac Applications” privileges
    • Create an API Client with the above API Role assigned to it and document its Client ID and Client Secret.
       
  • On the Mac running the script
  • In the script
    • Paste your API Client ID between the quotes in line 23
    • Paste your API Client Secret between the quotes in line 24
    • Edit line 25 with your Jamf Pro server URL
    • Optionally, edit the directory path in line 43 if you would like the report to go somewhere other than your Desktop folder

Potential gotcha: Running this script right after a new Mac has been enrolled could output false mismatches while Jamf is working on recalculating all the things. If you get an output of App Installers which you think should be okay, give it a few minutes before running the script again to confirm.

Special thanks to ​@Jordy-Thery Thery and ​@neilmartinjamf  for their help brainstorming things over in the Mac Admins Slack and ​@tee_j_tee  for his documentation of the /api/v1/app-installers/ endpoints at https://github.com/tyler-tee/JNUC-2023 

 

 

 

 

 

 

 

18 replies

Jordy-Thery
Forum|alt.badge.img+17
  • Valued Contributor
  • June 18, 2026

Going to give this a go asap. 👌🏻 Thanks ​@ThomM!


ThomM
Forum|alt.badge.img+22
  • Author
  • Jamf Heroes
  • June 18, 2026

Going to give this a go asap. 👌🏻 Thanks ​@ThomM!

 

Thanks, man! I hope you find it useful!


Chubs
Forum|alt.badge.img+26
  • Jamf Heroes
  • June 18, 2026

To add to a little bit of security (by obscurity and self-destruction), you’ll want to leverage something like an encrypted json blob for your clientID and clientSecret.  Right now, the plaintext credentials (for any script, mind you) are echo’d into the log.

The way that this was designed puts the credentials in volatile ram associated to a variable and expunges itself shortly after used.  Never echo’d into the log unless if you directly echo it (please don’t do that).

https://github.com/jawheelr/SecureCredentials if you want to check it out.


ThomM
Forum|alt.badge.img+22
  • Author
  • Jamf Heroes
  • June 18, 2026

Thanks, Jarred.


tommypatzius
Forum|alt.badge.img+8
  • Jamf Heroes
  • June 18, 2026

You’re awesome Thom! In CodeRunner now tweaking the script to test this out.


ThomM
Forum|alt.badge.img+22
  • Author
  • Jamf Heroes
  • June 18, 2026

Thanks Tommy! Enjoy!


ktrojano
Forum|alt.badge.img+22
  • Jamf Heroes
  • July 9, 2026

Thanks ​@ThomM I’ve been running into issue this week getting apps to update in our labs. This could be the issue. I’m going to check it out.


ThomM
Forum|alt.badge.img+22
  • Author
  • Jamf Heroes
  • July 10, 2026

Thanks ​@ThomM I’ve been running into issue this week getting apps to update in our labs. This could be the issue. I’m going to check it out.

 

I’m sorry to hear things have been sticky, but I hope this can provide some visibility into what’s happening! At the very least if it reports no issues then you’ll have ruled out one possible cause, which is something.


homepup
Forum|alt.badge.img+8
  • Contributor
  • July 24, 2026

I’ve apparently got major Jamf App catalog issues (as I suspected) but am having trouble getting the report to display in a readable format. I think some of the line breaks need to be modified so it’ll show in columns. I’ll give it a shot with modifying the script to see if I can change the format. Here’s a sample of what I’m seeing (I cut it down from the hundreds crazy amount of lines to just like the top 10 for each section).

 

"Adobe Acrobat DC Continuous"
"Adobe Digital Editions"
"Adobe Dimension"
"Adobe DNG Converter"
"Adobe Dreamweaver 2021"
"Adobe Lightroom CC"
"Adobe Lightroom Classic"
"Adobe Premiere Rush 2.0"
"Adobe Substance 3D Designer"
"Adobe Substance 3D Painter"
is not recalculating its deployment scope. \n Toggle the app Installer off and back on to force it to recalculate. \n This may indicate a scoping conflict if it continues to occur. \n App URL: https://clemson.jamfcloud.com/view/computers/mac-apps/app-installers/deployments/7
13
14
15
16
21
22
27
28
29
30
\n App ID: 7
13
14
15
16
21
22
27
28
29
30
\n Deployment Count: 3242
3242
3242
3242
3242
3242
3242
3242
3242
3242
3184
3242
n Smart Group: All Managed Clients
All Managed Clients
All Managed Clients
All Managed Clients
All Managed Clients
All Managed Clients
All Managed Clients
All Managed Clients
All Managed Clients
All Managed Clients
Mac OS 12 and higher
\n Smart Group ID: 1
1
1
1
1
1
1
1
1
1
\n Smart Group Count: \n
"Adobe Acrobat DC Continuous"
"Adobe Digital Editions"
"Adobe Dimension"
"Adobe DNG Converter"
"Adobe Dreamweaver 2021"
"Adobe Lightroom CC"
"Adobe Lightroom Classic"
"Adobe Premiere Rush 2.0"
"Adobe Substance 3D Designer"
"Adobe Substance 3D Painter"
is not recalculating its deployment scope. \n Toggle the app Installer off and back on to force it to recalculate. \n This may indicate a scoping conflict if it continues to occur. \n App URL: https://clemson.jamfcloud.com/view/computers/mac-apps/app-installers/deployments/7
13
14
15
16
21
22
27
28
29
30
\n App ID: 7
13
14
15
16
21
22
27
28
29
30
\n Deployment Count: 3242
3242
3242
3242
3242
3242
3242
3242
3242
3242
3184
3242
3242
3242
3242
\n Smart Group: All Managed Clients
All Managed Clients
All Managed Clients
All Managed Clients
All Managed Clients
All Managed Clients
All Managed Clients
All Managed Clients
All Managed Clients
All Managed Clients
Mac OS 12 and higher
\n Smart Group ID: 1
1
1
1
1
1
1
1
1
1
438
1
1
\n Smart Group Count: \n

 


ThomM
Forum|alt.badge.img+22
  • Author
  • Jamf Heroes
  • July 24, 2026

@homepup Oh wow, that’s weird. It definitely shouldn’t be displaying like that.


ThomM
Forum|alt.badge.img+22
  • Author
  • Jamf Heroes
  • July 24, 2026

I just ran it changing the compare to == so I’d get a report of all apps as if everything was broken, and it comes out like this.

 


homepup
Forum|alt.badge.img+8
  • Contributor
  • July 24, 2026

I noticed I am getting an error also. Maybe that’s triggering the weirdness.

 

curl: (3) URL rejected: Malformed input to a URL function

Some App Installers may not be recalculating correctly. Opening report.



I think that was happening on line 68 but it doesn’t specify. I did try changing the URL path to v3 instead of v2 since that’s deprecated and seemed to get back more data, but it’s still being weird and tossing an error.

 

smartGroupCount=$(curl -X GET "$url/api/v3/computer-groups/smart-group-membership/$smartGroupID" -H "accept: application/json" -H "Authorization: Bearer $access_token" | jq '.members | length')

 


homepup
Forum|alt.badge.img+8
  • Contributor
  • July 24, 2026

I changed the compare to == and still get an error, however, it did report back that everything is ok, so that’s nice.
 

curl: (3) URL rejected: Malformed input to a URL function
All App Installers appear to be recalculating correctly. Exiting.

 


homepup
Forum|alt.badge.img+8
  • Contributor
  • July 24, 2026

Actually, now that I’m thinking about the logic of that, it makes the report if they’re equal, and I’m guessing mine aren’t equal so it falsely says it’s all correct now with that == edit. It’s Friday, my brain has already shut down apparently.


ThomM
Forum|alt.badge.img+22
  • Author
  • Jamf Heroes
  • July 24, 2026

oof… good catch on v3. I’ll update that, thanks. That curl error is definitely weird.

It feels like something’s wonky in the JSON parsing somehow.  I’ll admit I’m still more comfy working with XML so it’s possible I did something weird...


ThomM
Forum|alt.badge.img+22
  • Author
  • Jamf Heroes
  • July 24, 2026

LOL I feel that.  It’s the end of my first week back from vacation and I’m already ready for another vacation.


ktrojano
Forum|alt.badge.img+22
  • Jamf Heroes
  • July 28, 2026

Thanks ​@ThomM I’ve been running into issue this week getting apps to update in our labs. This could be the issue. I’m going to check it out.

 

I’m sorry to hear things have been sticky, but I hope this can provide some visibility into what’s happening! At the very least if it reports no issues then you’ll have ruled out one possible cause, which is something.

No issues were reported, which is good. I did get the installers to eventually install the updates. Only one more lab to go.


ThomM
Forum|alt.badge.img+22
  • Author
  • Jamf Heroes
  • July 28, 2026

Thanks ​@ThomM I’ve been running into issue this week getting apps to update in our labs. This could be the issue. I’m going to check it out.

 

I’m sorry to hear things have been sticky, but I hope this can provide some visibility into what’s happening! At the very least if it reports no issues then you’ll have ruled out one possible cause, which is something.

No issues were reported, which is good. I did get the installers to eventually install the updates. Only one more lab to go.

 

That’s good!  Yeah I really wish there was a “force push” or some similar sort of command for them.