Reference

Jump to List CampaignsList Campaigns

Price: 0 API units per request

This request returns your Site Audit campaigns, one page at a time. Use statuses to filter campaigns by state, and order_by and direction to sort them.

All timestamps in the response are ISO 8601 date-times in UTC, to whole seconds (YYYY-MM-DDTHH:MM:SSZ).

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns

Query parameters

offset

Number of campaigns to skip before returning results. Defaults to 0.

Value/Type: integer

limit

Maximum number of campaigns to return. Defaults to 10, maximum 100; a larger value is refused.

Value/Type: integer

statuses

Return only campaigns in these states. Omit to return all campaigns.

- IN_PROGRESS: An audit is running, at any stage. - FINISHED: The audit finished successfully. - ERROR: The audit failed.

Value/Type: string[]

order_by

Field to sort campaigns by. Defaults to LAST_AUDIT_AT. Ties are broken by campaign ID, so paging is stable.

- LAST_AUDIT_AT: When the last audit finished, successfully or not. Campaigns that were never audited sort as the oldest.

Value/Type: string

direction

Sort direction. Defaults to DESC. Supported values: ASC, DESC.

Value/Type: string

Response Parameters

data

Campaigns on the requested page, in the requested order.

Value/Type: array

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns?statuses=FINISHED,ERROR&order_by=LAST_AUDIT_AT&direction=DESC&limit=10&offset=0'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true,
      "statuses": [
          "FINISHED",
          "ERROR"
      ],
      "order_by": "LAST_AUDIT_AT",
      "direction": "DESC",
      "limit": 10,
      "offset": 0,
      "total_count": 2
  },
  "data": [
      {
          "campaign_id": 1234567,
          "name": "Main website",
          "domain": "example.com",
          "status": "FINISHED",
          "last_success_audit_report_id": "6710b2c4e8f1a93d5c2e7a14",
          "last_audit_at": "2024-03-15T10:22:05Z",
          "last_failed_audit_at": "2024-02-08T07:41:19Z",
          "next_audit_at": "2024-03-22T10:00:00Z"
      },
      {
          "campaign_id": 1234589,
          "name": "Blog",
          "domain": "blog.example.com",
          "status": "FINISHED",
          "last_success_audit_report_id": "670c9e7f1b3a5d8e2c4f6a91",
          "last_audit_at": "2024-03-11T18:05:47Z"
      }
  ]
}

Jump to Create CampaignCreate Campaign

Price: 0 API units per request

This request sets up Site Audit for a project by creating its campaign with the initial crawl settings. A successful call returns 201 Created.

If the campaign uses the list_of_urls crawl source, add the seed URLs next with the Update Crawl URLs endpoint. Crawl credentials are set separately: a site login with the Update Basic Auth endpoint, and a bot-protection signature with the Update Web Bot Auth endpoint.

Jump to EndpointEndpoint

POSThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns

Query parameters

project_idRequired

ID of the project to create the campaign for. The new campaign’s campaign_id is this project ID. Learn how to get your project ID ›

Value/Type: integer

Body parameters

settings

Crawl settings the campaign starts with.

Value/Type: object

Response Parameters

data

The created campaign with its settings as stored.

Value/Type: object

meta

Value/Type: object

Request example
curl -L -X POST 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns?project_id=1234567'
  -H 'Authorization: Apikey YOUR_API_KEY'
  -H 'Content-Type: application/json'
  -d '{
    "settings": {
      "domain": "example.com",
      "page_limit": 500,
      "scheme": "HTTPS",
      "crawl_source": {
        "website": {}
      },
      "schedule": "WEEKLY_MONDAY",
      "user_agent_type": "SITE_AUDIT_DESKTOP",
      "js_rendering": "DISABLED",
      "crawl_subdomains": false,
      "email_notification_enabled": true,
      "excluded_issues": ["URL_UNDERSCORES"],
      "removed_parameters": ["utm_source", "utm_medium"]
    }
  }'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 201,
      "success": true
  },
  "data": {
      "campaign_id": 1234567,
      "name": "Main website",
      "initial_audit_url": "https://example.com",
      "settings": {
          "domain": "example.com",
          "page_limit": 500,
          "scheme": "HTTPS",
          "crawl_source": {
              "website": {}
          },
          "schedule": "WEEKLY_MONDAY",
          "user_agent_type": "SITE_AUDIT_DESKTOP",
          "js_rendering": "DISABLED",
          "crawl_subdomains": false,
          "email_notification_enabled": true,
          "excluded_issues": [
              "URL_UNDERSCORES"
          ],
          "removed_parameters": [
              "utm_source",
              "utm_medium"
          ]
      },
      "basic_auth_configured": false,
      "web_bot_auth_configured": false
  }
}

Jump to Get CampaignGet Campaign

Price: 0 API units per request

This request returns a campaign’s metadata: its identity, current state, last successful audit report, and audit schedule. To get the campaign’s crawl configuration, use the Get Campaign Settings endpoint.

All timestamps in the response are ISO 8601 date-times in UTC, to whole seconds (YYYY-MM-DDTHH:MM:SSZ).

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/overview

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Response Parameters

data

The campaign metadata.

Value/Type: object

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/overview'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {
      "campaign_id": 1234567,
      "name": "Main website",
      "domain": "example.com",
      "status": "FINISHED",
      "last_success_audit_report_id": "6710b2c4e8f1a93d5c2e7a14",
      "last_audit_at": "2024-03-15T10:22:05Z",
      "last_failed_audit_at": "2024-02-08T07:41:19Z",
      "next_audit_at": "2024-03-22T10:00:00Z"
  }
}

Jump to Get Campaign SettingsGet Campaign Settings

Price: 0 API units per request

This request returns the crawl settings of a Site Audit campaign. The response does not include crawl credentials, only whether HTTP basic auth and Web Bot Auth are configured.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/settings

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Response Parameters

data

Campaign crawl settings as stored.

Value/Type: object

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/settings'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {
      "campaign_id": 1234567,
      "name": "Main website",
      "initial_audit_url": "https://example.com/",
      "settings": {
          "domain": "example.com",
          "scheme": "HTTPS",
          "crawl_source": {
              "website": {}
          },
          "schedule": "WEEKLY_MONDAY",
          "user_agent_type": "SITE_AUDIT_DESKTOP",
          "js_rendering": "DISABLED",
          "page_limit": 1000,
          "crawl_subdomains": false,
          "email_notification_enabled": true,
          "excluded_issues": ["FLASH_YES", "FRAME_YES"],
          "removed_parameters": ["utm_source", "sessionid"],
          "path_masks": {
              "allow": ["/blog/"],
              "disallow": ["/admin/"]
          }
      },
      "basic_auth_configured": false,
      "web_bot_auth_configured": true
  }
}

Jump to Update Campaign SettingsUpdate Campaign Settings

Price: 0 API units per request

This request replaces the crawl settings of a Site Audit campaign in full. Any settings field you omit, or send with its default or empty value, is reset to its default. domain, page_limit, and user_agent_type are required, so a request without them is rejected rather than resetting them. Crawl credentials are not part of the settings, so a replace leaves them untouched.

