# SEO Agent - AI Keyword Research & Competitor Reports (`tenfoldfleet/seo-agent`) Actor

Research keywords and competitors with an AI agent: describe your SEO goal in plain words and get a report with search volume, CPC, keyword difficulty, intent and competitor domains, all from live keyword data. $0.25 per report plus the lookups it runs; failed reports are free.

- **URL**: https://apify.com/tenfoldfleet/seo-agent.md
- **Developed by:** [Tenfold Fleet](https://apify.com/tenfoldfleet) (community)
- **Categories:** SEO tools, Agents, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $250.00 / 1,000 research reports

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does SEO Agent do?

**SEO Agent** is an **AI agent for keyword research and competitor analysis**. You describe what you want in plain words, for example *"Find 15 low-competition keywords for an online store selling vegan protein powder in Australia"*, and the agent works out which lookups answer that question, runs them, and writes an **SEO report**.

The agent plans and writes with open-weight AI models (Qwen3 30B by default, Llama 4 Scout in deep mode) and gathers its data by running our keyword, competitor, backlink, traffic and AI Overview actors on Apify. Every keyword, domain and metric in the report comes from those **live lookups**: code checks the AI's answer and drops any keyword or number that no lookup returned. You get **search volume, CPC, keyword difficulty, competition, search intent**, competitor domains, a short summary and next steps, as JSON, Markdown and HTML.

It is also an **MCP server**, so Claude, ChatGPT, Cursor and other AI agents can call its research tools directly (see *Use it with AI agents (MCP)* below).

### Why use an AI SEO agent?

- **Keyword research from a sentence**: no seed lists or spreadsheets. Say what the business sells and what you need; the agent picks seed topics, finds ideas and checks the numbers.
- **Low-competition keyword finder**: ask for easy keywords and the agent filters on keyword difficulty and Google Ads competition.
- **Competitor research**: find who competes with a domain in Google, what they rank for, and which of their keywords you are missing (keyword gap).
- **Backlink and traffic checks**: compare domain rank, referring domains and estimated Google search traffic of you and your rivals.
- **AI search visibility**: see whether Google shows an AI Overview for your keywords and which sites it cites.
- **Agencies and automation**: run one report per client from the API, a schedule, Make, Zapier or n8n, and get clean JSON back.

### What lookups can the agent run?

| Tool | Runs this Actor | What it returns |
|---|---|---|
| `keyword_ideas` | [Keyword Ideas](https://apify.com/tenfoldfleet/keyword-ideas) | New keywords for 1-5 seed topics, with volume, CPC, difficulty and intent |
| `keyword_search_volume` | [Keyword Search Volume](https://apify.com/tenfoldfleet/keyword-search-volume) | Volume, CPC, competition, difficulty, intent and yearly trend for exact keywords |
| `competitor_keywords` | [SEO Competitor Keywords](https://apify.com/tenfoldfleet/seo-competitor-keywords) | Keywords a domain ranks for, its organic competitors, or the keyword gap |
| `backlinks_summary` | [Backlinks Checker](https://apify.com/tenfoldfleet/backlinks-checker) | Domain rank, backlinks, dofollow links and referring domains (summary only) |
| `website_traffic` | [Website Traffic Checker](https://apify.com/tenfoldfleet/website-traffic-checker) | Estimated monthly visits from Google search and ranking keyword counts |
| `ai_overview_check` | [Google AI Overviews Checker](https://apify.com/tenfoldfleet/google-ai-overviews-checker) | Whether an AI Overview shows, which domains it cites, your citation and rank |

### How to get an SEO report

1. Open the **Input** tab and write your **research goal** in plain words.
2. Optionally add **your website** and **competitor websites**, and pick the **country** and **language**.
3. Keep the defaults (8 lookups, $0.50 lookup budget, fast model) or change them.
4. Click **Start**. Most reports take 1-4 minutes; AI Overview checks add 1-2 minutes.
5. Open **report.html** or **report.md** from the Output tab, or download the dataset as **JSON, CSV or Excel**.

### How much does it cost?

You pay two things, both pay-per-event:

1. **The report**: **$0.25** per finished report, with either AI model. A report that fails (unclear goal, no data found, AI model unavailable) is **free**.
2. **The lookups**: each lookup is a normal run of one of the Actors above, under your account, at that Actor's own per-row price. **Max tool charges** (default $0.50, up to $5) is a hard cap for all lookups together: every lookup only gets the budget that is left, so the total can never go over it.

**Worked example** (paid Apify plan, prices on 23 Oct 2026): the agent runs `keyword_ideas` for 30 ideas ($0.015 + 30 × $0.003 = $0.105), `keyword_search_volume` for 10 keywords ($0.015 + 10 × $0.005 = $0.065) and `competitor_keywords` for one domain with 25 rows ($0.02 + 25 × $0.003 = $0.095). Lookups: $0.265. Report: $0.25. **Total: $0.515.** A typical report triggers about **$0.05-0.40 of lookup charges**, never more than your Max tool charges.

**Free Apify plan:** each report may run **3 lookups**, spend **$0.10** on lookups and uses the **fast model**, and each lookup returns its free-plan sample (for example 5 keywords or 10 ideas). The AI model costs the developer money on every report, so free-plan reports are kept small. Any paid Apify plan removes these limits. This limit is set by the Actor developer, not by Apify.

### Input

```json
{
    "goal": "Find 15 low-competition keywords for an online store selling vegan protein powder in Australia",
    "website": "mystore.com.au",
    "competitors": ["rivalstore.com.au"],
    "location": "Australia",
    "language": "English",
    "model": "fast",
    "maxToolCalls": 8,
    "maxChildSpendUsd": 0.5
}
```

Only `goal` is required. `location` and `language` accept names or codes (`AU`, `en`), like our keyword Actors.

### Output

One dataset item per report, plus `report.md` and `report.html` in the run's key-value store.

```json
{
    "goal": "Find 15 low-competition keywords for an online store selling vegan protein powder in Australia",
    "location": "Australia",
    "language": "English",
    "model": "fast",
    "summary": "Long-tail phrases around plant protein have steady demand and low difficulty ...",
    "keywords": [
        {
            "keyword": "protein powder",
            "searchVolume": 74000,
            "cpc": 2.38,
            "competition": "HIGH",
            "keywordDifficulty": 13,
            "intent": "transactional",
            "hasAiOverview": null,
            "priority": "high",
            "reason": "Buyer intent and a low difficulty score for a high-demand term.",
            "source": "keyword_ideas"
        }
    ],
    "keywordList": "protein powder, ...",
    "competitors": [],
    "insights": ["..."],
    "nextSteps": ["..."],
    "toolCalls": [
        { "tool": "keyword_ideas", "input": { "seeds": ["vegan protein powder"], "maxIdeas": 30, "includeRelated": false }, "rows": 30, "childRunId": "...", "chargedUsd": 0.105, "status": "SUCCEEDED", "error": null }
    ],
    "childSpendUsd": 0.17,
    "warnings": [],
    "reportMarkdown": "# SEO research report ...",
    "error": null
}
```

The keyword row is from a real Australian lookup on 23 Oct 2026; the other values are shortened. `toolCalls` lists every lookup with its run ID, so you can open the raw rows of any lookup in Apify Console.

### Use it with AI agents (MCP)

SEO Agent runs as an **MCP server** in Apify Standby mode. Add `https://tenfoldfleet--seo-agent.apify.actor/mcp` as a remote MCP server (Streamable HTTP) with your Apify API token as a `Authorization: Bearer <token>` header. Your agent gets seven tools: the six lookups above and `seo_research`, which runs the whole agent and returns the report.

- Each successful lookup tool call costs **$0.005**, plus the rows that lookup's Actor bills. Failed calls are free.
- `seo_research` costs the report price ($0.25) plus its lookups.

You can also add the Actor through Apify's MCP server: `https://mcp.apify.com?tools=tenfoldfleet/seo-agent`, and sign in with your Apify account.

### Tips

- **Name the business, the product and the audience** in the goal. "Keywords for a mobile dog grooming van in Austin" beats "dog keywords".
- Ask for **low competition** or **easy keywords** when the site is new; the agent then favours low keyword difficulty.
- Add **your website and competitors** for gap and backlink questions; without them the agent can still find organic competitors itself.
- Raise **Max lookups** and **Max tool charges** for multi-part questions (keywords plus competitors plus AI Overviews).
- **fast** suits most goals. **deep** gives the same question to a different, larger model; it is slower and costs the same, so try it when you want a second opinion on a competitor comparison.

### FAQ

#### Can the AI make up keywords or numbers?

The AI chooses and explains; it does not supply data. Code matches every keyword and domain in its answer against the lookup results, fills in all metrics from those results, and drops anything that has no match. Sentences with numbers that no lookup returned are removed. Each removal is listed in `warnings`.

#### Why are lookups billed separately?

Each lookup is a real run of another Actor under your account, so you see exactly what each one returned and cost. The **Max tool charges** setting caps them, and the report lists every lookup with its charge.

#### Which countries are supported?

The same 94 countries as our keyword Actors, including the United States, United Kingdom, Canada, Australia, Germany, France, Spain, India and Brazil.

#### How long does a report take?

Usually 1-4 minutes. AI Overview checks wait for live Google results and add 1-2 minutes.

#### What happens if the goal is not about SEO?

The agent runs no lookups and returns a free item with an error that explains why.

#### Which AI model writes the report?

**fast** (the default) uses **Qwen3 30B**: it plans the lookups quickly and thinks before it writes the report. **deep** uses **Llama 4 Scout** (a larger mixture-of-experts model) for both steps; it is slower and gets no extra lookups or budget, which is why both cost the same $0.25. Whatever the model, code ranks the domains on each metric before the AI writes, and checks every keyword, domain and number in its answer against the lookups. The `aiModels` field of each report names the model that wrote it.

#### Is the search volume exact?

Search volume, CPC and difficulty are estimates from keyword data providers, the same figures as in our keyword Actors. Google search traffic is an estimate of visits from Google search, not total site visits.

### Disclaimer

SEO Agent reads public search and keyword data. It is not affiliated with Google. The report is research support; check important decisions against your own analytics.

### More tools from Tenfold Fleet

| Actor | Output |
|---|---|
| [ALDI Australia Scraper - AU Products, Unit Prices & Catalogue](https://apify.com/tenfoldfleet/aldi-australia-scraper) | product |
| [Alibaba Image Search - Reverse Lookup of Suppliers by Photo](https://apify.com/tenfoldfleet/alibaba-image-search) | matched product |
| [Alibaba Products Scraper: Wholesale Suppliers, MOQ, Price Tiers](https://apify.com/tenfoldfleet/alibaba-products-scraper) | product |
| [AliExpress Keyword Scraper - Exact Sold Counts by Search Term](https://apify.com/tenfoldfleet/aliexpress-search-scraper) | product |
| [Amazon Product Scraper - Details, Prices & Search by ASIN](https://apify.com/tenfoldfleet/amazon-product-scraper) | product |
| [Applicant Tracking Jobs Scraper - Greenhouse, Lever & 6 More](https://apify.com/tenfoldfleet/ats-jobs-scraper) | job posting |
| [Backlinks Checker - Referring Domains, Anchors & Domain Rank](https://apify.com/tenfoldfleet/backlinks-checker) | backlink |
| [Bilibili Scraper - Videos, Comments, Danmaku & Search](https://apify.com/tenfoldfleet/bilibili-scraper) | video or comment |
| [Businesses Without Websites - Local Leads with Phone & Rating](https://apify.com/tenfoldfleet/businesses-without-websites) | lead |
| [Contact Details Scraper - One Lead Record per Company Website](https://apify.com/tenfoldfleet/company-contact-finder) | website with contacts |
| [Facebook Ads Library Scraper for Marketers](https://apify.com/tenfoldfleet/facebook-ads-library-scraper) | ad |
| [Facebook Page Contact Finder - Business Leads from Page Links](https://apify.com/tenfoldfleet/facebook-page-contact-finder) | page with contact details |
| [Google Ads Transparency Center Scraper - Competitor Ads by Site](https://apify.com/tenfoldfleet/google-ads-transparency-scraper) | ad |
| [Google AI Overviews Checker - Citations & Domain Tracker](https://apify.com/tenfoldfleet/google-ai-overviews-checker) | keyword checked |
| [Google Flights Scraper - All Fares per Route & Date (API)](https://apify.com/tenfoldfleet/google-flights-scraper) | route search |
| [Google Hotels Scraper - Nightly Prices, Stars & Booking Sites](https://apify.com/tenfoldfleet/google-hotels-scraper) | hotel |
| [Google for Jobs Scraper - Openings by City, Pay & Job Board](https://apify.com/tenfoldfleet/google-jobs-scraper) | job listing |
| [Google Keyword Planner Alternative - Ideas, Bids & Volume](https://apify.com/tenfoldfleet/google-keyword-planner) | keyword idea |
| [Google Maps Extractor - Business Leads, Phones & Websites](https://apify.com/tenfoldfleet/google-maps-extractor) | place |
| [Google News Scraper - Articles, Real URLs & Full Text](https://apify.com/tenfoldfleet/google-news-scraper) | article |
| [Google Travel Hotel Rate Tracker - OTA Prices for Every Night](https://apify.com/tenfoldfleet/google-travel-hotel-rate-tracker) | offer |
| [Search Trends by Region & Time - Google Trends Data Scraper](https://apify.com/tenfoldfleet/google-trends-scraper) | keyword |
| [Instagram Reels Search - Keyword to Top Reels, Plays & Creators](https://apify.com/tenfoldfleet/instagram-reels-search) | reel |
| [Instagram Reels Transcript - Speech to Text for Public Reels](https://apify.com/tenfoldfleet/instagram-reels-transcript) | reel transcript |
| [Keyword Ideas & Related Keywords - Difficulty, Volume & CPC](https://apify.com/tenfoldfleet/keyword-ideas) | keyword idea |
| [Keyword Search Volume, CPC & Difficulty Checker (Bulk)](https://apify.com/tenfoldfleet/keyword-search-volume) | keyword with data |
| [Likee Scraper - Creators by Country, Video Views & Likes](https://apify.com/tenfoldfleet/likee-scraper) | video |
| [LinkedIn Ads Library Scraper - Competitor Ad Copy & Targeting](https://apify.com/tenfoldfleet/linkedin-ad-library-scraper) | ad |
| [Reddit Brand Monitoring - Keyword Alerts for Posts & Comments](https://apify.com/tenfoldfleet/reddit-brand-monitoring) | mention |
| [Remote Job Board Scraper - Remote Jobs Aggregator, 7 Sites](https://apify.com/tenfoldfleet/remote-jobs-aggregator) | unique remote job |
| [SEEK Jobs Scraper - Salaries & Hiring Across 8 APAC Job Boards](https://apify.com/tenfoldfleet/seek-job-scraper) | job listing |
| [SEO Crawler - Technical SEO Audit Tool & On-Page Checker](https://apify.com/tenfoldfleet/seo-audit-tool) | page audit |
| [SEO Competitor Keywords - Domain Ranked Keywords & Keyword Gap](https://apify.com/tenfoldfleet/seo-competitor-keywords) | keyword |
| [Shopify Inventory Scraper - SKUs, Variants & In-Stock Status](https://apify.com/tenfoldfleet/shopify-products-scraper) | product |
| [Shopify App & Theme Detector - Store Analyzer & Contacts](https://apify.com/tenfoldfleet/shopify-store-analyzer) | shopify store |
| [Sitemap URL Extractor - All URLs from sitemap.xml & robots.txt](https://apify.com/tenfoldfleet/sitemap-url-extractor) | url |
| [Website Built With Checker - Find Any Site's CMS & Tech Stack](https://apify.com/tenfoldfleet/tech-stack-detector) | website |
| [Threads Search - Keyword & Profile Posts Scraper (No Login)](https://apify.com/tenfoldfleet/threads-search) | post |
| [TikTok Transcripts - Captions or Speech to Text for Any Video](https://apify.com/tenfoldfleet/tiktok-transcripts) | video transcript |
| [HTML to Text & URL to Markdown - LLM Ready Web Content](https://apify.com/tenfoldfleet/url-to-markdown) | page |
| [Website Traffic Checker - Bulk Domain Traffic Estimate](https://apify.com/tenfoldfleet/website-traffic-checker) | domain with traffic data |
| [WeChat Official Account Articles - Keyword Search to Markdown](https://apify.com/tenfoldfleet/wechat-official-account-articles) | article found |
| [Weibo Scraper - Comment Threads, Hot Search Ranks & User Stats](https://apify.com/tenfoldfleet/weibo-scraper) | comment |
| [Woolworths Product Scraper - AU Shelf Prices, Specials & GTINs](https://apify.com/tenfoldfleet/woolworths-product-scraper) | product |
| [Workday Jobs Scraper - myworkdayjobs.com API with Salary](https://apify.com/tenfoldfleet/workday-jobs-scraper) | job posting |
| [YouTube Channel Email Scraper - Creator Contact Extractor](https://apify.com/tenfoldfleet/youtube-channel-email-scraper) | channel with email |
| [YouTube Livestream & Channel Scraper - Videos, Likes & Stats](https://apify.com/tenfoldfleet/youtube-channel-scraper) | video |
| [YouTube Comments Scraper - Replies, Likes & Sort by Newest](https://apify.com/tenfoldfleet/youtube-comments-scraper) | comment |
| [YouTube Shorts Analytics Scraper - Views, Likes & Hashtags](https://apify.com/tenfoldfleet/youtube-shorts-scraper) | short |
| [YouTube Captions Downloader - Transcript & Subtitles Scraper](https://apify.com/tenfoldfleet/youtube-transcript-scraper) | transcript |

# Actor input Schema

## `goal` (type: `string`):

What you want to find out, in plain words. Examples: "Find 15 low-competition keywords for an online store selling vegan protein powder", "Which keywords do my competitors rank for that I don't?", "Does Google show AI Overviews for my main keywords, and who gets cited?". Name the business and topic; add your site and competitors below.

## `website` (type: `string`):

Your domain, e.g. mystore.com. The agent uses it for competitor, keyword-gap, backlink and AI Overview lookups.

## `competitors` (type: `array`):

Up to 10 competitor domains, one per line. Leave empty and the agent can find your organic competitors itself.

## `location` (type: `string`):

Country for search volume, CPC, difficulty and rankings. A country name or 2-letter code works ("United States", "AU", "GB"); 94 countries.

## `language` (type: `string`):

Search language, as a name or code ("English", "en", "de"). If the language has no data for the chosen country, the country's main language is used instead (for example Germany + English uses German). 21 countries support more than one language, for example United States English/Spanish, Canada English/French, Switzerland German/French/Italian, Belgium French/Dutch/German and India English/Hindi. English is also available in Cyprus, Egypt, Greece, Saudi Arabia and the UAE.

## `model` (type: `string`):

fast (Qwen3 30B) suits most goals and is quicker. deep gives the same lookups and budget to a different, larger model (Llama 4 Scout) for a second opinion; it is slower and costs the same. The free Apify plan always uses fast.

## `maxToolCalls` (type: `integer`):

Most data lookups (child actor runs) the agent may run for this report, 1-20. Each lookup bills its own rows.

## `maxChildSpendUsd` (type: `number`):

Hard cap on what all lookups together may charge you through the data actors, on top of the report price. Each lookup gets only the budget that is left, so the total can never pass this amount.

## Actor input object example

```json
{
  "goal": "Find 15 low-competition keywords for an online store selling vegan protein powder in Australia",
  "location": "Australia",
  "language": "English",
  "model": "fast",
  "maxToolCalls": 8,
  "maxChildSpendUsd": 0.5
}
```

# Actor output Schema

## `report` (type: `string`):

No description

## `reportMarkdown` (type: `string`):

No description

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "goal": "Find 15 low-competition keywords for an online store selling vegan protein powder in Australia",
    "location": "Australia"
};

// Run the Actor and wait for it to finish
const run = await client.actor("tenfoldfleet/seo-agent").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "goal": "Find 15 low-competition keywords for an online store selling vegan protein powder in Australia",
    "location": "Australia",
}

# Run the Actor and wait for it to finish
run = client.actor("tenfoldfleet/seo-agent").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "goal": "Find 15 low-competition keywords for an online store selling vegan protein powder in Australia",
  "location": "Australia"
}' |
apify call tenfoldfleet/seo-agent --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tenfoldfleet/seo-agent"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/vo7mJllI965M4jFjr/builds/RjQCIlHJp2hvKgdWL/openapi.json
