# SEO Audit Tool (`hgservices/seo-audit-tool`) Actor

Audit any website for SEO. Get a 0-100 score, plain-English issues, and how to fix them. One row per page.

- **URL**: https://apify.com/hgservices/seo-audit-tool.md
- **Developed by:** [Harish Garg](https://apify.com/hgservices) (community)
- **Categories:** SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## SEO Audit Tool

**Find out why your website isn't ranking on Google — and exactly what to fix.**

Paste your website address. In a couple of minutes you'll get a clear, easy-to-read report card for every page on your site. No technical knowledge needed.

### What you get

For every page on your website, you get:

- **A score out of 100** and a letter grade from A to F — just like school
- **A list of problems**, ranked by how badly they hurt your Google ranking
- **A clear explanation of each problem** in everyday English
- **A "how to fix it" tip** for each one — copy-paste it to your web person
- **A list of things your page is already doing well** so you know what to keep

You can sort your pages by score to see which ones to fix first. Download everything as an Excel spreadsheet and send it to your developer, agency, or VA.

### Why use it

- **Plain English.** No jargon, no acronyms, no jargon hidden behind more jargon.
- **Find your worst pages in seconds.** Sort by score. Fix the ones with the lowest grades first.
- **Works on any website.** Shopify, WordPress, Wix, Squarespace, Webflow, custom-built — doesn't matter.
- **Nothing to install.** No plugins, no admin password, no code. Just paste your address.
- **Run it monthly.** Schedule it once and get a fresh report every month — no extra clicks.

### How to use it

1. Click the green **Start** button.
2. In the box at the top, paste the address of your website (for example, `yourbusiness.com`).
3. Choose how many pages you want to check. Start with **25** for a quick look at your most important pages, or **100+** for a full review.
4. Click **Save & Start**.
5. Wait a minute or two. Click the **Output** tab to see your results as soon as they're ready.

That's it. The default settings work for almost every website.

### How to read your results

When the audit finishes, click the **Output** tab. You'll see a table with one row per page on your website.

The most useful columns:

- **SEO Score** — a number out of 100. Higher is better.
- **Grade** — a letter from A to F.
- **Page Title** — the headline that shows up in Google for that page.
- **High / Medium / Low** — how many problems were found, by how serious they are.

Click any row to see the full details for that page — including a friendly summary, the full list of problems, and the things the page is doing right.

**Tip:** Sort by score (lowest first) to find your weakest pages. Fix those first for the biggest impact.

### How much does it cost?

It's very cheap to run. A check of 100 pages on your website typically costs only a few cents. You stay in control — set the **Maximum pages** option to cap your spending.

If you have an Apify free account, you can audit small sites without paying anything.

### How long does it take?

- **25 pages**: about 30 seconds
- **100 pages**: 1-2 minutes
- **1,000 pages**: 10-20 minutes

### Frequently asked questions

**Will this break or slow down my website?**
No. It's gentle on your site — slower than a normal visitor browsing around.

**Do I need to give it my password?**
No. It only looks at the public pages anyone can see — the same ones Google looks at.

**Will my SEO get worse from running this?**
No. This tool only reads your site. It doesn't change anything.

**I don't have a developer — can I still use the fixes?**
Yes. The fixes are written in plain English. For things you can't do yourself, paste the fix into a message to your web designer, agency, or freelancer — they'll know exactly what to do.

**My site uses Shopify / WordPress / Wix / Squarespace — will it work?**
Yes. It works on any public website, regardless of how it was built.

**What if the audit can't find some of my pages?**
Most websites are fine. If you have a special setup that hides pages from search engines (which itself is usually an SEO problem!), the audit will tell you.

**How often should I run it?**
Once a month is plenty for most small businesses. Run it again after you make changes to check that you actually fixed the problems.

**Can I share the results with my agency?**
Yes. From the Output tab, click the download button and choose **Excel** or **CSV**. Email it to anyone.

**Where do I report a problem or ask a question?**
Use the **Issues** tab on this page.

# Actor input Schema

## `startUrls` (type: `array`):

Paste your website address here, for example: yourbusiness.com. To check one specific page, paste that page's full address. You can paste more than one if you like — we'll check each.
## `crawlEntireSite` (type: `boolean`):

Leave ON to check every page on your website (up to the limit below). Turn OFF if you only want to check the exact pages you pasted above.
## `maxPages` (type: `integer`):

We'll stop after checking this many pages. Try 25 for a quick look, 100 for a normal small business website, or higher for a big site.
## `sameDomainOnly` (type: `boolean`):

Keep this ON so the audit stays on your website and doesn't wander off to check other people's sites. Almost everyone wants this ON.
## `respectNoindex` (type: `boolean`):

Some pages have a setting that tells Google not to show them in search results. Keep this ON (default) so the audit doesn't waste time looking for more pages through these. Your developer might ask you to turn it OFF in special cases.
## `proxyConfiguration` (type: `object`):

Almost every website works fine without this. Only turn it on if the audit fails with errors — it means the website is blocking the audit and a premium connection can get around that.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://apify.com"
    }
  ],
  "crawlEntireSite": true,
  "maxPages": 25,
  "sameDomainOnly": true,
  "respectNoindex": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
````

# Actor output Schema

## `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 = {
    "startUrls": [
        {
            "url": "https://apify.com"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hgservices/seo-audit-tool").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 = { "startUrls": [{ "url": "https://apify.com" }] }

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

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://apify.com"
    }
  ]
}' |
apify call hgservices/seo-audit-tool --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=hgservices/seo-audit-tool",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SEO Audit Tool",
        "description": "Audit any website for SEO. Get a 0-100 score, plain-English issues, and how to fix them. One row per page.",
        "version": "0.1",
        "x-build-id": "euRb3kFvgNcex94tS"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/hgservices~seo-audit-tool/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-hgservices-seo-audit-tool",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/hgservices~seo-audit-tool/runs": {
            "post": {
                "operationId": "runs-sync-hgservices-seo-audit-tool",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/hgservices~seo-audit-tool/run-sync": {
            "post": {
                "operationId": "run-sync-hgservices-seo-audit-tool",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Your website address",
                        "minItems": 1,
                        "type": "array",
                        "description": "Paste your website address here, for example: yourbusiness.com. To check one specific page, paste that page's full address. You can paste more than one if you like — we'll check each.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "crawlEntireSite": {
                        "title": "Check the whole website",
                        "type": "boolean",
                        "description": "Leave ON to check every page on your website (up to the limit below). Turn OFF if you only want to check the exact pages you pasted above.",
                        "default": true
                    },
                    "maxPages": {
                        "title": "How many pages should we check?",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "We'll stop after checking this many pages. Try 25 for a quick look, 100 for a normal small business website, or higher for a big site.",
                        "default": 25
                    },
                    "sameDomainOnly": {
                        "title": "Only check pages on this website",
                        "type": "boolean",
                        "description": "Keep this ON so the audit stays on your website and doesn't wander off to check other people's sites. Almost everyone wants this ON.",
                        "default": true
                    },
                    "respectNoindex": {
                        "title": "Skip pages that are hidden from Google",
                        "type": "boolean",
                        "description": "Some pages have a setting that tells Google not to show them in search results. Keep this ON (default) so the audit doesn't waste time looking for more pages through these. Your developer might ask you to turn it OFF in special cases.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Use a premium connection",
                        "type": "object",
                        "description": "Almost every website works fine without this. Only turn it on if the audit fails with errors — it means the website is blocking the audit and a premium connection can get around that.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