To update only some fields, use the Patch Campaign Settings endpoint.

Jump to EndpointEndpoint

PUThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/settings

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Body parameters

settings

Full crawl settings. They replace the stored settings as a whole.

Value/Type: object

Response Parameters

data

Campaign crawl settings as stored.

Value/Type: object

meta

Value/Type: object

Request example
curl -L -X PUT 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/settings'
  -H 'Authorization: Apikey YOUR_API_KEY'
  -H 'Content-Type: application/json'
  -d '{
    "settings": {
      "domain": "example.com",
      "scheme": "HTTPS",
      "crawl_source": {
        "website": {}
      },
      "schedule": "WEEKLY_MONDAY",
      "user_agent_type": "SITE_AUDIT_DESKTOP",
      "js_rendering": "DISABLED",
      "page_limit": 1000,
      "crawl_subdomains": false,
      "email_notification_enabled": true,
      "excluded_issues": ["FLASH_YES", "FRAME_YES"],
      "removed_parameters": ["utm_source", "sessionid"],
      "path_masks": {
        "allow": ["/blog/"],
        "disallow": ["/admin/"]
      }
    }
  }'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {
      "campaign_id": 1234567,
      "name": "Main website",
      "initial_audit_url": "https://example.com/",
      "settings": {
          "domain": "example.com",
          "scheme": "HTTPS",
          "crawl_source": {
              "website": {}
          },
          "schedule": "WEEKLY_MONDAY",
          "user_agent_type": "SITE_AUDIT_DESKTOP",
          "js_rendering": "DISABLED",
          "page_limit": 1000,
          "crawl_subdomains": false,
          "email_notification_enabled": true,
          "excluded_issues": ["FLASH_YES", "FRAME_YES"],
          "removed_parameters": ["utm_source", "sessionid"],
          "path_masks": {
              "allow": ["/blog/"],
              "disallow": ["/admin/"]
          }
      },
      "basic_auth_configured": false,
      "web_bot_auth_configured": true
  }
}

Jump to Patch Campaign SettingsPatch Campaign Settings

Price: 0 API units per request

This request updates selected crawl settings of a Site Audit campaign. Only the fields listed in update_mask are applied; the other stored settings stay unchanged.

A listed field is written exactly as sent: to clear it, send its default or empty value. Array and object fields (such as excluded_issues or path_masks) are replaced as a whole, not merged.

To replace all settings at once, use the Update Campaign Settings endpoint.

Jump to EndpointEndpoint

PATCHhttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/settings

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Query parameters

update_maskRequired

Names of top-level settings fields to apply, such as domain, page_limit, schedule, or excluded_issues. Pass them comma-separated (?update_mask=page_limit,schedule) or as a repeated parameter (?update_mask=page_limit&update_mask=schedule). An unknown field name, a path into a nested object (such as path_masks.allow), or an empty mask is rejected.

Example: page_limit,schedule

Value/Type: string[]

Body parameters

settings

Crawl settings carrying the new values for the fields listed in update_mask. Fields not listed there are ignored.

Value/Type: object

Response Parameters

data

Campaign crawl settings as stored.

Value/Type: object

meta

Value/Type: object

Request example
curl -L -X PATCH 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/settings?update_mask=page_limit,schedule'
  -H 'Authorization: Apikey YOUR_API_KEY'
  -H 'Content-Type: application/json'
  -d '{
    "settings": {
      "page_limit": 5000,
      "schedule": "DAILY"
    }
  }'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {
      "campaign_id": 1234567,
      "name": "Main website",
      "initial_audit_url": "https://example.com/",
      "settings": {
          "domain": "example.com",
          "scheme": "HTTPS",
          "crawl_source": {
              "website": {}
          },
          "schedule": "DAILY",
          "user_agent_type": "SITE_AUDIT_DESKTOP",
          "js_rendering": "DISABLED",
          "page_limit": 5000,
          "crawl_subdomains": false,
          "email_notification_enabled": true,
          "excluded_issues": ["FLASH_YES", "FRAME_YES"],
          "removed_parameters": ["utm_source", "sessionid"],
          "path_masks": {
              "allow": ["/blog/"],
              "disallow": ["/admin/"]
          }
      },
      "basic_auth_configured": false,
      "web_bot_auth_configured": true
  }
}

Jump to Update Basic AuthUpdate Basic Auth

Price: 0 API units per request

This request sets the login and password the crawler uses to access a site behind an HTTP basic authentication prompt (RFC 7617), such as a staging environment. The new credentials replace any stored ones in whole and apply from the next crawl.

The API never returns stored credentials. The Get Campaign Settings endpoint reports only whether basic auth is configured. Basic auth and web bot auth are independent and can be combined.

A successful call returns 204 No Content with no response body.

Jump to EndpointEndpoint

PUThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/settings/basic-auth

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Body parameters

basic_auth Required

Credentials to store. Both fields must be non-empty. To stop sending credentials, use the Delete Basic Auth endpoint.

Value/Type: object

Request example
curl -L -X PUT 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/settings/basic-auth'
  -H 'Authorization: Apikey YOUR_API_KEY'
  -H 'Content-Type: application/json'
  -d '{"basic_auth": {"login": "YOUR_LOGIN", "password": "YOUR_PASSWORD"}}'

Jump to Delete Basic AuthDelete Basic Auth

Price: 0 API units per request

This request removes the campaign’s stored basic auth credentials. After that, the crawler reaches only publicly accessible content. The request is idempotent and does not affect web bot auth settings.

A successful call returns 204 No Content with no response body.

Jump to EndpointEndpoint

DELETEhttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/settings/basic-auth

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Request example
curl -L -X DELETE 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/settings/basic-auth'
  -H 'Authorization: Apikey YOUR_API_KEY'

Jump to Update Web Bot AuthUpdate Web Bot Auth

Price: 0 API units per request

This request sets the Web Bot Auth signature the crawler presents to a site’s bot protection, so the crawler is identified as the bot it claims to be and is not blocked. Web Bot Auth uses HTTP Message Signatures (RFC 9421) plus a Signature-Agent header that names the bot. It is an identity proof, not a login: unlike basic auth, it does not unlock protected content.

The new signature replaces any stored one in whole and applies from the next crawl. All three headers are sent on every crawler request. The signature expires, so refresh it before it does.

The API never returns stored signatures. The Get Campaign Settings endpoint reports only whether web bot auth is configured. Web bot auth and basic auth are independent and can be combined.

A successful call returns 204 No Content with no response body.

Jump to EndpointEndpoint

PUThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/settings/web-bot-auth

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Body parameters

web_bot_auth Required

Signature headers to store. All three fields must be non-empty. To stop sending them, use the Delete Web Bot Auth endpoint.

Value/Type: object

Request example
curl -L -X PUT 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/settings/web-bot-auth'
  -H 'Authorization: Apikey YOUR_API_KEY'
  -H 'Content-Type: application/json'
  -d '{"web_bot_auth": {"signature_agent": "YOUR_SIGNATURE_AGENT", "signature_input": "YOUR_SIGNATURE_INPUT", "signature": "YOUR_SIGNATURE"}}'

