Tools Reference

research_keywords

Look up Google search volume, CPC, competition, keyword difficulty, search intent and search-volume trend for up to 100 keywords. Synchronous — returns a…

Cost: 25 credits.

research_keywords looks up Google search volume, CPC, competition, keyword difficulty, search intent and search-volume trend for up to 100 keywords at once, powered by DataForSEO Labs. It is synchronous — it returns a table immediately, with no background job to poll.

What it does

Given a list of keywords (plus an optional language and location), it returns one row per keyword with:

  • Search volume — average monthly Google searches. About these search volumes: they are Google Keyword Planner figures, passed through from DataForSEO unchanged. Each one is a 12-MONTH AVERAGE for the keyword AND ITS CLOSE VARIANTS, and Google ROUNDS it — so a volume here is not a count of exact-match searches in the month just gone, two keywords can share a figure only because both were rounded onto it, and volumes added up across rows or across locations will not come out exact.
  • CPC — the average cost-per-click advertisers pay.
  • Competition — the advertiser competition band (HIGH / MEDIUM / LOW).
  • Keyword difficulty — how hard the keyword is to rank for, on a 0–100 scale.
  • Search intent — the dominant intent behind the query (informational, commercial, navigational or transactional), plus any secondary intents it also carries.
  • Search-volume trend — how the volume moved month-over-month, quarter-over-quarter and year-over-year, as signed percentages.

The first three are always stated, as n/a when the provider sent no figure: they are the line's spine, and a row that quietly lost its volume column would read as a shorter row rather than as a missing measurement. n/a there means "nobody has a number for this", never "nobody searches this". The last three — difficulty, intent and trend — are left out when the provider did not send them, so a row with nothing extra to say stays short.

It also prints a one-line summary with the total monthly search volume across the batch.

Who can run it

research_keywords needs a paid credit balance. It reads live data from a paid third-party provider, so it is not available on trial credits; the refusal arrives before anything is reserved and says outright that you were not charged. Buy any credit pack and it unlocks straight away. Your trial credits are untouched and keep working for crawls, audits, reports and Search Console tools.

If live keyword data is unavailable on this deployment, the tool returns a clear "keyword research is not yet enabled on this deployment" message and charges you nothing — no credits are reserved or spent. SeoGrep never returns sample or placeholder figures dressed up as real data.

You are also not charged for a lookup that comes back completely empty. If the provider returns no figure for a single one of your keywords, there is no table to hand you, so the tool refuses the lookup with a message saying so and the credits are returned to your balance. This tends to happen with keywords outside the provider's Google Ads coverage — often non-English markets, or very rare terms — and the message suggests trying a broader or more common phrasing for the same market. As soon as one keyword in the batch comes back with something, the lookup is served and charged normally.

No data is not zero

A keyword the provider holds nothing on comes back as "no data returned for this keyword". It is never printed as volume 0 — "nobody has a figure for this" and "nobody searches this" are different facts that lead to different decisions — and a genuine zero, when the provider does report one, is still printed as volume 0.

It adds nothing to the batch total, and it is worth being exact about how: no row is filtered out of the sum, a missing volume simply counts as nothing. The arithmetic is the same either way, but there is no filter to find if you go looking for one. What makes such a keyword visible is the count in the header, not the total.

The same rule applies field by field, not just row by row. A keyword can come back with a difficulty and an intent but no search volume — common in markets the provider's advertising data covers thinly — and you get the figures it does hold, with the missing ones marked n/a rather than the whole row being written off as empty.

Every keyword you asked about is answered for

Your keyword list is accounted for in full. Alongside the two cases above there is a third, and it gets its own sentence because it is a different fact:

  • "no data returned for this keyword" — the provider sent a row for it, and that row holds no metrics.
  • "DataForSEO returned no row for this keyword"no row arrived at all. That is all we can honestly tell you: it is not a claim that nobody searches the term, nor that the provider holds nothing on it.

Either way the keyword is named in the output, so it can never quietly vanish between what you asked and what you read. The header's count covers both cases under one figure — it answers "how many of my keywords came back without data", not which of the two reasons applied; the lines themselves say that.

A keyword list that is empty or all whitespace is refused before anything is reserved, and the refusal says you were not charged.

How fresh the CPC is

Under the table you get the date the provider last refreshed its CPC and competition figures — the oldest date in your batch, because a table is only as fresh as its stalest row. Past 30 days the line says so in a sentence and tells you to treat those two columns as indicative rather than current.

This matters because CPC is an estimate of an auction, not a measurement of your account: the same keyword can be quoted meaningfully differently by different providers and on different days. Search volume is the number this tool is bought for, and it is not affected by that — but a bid figure deserves a date next to it.

Example

Ask your MCP client in plain language:

What's the search volume for "seo software" and "rank tracker"?

Input

FieldTypeRequiredDescription
keywordsstring[]YesKeywords to look up (1–100).
language_codestringNoLanguage code (default 'en').
location_codeintegerNoDataForSEO location code (default 2840 = United States).

Returns

A table with one line per keyword you asked about — search volume, CPC, competition, and (when the provider returns them) keyword difficulty, search intent and volume trend — plus a total-volume summary line and the date the CPC figures were last refreshed. Keywords the provider answered with nothing, and keywords it sent no row for, are named on their own lines and counted in the summary. While live data is off, it returns the "not yet enabled" message instead and charges nothing; a lookup that comes back with no figures at all is likewise refused and not charged.