Skip to content
Free Public REST API

SEO Audit API Documentation

A free public API that returns comprehensive SEO analysis for any URL. Get meta tags, Core Web Vitals, schema validation, content scoring, and link data in a single JSON response.

Try the API

Quick Start

Make your first API call in seconds. Send a GET request with the target URL:

curl "https://www.auditme.dev/api/v1/audit?url=https://example.com"

No authentication needed. You will receive a JSON response with a full SEO audit of the specified page.

API Endpoint

GET/api/v1/audit

The audit endpoint accepts a target URL as a query parameter and returns a JSON object containing the complete SEO analysis. The response typically completes within 5—15 seconds depending on the target page size.

All requests are served over HTTPS. No API key is required for basic usage. Rate limits are applied per IP address.

Authentication

No API key is required — send the request and you get JSON back. An optional account API key raises your shared limit from 10 to 30 requests per minute via the x-api-key header:

# Anonymous — 10 requests/min per IP (no key needed)
curl "https://www.auditme.dev/api/v1/audit?url=https://example.com"

# With an account API key — 30 requests/min (optional)
curl -H "x-api-key: YOUR_API_KEY" \
  "https://www.auditme.dev/api/v1/audit?url=https://example.com"

Keys are optional and only affect rate limits — there is no signup requirement and no paid API tier.

Parameters

All parameters are passed as query string parameters on the GET request.

ParameterTypeRequiredDescription
urlstringYesThe URL of the page to audit. Must be a valid, publicly accessible URL.
formatstringNoResponse format. Use "json" (default) for the full audit or "compact" for a trimmed summary.

Response Format

The API returns a JSON object with the following top-level structure:

{
  "ok": true,
  "api_version": "v1",
  "scanned_at": "2026-08-29T10:00:00.000Z",
  "page": {
    "url": "https://example.com",
    "title": "Example Domain",
    "meta_description": "This domain is for use in illustrative examples",
    "h1": "Example Domain",
    "word_count": 68,
    "images": { "total": 5, "missing_alt": 1 },
    "links": { "internal": 3, "external": 1 },
    "og": {
      "title": "Example Domain",
      "description": "This domain is for use in illustrative examples",
      "image": "https://example.com/og.png"
    },
    "canonical": "https://example.com",
    "robots": "index, follow",
    "schema_markup": true,
    "load_time_ms": 312,
    "status_code": 200
  },
  "score": {
    "current": 85,
    "max": 100,
    "percentage": 85
  },
  "recommendations": [
    {
      "type": "warning",
      "category": "Images",
      "title": "One image is missing alt text",
      "description": "Add descriptive alt text so the image is accessible and indexed.",
      "impact": "medium",
      "effort": "medium",
      "confidence": 90,
      "source": "deterministic",
      "current_value": "Image without alt attribute",
      "suggested_value": "<img src=\"hero.jpg\" alt=\"Descriptive alt text\" />"
    }
  ],
  "ai_insights": "Add alt text to images and keep the meta description within 150 characters."
}

Rate Limits

The API enforces a rate limit of 10 requests per minute per IP address. This is generous enough for most monitoring, reporting, and development use cases.

Free Tier

10 req / min per IP

Response Format

JSON (default) or compact

Authentication

None required

Response headers

X-RateLimit-* on every response

Anonymous requests are limited to 10 per minute per IP address. Account API keys share a higher quota — 30 per minute by default, up to 60 when raised by an operator — counted together across REST and MCP. There is no paid API tier.

Error Responses

Errors return a JSON object with an error message. Check the HTTP status code first, then read the message:

400

Missing or invalid url parameter — the target failed URL or DNS validation.

403

The provided API key lacks the audit scope for this endpoint.

429

Rate limit exceeded. The response carries X-RateLimit-* headers and Retry-After.

500

The page could not be fetched or scanned (timeout, DNS failure, or blocked response).

Example — 400 response

{
  "error": "url parameter is required",
  "usage": "GET /api/v1/audit?url=https://example.com&format=json",
  "docs": "https://www.auditme.dev/api-docs"
}

Example — 429 response

{
  "error": "Rate limit exceeded. Try again in a minute.",
  "retry_after_ms": 60000
}