Jump to Delete Web Bot AuthDelete Web Bot Auth

Price: 0 API units per request

This request removes the campaign’s stored Web Bot Auth signature. After that, the crawler crawls as unverified traffic. The request is idempotent and does not affect basic auth settings.

A successful call returns 204 No Content with no response body.

Jump to EndpointEndpoint

DELETEhttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/settings/web-bot-auth

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Request example
curl -L -X DELETE 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/settings/web-bot-auth'
  -H 'Authorization: Apikey YOUR_API_KEY'

Jump to List Crawl URLsList Crawl URLs

Price: 0 API units per request

This request returns the seed URLs configured for a campaign, one page at a time. The crawler uses this list only when the campaign’s crawl source is list_of_urls. To replace the list, use the Update Crawl URLs endpoint.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/settings/crawl-urls

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Query parameters

offset

Number of URLs to skip before returning results. Defaults to 0.

Value/Type: integer

limit

Maximum number of URLs to return. Defaults to 100, maximum 1000.

Value/Type: integer

Response Parameters

data

Seed URLs configured for the campaign, on the requested page.

Value/Type: string[]

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/settings/crawl-urls?limit=100&offset=0'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true,
      "limit": 100,
      "offset": 0,
      "total_count": 3
  },
  "data": [
      "https://example.com/",
      "https://example.com/pricing",
      "https://example.com/blog/site-audit-checklist"
  ]
}

Jump to Update Crawl URLsUpdate Crawl URLs

Price: 0 API units per request

This request replaces a campaign’s seed URL list in full. The campaign’s crawl source must already be list_of_urls; otherwise the request is refused. To update the crawl source, use the Update Campaign Settings or Patch Campaign Settings endpoint.

Duplicate URLs are dropped. If any URL can’t be crawled, or the list is longer than your subscription allows, the whole request is refused.

Jump to EndpointEndpoint

PUThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/settings/crawl-urls

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Body parameters

urlsRequired

New seed URL list, from 1 to 100,000 entries. Each entry is an absolute http or https URL on the campaign domain or one of its subdomains, or a path starting with /.

Example: ["https://example.com/", "/pricing"]

Value/Type: string[]

Response Parameters

data

The stored seed URL list after the replacement.

Value/Type: object

meta

Value/Type: object

Request example
curl -L -X PUT 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/settings/crawl-urls'
  -H 'Authorization: Apikey YOUR_API_KEY'
  -H 'Content-Type: application/json'
  -d '{
    "urls": [
      "https://example.com/",
      "https://example.com/pricing",
      "/blog/site-audit-checklist",
      "https://example.com/pricing"
    ]
  }'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {
      "campaign_id": 1234567,
      "total_count": 3,
      "limit": 500
  }
}

Jump to Start AuditStart Audit

Price: 100 API units per request

This request starts a new audit for the campaign. The campaign must have crawl settings configured. If the crawl source is list_of_urls, add at least one URL with the Update Crawl URLs endpoint first; otherwise the request is refused.

The audit runs asynchronously: the request returns 202 Accepted with the ID of the future audit report right away. To track the audit, poll the Get Audit Progress endpoint until its stage is FINISHED or ERROR.

Jump to EndpointEndpoint

POSThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/start

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Response Parameters

data

The started audit.

Value/Type: object

meta

Value/Type: object

Request example
curl -L -X POST 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/start'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 202,
      "success": true
  },
  "data": {
      "audit_report_id": "6711d8a2c5e94b7f3a1e0c63"
  }
}

Jump to Get Audit ProgressGet Audit Progress

Price: 0 API units per request

This request returns the stage and crawl counters of the campaign’s current audit. When no audit is running, it returns the final values of the latest audit.

After you start an audit with the Start Audit endpoint, poll this endpoint until stage is FINISHED or ERROR.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/progress

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Response Parameters

data

Progress of the current or latest audit.

Value/Type: object

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/progress'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {
      "campaign_id": 1234567,
      "pages_crawled": 1250,
      "pages_limit": 20000,
      "precrawl_status": "NO_ERRORS",
      "resources_crawled": 3480,
      "resources_total": 9120,
      "stage": "RUNNING",
      "stoppable": true
  }
}

Jump to Stop AuditStop Audit

Price: 0 API units per request

This request gracefully stops the campaign’s in-progress audit. Pages crawled so far are kept. To discard the partial results instead, use the Abort Audit endpoint.

The stoppable field of the Get Audit Progress endpoint shows whether the in-progress audit can be stopped now.

A successful call returns 204 No Content with no response body.

Jump to EndpointEndpoint

POSThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/stop

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Request example
curl -L -X POST 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/stop'
  -H 'Authorization: Apikey YOUR_API_KEY'

Jump to Abort AuditAbort Audit

Price: 0 API units per request

This request aborts the campaign’s in-progress audit and discards its partial results. To stop the audit and keep the pages crawled so far, use the Stop Audit endpoint instead.

A successful call returns 204 No Content with no response body.

Jump to EndpointEndpoint

POSThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/abort

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Request example
curl -L -X POST 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/abort'
  -H 'Authorization: Apikey YOUR_API_KEY'

Jump to List Audit ReportsList Audit Reports

Price: 10000 API units per line

This request returns a campaign’s audit reports, newest first by default. Only successfully finished audits produce a report: an audit that is still running or that failed is not listed. To follow a running audit, use the Get Audit Progress endpoint.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/audit-reports

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Query parameters

offset

Number of audit reports to skip before returning results. Defaults to 0.

Value/Type: integer

limit

Maximum number of audit reports to return. Defaults to 10, maximum 100.

Value/Type: integer

order_by

Field to sort by. Supported value: FINISH_DATE (default), the date the audit finished.

Value/Type: string

direction

Sort direction: ASC or DESC. Defaults to DESC (newest first).

Value/Type: string

Response Parameters

data

Audit reports on the requested page.

