How can n8n trigger a workflow when companies are added in HubSpot?

Been going around in circles for hours to do what I thought was simple: Use n8n to trigger a workflow when a new company is added to Hubspot.

I created a public legacy app to use with the n8n Hubspot node but after hours of debugging couldn’t get past an “insufficient scopes” error.

ChatGPT recommended ‘clicking the Install App button’ - doesn’t exist.
Recommended by ChatGPT to create a Private App and use HTTP node in n8n, except that option isn’t showing in my menu bar under settings.

Eventually found a Community Thread saying only Developer Test Accounts can create Private Apps (??), so I did that, and that connected to n8n OK, but it’s not reading data from my main account… so seems pointless.

This page indicates it isn’t a plan issue (near bottom): Legacy private apps - HubSpot docs
Completely lost.
Details:
- Hubspot Free
- n8n Cloud
- Super Admin

Hi @JRobinson81 and welcome, we are delighted to see you here!

Thanks for reaching out to the HubSpot Community!

Just for information, I have seen a recent similar thread “Hubspot trigger issues in n8n” from @NDory, I thought you might want to troubleshoot/share your work together.

And here are related documentation that might help you:

The more info, screenshots (without sensitive/confidential information), and details you can provide, the better the Community can assist.

For reference: each HubSpot app (including private apps) can have only one webhook Target URL. If you need to trigger on multiple object types, contacts, deals, companies, etc., you don’t need separate apps or URLs. Instead, create multiple webhook subscriptions under that single app, each covering a different object type or event, and route them in n8n using logic nodes like Switch or IF to branch based on the event data.

Also make sure:

  • Your app has the scopes needed to cover the object types you’re subscribing to.

  • Your n8n instance is reachable from the public internet, since HubSpot sends webhook requests as outbound POST calls to your Target URL. If you’re self-hosting n8n, it must be exposed to the internet (not just running locally) for webhook-based triggers to work.

    Also, I’d love to put you in touch with our Top Experts: Hi @HubDoPete, @Anton and @sylvain_tirreau do you have suggestions to help @JRobinson81, please?

    Have a lovely day and thanks so much in advance for your help!
    Bérangère

Hi @JRobinson81,

totally get the confusion here.

Two things are overlapping here: where to create the credential, and how to trigger on “new company.”

Creating the credential: In your production HubSpot account, go to your app settings and create a static auth app. Assign scopes such as crm.objects.companies.read and, if you plan to write back, crm.objects.companies.write. Then, in n8n, use an HTTP Request node with the header Authorization: Bearer YOUR_TOKEN to call the CRM v3 endpoints.

If you’re already using a legacy private app, the token and header mechanics work the same way, you’d create it under Settings > Integrations > Private Apps in your account. See Legacy private apps for that path if needed.

Sanity check: When you created the token, confirm you were in your intended production account (via the account selector), not a developer test account, using the wrong account is a common source of “insufficient scopes” errors.

Triggering on new companies: If webhooks aren’t available to you, a polling pattern works as a fallback: call the Search API for companies created since your last run, sorted by createdAt, store the latest timestamp in n8n, and re-query periodically, processing only new records.

If workflow-triggered webhooks are available on your plan, firing a workflow on company creation to hit your n8n webhook avoids polling entirely.

If you see “insufficient scopes”: check that the token was created in the correct account, that scopes include crm.objects.companies.read, and that the n8n node is actually using the Bearer token you generated (not a different auth method). Testing with a plain HTTP node in n8n lets you see the raw error body from HubSpot.

Moderator Note: this post was reviewed for relevancy and optimized for clarity on August 28, 2026. Thank you for your contributions to the HubSpot Community!

To make this work, confirm your main HubSpot account can create a private app. In your HubSpot account, go to Development in the left sidebar, then Legacy apps. If you don’t see this option, check with your Super Admin or account owner, private app creation isn’t gated by subscription tier, but access could depend on your seat/permissions setup.

Moderator Note: this post was reviewed for relevancy and optimized for clarity on August 28, 2026. Thank you for your contributions to the HubSpot Community!

Hi @JRobinson81, just wanted to check in on you, do you still need help?
Thanks @EMarquardt and @RubenBurdin for your contributions!
Have a great day!
Bérangère