KoppelingenCalendly
Calendly koppelen aan je website.
Met een Calendly-koppeling plant een bezoeker een afspraak in je eigen ontwerp, en telt die afspraak mee als conversie in Google Ads en GA4. Via de webhooks van de Calendly API komt elke boeking met bron, campagne en gclid in je CRM.
Vertrouwd door
200+ bedrijven en webshops

Wat het oplevert
Wat een koppeling met Calendly je oplevert.
Boeken zonder de site te verlaten. De agenda staat in je pagina, met naam en e-mailadres al ingevuld als de bezoeker die eerder gaf.
De afspraak als conversie. De server bevestigt elke boeking, dus een verzette of geannuleerde afspraak telt niet dubbel in Google Ads.
Met de bron in je CRM. UTM-gegevens, gclid en antwoorden komen bij het contact in HubSpot, Pipedrive of je eigen systeem.
Technisch
De koppeling in het kort.
- Vorm van de koppeling
- Een inline- of pop-up-embed met widget.js op je site, plus de API v2 en webhooks (invitee.created, invitee.canceled) naar je eigen server
- Authenticatie
- Een personal access token of OAuth 2.0; webhooks ondertekend met een signing key in de header Calendly-Webhook-Signature
- Richting
- Van het systeem naar de site
- Verversing
- Direct bij boeken, verzetten en annuleren, via de webhook; webhooks werken alleen op een betaald abonnement
- Wij bouwen het op
- WordPress, Next.js, Maatwerk
Waar het misgaat
- De gclid heeft geen eigen veld in Calendly. Een boeking bewaart de vijf UTM-parameters en een Salesforce-ID, en dat is het. Wie later een afspraak als offline conversie naar Google Ads wil sturen, heeft de gclid nodig, en die moet je dus zelf vastleggen op je eigen pagina op het moment van boeken. Wij koppelen die aan de boeking via de unieke ID die de embed na het plannen teruggeeft.
- Verzetten is annuleren en opnieuw boeken. Verzet iemand een afspraak, dan stuurt Calendly twee webhooks: een annulering met rescheduled op true, en een nieuwe boeking die verwijst naar de oude. Wie elke nieuwe boeking als conversie telt, telt een verzette afspraak twee keer. Wij controleren bij elke boeking of er een oude aan vastzit, en tellen alleen de eerste.
- De ingebouwde koppeling met Google Analytics heeft één metings-ID per organisatie. Werken meerdere websites of merken vanuit hetzelfde Calendly-account, dan komen hun boekingen in dezelfde GA4-property. Google Tag Manager wordt daarbij niet ondersteund, en de gebeurtenissen hebben de namen die Calendly kiest. Meet je de boeking daarnaast zelf, dan tel je hem dubbel. Kies één van de twee.
- Een webhook die een dag faalt, staat uit. Geeft je server een foutmelding, dan probeert Calendly het 24 uur lang opnieuw, met steeds meer tijd ertussen. Lukt het dan nog niet, dan wordt de webhook uitgeschakeld en moet je hem opnieuw aanmaken. Boekingen in die periode komen niet vanzelf alsnog binnen. Wij bouwen de ontvanger zo dat een fout direct opvalt, en gemiste boekingen zijn via de API alsnog op te halen.
Calendly koppelen
Wat je moet weten voor je begint.
Wat is Calendly?
Calendly is software om afspraken te plannen. Je koppelt je agenda en een ander kiest zelf een moment dat past. Je maakt per soort afspraak een eigen type, zoals een intake van een kwartier of een demo van een uur, met eigen vragen in het boekingsformulier.
Voor veel dienstverleners is een geplande afspraak de belangrijkste lead die de website oplevert, concreter dan een contactformulier. Wij plannen zelf ook afspraken via Calendly, en weten dus waar het meten ervan schuurt.
Een afspraak plannen op je website kan via een link naar de pagina van Calendly, of via een embed in je eigen pagina. Voor het meten maakt dat veel uit.
Inline in je eigen ontwerp: de embed
Calendly heeft drie vormen van embed: inline in de pagina, een pop-up-widget als zwevende knop, en een pop-up achter een tekstlink of eigen knop. Alle drie laden het script widget.js van Calendly. Voor een pagina waarop het plannen de hoofdzaak is, kiezen wij inline, zodat de agenda deel is van je ontwerp en niet over je pagina heen valt.
Met prefill vul je het boekingsformulier vooraf in: naam (of voornaam en achternaam apart), e-mailadres, en de antwoorden op maximaal tien eigen vragen. Heeft een bezoeker eerder op je site een formulier ingevuld, dan hoeft hij zijn gegevens niet nog een keer te typen. Dubbele gegevens van het type afspraak verberg je met een parameter in de link, zodat titel en duur niet twee keer op de pagina staan.
De embed neemt de UTM-parameters uit de adresbalk van je eigen pagina vanzelf over: utm_source, utm_medium, utm_campaign, utm_content en utm_term, elk tot 255 tekens. Je kunt ze ook zelf meegeven in de code. Ze komen bij de boeking te staan, en dat is de basis voor de koppeling met je CRM.
De afspraak meten in GA4 en Google Ads
Een embed staat in een iframe. Je eigen GA4-tag ziet niet wat de bezoeker daarin doet. Calendly lost dat op door berichten naar je pagina te sturen: bij het bekijken van een afspraaktype, bij het kiezen van een tijd, en na het plannen het bericht calendly.event_scheduled, met de unieke adressen van de afspraak en de genodigde. Op dat bericht laten wij de conversie in GA4 en Google Ads afgaan, via Google Tag Manager en binnen de toestemming die de bezoeker gaf.
Dat werkt alleen met een embed. Stuur je bezoekers met een link naar de pagina van Calendly, dan krijgt je site geen bericht en blijft alleen de klik op de knop over. Een klik is geen afspraak.
Calendly heeft daarnaast een eigen koppeling met GA4, met gebeurtenissen als invitee_meeting_scheduled. Die is snel aangezet, maar werkt met één metings-ID voor je hele organisatie en zonder Tag Manager. Gebruik je onze route, dan zetten we die koppeling uit, anders telt elke afspraak twee keer.
Webhooks en de Calendly API
De Calendly API is versie 2 en werkt met een personal access token of met OAuth 2.0. Gegevens opvragen kan op elk abonnement. Webhooks en de Scheduling API, waarmee je boekingen via de API maakt, zijn er alleen op een betaald abonnement. Per gebruiker mag je 500 aanvragen per minuut doen op een betaald abonnement en 50 op het gratis abonnement.
Met een webhook meldt Calendly elke nieuwe boeking (invitee.created) en elke annulering (invitee.canceled) aan een adres op je eigen server, voor één gebruiker, een groep of de hele organisatie. Dat maakt de boeking bevestigd: wat in de browser gebeurt, kan door een adblocker wegvallen, wat Calendly aan je server meldt niet. Wie al met server-side tagging werkt, kan de bevestiging via dezelfde server doorzetten naar GA4.
Elke webhook krijgt van ons een signing key. Calendly zet daarmee een handtekening in de header Calendly-Webhook-Signature, en onze ontvanger controleert die, zodat niemand nepboekingen naar je CRM kan sturen.
Naar je CRM, met bron en gclid
De webhook bevat de adressen van de afspraak en de genodigde. Met die adressen haalt onze koppeling via de API de rest op: naam, e-mailadres, antwoorden op je vragen en de UTM-gegevens. Die komen als contact en activiteit in je CRM, bijvoorbeeld in HubSpot of Pipedrive, met de afspraak als volgende stap voor de verkoper.
De gclid zit daar niet bij, want Calendly heeft er geen veld voor. Wij lossen dat op in de browser: bij het bericht calendly.event_scheduled stuurt je pagina de gclid en het adres van de genodigde naar je eigen server. Komt de webhook binnen, dan koppelen we die twee op het adres van de genodigde. Zo staat de gclid bij de afspraak in je CRM.
Daarmee kan de afspraak later als offline conversie naar Google Ads, met de waarde die de klant uiteindelijk had, binnen 90 dagen na de klik. Ontbreekt de gclid, dan kan het via verbeterde conversies voor leads, met het e-mailadres van de genodigde, gehasht. Google raadt die route zelf aan voor wie begint.
Calendly koppelen met WordPress of met maatwerk
Op WordPress zetten we de inline embed met de code van Calendly in een eigen blok, zodat hij in je ontwerp past en op elke pagina hetzelfde werkt. In de WordPress-bibliotheek staan plugins voor Calendly, maar die komen van andere makers dan Calendly. Voor een embed is geen plugin nodig, en voor het meten laten we de luisteraar op de berichten van Calendly in Tag Manager draaien.
Op een maatwerksite in Next.js wordt de embed een eigen component, die prefill en UTM-gegevens meekrijgt uit de pagina. De webhook komt binnen op een serverroute die de handtekening controleert, de gegevens ophaalt, de gclid erbij zoekt en de boeking doorzet naar je CRM en Google Ads.
Daarna testen we de conversie in GA4 en Google Ads met een boeking, een verzetting en een annulering. Het meten van afspraken, formulieren en offline conversies valt bij ons onder Data & Tracking.
Veelgestelde vragen
Bijgewerkt op
Specialist voor koppelingen
DaanAdvertising & Data085 83 30 533daan@klubb.nlVeelgestelde vragen
Heeft Calendly een API?
Ja. Calendly heeft een REST API, versie 2, met toegang via een personal access token of OAuth 2.0. Je haalt er afspraken, genodigden en afspraaktypes mee op, en met webhooks krijgt je server direct bericht bij een nieuwe boeking of annulering. Met de Scheduling API kun je ook boekingen maken, maar alleen op een betaald abonnement.
Is de Calendly API gratis?
Deels. Gegevens opvragen en versturen via de Calendly API kan op elk abonnement, ook het gratis abonnement, met een limiet van 50 aanvragen per gebruiker per minuut. Webhooks en de Scheduling API zijn er alleen op een betaald abonnement. Voor een koppeling die een boeking direct doorzet naar je CRM heb je dus een betaald abonnement nodig.
Kan ik Calendly in mijn website integreren?
Ja, met een embed. Calendly heeft drie vormen: inline in de pagina, een zwevende knop en een pop-up achter een eigen knop. Met inline staat de agenda in je eigen ontwerp. Alleen met een embed krijgt je site na het plannen een bericht, en dat heb je nodig om de afspraak als conversie te meten.
Hoe zet ik Calendly op een WordPress-website?
Calendly zet je op WordPress met de embedcode van Calendly, in een eigen blok of HTML-blok op de pagina. Een plugin is daarvoor niet nodig. Wij plaatsen de inline embed in je ontwerp en zetten in Google Tag Manager de luisteraar op het bericht dat Calendly na een boeking stuurt, zodat de afspraak als conversie telt.
Is er een Calendly-plugin voor WordPress?
Er staan plugins voor Calendly in de WordPress-bibliotheek, maar die komen van andere makers dan Calendly zelf. Ze maken van de embed een shortcode of blok. Voor de embed heb je ze niet nodig, en voor het meten van de boeking voegen ze weinig toe. Wij werken met de embedcode van Calendly en een eigen blok.
Hoe meet ik een Calendly-afspraak in Google Analytics 4?
Een Calendly-afspraak meet je in GA4 via het bericht calendly.event_scheduled dat de embed na het plannen naar je pagina stuurt. Daarop laat je in Google Tag Manager een gebeurtenis afgaan. Calendly heeft ook een eigen GA4-koppeling, met één metings-ID per organisatie en zonder Tag Manager. Gebruik één van de twee, anders telt elke afspraak dubbel.
Kan een Calendly-afspraak als conversie in Google Ads tellen?
Ja. In de browser laat je de conversie afgaan op het bericht dat de embed na het plannen stuurt. Voor een betrouwbaardere meting leg je de gclid bij de boeking vast en stuur je de afspraak vanaf je server als offline conversie, of met verbeterde conversies voor leads op basis van het e-mailadres van de genodigde.
Kan ik gegevens vooraf invullen in de Calendly-embed?
Ja, met prefill vul je in de Calendly-embed vooraf de naam, voornaam en achternaam, het e-mailadres en de antwoorden op maximaal tien eigen vragen in. Heeft een bezoeker eerder een formulier op je site ingevuld, dan geef je die gegevens mee bij het laden. Zo hoeft hij niets twee keer te typen.
Komen UTM-parameters mee in Calendly?
Ja. De Calendly-embed neemt utm_source, utm_medium, utm_campaign, utm_content en utm_term vanzelf over uit de adresbalk van je pagina, elk tot 255 tekens. Ze staan bij de boeking en komen mee in de API en de webhook. Een gclid neemt Calendly niet over; die leggen wij apart vast op je eigen pagina.
Hoe kom ik aan een Calendly API key?
Een Calendly API key heet een personal access token. Je maakt hem aan in je Calendly-account bij Integrations, onder API & Webhooks, en kiest daarbij welke rechten hij krijgt. Kopieer hem direct: Calendly toont of bewaart het token daarna niet meer. Voor een koppeling die je aan anderen aanbiedt, gebruik je OAuth 2.0.
Telt een verzette Calendly-afspraak dubbel?
Alleen als de koppeling daar niet op let. Bij verzetten stuurt Calendly een annulering met rescheduled op true en een nieuwe boeking die naar de oude verwijst. Wij controleren bij elke boeking of er een oude aan vastzit, en sturen dan geen tweede conversie naar Google Ads of GA4.
Let's work together.
Elke geplande afspraak geteld, met de campagne die hem opleverde.