Value/Type: array

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/audit-reports?offset=0&limit=10&order_by=FINISH_DATE&direction=DESC'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true,
      "offset": 0,
      "limit": 10,
      "order_by": "FINISH_DATE",
      "direction": "DESC",
      "total_count": 2
  },
  "data": [
      {
          "audit_report_id": "6710b2c4e8f1a93d5c2e7a14",
          "start_date": "2026-10-12T08:55:03Z",
          "finish_date": "2026-10-12T09:41:27Z",
          "pages_crawled": 1250,
          "pages_limit": 5000,
          "is_pages_limit_reached": false,
          "settings_changed": false,
          "user_agent_type": "SITE_AUDIT_DESKTOP",
          "js_rendering": "DISABLED",
          "total_score": { "value": 87, "delta": 2 },
          "ai_search_score": { "value": 74, "delta": 1 },
          "thematic_scores": {
              "crawlability": { "value": 91, "delta": 1 },
              "https": { "value": 96, "delta": 0 },
              "int_seo": { "value": 88, "delta": 0 },
              "linking": { "value": 82, "delta": 3 },
              "markups": { "value": 70, "delta": -2 },
              "performance": { "value": 79, "delta": 4 }
          },
          "status_code_groups": [
              { "group": "SUCCESS", "count": 1180 },
              { "group": "REDIRECTION", "count": 58 },
              { "group": "CLIENT_ERROR", "count": 12 }
          ],
          "errors": [
              { "issue_type": "HTTP_4XX", "count": 12, "delta": -3, "checks": 1250 },
              { "issue_type": "TITLE_DUPLICATE", "count": 8, "delta": 0, "checks": 1180 }
          ],
          "warnings": [
              { "issue_type": "IMG_ALT", "count": 143, "delta": 5, "checks": 1180 }
          ],
          "notices": [
              { "issue_type": "PAGE_CRAWL_DEPTH", "count": 37, "delta": 2, "checks": 1250 }
          ],
          "new_issues": [
              { "issue_type": "IMG_ALT", "count": 5 }
          ],
          "fixed_issues": [
              { "issue_type": "HTTP_4XX", "count": 3 }
          ],
          "hidden_issues": [
              { "issue_type": "LINKS_MANY", "count": 4 }
          ],
          "excluded_issues": [],
          "top_issues": ["IMG_ALT", "HTTP_4XX", "TITLE_DUPLICATE"],
          "top_insights": ["NO_LLMS_TXT"],
          "blocked_page_stats": {
              "ai_search": [
                  { "agent": "GOOGLE_EXTENDED", "count": 1250 },
                  { "agent": "CHATGPT_USER", "count": 40 }
              ]
          }
      },
      {
          "audit_report_id": "670ef1a3d2b84c6e9a5f3b20",
          "start_date": "2026-10-05T08:54:47Z",
          "finish_date": "2026-10-05T09:38:12Z",
          "pages_crawled": 1238,
          "pages_limit": 5000,
          "is_pages_limit_reached": false,
          "settings_changed": true,
          "user_agent_type": "SITE_AUDIT_DESKTOP",
          "js_rendering": "DISABLED",
          "total_score": { "value": 85, "delta": -1 },
          "ai_search_score": { "value": 73, "delta": 0 },
          "thematic_scores": {
              "crawlability": { "value": 90, "delta": 0 },
              "https": { "value": 96, "delta": 0 },
              "int_seo": { "value": 88, "delta": 1 },
              "linking": { "value": 79, "delta": -1 },
              "markups": { "value": 72, "delta": 0 },
              "performance": { "value": 75, "delta": -2 }
          },
          "status_code_groups": [
              { "group": "SUCCESS", "count": 1165 },
              { "group": "REDIRECTION", "count": 58 },
              { "group": "CLIENT_ERROR", "count": 15 }
          ],
          "errors": [
              { "issue_type": "HTTP_4XX", "count": 15, "delta": 2, "checks": 1238 },
              { "issue_type": "TITLE_DUPLICATE", "count": 8, "delta": 0, "checks": 1165 }
          ],
          "warnings": [
              { "issue_type": "IMG_ALT", "count": 138, "delta": 0, "checks": 1165 }
          ],
          "notices": [
              { "issue_type": "PAGE_CRAWL_DEPTH", "count": 35, "delta": 1, "checks": 1238 }
          ],
          "new_issues": [
              { "issue_type": "HTTP_4XX", "count": 2 }
          ],
          "fixed_issues": [],
          "hidden_issues": [
              { "issue_type": "LINKS_MANY", "count": 4 }
          ],
          "excluded_issues": [],
          "top_issues": ["IMG_ALT", "HTTP_4XX", "TITLE_DUPLICATE"],
          "top_insights": ["NO_LLMS_TXT"],
          "blocked_page_stats": {
              "ai_search": [
                  { "agent": "GOOGLE_EXTENDED", "count": 1238 }
              ]
          }
      }
  ]
}

Jump to Get Audit ReportGet Audit Report

Price: 10000 API units per request

This request returns the full details of a single audit report. It returns a not-found error when the ID belongs to an audit that has not finished successfully, or to a report already removed by data retention.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/audit-reports/:audit_report_id/overview

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

audit_report_idRequired

Audit report ID, as returned by the List Audit Reports endpoint.

Value/Type: string

Response Parameters

data

The requested audit report.

Value/Type: object

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/audit-reports/6710b2c4e8f1a93d5c2e7a14/overview'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {
      "audit_report_id": "6710b2c4e8f1a93d5c2e7a14",
      "start_date": "2026-10-12T08:55:03Z",
      "finish_date": "2026-10-12T09:41:27Z",
      "pages_crawled": 1250,
      "pages_limit": 5000,
      "is_pages_limit_reached": false,
      "settings_changed": false,
      "user_agent_type": "SITE_AUDIT_DESKTOP",
      "js_rendering": "DISABLED",
      "total_score": { "value": 87, "delta": 2 },
      "ai_search_score": { "value": 74, "delta": 1 },
      "thematic_scores": {
          "crawlability": { "value": 91, "delta": 1 },
          "https": { "value": 96, "delta": 0 },
          "int_seo": { "value": 88, "delta": 0 },
          "linking": { "value": 82, "delta": 3 },
          "markups": { "value": 70, "delta": -2 },
          "performance": { "value": 79, "delta": 4 }
      },
      "status_code_groups": [
          { "group": "SUCCESS", "count": 1180 },
          { "group": "REDIRECTION", "count": 58 },
          { "group": "CLIENT_ERROR", "count": 12 }
      ],
      "errors": [
          { "issue_type": "HTTP_4XX", "count": 12, "delta": -3, "checks": 1250 },
          { "issue_type": "TITLE_DUPLICATE", "count": 8, "delta": 0, "checks": 1180 }
      ],
      "warnings": [
          { "issue_type": "IMG_ALT", "count": 143, "delta": 5, "checks": 1180 }
      ],
      "notices": [
          { "issue_type": "PAGE_CRAWL_DEPTH", "count": 37, "delta": 2, "checks": 1250 }
      ],
      "new_issues": [
          { "issue_type": "IMG_ALT", "count": 5 }
      ],
      "fixed_issues": [
          { "issue_type": "HTTP_4XX", "count": 3 }
      ],
      "hidden_issues": [
          { "issue_type": "LINKS_MANY", "count": 4 }
      ],
      "excluded_issues": [],
      "top_issues": ["IMG_ALT", "HTTP_4XX", "TITLE_DUPLICATE"],
      "top_insights": ["NO_LLMS_TXT"],
      "blocked_page_stats": {
          "ai_search": [
              { "agent": "GOOGLE_EXTENDED", "count": 1250 },
              { "agent": "CHATGPT_USER", "count": 40 }
          ]
      }
  }
}

Jump to List Issue ReportsList Issue Reports

Price: 100 API units per line

Each issue occurrence returned in the issues_preview lists counts as one line.

This request returns issue reports from the campaign’s latest successful audit: one report per issue type available to you, with a preview of its occurrences. Reports are sorted by severity (most severe first), then by number of occurrences, descending. Only issue types with occurrences matching the requested visibility are returned.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/issues

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Query parameters

visibility

