# GET /seo/audit: $0.005 per call

On-page SEO audit of a web page: title, meta description, headings, canonical, noindex, HTTPS, mobile viewport, language, Open Graph cards, image alt text, internal links, JSON-LD structured data, thin content, plus the site's robots.txt and sitemap. A 0-100 score, a grade and a list of issues, most important first, each with the fix. Pure code, same answer every time.

- **Price:** $0.005 in USDC, the same on Base, Solana, Polygon, Arbitrum. Failed calls are never charged.
- **Free trial:** yes, 20 free calls a day from Claude, Cursor or any MCP client ([set-up](/mcp/setup)).
- **Tier:** live
- **Answers cached for:** 1 hour(s)
- **Data sources:** the web page itself, its robots.txt and sitemap (our own checks, no AI)
- **Lane:** AI tools ([OpenAPI](/openapi/ai.json))
- **Live health:** [status page](/status)

## Free sample

See an answer for the demo input first, free (no payment, 10 a minute): [https://aayatai.com/sample/seo-audit](/sample/seo-audit). It is a stored real answer when we have one, otherwise an example marked `"kind": "illustrative"`.

```bash
curl "https://aayatai.com/sample/seo-audit"
```

## 1. See the price (free)

Call it without paying: you get `402 Payment Required` and a `PAYMENT-REQUIRED` header with the exact price and where to pay.

```bash
curl -i "https://aayatai.com/seo/audit?url=https%3A%2F%2Fexample.com"
```

## 2. Pay and call (TypeScript)

```bash
npm install @x402/fetch @x402/evm viem
```

```ts
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";

// A wallet used only by your agent, holding a little USDC on Base.
const account = privateKeyToAccount(process.env.WALLET_PRIVATE_KEY as `0x${string}`);
const pay = wrapFetchWithPaymentFromConfig(fetch, {
  schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});

const res = await pay("https://aayatai.com/seo/audit?url=https%3A%2F%2Fexample.com");
console.log(await res.json());
```

## 3. Or as an MCP tool

```ts
// MCP server: https://aayatai.com/mcp (Streamable HTTP). With the x402 MCP client (see /start):
const result = await client.callTool("seo-audit", {"url":"https://example.com"});
```

## Inputs

- `url` **(required)** (string): The page to audit.
- `detail` (string; one of `full`, `brief`; default `full`): brief = key fields only (same price)

Bad inputs are rejected with HTTP 400 before any payment is asked for.

## Example answer

Example only: the shape of an answer, with placeholder addresses and made-up figures. It is not data about any real token or wallet; call the service (or its free sample) for real results.

```json
{
  "url": "https://example.com/",
  "score": 38,
  "grade": "F",
  "issues": [
    {
      "check": "mobile",
      "severity": "high",
      "problem": "No mobile viewport tag.",
      "fix": "Add <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">."
    },
    {
      "check": "meta description",
      "severity": "medium",
      "problem": "No meta description.",
      "fix": "Add <meta name=\"description\"> of 70-160 characters summarising the page."
    }
  ],
  "page": {
    "title": "Example Domain",
    "titleLength": 14,
    "description": null,
    "descriptionLength": 0,
    "h1": [
      "Example Domain"
    ],
    "headings": 1,
    "canonical": null,
    "robotsMeta": null,
    "lang": null,
    "viewport": false,
    "openGraph": {
      "title": false,
      "description": false,
      "image": false
    },
    "twitterCard": null,
    "images": 0,
    "imagesWithoutAlt": 0,
    "links": {
      "internal": 1,
      "external": 0
    },
    "structuredData": [],
    "hreflang": [],
    "words": 16,
    "status": 200,
    "loadMs": 120,
    "htmlKb": 1
  },
  "site": {
    "robotsTxt": false,
    "sitemap": null,
    "blockedByRobotsTxt": false
  }
}
```

## Related

- [POST /invoice/parse](/services/invoice-parse) ($0.02): Parse an invoice or receipt into clean JSON: supplier, VAT/tax ID, invoice number, dates, currency, line items, subtotal, tax, total, amount due and bank detail
- [POST /receipt/scan](/services/receipt-scan) ($0.03): Photo of a receipt or invoice to clean JSON: shop or supplier, VAT/tax ID, date, currency, line items, subtotal, tax, total and payment details, with the maths 
- [POST /document/ask](/services/document-ask) ($0.02): Ask a question about one document (PDF, Word, web page or pasted text) and get a short answer with the exact quotes that support it.
- [POST /text/compare](/services/text-compare) ($0.01): What changed between two versions of a text: terms and conditions, a contract, a privacy policy, docs, a pricing page.
- [POST /text/actions](/services/text-actions) ($0.01): Action items from meeting notes, an email thread, a transcript or a chat log: each task with its owner and due date (relative dates like 'next Friday' turned in
- [POST /entities](/services/entities) ($0.005): Named-entity extraction: the organisations, people, places, products, events, dates, amounts of money and laws in a text or document (URL to a page or PDF), wit
- [POST /keywords](/services/keywords) ($0.003): Key phrases and topics of a text, web page or PDF, for tagging, SEO and search indexes: up to 30 key phrases, most important first, each checked by code to real
- [POST /moderate](/services/moderate) ($0.005): Content moderation for AI agents and apps: is this text safe?

New here? [Getting started in 60 seconds](/start). All services: [Aayat AI](/).