# SEO Agency Report - White-Label SEO & AI Visibility Audit (`wrenfield-data/seo-agency-report`) Actor

One domain in, one client-ready SEO report out: rankings, top 100 keywords, quick wins, competitors, domain authority, backlinks, live SERPs, PageSpeed and ChatGPT / Google AI Mode visibility. White-label HTML + PDF and JSON. $2.49 per report.

- **URL**: https://apify.com/wrenfield-data/seo-agency-report.md
- **Developed by:** [Wrenfield Data](https://apify.com/wrenfield-data) (community)
- **Categories:** SEO tools, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1,990.00 / 1,000 seo reports

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## SEO Agency Report: a white-label SEO & AI search visibility audit for any domain

**SEO Agency Report** turns one domain into a **client-ready SEO report** in about two minutes. You get a branded **HTML report**, a **PDF** to send to the client, and **all the data as JSON**:

- 📈 **Organic performance**: ranking keywords, top-10 keywords, estimated traffic and traffic value, new/lost keywords and the Google position distribution.
- 🔑 **Top 100 keywords** by traffic, with position, search volume, **keyword difficulty**, intent and ranking URL, plus **quick wins** (keywords stuck in positions 4-20).
- 🥊 **Competitor benchmark**: the top 5 organic competitors (found automatically, or your own list) with authority, keywords, traffic and shared keywords.
- 🔗 **Domain authority & backlinks**: authority score (0-100), backlinks, referring domains, dofollow share, spam score and broken backlinks.
- 🔎 **Live Google SERPs** for your target keywords: your position, competitors in the top 20, and whether the **Google AI Overview** cites the site.
- ⚡ **PageSpeed** for the homepage (mobile + desktop): performance, SEO and accessibility scores, LCP, CLS, **Core Web Vitals** and the top fixes.
- 🤖 **AI search visibility (GEO)**: does **ChatGPT** or **Google AI Mode** mention or cite the brand for 5 buyer questions? Which competitors and sources do they name instead?
- ✅ **Executive summary and priority recommendations**, written from the data, ready for a client call.

It is built for **SEO agencies, freelancers and consultants** who need a professional pitch or monthly report without paying $100-300/month for an agency reporting suite. Add your **agency name, logo and brand colour** and the report is fully white-label.

#### Wrenfield Search Data: keyword and AI-search visibility data, priced per result

- **Keyword data:** [Keyword Search Volume](https://apify.com/wrenfield-data/keyword-search-volume) · [Keyword Difficulty](https://apify.com/wrenfield-data/keyword-difficulty-checker) · [Keyword Research](https://apify.com/wrenfield-data/keyword-research-tool) · [Autocomplete Expander](https://apify.com/wrenfield-data/google-autocomplete-keyword-expander) · [Google Trends](https://apify.com/wrenfield-data/google-trends-scraper) · [People Also Ask](https://apify.com/wrenfield-data/people-also-ask-scraper) · [Competitor Keywords](https://apify.com/wrenfield-data/competitor-keywords) · [Keyword Gap](https://apify.com/wrenfield-data/keyword-gap-report)
- **AI search visibility:** [AI Search Visibility Tracker](https://apify.com/wrenfield-data/ai-search-visibility-tracker) · [Google AI Overview Scraper](https://apify.com/wrenfield-data/google-ai-overview-scraper) · [AI Answer Scraper](https://apify.com/wrenfield-data/ai-answer-scraper) · [Agency AI Visibility Reports](https://apify.com/wrenfield-data/agency-ai-visibility-reports)
- **Site and domain SEO:** [Domain Authority & Traffic](https://apify.com/wrenfield-data/domain-authority-traffic-checker) · [Bulk PageSpeed](https://apify.com/wrenfield-data/bulk-pagespeed-checker) · [SEO Toolkit](https://apify.com/wrenfield-data/seo-toolkit) · **SEO Agency Report**

### How to create a report

1. Enter the client's **website**, e.g. `example.com`.
2. Optional: add up to **5 competitors**, up to **20 target keywords**, the **country** and **language**.
3. Optional: add your **agency name, logo URL, accent colour and client name** for white-label branding.
4. Click **Start**. When the run finishes, open **Output** → **HTML report**, or download the PDF from the key-value store.

Schedule it monthly (Apify **Schedules**) to send every client a fresh report automatically.

#### Input example

```json
{
  "domain": "acmeplumbing.com",
  "competitors": ["rotorooter.com", "mrrooter.com"],
  "keywords": ["emergency plumber austin", "water heater repair austin", "drain cleaning austin"],
  "location": "United States",
  "brandName": "Acme Plumbing",
  "agencyName": "Northwind Digital",
  "agencyLogoUrl": "https://example.com/logo.png",
  "accentColor": "#0F766E",
  "clientName": "Acme Plumbing Co."
}
```

### What you get

| Output | Where | Contents |
|---|---|---|
| HTML report | key-value store `REPORT` and `report-<domain>.html` | the branded, client-ready report |
| PDF report | key-value store `report-<domain>.pdf` | the same report as an A4 PDF |
| JSON | dataset (1 row per report) | every number in the report: `overview`, `ranked_keywords`, `quick_wins`, `competitors`, `backlinks`, `target_keywords`, `serp`, `pagespeed`, `ai_visibility`, `highlights`, `recommendations`, `summary` |

Shortened JSON example:

```json
{
  "domain": "backlinko.com",
  "summary": {"authority_score": 70, "organic_keywords": 30602, "top10_keywords": 4584, "organic_traffic": 19941,
              "organic_traffic_value_usd": 143138, "mobile_performance": 39, "ai_mention_rate": 0,
              "competitors": ["semrush.com", "ahrefs.com", "neilpatel.com", "hubspot.com", "seranking.com"]},
  "highlights": [{"tone": "good", "text": "Ranks for 30,602 Google keywords (4,584 in the top 10), worth about $143,138/month in equivalent ad spend."}],
  "recommendations": ["Optimise the pages ranking 4-20 for the 10 quick-win keywords listed below: …"],
  "report_html_url": "https://api.apify.com/v2/key-value-stores/…/records/report-backlinko-com.html",
  "report_pdf_url": "https://api.apify.com/v2/key-value-stores/…/records/report-backlinko-com.pdf"
}
```

<sub>Real values from a test run on Oct 19, 2026.</sub>

### Pricing

One price per finished report, everything included (keyword, competitor, backlink, SERP, PageSpeed and AI-engine data):

| Apify plan | Price per report |
|---|---|
| Free | **$2.49** |
| Starter (Bronze) | $2.32 |
| Scale (Silver) | $2.16 |
| Business (Gold) and above | **$1.99** |

- **Nothing is charged** if the domain has no search or backlink data, or if the data provider is unavailable.
- Set **Maximum cost per run** to at least the report price; the Actor checks it before collecting any data.
- 50 client reports a month cost about $100-125, versus $100-300/month for typical agency reporting tools, with no contract.

### Use it from an AI agent (MCP)

Add this Actor as a tool in Claude, Cursor, VS Code or any MCP client with one URL:

`https://mcp.apify.com?tools=wrenfield-data/seo-agency-report`

- **Minimal input:** `{"domain": "backlinko.com"}`
- **Cap the bill:** set `maxTotalChargeUsd` on the run (a run option, not an input field) to limit what a run can charge.
- Rows are flat JSON with the fields documented above, so an agent can use them without post-processing.

### FAQ

**Where does the data come from?**
Keyword, traffic, competitor, backlink and SERP data come from a licensed SEO data provider (DataForSEO). Speed scores come from Google PageSpeed Insights. AI answers are live ChatGPT and Google AI Mode answers. Nothing is scraped from Ahrefs or Semrush.

**Is "domain authority" the same as Moz DA or Ahrefs DR?**
No. It is a 0-100 score built from the backlink graph. It is similar in purpose and good for comparing sites with each other, but the numbers are not the same as Moz or Ahrefs.

**How accurate is the traffic estimate?**
It is modelled from rankings and search volume, like in Semrush or Ahrefs. Use it to compare sites and track trends, not as a replacement for Google Analytics.

**Why do AI answers differ from what I see in ChatGPT?**
AI answers change between sessions and locations. The report is a point-in-time sample of 5 buyer questions on each engine. For ongoing tracking, use [AI Search Visibility Tracker](https://apify.com/wrenfield-data/ai-search-visibility-tracker).

**Can I use it from code, Make, Zapier, n8n or an AI agent?**
Yes. Call it via the Apify API or MCP server, then read the `OUTPUT` record for the HTML/PDF links and the dataset for the JSON.

### Related tools

Need more depth on one part of the report? These come from the same developer:

- [SEO Toolkit All-in-One](https://apify.com/wrenfield-data/seo-toolkit): domain overview, ranked keywords, competitors, top pages, backlinks and SERPs as raw rows
- [Competitor Keywords](https://apify.com/wrenfield-data/competitor-keywords): up to 50,000 ranked keywords per domain
- [Keyword Difficulty Checker](https://apify.com/wrenfield-data/keyword-difficulty-checker): KD and search intent for thousands of keywords
- [Keyword Research Tool](https://apify.com/wrenfield-data/keyword-research-tool): keyword ideas with volume, KD and intent in one row
- [Domain Authority & Traffic Checker](https://apify.com/wrenfield-data/domain-authority-traffic-checker): authority and traffic for thousands of domains
- [Bulk PageSpeed Checker](https://apify.com/wrenfield-data/bulk-pagespeed-checker): PageSpeed and Core Web Vitals for hundreds of URLs
- [AI Search Visibility Tracker](https://apify.com/wrenfield-data/ai-search-visibility-tracker): brand mentions and share of voice across 6 AI engines, on a schedule
- [AI Answer Scraper](https://apify.com/wrenfield-data/ai-answer-scraper): full ChatGPT, Perplexity, Gemini and Google AI answers with citations
- [Google Maps Grid Rank Tracker](https://apify.com/wrenfield-data/google-maps-grid-rank-tracker): local rank heatmaps for local-SEO clients

### Feedback and support

Missing a field, hit an error, or need another country or option? Open an issue on the **Issues** tab and include the run ID. We read every issue and reply there.

### Acceptable use

- This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Google, OpenAI, DataForSEO, Ahrefs, Moz or Semrush. Product names are used only to describe compatibility.
- Don't resell the raw data as your own SEO database. Reports you create for your own clients are fine.
- The Actor may not be used from, or for people or organizations in, Russia, Belarus, Cuba, Iran, Syria, Myanmar, North Korea, Crimea or the Russian-occupied territories of Ukraine.
- You are responsible for using the results lawfully.

# Actor input Schema

## `domain` (type: `string`):

The site to report on, e.g. <code>example.com</code>. A full URL also works; the report covers the whole domain including subdomains.

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

Up to 5 competitor domains to benchmark. Leave empty to find the top 5 organic competitors automatically.

## `keywords` (type: `array`):

Up to 20 keywords your client wants to rank for. Each gets search volume, keyword difficulty, intent and (for the first ones) a live Google check of your position, competitors and AI Overview citation. Leave empty to use the site's own top keywords.

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

Search market: a country name ("United Kingdom"), 2-letter code ("GB") or location code (2826).

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

Language name or code, e.g. "English" or "de". Defaults to the country's main language.

## `brandName` (type: `string`):

How the brand is written in AI answers, e.g. "Acme Plumbing". Separate variants with commas. Defaults to the domain name.

## `aiPrompts` (type: `array`):

Up to 5 questions to ask ChatGPT and Google AI Mode, e.g. "best emergency plumber in Austin". Leave empty to generate buyer questions from the site's keywords.

## `aiPromptCount` (type: `integer`):

How many prompts to check on each engine (0 to skip). Included in the report price.

## `includeAiVisibility` (type: `boolean`):

Check whether ChatGPT and Google AI Mode mention or cite the brand.

## `agencyName` (type: `string`):

Shown in the report header and footer (white-label).

## `agencyLogoUrl` (type: `string`):

Public PNG or JPG URL of your logo, shown top-left.

## `accentColor` (type: `string`):

Hex colour for headings and charts, e.g. <code>#0F766E</code>.

## `clientName` (type: `string`):

Shown as "prepared for …" under the title.

## `reportTitle` (type: `string`):

Defaults to "SEO & AI Search Visibility Report".

## `includePdf` (type: `boolean`):

Also save the report as a PDF (the HTML report is always saved).

## `includePageSpeed` (type: `boolean`):

Test the homepage with Google PageSpeed Insights (mobile and desktop).

## `pageSpeedUrl` (type: `string`):

Defaults to the homepage.

## `topKeywords` (type: `integer`):

How many of the site's top ranking keywords (by traffic) to include in the data.

## `serpKeywords` (type: `integer`):

How many keywords to check live on Google (target keywords first).

## Actor input object example

```json
{
  "domain": "backlinko.com",
  "location": "United States",
  "aiPromptCount": 5,
  "includeAiVisibility": true,
  "includePdf": true,
  "includePageSpeed": true,
  "topKeywords": 100,
  "serpKeywords": 5
}
```

# Actor output Schema

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

No description

## `summary` (type: `string`):

No description

## `files` (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 = {
    "domain": "backlinko.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("wrenfield-data/seo-agency-report").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 = { "domain": "backlinko.com" }

# Run the Actor and wait for it to finish
run = client.actor("wrenfield-data/seo-agency-report").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 '{
  "domain": "backlinko.com"
}' |
apify call wrenfield-data/seo-agency-report --silent --output-dataset

```

## MCP server setup

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

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/wyVzLkBtuFzAPnEl1/builds/Zrg4pxTmJZXlo26Q9/openapi.json
