Research keywords and competitor gaps
A connected search console tells you about searches the site is already shown for. Keyword research answers the questions it can't: how many people search for something the site has never ranked for, what related phrases exist, and which keywords competitors win. The research connector reads that market data live from the org's own DataForSEO account. Nothing is stored in Munin, and nothing is shared across orgs.
Every call spends the org's money. DataForSEO bills the connected account per request and per returned row. Treat limit as a budget, not a display setting.
Connecting
DataForSEO authenticates with an API login and API password from its dashboard (app.dataforseo.com → API Access). They are secrets. Never ask for them in chat, and never put them in a tool argument.
connectors_create_connectionwithvendor: "dataforseo"and a name. Pass no config.- The result carries a one-time credential link. Give the operator that link. They paste both values there.
connectors_test_connectionconfirms the credentials and reports the account balance.
See skill://connectors/connect-external-system for the general flow.
Tools
All of these take location and optional language, and connectionId only when the org has several research connections.
locationis a country in Europe or North America, written as its English name in snake_case:norway,germany,united_kingdom,united_states,canada,mexico,bosnia_and_herzegovina. The default isnorway.languagedefaults to the country's main language. Multilingual countries accept each of theirs:belgium(Dutch, French, German),switzerland(German, French, Italian),canada(English, French),united_states(English, Spanish),ukraine(Ukrainian, Russian).
Coverage is not the same on every tool:
-
seo_get_keyword_volumeandseo_get_serp_snapshotcover every listed country. The SERP snapshot also acceptsenglishanywhere. -
The DataForSEO Labs tools cover 47 of the 77 countries. Those are
seo_list_keyword_ideas,seo_list_ranked_keywordsandseo_list_keyword_gaps, and each country gets only the languages DataForSEO has indexed there. Examples: Norway in Norwegian only, Finland in Finnish only, Greece in Greek or English. -
Some countries have no Labs data at all. They include Iceland, Luxembourg, Georgia, Montenegro, Andorra, Liechtenstein and most of the Caribbean.
-
An unsupported combination is refused up front with
seo_invalid_market, and nothing is billed. The message names the languages that are offered, so retry with one of them, or fall back to keyword volume plus SERP snapshots for that country. -
Some countries are missing entirely. DataForSEO has no location at all for Russia, Belarus, Kosovo, the Faroe Islands, Gibraltar, Puerto Rico or Cuba, so these aren't offered.
-
seo_get_provider_balance— balance, total deposited and today's spend. Free. Call it before a large request. -
seo_get_keyword_volume— monthly volume, CPC and competition for up to 1,000 known keywords, plus 12 months of history. One flat per-request price, however many keywords you pass. That makes it the cheap way to size a list you already have. -
seo_list_keyword_ideas— related keywords from up to 20 seeds, with difficulty (0–100) and main intent. Billed per returned row. -
seo_list_ranked_keywords— what any public domain ranks for, with position and ranking URL. Billed per returned row. -
seo_list_keyword_gaps— keywords up to 3 competitors rank for and the target domain doesn't. One request per competitor, so three competitors cost three times one. -
seo_get_serp_snapshot— the current top Google results for one keyword.
Controlling cost
- Start small. Use
limit: 20–50on a first pass. Widen it only when the first page is worth paying for. - Pass
maxCostUsdwhenever the operator has named a budget, or whenever a request is large (many competitors, a highlimit). The tool estimates the worst case before contacting DataForSEO and refuses when the estimate is higher. A refused call has sent nothing and cost nothing. - Report the cost. Every result has
cost.estimatedUsd(the worst case, computed before the call) andcost.actualUsd(what DataForSEO charged). Tell the operator what a run cost, especially across a multi-step analysis. - Don't repeat calls. Results reflect DataForSEO's current data, and the same question an hour later returns the same answer at the same price.
Read the numbers correctly
volumeis Google's average monthly searches. Anullmeans DataForSEO has no figure, not zero searches. Small markets such as Norway, Iceland or the Baltics show many nulls on long-tail phrases.cpcis in USD, andcompetitionis advertiser competition from 0 to 1. Neither measures how hard it is to rank organically. For that usedifficultyfromseo_list_keyword_ideas.truncated: truemeans more rows existed thanlimitallowed.noData: truecomes with areasonand means DataForSEO answered and had nothing — a real empty answer, not a failure. Errors (bad credentials, balance too low, rate limit) always come back as errors, never as an empty list.
The gap loop
- Check the budget.
seo_get_provider_balance. - Find the gap.
seo_list_keyword_gapswith the org's domain and 1–3 competitors,limit: 50, and amaxCostUsd. Keywords where several competitors rank are the strongest signal. - Filter by intent and volume. Drop navigational keywords (other brands' names). Keep informational and commercial ones with real volume.
- Look at who wins.
seo_get_serp_snapshoton the top few keywords shows what kind of page ranks: a guide, a comparison, a product page. That tells you what to write. - Find the page that should answer.
cms_search_entriesandkb_searchwith the keyword. Either nothing exists (write it), or something exists and misses the phrasing (rewrite it). - Fix it with
cms_update_entryorkb_create_document, using the keyword in the title and opening paragraph. - Measure later with the console. Once the page is published and crawled,
seo_list_querieson a Bing or Google Search Console connection shows whether it started earning impressions — seeskill://seo/improve-search-performance.
What this cannot do
- It has no history. Each call is a snapshot, and nothing is stored, so rank tracking over time is not available.
- It sees Google only. Bing volumes are not covered.
- Coverage is Europe and North America. A country or language DataForSEO doesn't cover for a given tool is refused up front, before anything is billed.
Related
skill://seo/improve-search-performance— the search-console half: what the site already ranks for, and index status.skill://connectors/connect-external-system— creating and credentialing connections.skill://cms/publish-entry— where the fix in step 6 lands.