Disable badge for specific app with a script

The following example AppleScript code works for me under macOS High Sierra:

Note: Change "Calendar" in set appName to "Calendar" to the appropriate target app.


set appName to "Calendar"

if running of application "System Preferences" then
    quit application "System Preferences"
    delay 1
end if
tell application "System Preferences"
    set the current pane to pane id "com.apple.preference.notifications"
    delay 1
    tell application "System Events"
        tell table 1 of scroll area 1 of window 1 of application process "System Preferences"
            repeat with i from 2 to (count rows)
                if value of static text 1 of group 1 of UI element 1 of row i is appName then
                    select row i
                    exit repeat
                end if
            end repeat
        end tell
        delay 0.2
        click checkbox "Badge app icon" of group 1 of window 1 of application process "System Preferences"
    end tell
    quit
end tell

System Preferences does not need to be visible for this to work and why there is no activate command in the example AppleScript code. Additionally if System Preferences is already open, it is first closed before the rest of the code is processed. This is done for a couple of reasons, the first of which was already stated and secondly seeing the UI Events processed is a visual distraction and can be annoying.

Also note that the value of the delay commands may need to be adjusted for your system, and or additional delay commands may or may not be needed. Adjust values of and or add/remove the delay commands as appropriate.


For a version that acts on multiple applications and or all applications in Notification Center in System Preferences, see my answer to: Remove multiple app badge icons with one script?


Note: The example AppleScript code is just that and does not employ any error handling and is meant only to show one of many ways accomplish a task. The onus is always upon the User to add/use appropriate error handling as needed/wanted.