Use Cases

SEO Monitoring

Track SEO health scores over time for your own sites with scheduled API calls.

Competitive Analysis

Compare technical SEO metrics across competitor pages to find optimization gaps.

Client Reporting

Automate SEO audit reports for agency clients without manual tool checks.

CI/CD Integration

Run SEO checks as part of your deployment pipeline to catch regressions before they ship.

Lead Generation

Offer free automated SEO scans to capture leads and qualify prospects.

Code Examples

Use the API from any language that supports HTTP requests. Here are examples in JavaScript and Python:

JavaScript (fetch)

async function auditUrl(url) {
  const response = await fetch(
    `https://www.auditme.dev/api/v1/audit?url=${encodeURIComponent(url)}`
  );

  if (!response.ok) {
    throw new Error(`Audit failed: ${response.status}`);
  }

  const data = await response.json();
  console.log("Overall Score:", data.score.percentage);
  console.log("Page Title:", data.page.title);
  console.log("Load Time:", data.page.load_time_ms + "ms");

  return data;
}

auditUrl("https://example.com");

Python (requests)

import requests
from urllib.parse import urlencode

def audit_url(url):
    params = {"url": url}
    response = requests.get(
        "https://www.auditme.dev/api/v1/audit",
        params=params
    )
    response.raise_for_status()
    data = response.json()

    print(f"Overall Score: {data['score']['percentage']}")
    print(f"Page Title: {data['page']['title']}")
    print(f"Load Time: {data['page']['load_time_ms']}ms")

    return data

audit_url("https://example.com")

cURL

# Basic GET request
curl "https://www.auditme.dev/api/v1/audit?url=https://example.com"

# Compact format (trimmed summary)
curl "https://www.auditme.dev/api/v1/audit?url=https://example.com&format=compact"

# Pretty-print JSON output
curl -s "https://www.auditme.dev/api/v1/audit?url=https://example.com" | jq .

SEO Score Widget

Embed a live SEO score badge on any website. The badge displays the current score and links directly to the audit report.

GET/api/widget
ParameterRequiredDescription
domainYesThe domain to display the score for.
colorNoBrand color as a 6-digit hex code (without #). Default: 10b981.
sizeNoBadge size: small (140x40), medium (200x56), or large (300x80). Default: medium.
formatNoOutput format: svg (default) returns an image, iframe returns an HTML page for embedding.

Embed Examples

Image

<!-- Simple badge -->
<img loading="lazy" src="https://www.auditme.dev/api/widget?domain=example.com" alt="SEO Score" style="border:0" />

<!-- Custom color and size -->
<img loading="lazy" src="https://www.auditme.dev/api/widget?domain=example.com&color=3b82f6&size=large" alt="SEO Score" style="border:0" />

Iframe

<!-- Clickable badge (opens audit report) -->
<iframe
  src="https://www.auditme.dev/api/widget?domain=example.com&format=iframe"
  width="200" height="56" style="border:0"
  loading="lazy" title="SEO Score"
></iframe>

JavaScript

<!-- Live badge, auto-positioned bottom-right. Domain is auto-detected. -->
<script async src="https://www.auditme.dev/widget.js" data-color="10b981"></script>

<!-- Explicit domain + inline placement -->
<div id="auditme-widget"></div>
<script async src="https://www.auditme.dev/widget.js"
        data-domain="example.com" data-color="3b82f6"
        data-position="inline"></script>

<!-- White-label for agencies -->
<script async src="https://www.auditme.dev/widget.js"
        data-domain="example.com" data-brand="Your Agency"
        data-link="https://youragency.com/audit-offer"></script>

MCP Server (Model Context Protocol)

Our MCP endpoint lets ChatGPT, Claude, Cursor, and any MCP-compatible agent run SEO audits directly. Just point your MCP client to this endpoint — the agent can then call our SEO tool from a conversation.

POST/api/mcp

Quick start

1. Discover available tools:

curl -X POST https://www.auditme.dev/api/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "MCP-Protocol-Version: 2026-07-28" \
  -H "Mcp-Method: tools/list" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}}}}'

2. Run an audit:

