Everything you browse in Seotrends is available over a read-only JSON API, and through an MCP server if you would rather ask an AI assistant. Both are included with the Starter, Pro and Agency plans, and both return exactly the data your plan covers.
Create an account and pick a plan to get your key.
Every request needs your email and your API key. You will find both in your account. Send them as HTTP Basic credentials:
curl -u "[email protected]:YOUR_API_KEY" \
"https://seotrends.pro/v1/domains?dr_max=30&per_page=10"
Or, if a single header is easier for your client:
curl -H "X-Api-Key: YOUR_API_KEY" "https://seotrends.pro/v1/me"
The API key is not your account password. It only grants read access to the data your plan includes, and you can regenerate it at any time from /account without changing anything else about your account. Regenerating stops the old key immediately.
Two things are metered: how many requests you make and how many rows you receive. Both reset
at 00:00 UTC, and every successful response tells you where you stand in a usage
block, so your script can pace itself without guessing.
| Plan | Requests / day | Rows / day | Rows per page | Requests / minute |
|---|---|---|---|---|
| Starter | 1,000 | 25,000 | 100 | 60 |
| Pro | 5,000 | 100,000 | 100 | 60 |
| Agency | 20,000 | 500,000 | 1,000 | 120 |
Listings page through the first 10,000 rows of a result set. Past that, narrow the query (country, DR range, category, minimum traffic) instead of paging deeper. It is also much faster, since a tighter filter reads far less of the database.
GET /v1/domainsThe dashboard listing, with the same filters. All parameters are optional.
| Parameter | Description |
|---|---|
countries | Comma-separated country codes (ES,IT). Defaults to every country in your plan. Asking for one outside it returns an error rather than silently swapping it. |
categories | Comma-separated category IDs, from /v1/categories. |
dr_min, dr_max | Domain Rating range. |
age_min, age_max | Domain age in years. |
traffic_min | Minimum monthly organic traffic. |
value_min | Minimum monthly traffic value in USD. |
keywords_min, top3_min | Minimum keywords, minimum top-3 rankings. |
growth_min, quality_min | Minimum growth score, minimum quality score. |
cpc_min | Minimum average CPC. Pro and Agency only; on Starter it is ignored and reported back in meta.ignored_filters. |
adult | exclude (default), include or only. |
only_my_countries | 1 hides domains that also rank outside your plan's countries. |
sort | traffic_value (default), growth_score, opportunity, quality_score, keywords, volume, age, top3, avg_position, traffic, dr. |
order | ASC or DESC. |
page, per_page | Paging. per_page is capped by your plan. |
curl -u "[email protected]:YOUR_API_KEY" \
"https://seotrends.pro/v1/domains?countries=ES&dr_max=30&traffic_min=5000&sort=growth_score&per_page=25"
{
"data": [
{
"domain": "example.com",
"dr": 16,
"age_years": 3,
"category": "Finance",
"countries": ["ES"],
"total_keywords": 119,
"top3": 78,
"organic_traffic": 712579,
"traffic_value_usd": 281114.86,
"growth_score": 103.8,
"opportunity_score": 10.89,
"url": "https://seotrends.pro/reports?report=domain_keywords_detail&domain=example.com"
}
],
"meta": { "page": 1, "per_page": 25, "total": 8412, "total_pages": 337 },
"usage": { "requests_today": 12, "requests_limit": 5000, "rows_today": 300, "rows_limit": 100000 }
}
GET /v1/domains/{domain}
One domain in full, plus traffic_history: our monthly snapshots of estimated
traffic and value. The series grows one real month at a time, so a domain we started
tracking recently has a shorter history.
GET /v1/domains/{domain}/keywords
Every keyword the domain ranks for, paginated. Filter with position_max,
volume_min, difficulty_max and country; sort by
traffic (default), volume, position, cpc
or difficulty.
curl -u "[email protected]:YOUR_API_KEY" \
"https://seotrends.pro/v1/domains/example.com/keywords?position_max=10&per_page=100"
GET /v1/keywords
Search the keyword database. q matches whole words, so seo does not
return museo; pass partial=1 if you do want substring matching.
Filter with country, volume_min, difficulty_max and
cpc_min (Pro and above).
GET /v1/categories lists the category IDs used by the filters.
GET /v1/countries lists every country we cover and flags which ones your plan
includes. GET /v1/me returns your plan, your countries and today's usage.
Errors come back as JSON with a stable error code, so you can branch on it
without parsing the message.
| HTTP | Code | What to do |
|---|---|---|
| 401 | missing_credentials, invalid_key | Check the key at /account. |
| 402 | payment_required | A renewal failed. Update the card and access resumes on its own. |
| 403 | plan_required, country_not_in_plan | The plan does not cover that data. |
| 404 | not_found | Unknown endpoint, or we have no data for that domain. |
| 429 | rate_limited | Daily or per-minute limit reached. The response says which. |
| 400 | invalid_sort, invalid_domain, page_too_deep | Fix the parameter; the response lists what is allowed. |
MCP lets an AI assistant query Seotrends directly, so you can ask for what you need in plain language instead of writing requests. It uses the same key and the same plan limits.
claude mcp add --transport http seotrends https://seotrends.pro/mcp \
--header "X-Api-Key: YOUR_API_KEY"
Add this to the MCP configuration file:
{
"mcpServers": {
"seotrends": {
"type": "http",
"url": "https://seotrends.pro/mcp",
"headers": { "X-Api-Key": "YOUR_API_KEY" }
}
}
}
Once connected, your assistant can call these tools:
| Tool | What it does |
|---|---|
search_domains | Find domains by country, DR, age, traffic, category and more. |
get_domain | Full metrics and traffic history for one domain. |
get_domain_keywords | The keywords a domain ranks for. |
search_keywords | Search the keyword database by volume, difficulty and CPC. |
list_categories | Category IDs for the filters. |
my_account | Your plan, countries and remaining quota. |
Assistants read a lot of rows quickly. The MCP tools return compact results by default (20 rows) to keep answers sharp; ask for more explicitly when you need it.
Something missing, or a field you need that we do not expose yet? Tell us and we will look at it.