Occurrences to return, by visibility. Defaults to VISIBLE only; pass VISIBLE,HIDDEN to return both.

- VISIBLE: Visible occurrences. - HIDDEN: Occurrences hidden by the user. Hidden occurrences are excluded from scores and issue counts.

Value/Type: string[]

Response Parameters

data

Issue reports, one per issue type.

Value/Type: array

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/issues?visibility=VISIBLE,HIDDEN'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true,
      "audit_report_id": "6710b2c4e8f1a93d5c2e7a14",
      "visibility": ["VISIBLE", "HIDDEN"]
  },
  "data": [
      {
          "issue_type": "TITLE_DUPLICATE",
          "severity": "ERROR",
          "total_issues_count": 2,
          "issues_preview": [
              {
                  "page_id": "a3f9c1e27b4d8e60",
                  "page_title": "Running Shoes | Example Store",
                  "source_url": "https://example.com/shoes/running",
                  "target_url": "",
                  "discovered": "2026-09-14T08:12:45.312Z",
                  "occurrence_number": 0,
                  "visibility": "VISIBLE",
                  "info": {
                      "title_duplicate_info": {
                          "count": 2,
                          "urls": ["https://example.com/shoes/running?sort=price"]
                      }
                  }
              },
              {
                  "page_id": "c71e04b9f2a35d18",
                  "page_title": "Running Shoes | Example Store",
                  "source_url": "https://example.com/shoes/running?sort=price",
                  "target_url": "",
                  "discovered": "2026-09-14T08:12:45.312Z",
                  "occurrence_number": 0,
                  "visibility": "HIDDEN",
                  "info": {
                      "title_duplicate_info": {
                          "count": 2,
                          "urls": ["https://example.com/shoes/running"]
                      }
                  }
              }
          ]
      },
      {
          "issue_type": "REDIRECT_CHAIN",
          "severity": "ERROR",
          "total_issues_count": 1,
          "issues_preview": [
              {
                  "page_id": "e5b8d2f40a9c7613",
                  "page_title": "Spring Sale",
                  "source_url": "https://example.com/sale",
                  "target_url": "https://example.com/promo/spring",
                  "discovered": "2026-10-05T09:02:31.312Z",
                  "occurrence_number": 0,
                  "visibility": "VISIBLE",
                  "info": {
                      "redirect_chain_info": {
                          "final_url": "https://example.com/promo/spring",
                          "has_loop": false,
                          "length": 2,
                          "track_final_url": true,
                          "hops": [
                              { "url": "https://example.com/sale", "http_code": 301 },
                              { "url": "https://example.com/promo", "http_code": 302 }
                          ]
                      }
                  }
              }
          ]
      }
  ]
}

Jump to Get Issue ReportGet Issue Report

Price: 100 API units per line

Each returned issue occurrence counts as one line.

This request returns the occurrences of a single issue type in the campaign’s latest successful audit, with pagination, sorting, and filtering.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/issues/:issue_type/overview

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

issue_typeRequired

Issue type. Supported values: HTTP_5XX, HTTP_4XX, TITLE_EMPTY, BOT_BLOCKED, TITLE_DUPLICATE, CONTENT_DUPLICATE, INTERNAL_LINK_BROKEN, CRAWLING_BAD, CRAWLING_DNS_BAD, CRAWLING_URL_BAD, EXTERNAL_LINK_BROKEN, INTERNAL_IMAGE_LINK_BROKEN, EXTERNAL_IMAGE_LINK_BROKEN, META_DESCRIPTION_DUPLICATE, ROBOTS_TXT_MALFORMED, SITEMAP_MALFORMED, SITEMAP_INVALID_LINK, INCORRECT_WWW_SETUP, META_VIEWPORT_NO, LARGE_SIZE_PAGE, AMP_CANONICAL_ABSENT, HREFLANG_IMPLEMENTATION, HREFLANG_CONFLICTS, HREFLANG_BAD_LINK, NON_SECURE_PAGE, CERT_EXPIRED, PROTOCOL_OBSOLETE, CERT_INVALID_NAME, MIXED_CONTENT, HTTP_LINKS, HTTP_MAIN_PAGE, REDIRECT_CHAIN, AMP_TAG_ATTR_ERRORS, AMP_STYLE_LAYOUT_ERRORS, AMP_TEMPLATING_ERRORS, BROKEN_CANONICAL, CANONICAL_MULTIPLE, META_REFRESH, BROKEN_INTERNAL_JSCSS, INSECURE_ENCRYPTION, SITEMAP_TOO_LARGE, MALFORMED_URL, STRUCTURED_DATA_ERRORS, META_VIEWPORT_NOT_SET_CONTENT, TITLE_SHORT, TITLE_LONG, HEADING_MISSED, HEADING_MORE, HEADING_DUPLICATE_WITH_TITLE, META_DESC_NO, LINKS_MANY, HTTP_302_307, IMG_ALT, PAGE_LOAD_LONG, PAGE_SMALL, GET_PARAMS_MANY, META_LANG_NO, PAGE_CHARSET_NO, DOCTYPE_NO, PAGE_WORDS_LITTLE, FLASH_YES, FRAME_YES, URL_UNDERSCORES, INTERNAL_LINK_NOFOLLOW, SITEMAP_NOT_FOUND_IN_ROBOTS, SITEMAP_NOT_FOUND, HTTPS_NOT_FOUND, SNI_SUPPORT, HTTP_IN_HTTPS_SITEMAP, UNCOMPRESSED_PAGES, DISALLOWED_INTERNAL_RESOURCES, UNCOMPRESSED_JSCSS, UNCACHED_JSCSS, LARGE_JSCSS_SIZE_PAGE, TOO_MANY_JSCSS_PAGE, UNMINIFIED_JSCSS, TOO_LONG_URL, NO_LLMS_TXT, URL_LONG, EXTERNAL_LINK_NOFOLLOW, NO_ROBOTS_TXT, LANG_MISMATCH, HSTS_SUPPORT, ORPHANED_GA_PAGES, ORPHANED_SITEMAP_PAGES, HIGH_DOM_INTERACTIVE_TIME, X_ROBOTS_NOINDEX, DISALLOWED_EXTERNAL_RESOURCES, BROKEN_EXTERNAL_JSCSS, PAGE_CRAWL_DEPTH, SINGLE_INCOMING_INTERNAL_LINK, PERMANENT_REDIRECTS, RESOURCE_AS_PAGE_LINK, LINK_WITH_NO_ANCHOR_TEXT, LINK_WITH_NON_DESCRIPTIVE_ANCHOR_TEXT, EXTERNAL_LINKS_WITH_403_CODE, LLMS_MALFORMED, TOO_MUCH_CONTENT, OUTDATED_CONTENT, LOW_SEMANTIC_HTML_USAGE, CONTENT_NOT_OPTIMIZED.

Value/Type: string

Query parameters

offset

Number of occurrences to skip before returning results. Defaults to 0.

Value/Type: integer

limit

Maximum number of occurrences to return. Defaults to 10, maximum 100.

Value/Type: integer

order_by

Field to sort by. Defaults to SOURCE_URL.

