Naar hoofdinhoud

KoppelingenTeamleader Focus

Teamleader API koppelen aan je website.

Een koppeling op de Teamleader API laat een aanvraag op je site binnenkomen in Teamleader Focus, als contact met een deal eraan en de bron erbij. Teamleader Focus is het CRM van veel Nederlandse en Belgische mkb-bedrijven: contacten, deals, offertes, facturen en projecten in één pakket.

Vertrouwd door

200+ bedrijven en webshops

Dux
Swim Essentials
Vouwwagenspecialist
Fit Preps
Fysio Moov
Mörgenn
MBST
Sunwave Brands
Flaske
Boumij Makelaars

Wat het oplevert

Wat een koppeling met Teamleader Focus je oplevert.

Een aanvraag wordt een deal. Het formulier maakt niet alleen een contact aan maar zet de aanvraag ook in je pijplijn.

Geen dubbele contacten. Bestaat het e-mailadres al, dan koppelen we eraan in plaats van een tweede aan te maken.

Webhooks de andere kant op. Teamleader meldt zelf wanneer er iets verandert, zodat een portaal op je site kan meelopen.

Technisch

De koppeling in het kort.

Vorm van de koppeling
De API v2 op focus.teamleader.eu, met JSON. Onderdelen voor contacten, bedrijven, deals, offertes, facturen, projecten en taken, plus webhooks
Authenticatie
OAuth 2.0 met een client id en secret uit een integratie in de Marketplace. Een access token is een uur geldig; daarna haal je met het refresh token een nieuw op
Richting
Beide kanten op
Verversing
Per aanroep; webhooks voor gebeurtenissen in het CRM
Wij bouwen het op
WordPress, Next.js, Maatwerk

Waar het misgaat

  • Het access token is een uur geldig. Een koppeling moet dus zelf een nieuw ophalen met het refresh token, en dat opslaan. Een formulier dat maar eens per dag wordt ingevuld loopt hier tegenaan: bij de eerste inzending werkt het, bij de tweede is het token verlopen. Dat is te ondervangen, maar het moet wel zijn gebouwd.
  • Je registreert een integratie in de Marketplace van Teamleader, ook als je hem alleen voor jezelf gebruikt. Daar komen de client id en het secret vandaan. Reken op een stap met doorlooptijd aan het begin van het traject; het is geen knop in het CRM zelf.
  • Spreek af wat een aanvraag is. Alleen een contact, of ook een deal in een bepaalde fase van een bepaalde pijplijn? Dat tweede is bijna altijd wat je wilt, want een contact zonder deal verdwijnt in de lijst. En als er een deal komt, hoort erbij wie de eigenaar is en wat de bron heet.
  • Teamleader Focus is de huidige naam en het oude adres wijst door. Kom je documentatie of code tegen die nog naar het oude domein of naar API v1 verwijst, dan kijk je naar de vorige generatie. Bouw op v2.

Bron: documentatie van Teamleader, Gent

Wat is Teamleader Focus?

Teamleader Focus is een CRM met offertes, facturatie, projecten en urenregistratie eromheen, gemaakt in Gent en veel gebruikt in het Nederlandse en Belgische mkb.

Het verschil met een puur verkoop-CRM is dat de hele keten erin zit: van eerste contact tot factuur. Voor een website betekent dat iets praktisch: een aanvraag die binnenkomt kan meteen op de goede plek in die keten worden gezet, in plaats van in een mailbox te belanden waar iemand hem overtypt.

Stappen om je website via de Teamleader API te koppelen

De API is versie 2 en werkt met JSON. Aanmelden gaat met OAuth 2.0: je registreert een integratie in de Marketplace van Teamleader en krijgt een client id en een secret.

Daarmee haalt de koppeling een access token op, dat een uur geldig is. Daarna vraag je met het refresh token een nieuw aan. Die cyclus hoort in de koppeling te zitten, want anders werkt hij alleen in het uur waarin hij is gebouwd.

Wij zetten de sleutels op de server. Het formulier op je site praat met je eigen server, en die met Teamleader.

In stappen:

  1. We registreren een integratie op de bouwpagina van de Teamleader Marketplace, met de rechten die de koppeling nodig heeft en het adres waar Teamleader na het aanmelden naar terugstuurt. Dat adres moet precies overeenkomen met wat de koppeling meestuurt.
  2. Iemand met een account in jullie Teamleader geeft de integratie eenmalig toegang. Teamleader stuurt dan een code terug die 10 minuten geldig is en één keer kan worden ingewisseld voor een access token en een refresh token.
  3. Met users.me controleren we of de koppeling in het goede account zit.
  4. We testen met een paar aanvragen en kijken in de pijplijn of contact, bedrijf en deal op de goede plek staan, met de bron erbij.
  5. Na de livegang blijft het refresh token werken tot iemand de toegang intrekt of de integratie verwijdert. Elk refresh token is maar één keer bruikbaar, dus de koppeling bewaart na elke vernieuwing het nieuwe paar.

Van formulier naar pijplijn

De route die wij standaard bouwen: een aanvraag op je site maakt of vindt het contact, koppelt het aan het bedrijf als dat er is, en maakt er een deal bij in de fase die jij hebt gekozen.

Daar zetten we de bron bij: de pagina, de campagne, de zoekterm. Dat is wat later de vraag beantwoordt welke advertentie klanten oplevert en niet alleen leads. Hoe we die meting inrichten staat bij Data & Tracking.

Bestaat het contact al, dan koppelen we eraan. Dat is geen detail: een CRM met drie keer dezelfde persoon erin is een CRM waar niemand meer op vertrouwt, en het gebeurt vanzelf zodra een formulier blind aanmaakt.