curl -X POST https://www.auditme.dev/api/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "MCP-Protocol-Version: 2026-07-28" \
  -H "Mcp-Method: tools/call" \
  -H "Mcp-Name: seo_audit" \
  -H "x-api-key: your-api-key" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"seo_audit","arguments":{"url":"https://example.com"},"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}}}}'

MCP Client config

// Claude Desktop / Cursor config
{
  "mcpServers": {
    "auditme": {
      "url": "https://www.auditme.dev/api/mcp"
    }
  }
}
What the agent sees: One tool called seo_audit with a url parameter. The agent calls it, gets back a full JSON audit, and can summarize results in conversation.
The x-api-key header above is optional: omit it to use the shared anonymous limit of 10 requests/minute; send an account API key to raise the limit to 30 requests/minute (the same key works for the REST endpoint). There is no paid API tier.

GEO Visibility API

Checks how visible your brand is in AI-generated search results (ChatGPT, Gemini, Perplexity). Sends 12 real queries to Gemini and measures how often your domain appears in the answers.

POST/api/geo-check
curl -X POST https://www.auditme.dev/api/geo-check \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com" }'

Response

{
  "domain": "example.com",
  "visibilityScore": 67,
  "queries": [
    { "query": "best SEO tools 2026", "found": true, "mentions": 2 },
    { "query": "how to improve site speed", "found": false, "mentions": 0 }
  ]
}

AI Readiness API

Checks whether your site is ready for AI crawlers. Inspects llms.txt, robots.txt AI bot rules, and semantic HTML structure.

POST/api/ai-readiness
curl -X POST https://www.auditme.dev/api/ai-readiness \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com" }'

What it checks

  • llms.txt — Does your site have this file? It tells AI models how to cite you.
  • AI Bot Access — Which AI crawlers (GPTBot, ClaudeBot, PerplexityBot) are blocked in robots.txt.
  • Semantic HTML — Does the page use <main>, <nav>, <article>, <header>, proper heading hierarchy?

Content Gap Analysis API

AI analyzes your page content vs what top-ranking competitors typically cover, then lists missing sections you should add.

POST/api/content-gap
curl -X POST https://www.auditme.dev/api/content-gap \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "title": "Best SEO Tools",
    "wordCount": 1200,
    "headings": ["Introduction", "Features", "Pricing"]
  }'

Response

{
  "gaps": [
    {
      "heading": "Case Studies & Results",
      "priority": "high",
      "estimatedWords": 400,
      "reason": "Top-ranking pages include concrete case studies..."
    }
  ]
}

Auto-Fix Batch API

Send multiple audit issues at once and get AI-generated ready-to-use code fixes for each. Useful for batch workflows — audit → fix → deploy.

POST/api/auto-fix-batch
curl -X POST https://www.auditme.dev/api/auto-fix-batch \
  -H "Content-Type: application/json" \
  -d '{
    "issues": [
      {
        "title": "Missing alt text on images",
        "description": "5 images have no alt attribute",
        "recommendation": "Add descriptive alt text",
        "category": "Accessibility"
      }
    ]
  }'

Response

{
  "fixes": [
    {
      "issueTitle": "Missing alt text on images",
      "fix": "<img src=\"hero.jpg\" alt=\"Description of image\" />",
      "type": "html",
      "difficulty": "easy"
    }
  ]
}

Frequently Asked Questions

Is the SEO audit API free?

Yes. The basic API is completely free with no API key required. You get 10 requests per minute per IP address, which is enough for most use cases.

What data does the API return?

The API returns a comprehensive JSON payload including meta tags analysis, Core Web Vitals scores, schema markup validation, content score, internal and external links, image alt text audit, and overall SEO health rating.

Do I need an API key?

No API key is required for basic usage. Simply send a GET request with the target URL as a query parameter. Rate limits are applied per IP address.

What is the rate limit?

Anonymous requests get 10 per minute per IP address. Account API keys get 30 per minute (up to 60 when raised), shared across the REST API and MCP. There is no paid API tier.

Can I use the API for commercial projects?

Yes. You can use the API results in client reports, SaaS dashboards, and internal tools. We only ask that you do not resell raw API access as a competing service.

Ready to Get Started?

No signup required. Make your first API call right now and get a complete SEO audit of any page in seconds.

Try the API Now