- SOURCE_URL: URL of the page the issue was found on (the occurrence’s source_url field). - DISCOVERED: Date and time the issue was first discovered (the occurrence’s discovered field).

Value/Type: string

direction

Sort direction: ASC or DESC. Defaults to ASC.

Value/Type: string

filter

Filter expression for occurrences. Available fields: source_url and discovered. Combine conditions with AND, OR, and NOT. Learn more about advanced filtering › discovered takes an ISO 8601 timestamp as a quoted string and supports only comparison operators (=, !=, >, >=, and the less-than counterparts). Timestamps are compared to the millisecond: a value without a fraction means .000, so = matches only that exact instant. A value with more precision than milliseconds is rejected.

Example: source_url STARTS_WITH "https://example.com/shop" AND NOT source_url ENDS_WITH ".pdf", discovered >= "2026-09-01T00:00:00Z"

Value/Type: string

visibility

Occurrences to return, by visibility. Defaults to VISIBLE only; pass VISIBLE,HIDDEN to return both.

- VISIBLE: Visible occurrences. - HIDDEN: Occurrences hidden by the user. Hidden occurrences are excluded from scores and issue counts.

Value/Type: string[]

Response Parameters

data

Occurrences of the issue type on the requested page.

Value/Type: array

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/issues/TITLE_DUPLICATE/overview?offset=0&limit=10&order_by=SOURCE_URL&direction=ASC&visibility=VISIBLE'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true,
      "audit_report_id": "6710b2c4e8f1a93d5c2e7a14",
      "offset": 0,
      "limit": 10,
      "order_by": "SOURCE_URL",
      "direction": "ASC",
      "visibility": ["VISIBLE"],
      "total_count": 2
  },
  "data": [
      {
          "page_id": "a3f9c1e27b4d8e60",
          "page_title": "Running Shoes | Example Store",
          "source_url": "https://example.com/shoes/running",
          "target_url": "",
          "discovered": "2026-09-14T08:12:45.312Z",
          "occurrence_number": 0,
          "visibility": "VISIBLE",
          "info": {
              "title_duplicate_info": {
                  "count": 2,
                  "urls": ["https://example.com/shoes/running?sort=price"]
              }
          }
      },
      {
          "page_id": "c71e04b9f2a35d18",
          "page_title": "Running Shoes | Example Store",
          "source_url": "https://example.com/shoes/running?sort=price",
          "target_url": "",
          "discovered": "2026-09-14T08:12:45.312Z",
          "occurrence_number": 0,
          "visibility": "VISIBLE",
          "info": {
              "title_duplicate_info": {
                  "count": 2,
                  "urls": ["https://example.com/shoes/running"]
              }
          }
      }
  ]
}

Jump to List Audited PagesList Audited Pages

Price: 40 API units per line

This request returns the pages crawled in a campaign’s audit, with summary stats for each page. Use order_by and direction to sort the list, filter to narrow it by URL or title, and limit and offset to page through it.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/pages

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Query parameters

offset

Number of pages to skip before returning results. Defaults to 0.

Value/Type: integer

limit

Maximum number of pages to return. Defaults to 10, maximum 100.

Value/Type: integer

order_by

Field to sort pages by. Defaults to URL.

- URL: Page URL. - ISSUE_PRIORITY: Relative priority of the page’s issues. - MARKUPS_TOTAL: Total number of markups detected on the page. - GOOGLE_STRUCTURED_DATA: Google structured data items. - CRAWL_DEPTH: Crawl depth. - ERRORS: Number of error-severity issues. - WARNINGS: Number of warning-severity issues. - NOTICES: Number of notice-severity issues. - IN_SITEMAP: Presence in the sitemap. - HAS_AMP: Presence of an AMP version. - HAS_CANONICAL: Presence of a canonical URL. - HREFLANG_COUNT: Number of hreflang annotations on the page. - STATUS_CODE: HTTP status code. - INCOMING_INTERNAL_LINKS: Number of incoming internal links. - CANONICALIZATION: Canonicalization state. - GA_PAGE_VIEWS: Google Analytics page views. - PAGE_LOAD_TIME: Page load time. - JS_CSS_COUNT: Number of JavaScript and CSS files. - JS_CSS_TOTAL_SIZE: Total size of JavaScript and CSS files. - OUTGOING_INTERNAL_LINKS: Number of outgoing internal links. - OUTGOING_EXTERNAL_LINKS: Number of outgoing external links. - TITLE: Page title. - META_DESCRIPTION: Meta description. - PAGE_RANK_SCORE: PageRank-style score. - AI_SEARCH_BLOCKED: Whether the page is blocked from AI search. - MISSING_HREFLANGS: Missing hreflang annotations on the page.

Value/Type: string

direction

Sort direction: ASC or DESC. Defaults to ASC.

Value/Type: string

filter

Filter expression for pages. Available fields: url and title. Combine conditions with AND, OR, and NOT. Learn more about advanced filtering › A page without a title, such as a redirect or an error page, has an empty title: title = "" matches it.

Example: title CONTAINS "pricing", url STARTS_WITH "https://example.com/blog/" AND NOT title = "", url LIKE "%/product\_%" OR title IN ("Home", "About us")

Value/Type: string

Response Parameters

data

Audited pages on the requested slice, with summary stats for each page.

Value/Type: array

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/pages?order_by=ERRORS&direction=DESC&limit=10&offset=0'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true,
      "order_by": "ERRORS",
      "direction": "DESC",
      "limit": 10,
      "offset": 0,
      "total_count": 2
  },
  "data": [
      {
          "page_id": "3f9a6e21c0d47b58",
          "url": "https://example.com/pricing",
          "title": "Pricing and plans",
          "meta_description": "Compare plans and choose the one that fits your team.",
          "status_code": 200,
          "errors": 2,
          "warnings": 1,
          "notices": 0,
          "total": 3,
          "issues_sum": [
              {
                  "issue_type": "INTERNAL_LINK_BROKEN",
                  "count": 2
              },
              {
                  "issue_type": "IMG_ALT",
                  "count": 1
              }
          ],
          "markups": [
              "json-ld"
          ],
          "markups_total": 1,
          "depth": 1,
          "issue_priority": 3,
          "is_auditing": false,
          "with_amp": false,
          "hreflangs": 2,
          "with_hreflang": true,
          "hreflang_issues_count": 0,
          "canonicalization": "SELF_CANONICAL",
          "canonical": "https://example.com/pricing",
          "page_group": "HAVE_ISSUES",
          "type": "PAGE",
          "page_load_time": 420,
          "js_css_amount": 14,
          "js_css_total_size": 485210,
          "js_css_total_size_greater_than": false,
          "ga": {
              "page_views": 5430
          },
          "incoming_internal_links": 57,
          "outgoing_internal_links_count": 38,
          "outgoing_external_links_count": 3,
          "page_rank_score": 74,
          "is_new_page": false,
          "google_structured_data": [
              {
                  "type": "Product",
                  "valid": 3,
                  "invalid": 0
              }
          ],
          "blocked_stats": {
              "ai_search": {
                  "blocked": false,
                  "reasons": []
              }
          },
          "in_sitemap": true
      },
      {
          "page_id": "8d41c2a07be95f3e",
          "url": "https://example.com/blog/pricing-guide",
          "title": "How to choose a pricing plan",
          "meta_description": "",
          "status_code": 200,
          "errors": 0,
          "warnings": 1,
          "notices": 2,
          "total": 3,
          "issues_sum": [
              {
                  "issue_type": "META_DESC_NO",
                  "count": 1
              },
              {
                  "issue_type": "LINK_WITH_NO_ANCHOR_TEXT",
                  "count": 2
              }
          ],
          "markups": [],
          "markups_total": 0,
          "depth": 3,
          "issue_priority": 1,
          "is_auditing": false,
          "with_amp": false,
          "hreflangs": 0,
          "with_hreflang": false,
          "hreflang_issues_count": 0,
          "canonicalization": "NO_CANONICAL",
          "canonical": "",
          "page_group": "HAVE_ISSUES",
          "type": "PAGE",
          "page_load_time": 640,
          "js_css_amount": 9,
          "js_css_total_size": 312450,
          "js_css_total_size_greater_than": false,
          "ga": {
              "page_views": 1280
          },
          "incoming_internal_links": 4,
          "outgoing_internal_links_count": 22,
          "outgoing_external_links_count": 6,
          "page_rank_score": 31,
          "is_new_page": true,
          "google_structured_data": [],
          "blocked_stats": {
              "ai_search": {
                  "blocked": false,
                  "reasons": []
              }
          },
          "in_sitemap": false
      }
  ]
}

