Google Drive webhooks only send the initial sync, never update… am I missing something obvious?

I’m trying to use Google Drive push notifications with Django and I can successfully create the watch channel I get the initial sync notification but I never receive update notifications for file changes. No errors anywhere, and polling works perfectly. It used to work perfectly, and then suddenly I stopped receiving notifications of changes to my webhook.

Stack: Django 5 + Uvicorn, Drive API v3, OAuth (refresh tokens), webhook via ngrok, DB stores channel info.

What works:

  • Webhook is reachable (405 GET, 200 POST)

  • Manual POST to webhook works

  • changes().watch() returns valid channel_id + resource_id

  • Initial sync arrives instantly

  • changes().list() detects real changes (page token moves)

What doesn’t:

  • No update webhook calls for create/edit/delete/move/rename

  • ngrok shows zero requests except the first sync

  • No logs or errors anywhere

Questions:

  • Can Google silently drop subscriptions? Any way to check status?

  • Does using ngrok free tier break push notifications?

  • Missing params like supportsAllDrives=true? Wrong token source?

  • Any way to see delivery logs?

Anyone here actually got Drive push notifications working recently?

1 Like

Iam also facing same issue,while registering the channels initial sync event is coming and also showing 200 response in ngrok console , but new updates and changes not working and not giving notifications

1 Like

Hey,

Hope you’re keeping well.

Drive push notification channels can expire silently, and Google will stop sending events if the channel is no longer active. When you call changes().watch(), check the expiration field in the response and refresh the watch before that time. There’s no public delivery log, so the only way to confirm is to re‑establish the watch and validate the webhook is accessible from the public internet without auth or firewalls blocking Google’s POST. The free ngrok tier can drop long‑lived connections, so for reliability use a stable HTTPS endpoint with a valid certificate. Also, if you’re watching shared drives or items outside “My Drive”, include supportsAllDrives=true and includeItemsFromAllDrives=true in your watch calls.

Thanks and regards,
Taz