DataForSEO Keyword Research & Rankings
Which keywords are worth targeting, and who already ranks for them? Pull Google search volume and CPC, expand a seed into keyword ideas, score difficulty and search intent, list the keywords any domain ranks for, find its organic competitors, and check today's live Google results for a query in a chosen city or country.
Connect this API to an AI agent Browse all specs
What you can do with DataForSEO Keyword Research & Rankings via MCP
Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.
| Method | Path | Operation | Description |
|---|---|---|---|
| GET | /v3/appendix/user_data |
getUserData | Check the account balance, limits and price list |
| GET | /v3/dataforseo_labs/locations_and_languages |
listLocationsAndLanguages | List the locations and languages keyword research supports |
| POST | /v3/keywords_data/google_ads/search_volume/live |
getSearchVolume | Get Google Ads search volume, CPC and competition for up to 1000 keywords |
| POST | /v3/dataforseo_labs/google/keyword_ideas/live |
getKeywordIdeas | Find keyword ideas in the same category as seed keywords |
| POST | /v3/dataforseo_labs/google/keyword_suggestions/live |
getKeywordSuggestions | Find longer search queries that contain a seed keyword |
| POST | /v3/dataforseo_labs/google/related_keywords/live |
getRelatedKeywords | Find keywords from Google's 'searches related to' for a seed keyword |
| POST | /v3/dataforseo_labs/google/bulk_keyword_difficulty/live |
getKeywordDifficulty | Score how hard it is to rank in Google's top 10 for each keyword |
| POST | /v3/dataforseo_labs/google/search_intent/live |
getSearchIntent | Classify keywords as informational, navigational, commercial or transactional |
| POST | /v3/dataforseo_labs/google/keyword_overview/live |
getKeywordOverview | Get volume, CPC, difficulty, intent and SERP features for keywords |
| POST | /v3/dataforseo_labs/google/ranked_keywords/live |
getRankedKeywords | List the keywords a domain or page ranks for, with positions |
| POST | /v3/dataforseo_labs/google/competitors_domain/live |
getCompetitorDomains | Find the domains that compete with a domain in organic search |
| POST | /v3/dataforseo_labs/google/domain_rank_overview/live |
getDomainRankOverview | Get a domain's ranking keyword counts and estimated traffic |
| POST | /v3/dataforseo_labs/google/keywords_for_site/live |
getKeywordsForSite | Find keywords relevant to a website |
| POST | /v3/serp/google/organic/live/advanced |
getGoogleSerp | Get today's live Google results for a keyword in a location |
Authentication
basicAuth
HTTP Basic
HTTP basic auth with your DataForSEO API login (username) and API password (password). The API password is not your dashboard password.
How to get a credential
- Sign up at app.dataforseo.com (new accounts get trial credits).
- Open API Access in the dashboard.
- Copy the API login and the API password shown there.
- Add funds or use the trial balance; every call is billed per task.
Permissions used
DataForSEO credentials have no scopes; one login can call every API on the account.
| Credential | Operations |
|---|---|
| API login + API password | all operations: getUserData, listLocationsAndLanguages, getSearchVolume, getKeywordIdeas, getKeywordSuggestions, getRelatedKeywords, getKeywordDifficulty, getSearchIntent, getKeywordOverview, getRankedKeywords, getCompetitorDomains, getDomainRankOverview, getKeywordsForSite, getGoogleSerp |
Common errors
DataForSEO usually answers HTTP 200 and puts the real result in status_code (20000 = ok) of the response and of each task.
| Code | Meaning | Fix |
|---|---|---|
| 401 / 40100 | Not authorized: wrong API login or password | Copy both again from API Access (not the dashboard password). |
| 40200 | Payment required: balance too low | Add funds, then retry. |
| 40501 / 40503 | Invalid field (e.g. an unknown location_name) or a body that is not an array of tasks |
Check names with listLocationsAndLanguages; send [{...}]. |
| 40202 / 40209 | Over 10,000 requests per minute, or over 30 at the same time | Slow down and retry. |
Store the login and password as a basic-auth credential in VX Agents; never paste them into chat.
Usage guide
Setup
- Credential: DataForSEO API login and API password (app.dataforseo.com > API Access), stored as a basic-auth credential. The API password differs from the dashboard password.
- Worth pinning: the market you research, as
location_name+language_name(e.g.United States+English) orlocation_code+language_code(2840+en).listLocationsAndLanguageslists valid values. - Every call except
getUserDataandlistLocationsAndLanguagesis billed. Before a batch, tell the user roughly how many calls you will make;getUserDatashows the balance and prices.
Research keywords for a topic
Every POST body is an array holding one task object: [{"keywords": ["yoga mat"], "location_name": "United States", "language_name": "English"}].
- Seed ideas:
getKeywordSuggestions(keyword, queries containing it),getRelatedKeywords(keyword,depth0-4),getKeywordIdeas(keywords, same category), orgetKeywordsForSite(target= a domain). - Size them:
getSearchVolume(Google Ads volume, CPC, competition; up to 1000keywords) orgetKeywordOverview(volume, CPC, difficulty, intent in one call). - Rank-ability:
getKeywordDifficulty(0-100) andgetSearchIntent(keywordsonly). - Check the live page one:
getGoogleSerpwithkeyword, location, language and optionaldevice(desktop/mobile) anddepth(results, default 10, max 200; each 10 results is billed).
Analyse a domain
getDomainRankOverviewwithtarget(example.com, withouthttps://orwww.) for ranking keyword counts and estimated traffic.getRankedKeywordswithtargetfor the keywords and positions; uselimit,order_by(e.g.["keyword_data.keyword_info.search_volume,desc"]) andfilters.getCompetitorDomainswithtargetfor the domains competing on the same keywords.
Good to know
- Check
status_codein the response and intasks[0]: 20000 means ok, even when HTTP is 200. Results are intasks[0].result. - Lists page with
limit(up to 1000) andoffset; some useoffset_token. filterslook like[["keyword_info.search_volume", ">", 1000], "and", ["keyword_info.cpc", ">", 1]](max 8); ongetRankedKeywordsthe fields start withkeyword_data..- Limits: 10,000 requests per minute and 30 at the same time.
- Read-only: nothing here changes data, but each task costs money.
Source: DataForSEO API v3 documentation (https://docs.dataforseo.com/v3/), checked 2026-10-22.
How to use this spec
- Create a free VX Agents account (sandbox tools included).
- Open the marketplace and connect “DataForSEO Keyword Research & Rankings” to an agent.
- Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.