Jump to Get Audited PageGet Audited Page

Price: 40 API units per request

This request returns the full report for a single audited page: its summary stats, the internal pages that link to it, and the pages that declare it as canonical. The page’s issues are returned by the Get Audited Page Issues endpoint.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/pages/:page_id/overview

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

page_idRequired

Unique identifier of the audited page.

Value/Type: string

Response Parameters

data

Report for the requested page.

Value/Type: object

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/pages/3f9a6e21c0d47b58/overview'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {
      "page": {
          "page_id": "3f9a6e21c0d47b58",
          "url": "https://example.com/pricing",
          "title": "Pricing and plans",
          "meta_description": "Compare plans and choose the one that fits your team.",
          "status_code": 200,
          "errors": 2,
          "warnings": 1,
          "notices": 0,
          "total": 3,
          "issues_sum": [
              {
                  "issue_type": "INTERNAL_LINK_BROKEN",
                  "count": 2
              },
              {
                  "issue_type": "IMG_ALT",
                  "count": 1
              }
          ],
          "markups": [
              "json-ld"
          ],
          "markups_total": 1,
          "depth": 1,
          "issue_priority": 3,
          "is_auditing": false,
          "with_amp": false,
          "hreflangs": 2,
          "with_hreflang": true,
          "hreflang_issues_count": 0,
          "canonicalization": "SELF_CANONICAL",
          "canonical": "https://example.com/pricing",
          "page_group": "HAVE_ISSUES",
          "type": "PAGE",
          "page_load_time": 420,
          "js_css_amount": 14,
          "js_css_total_size": 485210,
          "js_css_total_size_greater_than": false,
          "ga": {
              "page_views": 5430
          },
          "incoming_internal_links": 57,
          "outgoing_internal_links_count": 38,
          "outgoing_external_links_count": 3,
          "page_rank_score": 74,
          "is_new_page": false,
          "google_structured_data": [
              {
                  "type": "Product",
                  "valid": 3,
                  "invalid": 0
              }
          ],
          "blocked_stats": {
              "ai_search": {
                  "blocked": false,
                  "reasons": []
              }
          }
      },
      "linking_pages": {
          "pages": [
              {
                  "page_id": "a1c94e07d25b836f",
                  "url": "https://example.com/"
              },
              {
                  "page_id": "8d41c2a07be95f3e",
                  "url": "https://example.com/blog/pricing-guide"
              }
          ],
          "total": 57
      },
      "canonicalizing_pages": {
          "pages": [
              {
                  "page_id": "e27b5d90f4a1c368",
                  "url": "https://example.com/pricing?plan=annual"
              }
          ],
          "total": 1
      }
  }
}

Jump to Get Audited Page IssuesGet Audited Page Issues

Price: 100 API units per line

Each returned issue occurrence counts as one line, across all groups.

This request returns the issues found on a single audited page, grouped by issue type. Each group carries its severity (ERROR, WARNING, or NOTICE) and the visible occurrences of that issue type on the page.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/pages/:page_id/issues

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

page_idRequired

Unique identifier of the audited page.

Value/Type: string

Response Parameters

data

Issue groups found on the page, one per issue type, across all severities. Use severity to split them.

Value/Type: array

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/pages/3f9a6e21c0d47b58/issues'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": [
      {
          "severity": "ERROR",
          "issue_type": "INTERNAL_LINK_BROKEN",
          "issues": [
              {
                  "page_id": "3f9a6e21c0d47b58",
                  "page_title": "Pricing and plans",
                  "source_url": "https://example.com/pricing",
                  "target_url": "https://example.com/plans/enterprise-old",
                  "discovered": "2024-03-12T08:41:17.312Z",
                  "occurrence_number": 0,
                  "info": {
                      "http_code_info": {
                          "code": 404
                      }
                  },
                  "visibility": "VISIBLE"
              },
              {
                  "page_id": "3f9a6e21c0d47b58",
                  "page_title": "Pricing and plans",
                  "source_url": "https://example.com/pricing",
                  "target_url": "https://example.com/docs/billing-faq",
                  "discovered": "2024-03-15T10:22:05.312Z",
                  "occurrence_number": 1,
                  "info": {
                      "http_code_info": {
                          "code": 410
                      }
                  },
                  "visibility": "VISIBLE"
              }
          ],
          "total": 14
      },
      {
          "severity": "WARNING",
          "issue_type": "IMG_ALT",
          "issues": [
              {
                  "page_id": "3f9a6e21c0d47b58",
                  "page_title": "Pricing and plans",
                  "source_url": "https://example.com/pricing",
                  "target_url": "https://example.com/images/plans-comparison.png",
                  "discovered": "2024-03-12T08:41:17.312Z",
                  "occurrence_number": 0,
                  "info": {
                      "tag_info": {
                          "tag": "IMG"
                      }
                  },
                  "visibility": "VISIBLE"
              }
          ],
          "total": 236
      }
  ]
}

Jump to Get JS Impact Changed PagesGet JS Impact Changed Pages

Price: 20 API units per request

This request returns the number of pages in a Site Audit campaign whose content changed after JavaScript rendering. To check what changed on each page, use the Get JS Impact Details endpoint.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/js-impact/changed-pages

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Response Parameters

data

JavaScript impact summary for the campaign.

Value/Type: object

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/js-impact/changed-pages'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {
      "changed_pages": 37
  }
}

Jump to Get JS Impact DetailsGet JS Impact Details

Price: 20 API units per line

