DataForSEO APIdataforseo.com ↗
Access DataForSEO's top websites by ranking keywords, top 1000 Google searches with history back to 2018, and 30-day SERP volatility index via 3 REST endpoints.
What is the DataForSEO API?
The DataForSEO API exposes three endpoints covering top-ranking websites, high-volume keywords, and SERP volatility data from Google. The get_top_keywords endpoint returns up to 1000 keywords with monthly search volume history going back to 2018, while get_serp_volatility provides a daily volatility score (0–10) for the past 30 days including a breakdown of SERP feature probabilities such as AI Overviews, People Also Ask, and video results. All endpoints support country-level filtering via location codes.
curl -X GET 'https://api.parse.bot/scraper/5eb0b5ae-f6b9-4865-ae5d-abf6c8de89cd/get_top_websites?location=2840' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace dataforseo-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: DataForSEO SDK — bounded, re-runnable; every call capped."""
from parse_apis.dataforseo_com_api import DataForSEO, DeviceType, SearchEngine, InvalidInput
client = DataForSEO()
# List top websites by ranking keywords for the United States
for site in client.websites.list(location="2840", limit=3):
print(site.domain, site.rank, site.keywords_in_serps)
# List top searched keywords worldwide
for kw in client.keywords.list(location="0", limit=3):
print(kw.keyword, kw.search_volume)
# Get SERP volatility for Google Desktop in the US
try:
for day in client.volatility_days.list(
location="2840", device_type=DeviceType.DESKTOP,
search_engine=SearchEngine.GOOGLE, limit=3
):
print(day.date, day.volatility, day.serps_count)
except InvalidInput as e:
print("invalid input:", e)
print("exercised: websites.list / keywords.list / volatility_days.list")
Retrieves the top 1000 websites ranked by number of keywords they appear for in Google SERPs. Each entry includes the domain, keyword count, and estimated organic traffic. Data is updated every 90 days and can be filtered by country.
| Param | Type | Description |
|---|---|---|
| location | string | Location code for country filtering. '0' for worldwide. Examples: '2840' (United States), '2826' (United Kingdom), '2276' (Germany). |
{
"type": "object",
"fields": {
"total": "integer count of websites returned",
"websites": "array of website ranking entries with rank, domain, keywords_in_serps, and estimated_organic_traffic"
},
"sample": {
"data": {
"total": 1000,
"websites": [
{
"rank": 1,
"domain": "youtube.com",
"keywords_in_serps": 189990821,
"estimated_organic_traffic": 7910193238.66
}
]
},
"status": "success"
}
}About the DataForSEO API
Endpoints and Data Coverage
The get_top_websites endpoint returns the 1000 domains that appear in the most Google SERP positions for a given country. Each entry in the websites array includes the rank, domain, keywords_in_serps (count of ranking keywords), and estimated_organic_traffic. The dataset refreshes every 90 days. Filter by country using standard location codes — 2840 for the United States, 2826 for the United Kingdom, or 0 for worldwide aggregate data.
Keyword Search Volume with Historical Trends
get_top_keywords returns up to 1000 of the most searched keywords on Google for a location. Each entry carries the keyword string, current search_volume, and a monthly history array spanning back to 2018. This makes it suitable for identifying long-term seasonal patterns rather than just a point-in-time snapshot. The dataset updates monthly. Location filtering works identically to get_top_websites using the same numeric location codes.
SERP Volatility Index
get_serp_volatility returns 30 daily entries, each with a date, a volatility score from 0 to 10, a serps_count indicating how many SERPs were measured, and a serp_features probability map. The feature map breaks down the likelihood of encountering result types like AI Overview, People Also Ask boxes, video carousels, and others on that day. This endpoint accepts optional category, location, device_type, and search_engine parameters, allowing you to scope volatility readings to a specific industry vertical, country, and device combination.
The DataForSEO API is a managed, monitored endpoint for dataforseo.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when dataforseo.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official dataforseo.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track domain-level organic reach by pulling
estimated_organic_trafficandkeywords_in_serpsfromget_top_websitesfor competitive benchmarking - Identify multi-year search trend shifts using the monthly
search_volumehistory back to 2018 fromget_top_keywords - Alert SEO teams when the daily volatility score from
get_serp_volatilityexceeds a threshold indicating a potential Google algorithm update - Compare SERP volatility across device types by toggling the
device_typeparameter to separate mobile and desktop signals - Segment keyword demand by country using location codes to compare search volume in the US vs UK vs Germany
- Monitor industry-specific SERP instability by filtering
get_serp_volatilitywith a category code for verticals like finance or health - Map the probability of AI Overview appearances in SERPs over time using the
serp_featuresfield in the volatility response
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does DataForSEO have an official developer API?+
How fresh is the data from each endpoint?+
get_top_websites refreshes every 90 days. get_top_keywords updates monthly. get_serp_volatility covers a rolling 30-day window of daily readings and reflects recent SERP activity.Does the API return more than the top 1000 websites or keywords?+
get_top_websites and get_top_keywords are capped at 1000 entries per response, and neither endpoint exposes pagination parameters. You can fork this API on Parse and revise it to add pagination or extend the result cap if you need broader coverage.Can I retrieve SERP volatility for a specific keyword or URL, not just by category?+
get_serp_volatility filters by category code, location, device type, and search engine, but does not accept a specific keyword or domain as an input. You can fork this API on Parse and revise it to add a keyword-level or domain-level volatility endpoint.What location codes does the API accept?+
2840 (United States), 2826 (United Kingdom), 2276 (Germany), and 2356 (India). Pass 0 in get_top_websites or get_top_keywords to retrieve worldwide aggregates. The get_serp_volatility endpoint uses the same format but does not document a worldwide aggregate option.