Hi @IShestakov , I’ve seen this one come up often with custom OAuth setups.
The root cause is almost always that the install URL you’re using doesn’t perfectly mirror the scopes you’ve set in your HubSpot developer app. Even a single mismatch or missing scope will trigger that “authorization failed” message.
The fix is usually to go back into your dev portal, re-copy the exact install URL after updating scopes, and then paste it fresh into n8n.
HubSpot explains this in their OAuth flow docs here: (Working with OAuth - HubSpot docs)
And also in their guide on scope mismatches here: (Resolve a 'Request for Integration Permissions' error)
One extra check: if you’re building a public app,
HubSpot requires you to re-submit the app for review any time you add scopes. That’s by design, to prevent apps from silently escalating permissions later.
If it’s just a private app, regenerating the install URL and re-authenticating should be enough.
If you’d rather not wrestle with OAuth token refreshes, scope mismatches, or expired headers every time you tweak a sync, there’s another approach.
Stacksync handles all of that under the hood it abstracts authentication, manages token rotations, retries failed requests, and keeps HubSpot data in real-time two-way sync with other systems (databases, ERPs, or workflow tools like n8n).
Instead of piecing things together and debugging scope errors, you get a managed sync layer that just runs reliably, freeing your team from this “dirty plumbing” work
Hope this clears it up.