APIKeywordsKeyword research API
Keyword research API. Keyword suggestions and our keyword planner in your own dashboard and AI.
keywords.suggest returns what people type after a keyword. keywords.ideas pulls related keywords from our keyword planner with monthly search volume, advertiser competition and CPC in euros. Both sit in our REST API and MCP server, in every plan at no extra cost. We keep the backend running.
Keyword suggestions
What people type after a keyword, most common first.
Keyword planner
Related ideas with monthly search volume, advertiser competition and CPC in euros.
Country and language
Uses your site's country and language by default, or any market you pass.
In every plan
60 calls a minute on a personal key and 600 on a white label key, at no extra cost.
Keyword research endpoints and MCP tools
The keywords topic gives your dashboard, script or AI assistant the data behind the Keyword tool page in MarketingTracer.
| Endpoint | MCP tool | What you get |
|---|---|---|
keywords.suggest |
get_keywords_suggest |
What people type after keyword q in a country and language, most common first (usually up to 10 suggestions). |
keywords.ideas |
get_keywords_ideas |
Related keyword ideas from our keyword planner (1 to 500, default 100), ordered from most searched to least, with average monthly searches in the country, advertiser competition (0 to 100) and CPC in euros. Kept 30 days per keyword, country and language. |
Both endpoints take site_id and q (up to 200 characters). If you leave out country and language, the API uses the country and language set on that site. The ads_competition field on keywords.ideas is the advertiser competition index from 0 to 100. It shows how many advertisers compete for the keyword in paid search rather than how hard it is to rank organically. When you have picked the keywords you want to follow, add them to position tracking with serp.keywords_add on the Rank tracker API.
A real keywords.suggest call and its answer
Every endpoint takes a POST with JSON (or a GET with the same parameters in the query string) and your API key in the Authorization header. Here is a real keywords.suggest answer for the Netherlands:
curl -X POST https://app.marketingtracer.com/rest/v1/keywords.suggest \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"site_id": "65a1b2c3d4e5f60718293a4b", "q": "hardloopschoenen"}'
{
"data": [
{"keyword": "hardloopschoenen", "position": 1},
{"keyword": "hardloopschoenen dames", "position": 2},
{"keyword": "hardloopschoenen heren", "position": 3},
{"keyword": "hardloopschoenen nike", "position": 4},
{"keyword": "hardloopschoenen asics", "position": 5},
…
{"keyword": "hardloopschoenen dames asics", "position": 10}
],
"meta": {
"site_id": "65a1b2c3d4e5f60718293a4b",
"next_cursor": null,
"total": null,
"country": "nl",
"language": "nl"
}
}
Expand a seed keyword with letters and question words
A call to keywords.suggest returns up to ten keyword suggestions for a single query, most common first. When a client types a broad product term into your dashboard, they usually want more than the first ten lines.
Do what our own Keyword tool page does: call keywords.suggest again with a question word in front of the keyword (such as what, how, when, which or why) and with the letters a through z after it. Your user gets the long-tail phrases and buyer questions people actually type into Google, grouped by letter and question word.
Put search volumes and ad bids next to your ideas, then track the winners
A partner who built their own client portal on our API asked us for this topic because a keyword tool was the one piece missing before adding terms to the Rank tracker. Calling keywords.ideas returns up to 500 related ideas from our keyword planner (100 by default) with the highest monthly search volume first.
Each idea comes with average monthly searches in that country, the 0 to 100 advertiser competition index, and the cost per click in euros. We keep each answer for 30 days per keyword, country and language. Reopening a list or sorting it in your dashboard responds right away. When your user selects the terms they want to target, send them to serp.keywords_add on the Rank tracker API to start measuring their Google positions.
Check a new country or combine keyword research with Search Console in your AI
Both endpoints use the site's own country and language by default. When a shop expands across the border, pass country and language (such as de for Germany or uk and en for the UK) to see what shoppers there call the same product and how often they search for it.
In Claude or ChatGPT, both endpoints sit in the SEO MCP as get_keywords_suggest and get_keywords_ideas. Ask your assistant to pull keyword ideas with search volumes for a topic and check get_search_console in the same turn. You see right away which high-volume searches your client has no page for yet.
Endpoints, arguments and field descriptions
Every endpoint is a POST with a JSON body; reading endpoints also take a GET with the same arguments in the query string. Send your API key as Authorization: Bearer YOUR_API_KEY. Every answer is {"data": …, "meta": {…}}: meta.site_id always, meta.next_cursor and meta.total for a list, meta.period where the endpoint covers a period. An error is {"error": {"code", "message"}} with the HTTP status: 400 invalid_argument, unknown_argument or missing_argument; 401 not_authenticated; 403 no_access or tool_off; 404 not_found; 409 not_connected (a connection the endpoint needs, such as Google Analytics 4, is missing); 429 rate_limited; 502 google_error (Google returned an error on your own Search Console or Analytics connection) or upstream_error (another data source did not answer; try again in a minute). The machine-readable version is openapi.json.
keywords.suggest
POST /rest/v1/keywords.suggest · MCP tool get_keywords_suggest
Returns keyword suggestions for a keyword in a country and language: what people type after it, most common first (usually up to 10).
Arguments
| Argument | Type | What it does |
|---|---|---|
site_id (required) | string | The site: its id from list_sites, or the id in the app’s address. |
q (required) | string | The keyword. For more ideas, ask again with a letter or a question word around it (hardloopschoenen a, wat hardloopschoenen), as the keyword tool page does. |
country | string | Two-letter country code (nl, be, de, uk, us …; gb works too). Without it: the country of the site. |
language | string | Language code (nl, en, de, pt-BR …). Without it: the language of the site. |
Example request
curl -X POST https://app.marketingtracer.com/rest/v1/keywords.suggest \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"site_id":"YOUR_SITE_ID","q":"hardloopschoenen"}'
Example response · Real answer for the Netherlands, 12 November 2026.
{
"data": [
{"keyword": "hardloopschoenen", "position": 1},
{"keyword": "hardloopschoenen dames", "position": 2},
{"keyword": "hardloopschoenen heren", "position": 3},
{"keyword": "hardloopschoenen nike", "position": 4},
{"keyword": "hardloopschoenen asics", "position": 5},
{"keyword": "hardloopschoenen kind", "position": 6},
{"keyword": "hardloopschoenen adidas", "position": 7},
{"keyword": "hardloopschoenen decathlon", "position": 8},
{"keyword": "hardloopschoenen sale", "position": 9},
{"keyword": "hardloopschoenen dames asics", "position": 10}
],
"meta": {
"site_id": "YOUR_SITE_ID",
"next_cursor": null,
"total": null,
"country": "nl",
"language": "nl"
}
}
Response fields · data is a list; each item has:
| Field | Type | What it is |
|---|---|---|
keyword | string | The suggestion. |
position | integer | Its place in the list, from 1. |
keywords.ideas
POST /rest/v1/keywords.ideas · MCP tool get_keywords_ideas
Returns keyword ideas from our keyword planner for a keyword: related keywords with their average monthly searches in the country, how much advertisers compete for them and the cost per click. Kept 30 days per keyword, country and language. Most searched first.
Arguments
| Argument | Type | What it does |
|---|---|---|
site_id (required) | string | The site: its id from list_sites, or the id in the app’s address. |
q (required) | string | The keyword. For more ideas, ask again with a letter or a question word around it (hardloopschoenen a, wat hardloopschoenen), as the keyword tool page does. |
country | string | Two-letter country code (nl, be, de, uk, us …; gb works too). Without it: the country of the site. |
language | string | Language code (nl, en, de, pt-BR …). Without it: the language of the site. |
limit | integer, 1 to 500, default 100 | At most this many ideas. |
Example request
curl -X POST https://app.marketingtracer.com/rest/v1/keywords.ideas \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"site_id":"YOUR_SITE_ID","q":"hardloopschoenen","limit":4}'
Example response · Illustrative: the shape is exact, the figures are made up.
{
"data": [
{
"keyword": "hardloopschoenen",
"search_volume": 33100,
"ads_competition": 100,
"cpc_eur": 0.62
},
{
"keyword": "hardloopschoenen dames",
"search_volume": 14800,
"ads_competition": 100,
"cpc_eur": 0.55
},
{
"keyword": "hardloopschoenen heren",
"search_volume": 9900,
"ads_competition": 100,
"cpc_eur": 0.58
},
{
"keyword": "beste hardloopschoenen",
"search_volume": 2900,
"ads_competition": 74,
"cpc_eur": 0.41
}
],
"meta": {
"site_id": "YOUR_SITE_ID",
"next_cursor": null,
"total": 612,
"country": "nl",
"language": "nl"
}
}
Response fields · data is a list; each item has:
| Field | Type | What it is |
|---|---|---|
keyword | string | The keyword idea. |
search_volume | integer | Average searches per month in the country over the last 12 months (rounded). |
ads_competition | integer | How many advertisers bid on it, 0-100. About ads, not about how hard it is to rank organically. |
cpc_eur | number | The average of the low and high top-of-page bid in euros; 0 when there is none. |
Build your own keyword tool on our backend. Under your own name.
Every tool in the MarketingTracer dashboard is in the API, and the whole platform is white label. On your agency's custom domain the REST API and the MCP server answer on your address, with your name and logo. One white label key (mtw_…, 600 calls per minute) works across every client site in your account.
Free 14-day trial
MarketingTracer smart A.I. tool shows you what you need to rank. Then we'll help you get it done.
- No credit card required
- No installation needed
- No strings attached
FAQ
Something else? Ask us.
What is the difference between keywords.suggest and keywords.ideas?
keywords.suggest returns what people type after your keyword in the country and language you ask for, most common first (usually up to 10). keywords.ideas returns related keyword ideas from our keyword planner, with average monthly searches in that country, advertiser competition (0 to 100) and the cost per click in euros.
Is ads_competition an organic keyword difficulty score?
No. ads_competition is the advertiser competition index from 0 to 100, which shows how many advertisers compete for that keyword in paid search. It does not measure how hard it is to rank organically.
How do I get more than ten suggestions for a keyword?
Call keywords.suggest again with a letter (a to z) after your keyword or a question word (what, how, why) in front of it, just like the Keyword tool page in the dashboard does. Each call returns the suggestions for a single query, most common first (usually up to 10).
How long are keyword planner ideas cached?
Results from keywords.ideas are kept for 30 days per keyword, country and language. Repeat calls for the same combination within 30 days return the stored answer.
How do I start tracking a keyword I found through the API?
Send the chosen keywords to serp.keywords_add on the Rank tracker API. That adds them to your site's Rank tracker so we measure their Google positions.
What does the keyword research API cost and what is the rate limit?
It is included in every MarketingTracer plan at no extra cost. A personal API key (mtk_…) allows 60 calls per minute and a white label key (mtw_…) allows 600 calls per minute across the API and the MCP together. See the pricing page for plan prices.