Limieten van de API en veelgemaakte fouten

Teamleader telt aanvragen in een glijdend venster van een minuut. Elk antwoord vertelt met x-ratelimit-limit hoeveel er per minuut mogen, met x-ratelimit-remaining hoeveel er nog over zijn en met x-ratelimit-reset wanneer je weer verder kunt. Wie eroverheen gaat krijgt een 429. Voor een formulier is dat zelden een probleem, voor een eerste synchronisatie van een heel adresboek wel.

De API werkt anders dan je van REST gewend bent. Elke handeling heeft een eigen adres, zoals contacts.list of contacts.add, en alles gaat als POST met JSON. Voor een synchronisatie haal je met updated_since alleen op wat sinds de vorige keer is gewijzigd.

De fout die de meeste schade doet zit in bijwerken. Lijsten zoals tags, adressen en eigen velden worden bij een update in hun geheel vervangen: stuur je alleen de nieuwe waarde mee, dan verdwijnen de andere. Voor eigen velden zet je custom_fields_update_strategy op partial, en voor tags gebruik je de aparte handelingen contacts.tag en contacts.untag.

Een klantportaal op je site via webhooks

De andere kant op kan ook. Met webhooks meldt Teamleader wanneer er iets verandert, bijvoorbeeld dat een offerte is verstuurd of een factuur is betaald.

Daarmee kun je een besloten deel op je site bouwen waar een klant zijn offertes, projecten of facturen terugvindt. Voor een dienstverlener met terugkerende klanten scheelt dat een stapel mails.

Begin daar niet mee. Zet eerst de aanvraagkant goed neer en kijk daarna of een portaal genoeg oplevert; het is een apart traject met een eigen ontwerp en eigen vragen over wie wat mag zien.

Teamleader koppelen met WordPress of met maatwerk

Op WordPress bouwen we het formulier in de opmaak van je site, zonder een formulierplugin die zijn eigen stijl meebrengt. Bij het versturen gaat de aanvraag naar de server, die het contact zoekt of aanmaakt en de deal erbij zet. Lukt dat een keer niet, dan blijft de inzending bewaard en gaat hij later alsnog door, zodat er geen lead verloren gaat.

Op een maatwerksite in Next.js met Payload staat dezelfde logica in een eigen serverroute, en daar past ook het klantportaal bij dat met webhooks wordt bijgewerkt.

Werk je met HubSpot in plaats van Teamleader, dan gaat de koppeling op dezelfde manier maar met een andere aanmelding; zie de pagina over HubSpot.

Bijgewerkt op

Specialist voor koppelingen

Veelgestelde vragen

Kan een aanvraag op mijn site in Teamleader terechtkomen?

Ja, als contact en als deal in de pijplijn die jij kiest. Bestaat het contact al, dan koppelen we eraan in plaats van een tweede aan te maken.

Wat hebben jullie van ons nodig voor een Teamleader-koppeling?

Een integratie in de Marketplace van Teamleader met een client id en een secret. Dat is een stap met doorlooptijd aan het begin; het is geen knop in het CRM zelf.

Zie ik waar een aanvraag vandaan komt?

Ja. Wij zetten de pagina en de campagnewaarden mee bij de deal, zodat je later kunt zien welke advertentie of zoekterm klanten heeft opgeleverd.

Kunnen klanten hun offertes of facturen op onze site zien?

Dat kan met webhooks en een besloten deel van de site. Het is wel een apart traject met een eigen ontwerp en eigen keuzes over wie wat mag zien; begin met de aanvraagkant.

Werkt een Teamleader-koppeling ook op WordPress?

Ja. Wij bouwen het formulier in je eigen opmaak en laten de aanroep vanaf de server lopen, zodat de sleutels niet in de paginabron staan.

Waarom verdwijnen tags na een update via de Teamleader API?

Omdat Teamleader lijsten zoals tags, adressen en eigen velden bij een update in hun geheel vervangt. Wat je niet meestuurt, wordt verwijderd. Voor eigen velden los je dat op door custom_fields_update_strategy op partial te zetten. Voor tags gebruik je contacts.tag en contacts.untag, dan blijven de tags die er al stonden gewoon staan.

Wat is Teamleader Focus?

Teamleader Focus is een CRM uit Gent met offertes, facturatie, projecten en urenregistratie eromheen, veel gebruikt in het Nederlandse en Belgische mkb. Het verschil met een puur verkoop-CRM is dat de hele keten van eerste contact tot factuur erin zit. Een aanvraag van je website kan daardoor meteen als contact en deal in die keten landen.

Zit er een limiet op de Teamleader API?

Ja. De Teamleader API telt aanvragen in een glijdend venster van een minuut; de headers x-ratelimit-limit, x-ratelimit-remaining en x-ratelimit-reset tonen hoeveel er mogen, hoeveel er over zijn en wanneer je verder kunt. Daarboven volgt een 429. Voor een formulier is dat zelden een probleem, voor een eerste synchronisatie van een adresboek wel.

Hoe werkt de authenticatie van de Teamleader API?

De Teamleader API werkt met OAuth 2.0. Je registreert een integratie in de Marketplace van Teamleader en krijgt een client id en secret. Na eenmalige toestemming krijgt de koppeling een access token dat een uur geldig is, plus een refresh token om zelf een nieuw op te halen. Elk refresh token werkt één keer, dus bewaar steeds het nieuwe paar.

Let's work together.

Je aanvragen in je pijplijn, niet in je mailbox.