Hoe synchroniseer je HubSpot en Notion met n8n?
Als je team CRM-data in HubSpot opslaat en projectcontext in Notion, kost het handmatig synchroon houden van beide tools voortdurend tijd. Deze gids laat zien hoe je in n8n geautomatiseerde workflows bouwt die de twee koppelen, zodat dealupdates in Notion terechtkomen en vergadernotities terugstromen naar HubSpot, zonder dat iemand hoeft te kopiëren en plakken. Je hebt geen eigen code nodig, alleen de ingebouwde nodes van n8n en een beetje setup.
Bijdrage van
SaaS Hackers
Kort antwoord: Je kunt HubSpot en Notion synchroniseren met n8n door geautomatiseerde workflows te bouwen die starten bij CRM-events (nieuw contact, bijgewerkte deal, closed won) en gestructureerde data naar Notion-databases schrijven, en andersom. De setup duurt minder dan een uur en vereist geen eigen code, alleen de native HubSpot- en Notion-nodes van n8n.
HubSpot bevat je CRM-data. Notion bevat de gedachten van je team. Als ze los van elkaar staan, kopiëren je accountmanagers dealgegevens handmatig naar vergadernotities en zoekt je ops-team context die al ergens anders bestaat.
Deze tutorial laat precies zien hoe je met n8n een tweerichtingssynchronisatie tussen HubSpot en Notion bouwt, voor accountrecords en notities. Aan het einde heb je een werkende workflow die beide tools automatisch synchroon houdt, zonder te betalen voor een native integratie die maar de helft van het werk doet.
Wat je nodig hebt voordat je begint
Zorg voordat je iets bouwt dat deze drie dingen klaarstaan:
- Een n8n-instance (self-hosted of n8n Cloud, beide werken)
- Een HubSpot-account met API-toegang ingeschakeld (elk betaald abonnement, of een developer sandbox)
- Een Notion-workspace met minstens één database voor accounts of contacten
Je moet ook in n8n credentials aanmaken voor beide tools. HubSpot gebruikt OAuth2 of een private app-token. Notion gebruikt een integration secret dat aan een specifieke workspace is gekoppeld.
Je HubSpot-credentials instellen in n8n
- Ga in je HubSpot-account naar Settings > Integrations > Private Apps
- Maak een nieuwe private app aan en geef die scopes voor
crm.objects.contacts.read,crm.objects.deals.read, encrm.objects.companies.read(voeg schrijfscopes toe als je data wilt terugschrijven) - Kopieer het access token
- Ga in n8n naar Credentials > New > HubSpot API en plak het token
Je Notion-credentials instellen in n8n
- Ga naar notion.so/my-integrations en maak een nieuwe integratie aan
- Geef de integratie een naam (bijv. "n8n Sync") en kies de workspace die je wilt koppelen
- Kopieer het integration secret
- Ga in n8n naar Credentials > New > Notion API en plak het secret
- Open in Notion de database die je wilt synchroniseren en klik op Share > Invite en kies je integratie op naam
Workflow 1: HubSpot naar Notion (accountsynchronisatie)
Deze workflow wordt gestart telkens wanneer een bedrijfsrecord in HubSpot wordt aangemaakt of bijgewerkt en schrijft de data naar een Notion-database.
Stap 1: voeg een HubSpot Trigger-node toe
- Maak een nieuwe workflow aan in n8n
- Voeg een HubSpot Trigger-node toe als startpunt
- Stel het event in op
company.creationofcompany.propertyChangeafhankelijk van of je nieuwe records, updates of beide wilt opvangen - Authenticeer met de credentials die je hierboven hebt ingesteld
Als je een self-hosted instance zonder publieke webhook-URL gebruikt, gebruik dan de HubSpot-node in pollingmodus en stel een schedule trigger in (elke 15 minuten werkt voor de meeste teams goed). Als je rond deze workflow een bredere rapportage opzet, helpt het om ook na te denken over attributie en bronnentracking, zeker als je naast CRM-activiteit ook wilt verkeer vanuit AI-tools wilt meten.
Stap 2: voeg een HubSpot-node toe om de volledige bedrijfsdata op te halen
De trigger geeft alleen het bedrijfs-ID door. Je hebt een tweede node nodig om het volledige record op te halen.
- Voeg na de trigger een HubSpot-node toe
- Stel Resource in op
Companyen Operation opGet - Koppel het bedrijfs-ID uit de output van de trigger met een expressie:
{{ $json.objectId }} - Selecteer de properties die je wilt: bedrijfsnaam, domein, eigenaar, dealfase, jaaromzet en eventuele custom fields die je team gebruikt
Stap 3: voeg een Notion-node toe om een pagina aan te maken of bij te werken
- Voeg een Notion-node toe
- Stel Resource in op
Database Pageen Operation opCreate - Selecteer je accountsdatabase
- Koppel HubSpot-velden aan Notion-properties:
| HubSpot-veld | Notion-property |
|---|---|
| name | Name (title) |
| domain | Website (URL) |
| hubspot_owner_id | Owner (tekst of relatie) |
| annualrevenue | ARR (getal) |
| hs_lastmodifieddate | Last Updated (datum) |
Voor updates in plaats van nieuwe records moet je eerst controleren of er al een pagina bestaat. Voeg vóór de aanmaakstap een extra Notion-node toe, ingesteld op Search met een filter op het domein of het HubSpot-bedrijfs-ID dat als Notion-property is opgeslagen. Als er een resultaat terugkomt, schakel je over naar een Update operatie met het teruggegeven pagina-ID.
Stap 4: voeg een IF-node toe voor de logica voor aanmaken of bijwerken
- Voeg een IF-node toe tussen de zoekactie en de schrijfactie
- Voorwaarde:
{{ $json.results.length }}is groter dan0 - True-tak: koppel aan een Notion Update-node
- False-tak: koppel aan een Notion Create-node
Zo voorkom je dubbele pagina's en blijft je Notion-database schoon.
Workflow 2: Notion naar HubSpot (notities en vergadersamenvattingen)
Deze workflow draait wanneer er een nieuwe pagina aan een Notion-database met vergadernotities wordt toegevoegd en schrijft een notitie of engagement terug naar het juiste bedrijfsrecord in HubSpot.
Stap 1: voeg een Schedule Trigger toe
Notion ondersteunt van zichzelf geen uitgaande webhooks, dus n8n pollt de database volgens een schema.
- Voeg een Schedule Trigger-node toe
- Stel in dat deze elke 10 of 15 minuten draait
- Dit is je startpunt
Stap 2: bevraag de Notion-database op nieuwe pagina's
- Voeg een Notion-node toe
- Stel Resource in op
Databaseen Operation opGet Many - Selecteer je database met vergadernotities
- Voeg een filter toe:
Created Timeis na{{ $now.minus(15, 'minutes').toISO() }}
Zo haal je alleen pagina's op die in de afgelopen 15 minuten zijn aangemaakt, passend bij je polling-interval.
Stap 3: haal het HubSpot-bedrijfs-ID uit Notion
Hiervoor heeft je Notion-template voor vergadernotities een property nodig waarin het HubSpot-bedrijfs-ID staat. Voeg een Number of Text property met de naam "HubSpot ID" toe aan je Notion-template en maak er een vast onderdeel van van het standaardproces voor notities van je team.
Koppel het in n8n: {{ $json.properties['HubSpot ID'].number }}
Stap 4: maak een engagement aan in HubSpot
- Voeg een HTTP Request-node toe (de native HubSpot-node dekt niet alle engagementtypes, dus gebruik hier direct de API)
- Methode:
POST - URL:
https://api.hubapi.com/engagements/v1/engagements - Authenticatie: Header Auth met je HubSpot private app-token
- Body (JSON):
{
"engagement": {
"active": true,
"type": "NOTE"
},
"associations": {
"companyIds": ["{{ $json.properties['HubSpot ID'].number }}"]
},
"metadata": {
"body": "{{ $json.properties.Name.title[0].plain_text }}\n\n{{ $json.properties.Summary.rich_text[0].plain_text }}"
}
}Dit maakt een notitie aan in de activiteitentijdlijn van HubSpot, gekoppeld aan het juiste bedrijf, met de paginatitel en een samenvattingsveld uit Notion.
Fouten afhandelen en dubbele synchronisaties voorkomen
Tweerichtingssynchronisaties gaan op voorspelbare manieren stuk. Zo voorkom je de meest voorkomende problemen.
Voorkom oneindige loops: Wanneer n8n een record naar HubSpot schrijft, stuurt HubSpot een webhook terug naar n8n, dat probeert te schrijven naar Notion, dat je vervolgens weer pollt. Voeg een metadata-property toe (bijv. synced_by_n8n: true) aan elk record dat door je workflow is aangemaakt, en voeg aan het begin van elke workflow een IF-node toe die records met die vlag overslaat.
Ga netjes om met ontbrekende velden: Gebruik de IF en Set nodes van n8n om fallbackwaarden te bepalen voor elke optionele property. Als annualrevenue in HubSpot null is, zet je die op 0 voordat je het aan Notion doorgeeft, in plaats van de workflow te laten mislukken.
Log fouten in een Notion-database voor fouten: Voeg in n8n een error workflow toe (Settings > Error Workflow) die mislukte uitvoeringen naar een aparte Notion-pagina schrijft. Zo heeft je team inzicht zonder n8n zelf te hoeven monitoren. Als deze synchronisatie onderdeel wordt van een grotere revenue engine, kun je ook hulp gebruiken van B2B SaaS marketing ops-bureaus die gespecialiseerd zijn in workflowgovernance, attributie en CRM-procesontwerp.
Hoe we deze setup hebben gebouwd en getest
Deze workflow is gebouwd en getest op n8n Cloud (v1.x) met een HubSpot developer sandbox en een Notion-workspace met drie databases: Accounts, Meeting Notes en Sync Errors. De tweerichtingssynchronisatie draaide zonder duplicaten over 50 testrecords en schreef 12 vergadernotities correct terug naar HubSpot als engagements.
De hier beschreven setup is hetzelfde patroon dat SaaS Hackers gebruikt bij het bouwen van CRM-automatiseringsworkflows voor B2B SaaS-teams die hun GTM-stack willen koppelen zonder dure middleware.
Veelgestelde vragen
Ondersteunt n8n een native HubSpot- en Notion-integratie zonder eigen code?
Ja. n8n bevat ingebouwde nodes voor zowel HubSpot als Notion. Je kunt een werkende synchronisatieworkflow bouwen met alleen de node-editors, zonder code te schrijven. Voor geavanceerde engagementtypes in HubSpot (zoals notities) heb je mogelijk een HTTP Request-node nodig die direct naar de HubSpot API wijst, maar eigen scripting is niet nodig.
Wat is het verschil tussen een eenrichtings- en een tweerichtingssynchronisatie tussen HubSpot en Notion?
Een eenrichtingssynchronisatie stuurt data in één richting, meestal van HubSpot naar Notion. Een tweerichtingssynchronisatie leest wijzigingen uit beide tools en schrijft ze naar de andere. Met de tweerichtingsaanpak blijven accountrecords in Notion actueel en worden vergadernotities of updates teruggeschreven naar de activiteitentijdlijn van HubSpot, zodat beide tools dezelfde werkelijkheid weergeven.
Hoe vaak wordt de n8n-synchronisatie tussen HubSpot en Notion bijgewerkt?
Dat hangt af van je triggerinstelling. HubSpot-webhooks worden vrijwel realtime afgevuurd (binnen enkele seconden na een wijziging in een record). Notion, dat geen uitgaande webhooks ondersteunt, werkt met polling. Een polling-interval van 10 tot 15 minuten is voor de meeste teams een praktische standaard. Als je snellere updates van Notion naar HubSpot nodig hebt, overweeg dan een formulier dat via de Notion API is gekoppeld of een handmatige triggerknop in je Notion-template.
Kun je deze synchronisatie tussen HubSpot en Notion gratis draaien?
De self-hosted versie van n8n is gratis en open source. n8n Cloud heeft een gratis abonnement met een beperkt aantal uitvoeringen. De private app-API van HubSpot is beschikbaar voor alle abonnementen, ook het gratis abonnement. De API van Notion is beschikbaar voor alle abonnementen. De enige kosten zijn je n8n-hosting als je n8n zelf draait, of je n8n Cloud-abonnement als je dat niet doet.
Wat gebeurt er als een synchronisatie halverwege mislukt?
n8n logt elke uitvoering met de invoer, uitvoer en foutstatus. Je kunt mislukte runs direct in het uitvoeringslogboek bekijken. Als je een foutworkflow toevoegt die fouten wegschrijft naar een Notion-database voor fouten (zoals hierboven beschreven), kan je team sneller kapotte synchronisaties opsporen en herstellen, zonder elke keer in n8n in te loggen.
Bijdrage van
SaaS Hackers


