Upgrade naar Zoekwoord Premium. Meer informatie
Zoekwoord.nl Logo
Ontgrendel Premium
Onbeperkt zoeken en extra functies beschikbaar. Registreer nu

API documentatie

Zoekwoord.nl API

Keyworddata voor je eigen workflow

Gebruik Keyword metrics om data voor bekende zoekwoorden op te halen, of Keyword zoeken om nieuwe keywords te ontdekken en te filteren. Beide endpoints gebruiken dezelfde API key en gedeelde requestlimiet.

Start hier

Aan de slag

  1. Je hebt een actief betaald premium abonnement nodig. Studentenaccounts hebben geen API-toegang.
  2. Maak een API key aan via Profiel > API.
  3. Bewaar de key meteen; de volledige waarde wordt maar één keer getoond.
  4. Kies het endpoint dat bij je toepassing past en stuur de key mee als Bearer token.

Geldt voor beide endpoints

Authenticatie

Stuur bij iedere request deze headers mee. Vervang YOUR_API_KEY door je eigen key.

Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: application/json

Eén API key werkt voor zowel Keyword metrics als Keyword zoeken. Houd maximaal 1 request per seconde per API key aan; deze limiet wordt door beide endpoints gedeeld.

Kies je toepassing

Twee endpoints

POST

Keyword metrics

Gebruik dit endpoint als je al weet voor welke zoekwoorden je data nodig hebt. Het voert een exacte batch-lookup uit voor maximaal 100 unieke zoekwoorden.

Endpoint

POST https://tool.zoekwoord.nl/api/v1/keywords/metrics

Requestvelden

VeldTypeVereistValidatie
keywordsarray<string>Ja1–100 unieke, niet-lege zoekwoorden; maximaal 255 tekens per zoekwoord.

Requestvoorbeeld

{
  "keywords": ["seo bureau", "zoekwoorden onderzoek"]
}

Codevoorbeelden

cURL

curl --request POST 'https://tool.zoekwoord.nl/api/v1/keywords/metrics' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --data '{"keywords":["seo bureau","zoekwoorden onderzoek"]}'

JavaScript

const response = await fetch('https://tool.zoekwoord.nl/api/v1/keywords/metrics', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
    Accept: 'application/json',
  },
  body: JSON.stringify({ keywords: ['seo bureau', 'zoekwoorden onderzoek'] }),
});

const result = await response.json();

PHP

$response = Http::withToken('YOUR_API_KEY')
    ->acceptJson()
    ->post('https://tool.zoekwoord.nl/api/v1/keywords/metrics', [
        'keywords' => ['seo bureau', 'zoekwoorden onderzoek'],
    ]);

$result = $response->json();

Response

{
  "data": [
    {
      "keyword": "seo bureau",
      "found": true,
      "data_source": "Zoekwoord.nl",
      "spell": null,
      "spell_type": null,
      "search_volume": 1000,
      "clickstream_search_volume": 920,
      "clickstream_normalized_search_volume": 980,
      "cpc": 2.73,
      "seo_difficulty": 47,
      "competition": 31,
      "competition_level": "MEDIUM",
      "intent": "commercial",
      "secondary_intents": ["transactional"],
      "history": { "202501": 900, "202502": 1000 },
      "be_nl_search_volume": 120,
      "be_nl_history": { "202501": 90, "202502": 120 }
    },
    {
      "keyword": "onbekend zoekwoord",
      "found": false,
      "data_source": "Zoekwoord.nl"
    }
  ]
}

Responsevelden

VeldBeschrijving
keywordIngestuurd zoekwoord, zonder spaties aan begin en einde.
foundOf er metrics beschikbaar zijn. Bij false ontbreken de overige velden.
data_sourceBron van de data; Zoekwoord.nl.
spell / spell_typeSpellingssuggestie en het type correctie, of null.
search_volumeGemiddeld maandelijks zoekvolume voor Nederland, of null.
clickstream_search_volumeBeschikbaar clickstream zoekvolume, of null.
clickstream_normalized_search_volumeGenormaliseerd clickstream zoekvolume, of null.
cpcCPC in EUR, afgerond op twee decimalen, of null.
seo_difficulty / competitionSEO- en betaalde moeilijkheid als score van 0 tot 100, of null.
competition_levelBijvoorbeeld LOW, MEDIUM of HIGH.
intent / secondary_intentsPrimaire zoekintentie en een lijst met secundaire intenties.
historyMaximaal de 12 recentste Nederlandse maanden als YYYYMM: volume.
be_nl_search_volume / be_nl_historyZoekvolume en maximaal 12 maanden historie voor België (Nederlands).

