Nest integration stuck in "Link Account" loop — no server-side errors on final attempts, only intermittent 400/invalid_grant earlier

Hi all — I’m stuck in a loop trying to set up the Nest integration and have run out of obvious things to try. Has anyone actually gotten past this and can share what fixed it?

Setup:

  • HAOS (Core 2026.7.4, Supervisor 2026.07.3, OS 18.1), accessed via Nabu Casa (https://[my-id].ui.nabu.casa)
  • Google Cloud project + Device Access project both fully configured, OAuth consent screen published to Production (not Testing)
  • Both Smart Device Management API and Cloud Pub/Sub API confirmed enabled
  • Redirect URIs correctly set to both my Nabu Casa domain and Link to OAuth2 Authorize Callback – My Home Assistant
  • Tried on Chrome (regular + incognito) and Edge, always as a standalone browser app — never the Home Assistant companion app’s built-in webview
  • Tried on both home WiFi and cellular data
  • I have two Google Homes, and Nest devices exist in both

The problem:
Setup proceeds normally through: Add Integration → Google Nest → enter Client ID/Secret → enter Project ID/Device Access Project ID → Google login → “unverified app” warning (expected, clicked through) → Nest permissions page → select devices → Continue → “Link account to Home Assistant?” page (via my.home-assistant.io, instance URL shown correctly) → tap Link Account → loops right back to the Google Nest permissions page, as if starting over. It just repeats indefinitely.

What I’ve already tried:

  • Deleting and recreating the Nest integration + Application Credentials multiple times
  • Restarting Home Assistant fully between attempts
  • Revoking prior “Home Assistant” access grant from myaccount.google.com/permissions before a fresh attempt
  • Multiple browsers, both WiFi and cellular
  • Confirmed OAuth consent screen is in Production, not Testing

Log detail (secondary, may or may not be related):
On some earlier attempts I got this in the HA log:
Error resolving OAuth token: 400, message=‘Bad Request’, url=‘https://www.googleapis.com/oauth2/v4/token

which I believe maps to Google’s invalid_grant. On my most recent attempts, though, the loop still happens but nothing new shows up in the logs at all — so I’m not sure the log entry is actually the main issue here.

Really just looking for: if you’ve hit this “Link Account → back to permissions page” loop before, what actually got you unstuck? Happy to provide more info/diagnostics if useful.

Thanks in advance.

Has anyone helped you with this? I am having the same problem.