This request returns, page by page, how JavaScript rendering affects key page parameters in a Site Audit campaign. For each parameter, the response gives its value in the raw HTML (before JavaScript runs) and after rendering. Use the change_status, parameters, and url_contains parameters to narrow the results.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/js-impact/details

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Query parameters

offset

Number of pages to skip before returning results. Defaults to 0.

Value/Type: integer

limit

Maximum number of pages to return. Defaults to 10, maximum 100.

Value/Type: integer

order_by

Field to sort by. Defaults to URL. Supported values: URL.

Value/Type: string

direction

Sort direction. Defaults to ASC. Supported values: ASC, DESC.

Value/Type: string

change_status

Pages to return, by whether JavaScript rendering changed them. Defaults to ALL.

- ALL: All pages. - CHANGED: Pages where at least one tracked parameter differs after JavaScript rendering. - UNCHANGED: Pages where no tracked parameter differs after JavaScript rendering.

Value/Type: string

parameters

Return only rows for the listed page parameters. Omit to return all.

- TITLE: Page title. - WORDS_COUNT: Word count of the body content. - LINKS_COUNT: Number of outgoing links on the page. - CANONICAL: Canonical tag value. - META_DESCRIPTION: Meta description tag. - META_ROBOTS: Meta robots tag. - CLIENT_SIDE_REDIRECT: Client-side redirect target. - GOOGLE_STRUCTURED_DATA: Total number of Google structured data items on the page.

Value/Type: string[]

url_contains

Return only pages whose URL contains this substring.

Example: /blog/

Value/Type: string

Response Parameters

data

JavaScript impact details, one entry per page. A parameter object is absent when that parameter was not extracted for the page.

Value/Type: array

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/js-impact/details?offset=0&limit=10&order_by=URL&direction=ASC&change_status=CHANGED&url_contains=/blog/'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true,
      "offset": 0,
      "limit": 10,
      "order_by": "URL",
      "direction": "ASC",
      "change_status": "CHANGED",
      "url_contains": "/blog/",
      "total_pages": 412,
      "changed_pages": 37
  },
  "data": [
      {
          "url": "https://example.com/blog/",
          "changed": true,
          "title": {
              "value_before_js": "Blog",
              "value_after_js": "Blog | Example"
          },
          "words_count": {
              "value_before_js": 48,
              "value_after_js": 1260
          },
          "links_count": {
              "value_before_js": 12,
              "value_after_js": 86
          },
          "canonical": {
              "value_before_js": "https://example.com/blog/",
              "value_after_js": "https://example.com/blog/"
          },
          "meta_description": {
              "value_before_js": "",
              "value_after_js": "Guides and news from the Example team."
          },
          "meta_robots": {
              "value_before_js": "index, follow",
              "value_after_js": "index, follow"
          },
          "client_side_redirect": {
              "value_before_js": "",
              "value_after_js": ""
          },
          "google_structured_data": {
              "value_before_js": 0,
              "value_after_js": 2
          }
      },
      {
          "url": "https://example.com/blog/js-seo-guide",
          "changed": true,
          "title": {
              "value_before_js": "JavaScript SEO Guide",
              "value_after_js": "JavaScript SEO Guide"
          },
          "words_count": {
              "value_before_js": 2140,
              "value_after_js": 2140
          },
          "links_count": {
              "value_before_js": 34,
              "value_after_js": 41
          },
          "canonical": {
              "value_before_js": "",
              "value_after_js": "https://example.com/blog/js-seo-guide"
          },
          "meta_description": {
              "value_before_js": "Learn how search engines render JavaScript.",
              "value_after_js": "Learn how search engines render JavaScript."
          },
          "meta_robots": {
              "value_before_js": "index, follow",
              "value_after_js": "noindex, follow"
          },
          "client_side_redirect": {
              "value_before_js": "",
              "value_after_js": ""
          },
          "google_structured_data": {
              "value_before_js": 1,
              "value_after_js": 1
          }
      }
  ]
}

Jump to Get Linking ReportGet Linking Report

Price: 20 API units per request

This request returns the internal linking report of a Site Audit campaign. The report includes histograms of pages by incoming and outgoing internal link counts, internal linking issue counts, pages that would benefit most from more internal links, the link distribution across page groups, and the crawl depth distribution.

Jump to EndpointEndpoint

GEThttps://api.semrush.com/apis/v4/site-audit/v1/campaigns/:campaign_id/linking

Path parameters

campaign_idRequired

Campaign ID, the same as the project ID.

Value/Type: integer

Response Parameters

data

Internal linking report of the campaign.

Value/Type: object

meta

Value/Type: object

Request example
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/linking'
  -H 'Authorization: Apikey YOUR_API_KEY'
Response example
JSON
{
  "meta": {
      "request_id": "4fb1773ec2a8d61a0407f464599f897c",
      "status_code": 200,
      "success": true
  },
  "data": {
      "incoming_internal_links_groups": [
          {
              "lower_bound": 1,
              "upper_bound": 1,
              "pages_count": 24
          },
          {
              "lower_bound": 2,
              "upper_bound": 10,
              "pages_count": 158
          },
          {
              "lower_bound": 11,
              "upper_bound": 100,
              "pages_count": 230
          }
      ],
      "outgoing_internal_links_groups": [
          {
              "lower_bound": 0,
              "upper_bound": 10,
              "pages_count": 41
          },
          {
              "lower_bound": 11,
              "upper_bound": 50,
              "pages_count": 297
          },
          {
              "lower_bound": 51,
              "upper_bound": 100,
              "pages_count": 74
          }
      ],
      "internal_links_issues": [
          {
              "issue_type": "INTERNAL_LINK_BROKEN",
              "count": 12,
              "checks": 9870
          },
          {
              "issue_type": "SINGLE_INCOMING_INTERNAL_LINK",
              "count": 24,
              "checks": 412
          }
      ],
      "prospective_pages": [
          {
              "id": "8f14e45fceea167a5a36dedd4bea2543",
              "url": "https://example.com/pricing",
              "depth": 2,
              "page_rank_score": 87,
              "outgoing_links_total": 64,
              "ga": {
                  "page_views": 15230
              }
          },
          {
              "id": "c9f0f895fb98ab9159f51fd0297e236d",
              "url": "https://example.com/blog/js-seo-guide",
              "depth": 3,
              "page_rank_score": 72,
              "outgoing_links_total": 41
          }
      ],
      "link_distribution": {
          "groups": [
              {
                  "group": "HEAVY",
                  "lower_bound": 70,
                  "upper_bound": 100,
                  "pages_count": 24,
                  "incoming_links_count": 5210
              },
              {
                  "group": "MEDIUM",
                  "lower_bound": 10,
                  "upper_bound": 70,
                  "pages_count": 136,
                  "incoming_links_count": 3890
              },
              {
                  "group": "WEAK",
                  "lower_bound": 0,
                  "upper_bound": 10,
                  "pages_count": 252,
                  "incoming_links_count": 770
              }
          ],
          "pages_total": 412,
          "links_total": 9870
      },
      "depths": {
          "1": 1,
          "2": 38,
          "3": 214,
          "4": 159
      }
  }
}

Last updated: November 13, 2026

Was this page helpful?