---
title: "Perform a comprehensive SEO audit on a website"
method: POST
path: "/v3/seo-audit"
tags: ["SEO Audit"]
---

# Perform a comprehensive SEO audit on a website

`POST /v3/seo-audit`

Crawls a URL with Firecrawl (Crawl4AI fallback), performs a multi-category SEO audit (Common SEO Issues, Server & Security, Mobile Usability, Advanced SEO), and returns structured results with scores per category. In `multiple` mode (deep crawl) with `async=true`, the route returns 200 immediately and saves results to the database in the background. The route accepts both GET (params in querystring) and POST (params in JSON body).

## Request body

- object
  - `url` string — URL to audit (https:// prefixed automatically)
  - `teamId` string — Team ID (required for async multiple mode)
  - `auditType` 'single' | 'multiple' — Audit mode: single page or deep multi-page crawl
  - `async` 'true' | 'false' — Enable async background processing (multiple mode only)
  - `includeTags` union — HTML tags to include during crawl
    - string
    - string[]
  - `excludeTags` union — HTML tags to exclude during crawl
    - string
    - string[]
  - `urls` string[] — Batch of URLs to audit (alternative to url for Audit Selected). Requires teamId.

## Response `200`

Preview and multi-page requests return JSON. Single-page audits stream status updates followed by the final result as NDJSON.

- object
  - `url` string
  - `title` string
  - `suggestedBrand` string
  - `seoAudit` object — Final SEO audit result for a single page.
    - `overallScore` number
    - `totalTests` number
    - `passedTests` number
    - `timestamp` string, date-time
    - `brandName` string, nullable
    - `categoryScores` object
      - `commonSeoIssues` number
      - `serverAndSecurity` number
      - `mobileUsability` number
      - `advancedSeo` number
      - `content` number
      - `socialTags` number
      - `localization` number
      - `performance` number
      - `links` number
    - `results` object
      - `commonSeoIssues` object — Audit checks keyed by check name. Individual checks may include additional details.
      - `serverAndSecurity` object — Audit checks keyed by check name. Individual checks may include additional details.
      - `mobileUsability` object — Audit checks keyed by check name. Individual checks may include additional details.
      - `advancedSeo` object — Audit checks keyed by check name. Individual checks may include additional details.
      - `content` object — Audit checks keyed by check name. Individual checks may include additional details.
      - `socialTags` object — Audit checks keyed by check name. Individual checks may include additional details.
      - `localization` object — Audit checks keyed by check name. Individual checks may include additional details.
      - `performance` object — Audit checks keyed by check name. Individual checks may include additional details.
      - `links` object — Audit checks keyed by check name. Individual checks may include additional details.
    - `auditSummary` object
      - `score` number
      - `grade` string
      - `status` string
      - `categories` object
        - `commonSeo` object
          - `score` number
          - `status` string
        - `security` object
          - `score` number
          - `status` string
        - `mobile` object
          - `score` number
          - `status` string
        - `advanced` object
          - `score` number
          - `status` string
        - `content` object
          - `score` number
          - `status` string
        - `socialTags` object
          - `score` number
          - `status` string
        - `localization` object
          - `score` number
          - `status` string
        - `performance` object
          - `score` number
          - `status` string
        - `links` object
          - `score` number
          - `status` string
    - `linkDistribution` object
      - `total` number
      - `external` number
      - `internal` number
      - `nofollow` number
      - `noreferrer` number
      - `dofollow` number
      - `noopener` number
      - `anchor` number
    - `metadata` object
      - `metadataFoundCount` number
      - `chart` object
      - `detectedCms` string, nullable
      - `images` object
        - `totalImages` number
        - `imageTypeDistribution` object
        - `imageIssues` object
          - `brokenImages` number
          - `bigImages` number
          - `slowImages` number
          - `missingAltTags` number
  - `screenshot` string, nullable
  - `success` boolean
  - `message` string
  - `totalPages` number
  - `jobId` string, nullable
  - `results` object[], nullable
    - `url` string
    - `score` number
    - `data` object

## Other responses

- `400` — Default Response
- `500` — Default Response

## Changes

- **2026-09-18** `e0163b1c37cb` — 1 breaking, 1 info
  - api path removed without deprecation
  - endpoint added
- **2026-08-14** `c6b2fabd21be` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/snowseo/apis/snowseo-api/changes/v3/seo-audit/post.md)

---

[API](https://skmtc.dev/snowseo/apis/snowseo-api.md) · [All operations](https://skmtc.dev/snowseo/apis/snowseo-api/llms.txt) · [OpenAPI document](https://skmtc.dev/snowseo/apis/snowseo-api/revisions/d578cdf9e232?raw)
