Dec 16, 20253:41 AM - edited Dec 16, 20253:42 AM
Member
Hello,
I'm trying to set up webhooks from HubSpot to n8n, but I'm experiencing a strange issue where test webhooks work perfectly, but real contact creation events are not being sent.
My Setup:
Created a public legacy app in HubSpot Developer
Configured webhook subscription for contact.creation event
All required scopes are configured: crm.objects.contacts.read, crm.objects.contacts.write, crm.objects.companies.read, crm.objects.companies.write, crm.objects.deals.read, crm.objects.deals.write, crm.lists.read, crm.lists.write, oauth
What Works: ✅OAuth connection successful ✅"Test URL" button in webhook subscription sends data successfully ✅n8n receives the test payload correctly ✅Webhook subscription appears active in HubSpot
What Doesn't Work: ❌When I create a real contact in HubSpot (via UI), no webhook is triggered ❌In "Data from last 30 days" section: Total: 0, Errors: 0 ❌No executions appear in n8n when real contacts are created
What I've Tried:
Recreating the webhook subscription multiple times
Deactivating and reactivating the n8n workflow (which recreates the subscription)
Waiting 5+ minutes after creating contacts
Verifying all scopes are set as "Required" not "Optional"
Checking that the subscription is for "contact.creation" event
Why would the test webhook work perfectly, but real contact creation events never trigger the webhook? Is there a delay, additional configuration, or permission I'm missing?
Moderator note: While this solution may not address the original poster’s specific situation, it could be helpful for other community members facing similar challenges.
After changing your Cloudflared Tunnel URL, you must change the address to the new one again.
Under Webhooks elements there is a Create Subscription button, but the subscription is created automatically when you deactivate the workflow and reactivate it.
n8n HubSpot Developer API node:
Client ID: private-app
Client Secret*: from Legacy-Apps Authentication
Developer API Key*: from Legacy-Apps Authentication
APP ID*: I entered it from the public app because it wasn't available in the private app. Any number will probably work.
After changing your Cloudflared Tunnel URL, you must change the address to the new one again.
Under Webhooks elements there is a Create Subscription button, but the subscription is created automatically when you deactivate the workflow and reactivate it.
n8n HubSpot Developer API node:
Client ID: private-app
Client Secret*: from Legacy-Apps Authentication
Developer API Key*: from Legacy-Apps Authentication
APP ID*: I entered it from the public app because it wasn't available in the private app. Any number will probably work.
Hi @Grove_ , I’ve seen this exact “Test works, real events don’t” pattern a few times, and it’s almost always one of two things: either the app is not actually installed in the same HubSpot account where you’re creating the contacts, or you’re not creating a truly new contact.
A couple checks that usually unblock it. First, confirm you’re creating contacts in the exact portal that completed the OAuth install for the app. Webhooks are configured on the app, but they only fire for accounts that installed the app via OAuth, not just because the subscription exists in your developer portal (the docs call this out: webhooks trigger for “any account that install your app” via OAuth). (https://developers.hubspot.com/docs/api-reference/webhooks-webhooks-v3/guide)
Second, double-check the “creation” you’re doing is genuinely a create. If you enter an email that already exists, HubSpot will update the existing record instead of creating a new one, and you’d expect no contact.creation event.
For a quick sanity test, create a contact with a never-before-used email address.
If those two are fine, then I’d look at the Cloudflare tunnel URL stability and any edge rules: HubSpot will POST to your target URL and expects a fast 2xx.
If Cloudflare blocks or challenges the request, HubSpot would normally show errors in the webhook stats, but if the URL changed after you tested, you can end up with “nothing happens” until it’s corrected (also, webhook settings can be cached for up to ~5 minutes). (https://developers.hubspot.com/docs/api-reference/webhooks-webhooks-v3/guide)
Did my answer help? Please mark it as a solution to help others find it too.
Ruben Burdin HubSpot Advisor Founder @ Stacksync Real-Time Data Sync between any CRM and Database
Moderator note: While this solution may not address the original poster’s specific situation, it could be helpful for other community members facing similar challenges.