Goed om te weten

De response behoudt altijd de volgorde van je request. Een onbekend zoekwoord geeft found: false en veroorzaakt geen fout voor de rest van de batch.

POST

Keyword zoeken

Gebruik dit endpoint om nieuwe keywords te ontdekken. Het doorzoekt dezelfde keywordindex en gebruikt dezelfde full-text zoeklogica als de applicatie, met filters en cursor-paginering.

Endpoint

POST https://tool.zoekwoord.nl/api/v1/keywords/search

Requestvelden

VeldTypeVereistStandaard / validatie
keywordstringJaZoekterm van 3–255 tekens.
min_search_volumeintegerNeeMinimaal 0.
max_search_volumeintegerNeeMinimaal 0 en niet lager dan het minimum.
intentsarray<string>Neenavigational, informational, commercial en/of transactional.
starts_with / ends_withstringNeeFilter op begin of einde; maximaal 255 tekens.
limitintegerNeeStandaard 50; minimaal 1 en maximaal 100.
cursorstringNeenext_cursor uit de vorige response; maximaal 500 tekens.

Requestvoorbeeld

{
  "keyword": "seo bureau",
  "min_search_volume": 100,
  "intents": ["commercial"],
  "limit": 50
}

Codevoorbeelden

cURL

curl --request POST 'https://tool.zoekwoord.nl/api/v1/keywords/search' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --data '{"keyword":"seo bureau","limit":50}'

JavaScript

const response = await fetch('https://tool.zoekwoord.nl/api/v1/keywords/search', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
    Accept: 'application/json',
  },
  body: JSON.stringify({ keyword: 'seo bureau', limit: 50 }),
});

const result = await response.json();

PHP

$response = Http::withToken('YOUR_API_KEY')
    ->acceptJson()
    ->post('https://tool.zoekwoord.nl/api/v1/keywords/search', [
        'keyword' => 'seo bureau',
        'limit' => 50,
    ]);

$result = $response->json();

Response

{
  "data": [
    {
      "keyword": "seo bureau",
      "data_source": "Zoekwoord.nl",
      "search_volume": 1000,
      "be_nl_search_volume": 120,
      "cpc": 2.73,
      "seo_difficulty": 47,
      "history": { "202501": 900, "202502": 1000 },
      "be_nl_history": { "202501": 90, "202502": 120 },
      "competition": 31,
      "competition_level": "MEDIUM",
      "intent": "commercial",
      "secondary_intents": ["transactional"]
    }
  ],
  "pagination": {
    "limit": 50,
    "returned_results": 1,
    "has_more": false,
    "next_cursor": null
  }
}

Responsevelden

VeldBeschrijving
dataMatches gesorteerd op zoekvolume, daarna keyword.
keywordGevonden keyword.
data_sourceBron van de data; Zoekwoord.nl.
search_volume / be_nl_search_volumeGemiddeld maandelijks zoekvolume voor Nederland en België (Nederlands).
cpcCPC in EUR, afgerond op twee decimalen, of null.
seo_difficulty / competitionSEO- en betaalde moeilijkheid als score van 0 tot 100.
history / be_nl_historyMaximaal de 12 recentste maanden als YYYYMM: volume.
intent / secondary_intentsPrimaire en secundaire zoekintenties.
paginationlimit, aantal resultaten, has_more en eventueel next_cursor.

Volgende pagina ophalen

Stuur pagination.next_cursor mee als cursor in je volgende request. Gebruik daarbij exact dezelfde zoekterm en filters. Bij de laatste pagina zijn has_more false en next_cursor null.

Geldt voor beide endpoints

Fouten en limieten

StatusBetekenis
401De API key ontbreekt of is ongeldig. Code: UNAUTHENTICATED.
403De key heeft geen toegang tot keyworddata of het account heeft geen actief betaald premium abonnement. Studentenaccounts hebben geen API-toegang. Code: FORBIDDEN.
422De requestbody voldoet niet aan de validatie. De response wijst de ongeldige velden aan.
429De gedeelde limiet van 1 request per seconde per API key is bereikt. Code: RATE_LIMIT_EXCEEDED.