# SEO tools

> Google organic search: keywords, rankings, results pages, domains, backlinks and site health.

Google organic search, from DataForSEO: keywords, rankings, results pages, domains, backlinks and site health. [`seo_get_page`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_page) fetches the page itself.

A few terms the results use. **Volume** is monthly searches. **KD** is keyword difficulty, 0 to 100. **domain_rank** is DataForSEO's authority score from its backlink index, 0 to 1000: the same kind of number as Ahrefs DR or Moz DA, on a different scale. A **target** is a domain or a URL (see [targets](https://www.manifoldmcp.com/docs/tools#targets)).

Common paths: keyword research is one [`seo_search_keywords`](https://www.manifoldmcp.com/docs/tools/seo#seo_search_keywords) call, which already has the metrics. For a domain, start with [`seo_get_domain_overview`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_domain_overview), then the backlinks or its ranked keywords. For site health, [`seo_get_page`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_page) checks one URL and [`seo_run_technical_crawl`](https://www.manifoldmcp.com/docs/tools/seo#seo_run_technical_crawl) a whole site, as an [async task](https://www.manifoldmcp.com/docs/tools#async-tasks).

| Tool | What it does | Cost |
| --- | --- | --- |
| [`seo_search_keywords`](#seo_search_keywords) | Get keyword ideas | From 5 credits |
| [`seo_get_keyword_metrics`](#seo_get_keyword_metrics) | Check keyword metrics | From 5 credits |
| [`seo_get_serp`](#seo_get_serp) | Get search results for a query | From 1 credit |
| [`seo_get_position`](#seo_get_position) | Get a site's position for a keyword | From 6 credits |
| [`seo_get_domain_overview`](#seo_get_domain_overview) | Get a domain overview | From 5 credits |
| [`seo_get_ranked_keywords`](#seo_get_ranked_keywords) | Get a domain's ranked keywords | From 5 credits |
| [`seo_get_serp_competitors`](#seo_get_serp_competitors) | Find search competitors | From 5 credits |
| [`seo_get_keyword_gap`](#seo_get_keyword_gap) | Find keyword gaps | From 5 credits |
| [`seo_get_backlink_summary`](#seo_get_backlink_summary) | Get a backlink summary | From 10 credits |
| [`seo_get_backlinks`](#seo_get_backlinks) | Get backlinks | From 10 credits |
| [`seo_get_referring_domains`](#seo_get_referring_domains) | Get referring domains | From 10 credits |
| [`seo_get_domain_ratings`](#seo_get_domain_ratings) | Get domain ratings in bulk | From 1 credit |
| [`seo_get_traffic_estimates`](#seo_get_traffic_estimates) | Get traffic estimates in bulk | From 50 credits |
| [`seo_get_page`](#seo_get_page) | Get an on-page snapshot | Free |
| [`seo_run_technical_crawl`](#seo_run_technical_crawl) | Run a technical audit | From 3 credits |

## `seo_search_keywords`: Get keyword ideas

Candidate keywords around a seed, with volume, difficulty, intent, CPC and trend for each.

**Use when:** "find keywords for X", "what should I target around X", "keyword ideas for a page about X".

**Not for:** metrics on keywords the user already has, use [`seo_get_keyword_metrics`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_keyword_metrics) (this tool already returns those metrics, so do not call it afterwards). Prompts people ask AI engines, use [`aeo_search_prompts`](https://www.manifoldmcp.com/docs/tools/aeo#aeo_search_prompts). The top-10 page for one query, use [`seo_get_serp`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_serp).

**Returns:** List. `rows[]`: keyword, volume, kd (0 to 100), intent, cpc (USD), competition, trend[12] (month, volume). volume, kd, cpc null = provider has no data; 0 = measured zero.

**Cost:** 5 + 5 per 100 rows. Default 100 rows = 10 credits. Cached 7 days.

| Parameter | Default and notes |
| --- | --- |
| `seed` | Required |
| `mode` | "suggestions" contains the seed \| "related" SERP-similar \| "ideas" same category, default suggestions |
| `location` | "United States" |
| `language` | "en" |
| `limit` | 100, max 1000 |

Also takes `cursor`, `provider`, `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "seed": "crm for startups",
  "mode": "suggestions",
  "limit": 50
}
```

## `seo_get_keyword_metrics`: Check keyword metrics

Volume, difficulty, intent, CPC and 12-month trend for keywords you already have, with AI-engine prompt volume on request.

**Use when:** the user supplies keywords, or you need numbers for a list from elsewhere. `ai_volume` true when the question is how often AI engines see the keyword.

**Not for:** discovering keywords, use [`seo_search_keywords`](https://www.manifoldmcp.com/docs/tools/seo#seo_search_keywords) (it already includes these metrics, do not call this after it). AI-engine prompts, use [`aeo_search_prompts`](https://www.manifoldmcp.com/docs/tools/aeo#aeo_search_prompts). Checking rankings, use [`seo_get_position`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_position).

**Returns:** List. `rows[]`: keyword, volume, kd, intent, cpc, competition, trend[12], `ai_volume`, `ai_trend`[12]. One row per input keyword in the order given. volume/kd null = provider has no data; 0 = measured zero. With source `google_ads`, kd and intent are always null and keywords over 80 characters come back all null. `ai_volume` and `ai_trend` are null unless `ai_volume` is true.

**Cost:** 5 + 5 per 100 keywords with source labs; 24 flat with source `google_ads`; `ai_volume` adds 4 + 4 per 100 keywords. Default 100 keywords = 10 credits. Cached 7 days.

| Parameter | Default and notes |
| --- | --- |
| `keywords[]` | Required, max 1000 |
| `source` | "labs" \| "`google_ads`", default labs; `google_ads` is Google Keyword Planner's own volume, slower |
| `ai_volume` | False |
| `location` | "United States" |
| `language` | "en" |

Also takes `provider`, `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "keywords": [
    "crm for startups",
    "hubspot alternative"
  ],
  "ai_volume": true
}
```

## `seo_get_serp`: Get search results for a query

The top organic results and SERP features Google shows for one query.

**Use when:** "what ranks for X", "who is on page one for X", "is there a featured snippet or AI overview for X".

**Not for:** where one site ranks for a keyword, use [`seo_get_position`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_position) (it scans the top 100 for you). General web retrieval to read pages, use `web_search_pages`. Keyword ideas, use [`seo_search_keywords`](https://www.manifoldmcp.com/docs/tools/seo#seo_search_keywords).

**Returns:** Record. keyword, location, language, device, `check_url`, `results_count`, `features[]` (`featured_snippet`, `people_also_ask`, video, `ai_overview` and others), `results[]` (rank, `organic_rank`, type, url, domain, title, snippet), `ai_overview` (text, `references[]`) or null.

**Cost:** 1 credit per 10 results, +1 with `ai_overview`. Default top 10 = 1 credit. Cached 24 hours.

| Parameter | Default and notes |
| --- | --- |
| `keyword` | Required |
| `location` | "United States" |
| `language` | "en" |
| `device` | "desktop" \| "mobile" |
| `depth` | 10, max 100 |
| `ai_overview` | False; true adds Google's AI overview and its cited sources |

Also takes `provider`, `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "keyword": "hubspot alternative",
  "depth": 10,
  "ai_overview": true
}
```

## `seo_get_position`: Get a site's position for a keyword

Where one target ranks for one keyword, scanning the top 100 server-side.

**Use when:** "where does example.com rank for X", "did we make page one for X", a rank check for a handful of keywords.

**Not for:** every keyword a domain ranks for, use [`seo_get_ranked_keywords`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_ranked_keywords). The full page-one list, use [`seo_get_serp`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_serp). Tracking over time: call this on a schedule from the host; the server keeps no history.

**Returns:** Record. keyword, target, rank (absolute, null when not in the top 100), `organic_rank`, url, title, `scanned_depth`, `above[]` (rank, domain, url of the organic results ahead, at most 10).

**Cost:** 6 credits flat. Cached 24 hours.

| Parameter | Default and notes |
| --- | --- |
| `keyword` | Required |
| `target` | Required; example.com covers subdomains, www.example.com is that host, a URL is that page |
| `location` | "United States" |
| `language` | "en" |
| `device` | "desktop" |

Also takes `provider`, `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "keyword": "hubspot alternative",
  "target": "example.com"
}
```

## `seo_get_domain_overview`: Get a domain overview

Traffic estimate, ranked keyword count, position spread, top pages and domain rank for one domain. The canonical source of domain rank.

**Use when:** "how strong is competitor.com", "how much traffic does X get", sizing a site before a deeper look.

**Not for:** the keywords behind the traffic, use [`seo_get_ranked_keywords`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_ranked_keywords). Link counts, use [`seo_get_backlink_summary`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_backlink_summary) (its `domain_rank` equals this one). Many domains at once, use [`seo_get_domain_ratings`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_domain_ratings) for domain rank or [`seo_get_traffic_estimates`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_traffic_estimates) for traffic.

**Returns:** Record. target, `domain_rank` (0 to 1000 on DataForSEO, the same kind of number as Ahrefs DR or Moz DA but not the same scale), `organic_traffic`, `organic_keywords`, `organic_traffic_cost` (USD), positions (`top_3`, `top_10`, `top_100`), `top_pages[]` (url, `organic_traffic`, `organic_keywords`), `history[]` (12 months: month, `organic_traffic`, `organic_keywords`) only with history true. null = provider has no data.

**Cost:** 5 credits; +56 with history. Cached 7 days.

| Parameter | Default and notes |
| --- | --- |
| `target` | Required |
| `location` | "United States" |
| `language` | "en" |
| `history` | False |

Also takes `provider`, `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "target": "competitor.com"
}
```

## `seo_get_ranked_keywords`: Get a domain's ranked keywords

Keywords a domain or one page ranks for in the top 100, with position, URL and metrics.

**Use when:** "what does competitor.com rank for", "which keywords send traffic to this page", building a list of a site's topics.

**Not for:** keywords a competitor has that you do not, use [`seo_get_keyword_gap`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_keyword_gap). One keyword's position, use [`seo_get_position`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_position). New keyword ideas, use [`seo_search_keywords`](https://www.manifoldmcp.com/docs/tools/seo#seo_search_keywords).

**Returns:** List. `rows[]`: keyword, rank, url, volume, kd, cpc, intent, traffic (estimated monthly visits from this keyword). Sorted by traffic. null = provider has no data.

**Cost:** 5 + 5 per 100 rows. Default 100 rows = 10 credits. Cached 7 days.

| Parameter | Default and notes |
| --- | --- |
| `target` | Required; a domain covers subdomains, a URL is that page only |
| `location` | "United States" |
| `language` | "en" |
| `limit` | 100, max 1000 |

Also takes `cursor`, `provider`, `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "target": "competitor.com",
  "limit": 200
}
```

## `seo_get_serp_competitors`: Find search competitors

Domains that share search results with a target, with how many keywords overlap. SERP competitors, not business competitors.

**Use when:** "who competes with example.com in search", "which sites show up for the same queries as X", choosing competitors for a keyword gap.

**Not for:** the keywords themselves, use [`seo_get_keyword_gap`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_keyword_gap). A single domain's strength, use [`seo_get_domain_overview`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_domain_overview).

**Returns:** List. `rows[]`: domain, `shared_keywords`, `avg_position`, `organic_traffic`, `organic_keywords`. Sorted by shared keywords. The target itself is excluded.

**Cost:** 5 + 5 per 100 rows. Default 100 rows = 10 credits. Cached 7 days.

| Parameter | Default and notes |
| --- | --- |
| `target` | Required |
| `location` | "United States" |
| `language` | "en" |
| `limit` | 100, max 1000 |

Also takes `cursor`, `provider`, `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "target": "example.com",
  "limit": 20
}
```

## `seo_get_keyword_gap`: Find keyword gaps

Keywords one competitor ranks for in the top 100 that the target does not rank for at all.

**Use when:** "what does competitor.com rank for that we do not", "find gaps against X", content opportunities from a rival.

**Not for:** everything a domain ranks for, use [`seo_get_ranked_keywords`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_ranked_keywords). Finding who the competitors are, use [`seo_get_serp_competitors`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_serp_competitors). Fresh ideas around a topic, use [`seo_search_keywords`](https://www.manifoldmcp.com/docs/tools/seo#seo_search_keywords).

**Returns:** List. `rows[]`: keyword, competitor, `competitor_rank`, `competitor_url`, volume, kd, cpc, intent. Sorted by volume.

**Cost:** 5 + 5 per 100 rows. Default 100 rows = 10 credits. Cached 7 days.

| Parameter | Default and notes |
| --- | --- |
| `target` | Required |
| `competitor` | Required, one domain |
| `location` | "United States" |
| `language` | "en" |
| `limit` | 100, max 1000 |

Also takes `cursor`, `provider`, `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "target": "example.com",
  "competitor": "competitor.com",
  "limit": 100
}
```

## `seo_get_backlink_summary`: Get a backlink summary

Link totals for a domain or page: backlinks, referring domains, dofollow share, link types and domain rank.

**Use when:** "how many links does X have", "what is X's link profile like", a quick authority check alongside [`seo_get_domain_overview`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_domain_overview).

**Not for:** the individual links or their anchor text, use [`seo_get_backlinks`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_backlinks). The sites linking, use [`seo_get_referring_domains`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_referring_domains). Domain rank for many domains, use [`seo_get_domain_ratings`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_domain_ratings).

**Returns:** Record. target, `domain_rank` (equals [`seo_get_domain_overview`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_domain_overview)'s `domain_rank`), backlinks, `referring_domains`, `referring_main_domains`, `referring_ips`, `dofollow_backlinks`, `dofollow_share` (0 to 1), `broken_backlinks`, `first_seen`, `link_types` (anchor, image, redirect, canonical counts). null = provider has no data.

**Cost:** 10 credits flat. Cached 7 days.

| Parameter | Default and notes |
| --- | --- |
| `target` | Required; a domain includes subdomains unless `include_subdomains` is false |
| `include_subdomains` | True |

Also takes `provider`, `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "target": "competitor.com"
}
```

## `seo_get_backlinks`: Get backlinks

Individual backlinks pointing at a domain or page, strongest referring domain first.

**Use when:** "show me the links to this page", "which pages link to competitor.com", finding link sources to replicate.

**Not for:** totals only, use [`seo_get_backlink_summary`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_backlink_summary). One row per linking site, use [`seo_get_referring_domains`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_referring_domains). Rating the linking sites, use [`seo_get_domain_ratings`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_domain_ratings).

**Returns:** List. `rows[]`: `url_from`, `url_to`, `domain_from`, `dr_from`, `page_title`, anchor, dofollow, type, `first_seen`, `last_seen`, lost.

**Cost:** 10 + 1.5 per 100 rows. Default 100 rows = 12 credits. Cached 7 days.

| Parameter | Default and notes |
| --- | --- |
| `target` | Required |
| `include_subdomains` | True |
| `limit` | 100, max 1000 |

Also takes `cursor`, `provider`, `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "target": "https://competitor.com/blog/best-crm",
  "limit": 50
}
```

## `seo_get_referring_domains`: Get referring domains

Domains linking to a target, one row per domain, with domain rank, link counts and spam score.

**Use when:** "who links to competitor.com", "build a list of sites to pitch for links", link prospecting from a rival's profile.

**Not for:** every individual link, use [`seo_get_backlinks`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_backlinks). Totals, use [`seo_get_backlink_summary`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_backlink_summary). Rating your own list of domains, use [`seo_get_domain_ratings`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_domain_ratings).

**Returns:** List. `rows[]`: domain, `domain_rank`, backlinks, `referring_pages`, `dofollow_backlinks`, `spam_score`, `first_seen`, lost. Sorted by `domain_rank`.

**Cost:** 10 + 1.5 per 100 rows. Default 100 rows = 12 credits. Cached 7 days.

| Parameter | Default and notes |
| --- | --- |
| `target` | Required |
| `include_subdomains` | True |
| `limit` | 100, max 1000 |

Also takes `cursor`, `provider`, `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "target": "competitor.com",
  "limit": 200
}
```

## `seo_get_domain_ratings`: Get domain ratings in bulk

Domain rank only, for up to 1,000 domains in one call. The cheap way to rate a list.

**Use when:** "rate these domains", "which of these sites are worth a link", filtering a prospect list by authority.

**Not for:** traffic numbers, use [`seo_get_traffic_estimates`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_traffic_estimates) (10x the cost). A full profile of one domain, use [`seo_get_domain_overview`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_domain_overview) or [`seo_get_backlink_summary`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_backlink_summary).

**Returns:** List. `rows[]`: domain, `domain_rank` (0 to 1000 on DataForSEO, the same kind of number as Ahrefs DR or Moz DA but not the same scale; null when the index has no data). One row per input domain in the order given. `errors[]` lists inputs that were not valid domains.

**Cost:** 1 + 2.5 per 100 domains. Default 100 domains = 4 credits. Cached 7 days.

| Parameter | Default and notes |
| --- | --- |
| `targets[]` | Required, max 1000 |

Also takes `provider`, `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "targets": [
    "example.com",
    "competitor.com",
    "blog.example.net"
  ]
}
```

## `seo_get_traffic_estimates`: Get traffic estimates in bulk

Estimated monthly organic and paid traffic for up to 1,000 domains in one call.

**Use when:** "how much traffic do these sites get", comparing a list of domains by size, checking a prospect list for reach.

**Not for:** authority, use [`seo_get_domain_ratings`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_domain_ratings) (a tenth of the cost). One domain in depth, use [`seo_get_domain_overview`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_domain_overview).

**Returns:** List. `rows[]`: domain, `organic_traffic`, `organic_keywords`, `paid_traffic`. One row per input domain in the order given. null = provider has no data. `errors[]` lists inputs that were not valid domains.

**Cost:** 50 + 50 per 100 domains. Default 100 domains = 100 credits. Cached 7 days.

| Parameter | Default and notes |
| --- | --- |
| `targets[]` | Required, max 1000 |
| `location` | "United States" |
| `language` | "en" |

Also takes `provider`, `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "targets": [
    "example.com",
    "competitor.com"
  ]
}
```

## `seo_get_page`: Get an on-page snapshot

An on-page snapshot of one URL: title, meta description, canonical, robots, headings, word count, schema types and link counts. Fetched live, free.

**Use when:** "check the on-page SEO of this URL", "what schema does this page use", a quick look before a crawl.

**Not for:** a whole site, use [`seo_run_technical_crawl`](https://www.manifoldmcp.com/docs/tools/seo#seo_run_technical_crawl). Rankings for the page, use [`seo_get_ranked_keywords`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_ranked_keywords) with the URL. What the page ranks against, use [`seo_get_serp`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_serp).

**Returns:** Record. url, `final_url`, status, title, `meta_description`, canonical, `robots_meta`, lang, h1[], h2[], `word_count`, `schema_types[]`, `links_internal`, `links_external`, images, `images_without_alt`. null = the tag is absent.

**Cost:** 0 credits, rate limited. Cached 1 hour.

| Parameter | Default and notes |
| --- | --- |
| `url` | Required, http or https |

Also takes `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "url": "https://example.com/pricing"
}
```

## `seo_run_technical_crawl`: Run a technical audit

Crawl a site for technical SEO issues. Slow: returns a task_id, then read the result with get_task.

**Use when:** "audit example.com", "crawl the site for broken links and duplicate titles", a technical health check.

**Not for:** one page, use [`seo_get_page`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_page). Rankings or traffic, use [`seo_get_domain_overview`](https://www.manifoldmcp.com/docs/tools/seo#seo_get_domain_overview).

**Returns:** Task. `task_id` now; [`get_task`](https://www.manifoldmcp.com/docs/tools#async-tasks) returns target, `pages_requested`, `pages_crawled`, rendered, `onpage_score`, `status_codes`, `broken_links`, `broken_resources`, `non_indexable`, `duplicate_titles`, `duplicate_descriptions`, `issues[]` (check, pages, `sample_urls[]`). Results expire after 30 days.

**Cost:** 3 credits per 100 pages; 30 per 100 pages rendered. The charge is on `max_pages` requested, not pages crawled. Default 1,000 pages = 30 credits.

| Parameter | Default and notes |
| --- | --- |
| `target` | Required, a domain |
| `max_pages` | Required, max 1000 on the Free plan |
| `render` | False; true executes JavaScript and costs 10x |

**Note:** Lighthouse is not available in this phase.

Also takes `max_credits`, `dry_run`: see [common parameters](https://www.manifoldmcp.com/docs/tools#common-parameters).

```json
{
  "target": "example.com",
  "max_pages": 500
}
```

