How to delete everything an app knows about you

· 7 min read

Dragging an app to the Trash removes the program and leaves its data behind: the database in Application Support, the preferences file, caches, keychain entries, background login items, and the permission grants in Privacy & Security. Deleting all of it takes about ten minutes with Finder and Terminal. The one thing you cannot delete from your Mac is the copy on the developer’s server, if the app had an account or sync, and that requires a deletion request. Here is the full checklist, in the order that avoids leaving anything behind.

Before you delete anything: map it, wipe it, export it

You need two identifiers: the app’s name and its bundle identifier (the com.developer.appname string that most of its files are named after).

  1. Quit the app. Check Activity Monitor for helper processes with the app’s or developer’s name and quit those too.
  2. Get the bundle identifier: in Terminal, osascript -e 'id of app "Example"'.
  3. List what the app has written: find ~/Library -iname "*example*" 2>/dev/null, then the same with the identifier. Keep this output; it is your checklist.

If you have not mapped an app’s files before, where-mac-apps-keep-your-data-and-how-to-find-it.html explains what each Library folder holds.

Next, use the app’s own delete if it has one. Some apps can wipe their data from inside, and that reaches things a file search will not (encrypted stores, keychain items, server-side records). Look in Settings for “Delete all data,” “Reset,” “Clear history” or similar. For apps with accounts, look for “Delete account,” which should remove the server copy; more on that below.

Punchcard is an example of an app where this step is the whole job for the data side. Its Settings has “Burn the roll,” which deletes the single SQLite file that holds every day it has recorded. Because Punchcard has no account, no cloud and no networking code, there is no remote copy to chase. After burning the roll, the remaining steps below (app bundle, preferences) are housekeeping rather than privacy.

Before any of that, export what you want to keep. Deletion is final. If the app holds records you might want later (time logs, notes, a message history), export now; most apps offer CSV, JSON or plain text. Put the export somewhere outside the app’s folders so the sweep below does not take it.

Remove it from startup, then delete the app and its files

An app that runs at login will keep running and can rewrite its data after you delete it, so take it out of the startup path first.

  1. Open System Settings, General, Login Items & Extensions. Remove the app from the Open at Login list and switch off anything with its name under Allow in the Background.
  2. Check ~/Library/LaunchAgents and /Library/LaunchAgents for a .plist with the identifier. Move any you find to the Trash.
  3. Check /Library/LaunchDaemons for the same. These run as root and require an administrator password to remove.
  4. Log out and back in, or restart, so nothing from the app is still resident.

Now the main sweep. Quit the app if it somehow relaunched, then:

  1. Move the app from Applications to the Trash. For App Store apps you can also do this from Launchpad.
  2. In Finder, open ~/Library (Go, Go to Folder, ~/Library) and delete every match from the list you made at the start: - Application Support/ - Containers/ (sandboxed apps keep everything here) - Group Containers/., if it belongs only to this app - Caches/ - Saved Application State/.savedState - Logs/ - HTTPStorages/ and WebKit/ - Application Scripts/
  3. Delete the preferences properly. Do not just trash the .plist; macOS caches preferences and can restore the file. In Terminal run defaults delete com.developer.appname first, then remove ~/Library/Preferences/com.developer.appname.plist if it still exists.
  4. Check the system-wide /Library/Application Support and /Library/Preferences for the identifier. Installer-based apps sometimes write there.
  5. If the app came as an installer package, pkgutil --pkgs | grep -i example lists its receipts and pkgutil --files <package id> lists every file it placed. Remove leftovers, then sudo pkgutil --forget <package id> clears the receipt.
  6. Empty the Trash.

Keychain items and permission grants

Passwords, tokens and license keys live in the Keychain, not in any folder.

  1. Search Spotlight for Keychain Access and open it.
  2. Search for the app’s name and the developer’s name.
  3. Select each matching item and press Delete. Check both the login keychain and iCloud keychain if you use it.

On recent versions of macOS, website passwords live in the Passwords app instead; check there for any login associated with the app’s service.

Then the permissions. The app’s entries in Privacy & Security stay after deletion, and a reinstalled copy with the same identifier would inherit them.

  1. Open System Settings, Privacy & Security, and remove the app from Accessibility, Screen & System Audio Recording, Input Monitoring, Full Disk Access, Files and Folders, Automation and any other list it appears in (select it, click the minus button).
  2. Or, in Terminal, do it in one line: tccutil reset All com.developer.appname. This clears every grant for that identifier.
  3. Under Notifications, remove the app if it is still listed.

The copy you cannot delete locally

If the app had an account, sync, analytics or crash reporting, some of your data is on someone else’s computer, and nothing above touches it.

  1. Before deleting the app (or by logging into the web version), use the account deletion option if one exists. App Store apps that offer account creation are required to offer deletion too.
  2. If there is no option, email the developer with a deletion request. Privacy law in many places (the GDPR in Europe, state laws in the US) gives you a right to have it honored, and the privacy policy should name the address. reading-a-privacy-policy-for-a-mac-app-the-six-lines-that-matter.html covers where to look.
  3. Ask for confirmation. Keep the email.
  4. Analytics data is usually aggregated and tied to an anonymous identifier; developers often cannot delete it per user. That is worth knowing before you install the next app: the only analytics data that is fully deletable is the kind that was never sent.

This last step is the reason “where does this app send my data” is worth asking before, not after. For an app with no account and no networking code, this section is empty, and the local deletion is the whole story. For a tracker specifically, time-tracker-data-where-it-lives-and-who-can-read-it.html walks through the difference.

Verifying you got everything

  1. Run the find command from the start again, with both the name and the identifier. It should print nothing.
  2. Run defaults read com.developer.appname. It should say the domain does not exist.
  3. Search Keychain Access once more.
  4. Open Privacy & Security and confirm the app is gone from every list.
  5. Restart, then check Activity Monitor for anything with the app’s name.

If all five are clean, the app knows nothing about you on this Mac.

Questions

Do I need a third-party uninstaller app?

No. Uninstaller apps automate the search and the sweep, which is convenient, but they cannot do anything the steps above do not, and some ask for Full Disk Access to work. The manual route takes ten minutes and requires no new permissions.

I deleted the preferences file and it came back. Why?

The preferences daemon (cfprefsd) keeps settings in memory and writes them out again. Use defaults delete to remove them properly, or at minimum quit the app and log out before trashing the file.

Will reinstalling the app later bring my data back?

Only if you left something behind, or if the app restores from a server account. A clean removal plus a fresh install starts from zero, which is the test that you did it right.

What about Time Machine and other backups?

Backups contain the app’s data as it was at each backup. If removal matters for privacy, exclude or delete the app’s folders from the backup as well; Time Machine lets you delete all backups of a specific item from within the Time Machine browser.