# White Label SEO Audit Report (`white-lion-studio/white-label-seo-audit`) Actor

Crawl any website and get a white label SEO audit report with your own logo, agency name and brand colour. Every issue ranked by real search impact, not by number of warnings. Client-ready HTML plus clean JSON. Five languages.

- **URL**: https://apify.com/white-lion-studio/white-label-seo-audit.md
- **Developed by:** [White Lion Studio](https://apify.com/white-lion-studio) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 page analyseds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

Produce **white label SEO audit reports** carrying your own logo, agency name and brand
colour — one API call per report, no subscription, no seat licence. Point it at a URL, set
a page limit, and a client-ready deliverable comes back in under a minute, together with
clean JSON for the rest of your workflow.

Built for agencies and freelancers who run audits **at volume**: as a lead magnet on your
site, as a recurring monthly deliverable, or as the first step of client onboarding.
Desktop crawlers cannot do that job — you cannot call them from Make or n8n, and they
leave you to build the report yourself.

Most crawlers hand you a wall of warnings and let you work out what matters. This one **ranks every issue by how much it actually moves rankings**, so a `noindex` on a money page never gets buried under two hundred missing image alt attributes.

### What this SEO audit tool checks

The crawler visits each page, respects `robots.txt` by default, and runs a rule engine over the HTML:

- 🚫 **Indexing** — `noindex` tags, duplicate canonicals, 4xx and 5xx errors, redirects, unreachable pages
- 🏷️ **Titles and meta descriptions** — missing, too short, too long, duplicated across the site
- 📑 **Headings** — missing H1, multiple H1s
- 📝 **Content depth** — thin pages, graded by severity: a 40-word page is a different problem from a 280-word page
- 🖼️ **Images** — missing alt text
- 🧩 **Structured data** — missing JSON-LD

Each page gets a score out of 100. Site-wide problems that only show up in aggregate, like duplicate titles across different URLs, are detected separately.

### Why the priority order is the whole point

Every issue carries a weight based on its real search impact, not on how many times it appears. Critical issues cost 25 points, high 10, medium 4, low 1.

On top of that, **the worst issue on a page sets a ceiling on its score**, so a serious problem cannot be averaged away by everything else being fine:

| Worst issue on the page | Score cannot exceed |
|---|---:|
| Critical | 45 |
| High | 75 |
| Medium | 90 |
| Low only | 100 |

The site score is the average of its pages, and it inherits the same ceiling when a
problem affects **at least a quarter of the pages crawled**. A site where every page is
missing its meta description cannot come out looking healthy.

That means a page Google cannot index scores far worse than a page with two hundred images missing alt text — which is exactly right, and is the opposite of what a raw warning count would tell you. **The report opens with the ranking, so the first line your client reads is the thing worth fixing first.**

### White label SEO reports for agencies

Fill in three optional fields — **agency name, logo URL and brand colour** — and the HTML report comes out as yours. No mention of this tool, no watermark, no third-party branding.

The report is a single self-contained HTML file. **Your logo is embedded inside it**, not
linked from your server, so the report renders correctly in email clients, offline, and in
viewers that block external images. Your client opens it in any browser, on any device,
with no login. It includes print styles, so **Ctrl+P → Save as PDF** produces a clean PDF
if that is what your client expects.

#### Is this a full technical SEO audit?

It is a **technical SEO audit of on-page and indexing signals**: it reads the HTML your server returns and checks
structure, indexability, metadata, headings, content depth, images and structured data.

It does **not** measure page speed, Core Web Vitals, mobile usability or your current
rankings. Those need a rendering engine or Search Console data and are a different job.
If speed is what you are auditing, use Lighthouse or PageSpeed Insights alongside this.

### Automated SEO reports for agencies

One run, one finished report. No desktop app to sit in front of, no CSV to clean up, no
template to fill in by hand.

- 📨 **Lead magnet** — put a form on your site and return a branded audit automatically.
- 🔁 **Monthly deliverable** — schedule it and send each client a fresh report.
- 🤝 **Onboarding** — audit a prospect before the first call and turn up with the answers.
- 📦 **In bulk** — loop a list of domains and get one branded report per domain.

Because the report is a single self-contained file with your logo inside it, you can email
it, attach it, or host it. Nothing to install, nothing for your client to log in to.

### Example SEO audit report

These are real reports from real runs against a public test site. Open them in your browser:

- 🇬🇧 [Sample report in English](https://api.apify.com/v2/key-value-stores/ySRMHNYdEAlE8O4oo/records/sample-report-en)
- 🇮🇹 [Sample report in Italian](https://api.apify.com/v2/key-value-stores/ySRMHNYdEAlE8O4oo/records/sample-report-it)
- 🇫🇷 [Sample report in French](https://api.apify.com/v2/key-value-stores/ySRMHNYdEAlE8O4oo/records/sample-report-fr)
- 🇪🇸 [Sample report in Spanish](https://api.apify.com/v2/key-value-stores/ySRMHNYdEAlE8O4oo/records/sample-report-es)

The English and Italian samples are branded, so you can see exactly what a white label
report looks like with an agency logo, name and colour applied.

### What you get back, and in what format

Every run produces **two separate outputs**. This matters if you are wiring it into an automation.

#### 1. The dataset — structured JSON

One item per page, plus one summary item. Available at
`https://api.apify.com/v2/datasets/{datasetId}/items`

```json
{
  "type": "page",
  "url": "https://example.com/services",
  "statusCode": 200,
  "score": 74,
  "title": "Our services",
  "metaDescription": "",
  "canonical": "https://example.com/services",
  "h1": ["Our services"],
  "wordCount": 180,
  "imagesMissingAlt": 4,
  "htmlSizeKb": 62,
  "issues": [
    {
      "id": "missing_meta_description",
      "category": "meta",
      "priority": "high",
      "message": "No meta description",
      "fix": "Write one of 70 to 160 characters. It is what earns the click from Google."
    }
  ]
}
```

`priority` is always one of `critical`, `high`, `medium` or `low`. The `id` field is a
stable identifier you can branch on in your workflow, for example `thin_content`,
`missing_h1`, `duplicate_title` or `noindex`.

The summary item carries `site`, `pagesAnalysed`, `averageScore`, `issuesByPriority` and a
`topIssues` array of aggregated issues, each with the real number of `pagesAffected`.

#### 2. The report — a single HTML file

Stored in the run's key-value store under the key `REPORT`, served as `text/html`:
`https://api.apify.com/v2/key-value-stores/{keyValueStoreId}/records/REPORT`

**That URL opens in a browser with no token and no login**, so you can email it straight to a client.

### An SEO reporting tool you can call from an API

There is no separate SEO audit API to learn: the Actor **is** the endpoint, and you do not
have to assemble any URLs yourself. When a run finishes, its API response carries an
`output` object with both links already built:

```json
"output": {
  "report": "https://api.apify.com/v2/key-value-stores/<store-id>/records/REPORT",
  "auditData": "https://api.apify.com/v2/datasets/<dataset-id>/items"
}
```

1. **Run the Actor** with your input.
2. **Take `output.report`** for the branded report, or `output.auditData` for the JSON.

#### Using this website SEO checker with Make and n8n

In **Make.com** and **n8n**, the run step hands you the finished run. Map `output.report` into an email or a Slack message and you have an automated audit pipeline, with nothing to build in between. The Actor is also exposed through Apify's MCP server, so an AI agent can call it directly.

⚠️ Note: storage from an unnamed run expires after the platform's retention period. If you need a report to stay online permanently, copy it to a named key-value store or to your own storage.

### Languages

The full report — issues, recommendations, headings and priority labels — is generated in the language you choose: **English (default), Spanish, French, German and Italian**. Language affects the wording only. Scores and priorities are identical across all of them.

### How much does an SEO audit cost?

This Actor uses **pay per event**, so you pay for what you actually analyse. There is no subscription and no minimum commitment. The exact prices are on the **Pricing** tab of this page.

Two things protect you from surprises:

- **You set the page limit.** You know the maximum before you start.
- **You can set a maximum cost per run.** The platform enforces it. If the cap is reached mid-crawl, the Actor stops cleanly and still produces a report with everything analysed up to that point.

The branded report is optional. Run a cheap first pass, look at the numbers, and only then ask for the deliverable.

### Frequently asked questions

#### Is it safe and legal to audit a site with this tool?

Audit sites you own or have permission to audit. The crawler respects `robots.txt` by default and only reads publicly served HTML — the same thing any search engine does.

#### Does it render JavaScript?

No. It reads the HTML the server returns, which is what a crawler indexes first. Sites that render their entire content client-side will report thin content, and that is a finding worth knowing about, not a bug.

#### Can I audit subdomains too?

Yes. Tick **Include subdomains** and the crawl follows `blog.yoursite.com` and similar. It increases the page count, and therefore the cost.

#### Why does my page score lower than on other tools?

Because scoring is weighted by search impact. Thin content and missing meta descriptions are penalised hard here, and cosmetic warnings are penalised lightly. The goal is a report your client can act on, not a reassuring number.

#### Something is wrong or missing

Open an issue on the **Issues** tab of this Actor. Feature requests for additional checks or languages are welcome.

# Actor input Schema

## `urlInicial` (type: `string`):

Where the crawl starts. Audit sites you own or have permission to audit. Defaults to example.com so the Actor always has something valid to run against.

## `maxPaginas` (type: `integer`):

Hard limit on how many pages are analysed. You are charged per page analysed, so this is also your cost ceiling.

## `respetarRobots` (type: `boolean`):

Recommended. Leave this on unless you own the site and know what you are doing.

## `incluirSubdominios` (type: `boolean`):

Also crawl subdomains such as blog.yoursite.com or shop.yoursite.com. This increases the page count, and therefore the cost.

## `idioma` (type: `string`):

Language of the WHOLE report: issues, recommendations and headings. Scores are identical in every language.

## `nombreAgencia` (type: `string`):

Shown on the report as the author. Leave empty for an unbranded report.

## `logoUrl` (type: `string`):

Displayed at the top of the report. Must be a publicly accessible image.

## `colorMarca` (type: `string`):

Hex colour used for links and accents in the report.

## Actor input object example

```json
{
  "urlInicial": "https://example.com",
  "maxPaginas": 100,
  "respetarRobots": true,
  "incluirSubdominios": false,
  "idioma": "en",
  "colorMarca": "#175cd3"
}
```

# Actor output Schema

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

Client-ready HTML report carrying your agency logo, name and brand colour. Self-contained: the logo is embedded, so it renders anywhere, including offline and in email clients. The URL opens with no login, so you can send it straight to a client.

## `auditData` (type: `string`):

One JSON item per page analysed, plus a summary item with the site score and the issues ranked by search impact. Use this to drive your own automation.

# 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 = {
    "urlInicial": "https://example.com",
    "colorMarca": "#175cd3"
};

// Run the Actor and wait for it to finish
const run = await client.actor("white-lion-studio/white-label-seo-audit").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 = {
    "urlInicial": "https://example.com",
    "colorMarca": "#175cd3",
}

# Run the Actor and wait for it to finish
run = client.actor("white-lion-studio/white-label-seo-audit").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 '{
  "urlInicial": "https://example.com",
  "colorMarca": "#175cd3"
}' |
apify call white-lion-studio/white-label-seo-audit --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,white-lion-studio/white-label-seo-audit"
        }
    }
}
```

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/ruAaFCMnJFrLrZ93E/builds/CyGDhB6dWfQ6gs93o/openapi.json
