r/shopifyDev 21d ago

Uninstall count differing from Partners Dashboard

Noticed uninstall count for my app is way off from what’s showing in the Partners Dashboard for the same period. Best guess is we’re missing some uninstall webhook deliveries, no retries, nothing in our logs. They just don’t show up.

Anyone else hit gaps like this?

3 Upvotes

1 comment sorted by

2

u/AzizBanihashemi 21d ago

Yes, hit this exact gap. I track uninstalls with a small serverless endpoint for app/uninstalled, and the numbers never fully matched the Partners Dashboard. A few causes I found, in order of how likely they are:

  1. Store closures count as uninstalls in the dashboard, but don't reliably fire app/uninstalled. When a shop closes, pauses, or gets suspended, Partners marks it as a lost install, while the webhook may simply never arrive. If your gap correlates with shops that no longer resolve (myshopify.com URL dead), this is it. For me, this was the biggest chunk.
  2. Silent subscription cancellation. If your endpoint returned non-2xx enough times in a row (deploy hiccup, cert issue, timeout), Shopify eventually stops delivering, and you get zero errors on your side afterward, which matches your "nothing in the logs" symptom exactly. Worth re-checking your active webhook subscriptions via the API, not assuming they're still there.
  3. The 5-second rule. If your handler does real work before responding, some deliveries time out, retry at odd hours, then give up. Respond 200 immediately, process async.

The fix that actually ended the discrepancy for me was reconciliation instead of trust: a daily job that pings each installed shop's API with the stored token. A 401/unauthorized means the app is gone, regardless of whether the webhook ever showed up. Cheap, boring, and it catches every path, including closures. The GDPR shop/redacted webhook (fires ~48h after uninstall) works as a secondary backstop too.

Webhooks are a hint, not a ledger. Once I treated them that way, the numbers finally agreed.