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
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
name
Value/Type: string
domain
Value/Type: string
status
Current campaign state. New values may be added, so handle unknown values gracefully.
- IN_PROGRESS: An audit is running, at any stage.
- FINISHED: The audit finished successfully.
- ERROR: The audit failed.
Value/Type: string
last_success_audit_report_id
Value/Type: string
last_audit_at
Value/Type: string
last_failed_audit_at
Value/Type: string
next_audit_at
Value/Type: string
data_will_be_removed_at
Value/Type: string
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
statuses
Value/Type: string[]
order_by
Value/Type: string
direction
Value/Type: string
limit
Value/Type: integer
offset
Value/Type: integer
total_count
statuses, regardless of pagination. Without a filter, the total number of your campaigns.Value/Type: integer
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'{
"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
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
domainRequired
Crawl scope: the project’s domain or one of its subdomains. When crawl_subdomains is true, the subdomains of this domain are crawled too. Where the crawl starts is set by crawl_source.
Example: example.com
Value/Type: string
page_limitRequired
Maximum number of pages to crawl per audit. Minimum 1.
Value/Type: integer
scheme
URL scheme used for crawling. Supported values: HTTP, HTTPS.
Value/Type: string
crawl_source
How the crawler discovers the pages to audit. Set exactly one of the following fields.
Value/Type: object
website
Crawl the site itself, starting from the campaign domain and following links. Pass an empty object.
Value/Type: object
sitemap_on_site
Crawl the sitemap files declared on the site (in robots.txt or at /sitemap.xml). Pass an empty object.
Value/Type: object
custom_sitemap
Crawl a sitemap from an explicitly provided URL.
Value/Type: object
urlRequired
Sitemap URL the crawler reads to discover pages.
Example: https://example.com/sitemap.xml
Value/Type: string
list_of_urls
Crawl a fixed list of URLs. Pass an empty object. The list itself is set with the Update Crawl URLs endpoint, never through the settings.
Value/Type: object
schedule
How often the audit re-runs automatically. Omit for no recurring schedule: the audit then runs only when started explicitly.
- WEEKLY_MONDAY: Every Monday.
- WEEKLY_TUESDAY: Every Tuesday.
- WEEKLY_WEDNESDAY: Every Wednesday.
- WEEKLY_THURSDAY: Every Thursday.
- WEEKLY_FRIDAY: Every Friday.
- WEEKLY_SATURDAY: Every Saturday.
- WEEKLY_SUNDAY: Every Sunday.
- DAILY: Every day.
Value/Type: string
user_agent_typeRequired
User agent the crawler presents.
- SITE_AUDIT_DESKTOP: SiteAuditBot, desktop profile.
- SITE_AUDIT_MOBILE: SiteAuditBot, mobile profile.
Value/Type: string
js_rendering
Whether pages are rendered with JavaScript before issues are detected.
- RENDER_ALL: Render every page with JavaScript.
- DISABLED: Skip JavaScript rendering and process only the static HTML.
Value/Type: string
crawl_subdomains
Set to true to also crawl the subdomains of domain.
Value/Type: boolean
email_notification_enabled
Set to true to email the owner when an audit finishes.
Value/Type: boolean
excluded_issues
Issue types to exclude from the audit.
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[]
removed_parameters
URL query parameters to strip from URLs before comparing them.
Example: ["utm_source", "utm_medium"]
Value/Type: string[]
path_masks
Path patterns that constrain the crawl scope.
Value/Type: object
allow
Value/Type: string[]
disallow
Value/Type: string[]
Response Parameters
data
The created campaign with its settings as stored.
Value/Type: object
name
Value/Type: string
initial_audit_url
scheme and domain, for example https://example.com. The first audit replaces it with the URL the crawl actually starts from.Value/Type: string
settings
Crawl settings as stored. Fields and values are the same as in the settings body parameter.
Value/Type: object
domain
Value/Type: string
page_limit
Value/Type: integer
scheme
HTTP or HTTPS.Value/Type: string
crawl_source
How the crawler discovers the pages to audit. Exactly one of website, sitemap_on_site, custom_sitemap, or list_of_urls is present.
Value/Type: object
website
Value/Type: object
sitemap_on_site
Value/Type: object
custom_sitemap
Present if the crawler reads a sitemap from an explicitly provided URL.
Value/Type: object
url
Value/Type: string
list_of_urls
Value/Type: object
schedule
Value/Type: string
user_agent_type
Value/Type: string
js_rendering
RENDER_ALL or DISABLED.Value/Type: string
crawl_subdomains
true if the subdomains of domain are crawled too.Value/Type: boolean
email_notification_enabled
true if the owner gets an email when an audit finishes.Value/Type: boolean
excluded_issues
Value/Type: string[]
removed_parameters
Value/Type: string[]
path_masks
Path patterns that constrain the crawl scope.
Value/Type: object
allow
Value/Type: string[]
disallow
Value/Type: string[]
basic_auth_configured
true if a login for password-protected sites is stored. Set the login with the Update Basic Auth endpoint.Value/Type: boolean
web_bot_auth_configured
true if a bot-protection signature is stored. Set the signature with the Update Web Bot Auth endpoint.Value/Type: boolean
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
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"]
}
}'{
"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
Path parameters
Response Parameters
data
The campaign metadata.
Value/Type: object
name
Value/Type: string
domain
Value/Type: string
status
Current campaign state. For the detailed audit stage, use the Get Audit Progress endpoint. New values may be added, so handle unknown values gracefully.
- IN_PROGRESS: An audit is running, at any stage.
- FINISHED: The audit finished successfully.
- ERROR: The audit failed.
Value/Type: string
last_success_audit_report_id
Value/Type: string
last_audit_at
Value/Type: string
last_failed_audit_at
Value/Type: string
next_audit_at
Value/Type: string
data_will_be_removed_at
Value/Type: string
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/overview'
-H 'Authorization: Apikey YOUR_API_KEY'{
"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
Path parameters
Response Parameters
data
Campaign crawl settings as stored.
Value/Type: object
name
Value/Type: string
initial_audit_url
scheme and domain, for example https://example.com. The first audit replaces it with the URL the crawl actually starts from.Value/Type: string
settings
Crawl settings as stored.
Value/Type: object
domain
crawl_subdomains is true.Value/Type: string
scheme
HTTP or HTTPS.Value/Type: string
crawl_source
How the crawler discovers the initial URLs. Exactly one of the following fields is present.
Value/Type: object
website
Value/Type: object
sitemap_on_site
robots.txt or at /sitemap.xml).Value/Type: object
custom_sitemap
Present if the crawler reads a sitemap from an explicitly provided URL.
Value/Type: object
url
Value/Type: string
list_of_urls
Value/Type: object
schedule
How often the audit re-runs automatically. If not set, audits run only when started explicitly.
- WEEKLY_MONDAY, WEEKLY_TUESDAY, WEEKLY_WEDNESDAY, WEEKLY_THURSDAY, WEEKLY_FRIDAY, WEEKLY_SATURDAY, WEEKLY_SUNDAY: Re-run every week on that day.
- DAILY: Re-run every day.
Value/Type: string
user_agent_type
User agent the crawler presents.
- SITE_AUDIT_DESKTOP: SiteAuditBot, desktop profile.
- SITE_AUDIT_MOBILE: SiteAuditBot, mobile profile.
- UNKNOWN: A user agent this list cannot represent, for example one set outside the API.
Value/Type: string
js_rendering
RENDER_ALL (render every page) or DISABLED (process static HTML only).Value/Type: string
page_limit
Value/Type: integer
crawl_subdomains
true if the crawler follows subdomains of domain.Value/Type: boolean
email_notification_enabled
true if the campaign owner receives an email when an audit finishes.Value/Type: boolean
excluded_issues
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[]
removed_parameters
Value/Type: string[]
path_masks
Path patterns that constrain the crawl scope.
Value/Type: object
allow
Value/Type: string[]
disallow
Value/Type: string[]
basic_auth_configured
true if HTTP basic-auth credentials for a password-protected site are stored. The credentials themselves are never returned; set them with the Update Basic Auth endpoint.Value/Type: boolean
web_bot_auth_configured
true if a Web Bot Auth signature for passing a site’s bot protection is stored. The signature itself is never returned; set it with the Update Web Bot Auth endpoint.Value/Type: boolean
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/settings'
-H 'Authorization: Apikey YOUR_API_KEY'{
"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
Path parameters
Body parameters
settings
Full crawl settings. They replace the stored settings as a whole.
Value/Type: object
domainRequired
Crawl scope: the project’s domain or a subdomain of it. Subdomains of this domain are included when crawl_subdomains is true.
Where the crawl starts is set by crawl_source.
Example: example.com
Value/Type: string
scheme
URL scheme used for crawling.
- HTTP: Plain HTTP.
- HTTPS: HTTPS.
Value/Type: string
crawl_source
How the crawler discovers the initial URLs. Set exactly one of the following fields.
Value/Type: object
website
Crawl the site itself, starting from the campaign domain and following links. Send an empty object.
Value/Type: object
sitemap_on_site
Crawl the sitemap files declared on the site (in robots.txt or at /sitemap.xml). Send an empty object.
Value/Type: object
custom_sitemap
Crawl a sitemap from an explicitly provided URL.
Value/Type: object
urlRequired
Sitemap URL the crawler reads to discover pages.
Example: https://example.com/sitemap.xml
Value/Type: string
list_of_urls
Crawl a fixed list of URLs. Send an empty object: the list itself is not part of the settings and is managed with the Update Crawl URLs endpoint.
Value/Type: object
schedule
How often the audit re-runs automatically. If not set, audits run only when started explicitly.
- WEEKLY_MONDAY, WEEKLY_TUESDAY, WEEKLY_WEDNESDAY, WEEKLY_THURSDAY, WEEKLY_FRIDAY, WEEKLY_SATURDAY, WEEKLY_SUNDAY: Re-run every week on that day.
- DAILY: Re-run every day.
Value/Type: string
user_agent_typeRequired
User agent the crawler presents.
- SITE_AUDIT_DESKTOP: SiteAuditBot, desktop profile.
- SITE_AUDIT_MOBILE: SiteAuditBot, mobile profile.
Value/Type: string
js_rendering
Whether pages are rendered with JavaScript before issues are detected.
- RENDER_ALL: Render every page with JavaScript.
- DISABLED: Skip JavaScript rendering and process static HTML only.
Value/Type: string
page_limitRequired
Maximum number of pages to crawl per audit. Minimum 1.
Value/Type: integer
crawl_subdomains
Whether the crawler follows subdomains of domain.
Value/Type: boolean
email_notification_enabled
Whether the campaign owner receives an email when an audit finishes.
Value/Type: boolean
excluded_issues
Issue types to exclude from the audit.
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[]
removed_parameters
URL query parameters stripped from URLs before comparison.
Example: ["utm_source", "sessionid"]
Value/Type: string[]
path_masks
Path patterns that constrain the crawl scope.
Value/Type: object
allow
Path patterns explicitly allowed for crawling.
Value/Type: string[]
disallow
Path patterns explicitly disallowed for crawling.
Value/Type: string[]
Response Parameters
data
Campaign crawl settings as stored.
Value/Type: object
name
Value/Type: string
initial_audit_url
scheme and domain, for example https://example.com. The first audit replaces it with the URL the crawl actually starts from.Value/Type: string
settings
Crawl settings as stored.
Value/Type: object
domain
crawl_subdomains is true.Value/Type: string
scheme
HTTP or HTTPS.Value/Type: string
crawl_source
How the crawler discovers the initial URLs. Exactly one of the following fields is present.
Value/Type: object
website
Value/Type: object
sitemap_on_site
robots.txt or at /sitemap.xml).Value/Type: object
custom_sitemap
Present if the crawler reads a sitemap from an explicitly provided URL.
Value/Type: object
url
Value/Type: string
list_of_urls
Value/Type: object
schedule
How often the audit re-runs automatically. If not set, audits run only when started explicitly.
- WEEKLY_MONDAY, WEEKLY_TUESDAY, WEEKLY_WEDNESDAY, WEEKLY_THURSDAY, WEEKLY_FRIDAY, WEEKLY_SATURDAY, WEEKLY_SUNDAY: Re-run every week on that day.
- DAILY: Re-run every day.
Value/Type: string
user_agent_type
User agent the crawler presents.
- SITE_AUDIT_DESKTOP: SiteAuditBot, desktop profile.
- SITE_AUDIT_MOBILE: SiteAuditBot, mobile profile.
- UNKNOWN: A user agent this list cannot represent, for example one set outside the API.
Value/Type: string
js_rendering
RENDER_ALL (render every page) or DISABLED (process static HTML only).Value/Type: string
page_limit
Value/Type: integer
crawl_subdomains
true if the crawler follows subdomains of domain.Value/Type: boolean
email_notification_enabled
true if the campaign owner receives an email when an audit finishes.Value/Type: boolean
excluded_issues
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[]
removed_parameters
Value/Type: string[]
path_masks
Path patterns that constrain the crawl scope.
Value/Type: object
allow
Value/Type: string[]
disallow
Value/Type: string[]
basic_auth_configured
true if HTTP basic-auth credentials for a password-protected site are stored. The credentials themselves are never returned; set them with the Update Basic Auth endpoint.Value/Type: boolean
web_bot_auth_configured
true if a Web Bot Auth signature for passing a site’s bot protection is stored. The signature itself is never returned; set it with the Update Web Bot Auth endpoint.Value/Type: boolean
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
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/"]
}
}
}'{
"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
Path parameters
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
domain
Crawl scope: the project’s domain or a subdomain of it. Subdomains of this domain are included when crawl_subdomains is true.
Where the crawl starts is set by crawl_source.
Example: example.com
Value/Type: string
scheme
URL scheme used for crawling.
- HTTP: Plain HTTP.
- HTTPS: HTTPS.
Value/Type: string
crawl_source
How the crawler discovers the initial URLs. Set exactly one of the following fields.
Value/Type: object
website
Crawl the site itself, starting from the campaign domain and following links. Send an empty object.
Value/Type: object
sitemap_on_site
Crawl the sitemap files declared on the site (in robots.txt or at /sitemap.xml). Send an empty object.
Value/Type: object
custom_sitemap
Crawl a sitemap from an explicitly provided URL.
Value/Type: object
urlRequired
Sitemap URL the crawler reads to discover pages.
Example: https://example.com/sitemap.xml
Value/Type: string
list_of_urls
Crawl a fixed list of URLs. Send an empty object: the list itself is not part of the settings and is managed with the Update Crawl URLs endpoint.
Value/Type: object
schedule
How often the audit re-runs automatically. If not set, audits run only when started explicitly.
- WEEKLY_MONDAY, WEEKLY_TUESDAY, WEEKLY_WEDNESDAY, WEEKLY_THURSDAY, WEEKLY_FRIDAY, WEEKLY_SATURDAY, WEEKLY_SUNDAY: Re-run every week on that day.
- DAILY: Re-run every day.
Value/Type: string
user_agent_type
User agent the crawler presents. If you list it in update_mask, set one of the following values: it can’t be cleared.
- SITE_AUDIT_DESKTOP: SiteAuditBot, desktop profile.
- SITE_AUDIT_MOBILE: SiteAuditBot, mobile profile.
Value/Type: string
js_rendering
Whether pages are rendered with JavaScript before issues are detected.
- RENDER_ALL: Render every page with JavaScript.
- DISABLED: Skip JavaScript rendering and process static HTML only.
Value/Type: string
page_limit
Maximum number of pages to crawl per audit. Minimum 1.
Value/Type: integer
crawl_subdomains
Whether the crawler follows subdomains of domain.
Value/Type: boolean
email_notification_enabled
Whether the campaign owner receives an email when an audit finishes.
Value/Type: boolean
excluded_issues
Issue types to exclude from the audit.
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[]
removed_parameters
URL query parameters stripped from URLs before comparison.
Example: ["utm_source", "sessionid"]
Value/Type: string[]
path_masks
Path patterns that constrain the crawl scope.
Value/Type: object
allow
Path patterns explicitly allowed for crawling.
Value/Type: string[]
disallow
Path patterns explicitly disallowed for crawling.
Value/Type: string[]
Response Parameters
data
Campaign crawl settings as stored.
Value/Type: object
name
Value/Type: string
initial_audit_url
scheme and domain, for example https://example.com. The first audit replaces it with the URL the crawl actually starts from.Value/Type: string
settings
Crawl settings as stored.
Value/Type: object
domain
crawl_subdomains is true.Value/Type: string
scheme
HTTP or HTTPS.Value/Type: string
crawl_source
How the crawler discovers the initial URLs. Exactly one of the following fields is present.
Value/Type: object
website
Value/Type: object
sitemap_on_site
robots.txt or at /sitemap.xml).Value/Type: object
custom_sitemap
Present if the crawler reads a sitemap from an explicitly provided URL.
Value/Type: object
url
Value/Type: string
list_of_urls
Value/Type: object
schedule
How often the audit re-runs automatically. If not set, audits run only when started explicitly.
- WEEKLY_MONDAY, WEEKLY_TUESDAY, WEEKLY_WEDNESDAY, WEEKLY_THURSDAY, WEEKLY_FRIDAY, WEEKLY_SATURDAY, WEEKLY_SUNDAY: Re-run every week on that day.
- DAILY: Re-run every day.
Value/Type: string
user_agent_type
User agent the crawler presents.
- SITE_AUDIT_DESKTOP: SiteAuditBot, desktop profile.
- SITE_AUDIT_MOBILE: SiteAuditBot, mobile profile.
- UNKNOWN: A user agent this list cannot represent, for example one set outside the API.
Value/Type: string
js_rendering
RENDER_ALL (render every page) or DISABLED (process static HTML only).Value/Type: string
page_limit
Value/Type: integer
crawl_subdomains
true if the crawler follows subdomains of domain.Value/Type: boolean
email_notification_enabled
true if the campaign owner receives an email when an audit finishes.Value/Type: boolean
excluded_issues
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[]
removed_parameters
Value/Type: string[]
path_masks
Path patterns that constrain the crawl scope.
Value/Type: object
allow
Value/Type: string[]
disallow
Value/Type: string[]
basic_auth_configured
true if HTTP basic-auth credentials for a password-protected site are stored. The credentials themselves are never returned; set them with the Update Basic Auth endpoint.Value/Type: boolean
web_bot_auth_configured
true if a Web Bot Auth signature for passing a site’s bot protection is stored. The signature itself is never returned; set it with the Update Web Bot Auth endpoint.Value/Type: boolean
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
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"
}
}'{
"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
Path parameters
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
login
Value/Type: string
password
Value/Type: string
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
Path parameters
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
Path parameters
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
signature_agent
Signature-Agent header: the bot’s identity, a URL that resolves to its signing keys.Value/Type: string
signature_input
Signature-Input header: the signed request components, plus the key ID and validity window.Value/Type: string
signature
Signature header: the signature over those components.Value/Type: string
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
Path parameters
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
Path parameters
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_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
limit
Value/Type: integer
offset
Value/Type: integer
total_count
Value/Type: integer
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'{
"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
Path parameters
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
total_count
Value/Type: integer
limit
Value/Type: integer
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
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"
]
}'{
"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
Path parameters
Response Parameters
data
The started audit.
Value/Type: object
audit_report_id
ID the audit report will be published under once this audit finishes successfully. Until then, the Get Audit Report endpoint returns a not-found error for this ID. To track the audit’s progress and outcome, use the Get Audit Progress endpoint. An audit that fails never produces a report under this ID.
Value/Type: string
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
curl -L -X POST 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/start'
-H 'Authorization: Apikey YOUR_API_KEY'{
"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
Path parameters
Response Parameters
data
Progress of the current or latest audit.
Value/Type: object
stage
Current audit stage. Be prepared to handle values not listed here.
- PRECRAWLING: Checking that the site can be crawled.
- RUNNING: Crawling pages.
- CHECKING: Internal pages are crawled; checking external links.
- FINALIZING: Detecting cross-page issues after the crawl.
- SAVING: Saving the audit report.
- FINISHED: The audit finished successfully.
- ERROR: The audit failed.
Value/Type: string
precrawl_status
Outcome of the latest audit’s precrawl check: NO_ERRORS if it passed, otherwise the failure code. Carries no outcome until the precrawl completes.
- NO_ERRORS: No errors.
- UNEXPECTED_ERROR: Something went wrong.
- NETWORK_ERROR: The network connection was lost.
- DNS_ERROR: The domain cannot be resolved by DNS.
- BLOCKED_BY_ROBOTS_ERROR: The site’s robots.txt file blocks the crawler.
- OUT_OF_SCOPE_ANOTHER_DOMAIN: The page redirects outside the crawl scope (other domain).
- OUT_OF_SCOPE_SAME_DOMAIN: The page redirects outside the crawl scope (same domain).
- BAD_HTTP_RESPONSE: An invalid response was received from the page.
- LARGE_HTML: The page is too large (more than 4 MB) for the crawler to load it.
- BLOCKED_BY_META_ROBOTS_ERROR: The page is blocked from indexing by meta robots tags.
- BLOCKED_BY_AUTH: The page is protected with a password.
- ROBOTS_ERROR_NOT_OWNER: The crawler cannot find the file to confirm domain ownership.
- REDIRECTS_LIMIT: The redirect limit was reached.
Value/Type: string
pages_crawled
Value/Type: integer
pages_limit
Value/Type: integer
resources_crawled
Value/Type: integer
resources_total
Value/Type: integer
stoppable
true if the in-progress audit can be stopped now with the Stop Audit endpoint.Value/Type: boolean
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/progress'
-H 'Authorization: Apikey YOUR_API_KEY'{
"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
Path parameters
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
Path parameters
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
Path parameters
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
audit_report_id
Value/Type: string
start_date
2026-10-12T08:55:03Z).Value/Type: string
finish_date
start_date is the audit duration.Value/Type: string
pages_crawled
Value/Type: integer
pages_limit
Value/Type: integer
is_pages_limit_reached
true if the crawl hit the page limit.Value/Type: boolean
settings_changed
true if the campaign settings changed since the previous audit report.Value/Type: boolean
user_agent_type
User agent used for the crawl.
- SITE_AUDIT_DESKTOP: SiteAuditBot, desktop profile.
- SITE_AUDIT_MOBILE: SiteAuditBot, mobile profile.
- UNKNOWN: A user agent the API cannot represent, such as one set outside the API.
Value/Type: string
js_rendering
JavaScript rendering mode used for this audit.
- RENDER_ALL: Every page was rendered with JavaScript before issues were detected.
- DISABLED: No JavaScript rendering; only static HTML was processed.
Value/Type: string
total_score
Overall quality score.
Value/Type: object
value
Value/Type: integer
delta
0 on the first audit report.Value/Type: integer
ai_search_score
AI search quality score. Absent when AI search data is unavailable.
Value/Type: object
value
Value/Type: integer
delta
0 on the first audit report.Value/Type: integer
thematic_scores
Quality scores by topic. Each score is an object with value and delta, like total_score. A topic that doesn’t apply to the site is absent, such as https for a site crawled over HTTP.
Value/Type: object
crawlability
Value/Type: object
https
Value/Type: object
int_seo
Value/Type: object
linking
Value/Type: object
markups
Value/Type: object
performance
Value/Type: object
status_code_groups
Number of pages per HTTP status code class, one entry per class that has pages.
Value/Type: array
group
HTTP status code class. Possible values:
- NO_RESPONSE: No HTTP response was received, for example because of a timeout or a connection error.
- INFORMATIONAL: 1xx informational responses.
- SUCCESS: 2xx successful responses.
- REDIRECTION: 3xx redirects.
- CLIENT_ERROR: 4xx client errors.
- SERVER_ERROR: 5xx server errors.
Value/Type: string
count
Value/Type: integer
errors
Issue types with ERROR severity.
Value/Type: array
issue_type
Issue type. Possible 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
count
Value/Type: integer
delta
count since the previous audit report.Value/Type: integer
checks
count of them failed.Value/Type: integer
warnings
WARNING severity. Same fields as errors.Value/Type: object[]
notices
NOTICE severity. Same fields as errors.Value/Type: object[]
new_issues
New issues, one entry per issue type.
Value/Type: array
issue_type
errors.issue_type.Value/Type: string
count
Value/Type: integer
fixed_issues
new_issues.Value/Type: object[]
hidden_issues
new_issues.Value/Type: object[]
excluded_issues
errors.issue_type.Value/Type: string[]
top_issues
errors.issue_type.Value/Type: string[]
top_insights
errors.issue_type.Value/Type: string[]
blocked_page_stats
Statistics on pages blocked from indexing.
Value/Type: object
ai_search
Pages blocked from AI search indexing, one entry per AI crawler.
Value/Type: array
agent
AI crawler the count is for. New crawlers may be added over time, so handle unknown values.
- UNKNOWN: Unknown crawler.
- CHATGPT_USER: OpenAI ChatGPT-User.
- OAI_SEARCH_BOT: OpenAI OAI-SearchBot.
- GOOGLEBOT: Google Googlebot.
- GOOGLE_EXTENDED: Google Google-Extended.
- PERPLEXITY_BOT: Perplexity PerplexityBot.
- PERPLEXITY_USER: Perplexity Perplexity-User.
- CLAUDE_USER: Anthropic Claude-User.
- CLAUDE_SEARCH_BOT: Anthropic Claude-SearchBot.
Value/Type: string
count
Value/Type: integer
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
offset
Value/Type: integer
limit
Value/Type: integer
order_by
Value/Type: string
direction
Value/Type: string
total_count
Value/Type: integer
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'{
"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
Path parameters
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
audit_report_id
Value/Type: string
start_date
2026-10-12T08:55:03Z).Value/Type: string
finish_date
start_date is the audit duration.Value/Type: string
pages_crawled
Value/Type: integer
pages_limit
Value/Type: integer
is_pages_limit_reached
true if the crawl hit the page limit.Value/Type: boolean
settings_changed
true if the campaign settings changed since the previous audit report.Value/Type: boolean
user_agent_type
User agent used for the crawl.
- SITE_AUDIT_DESKTOP: SiteAuditBot, desktop profile.
- SITE_AUDIT_MOBILE: SiteAuditBot, mobile profile.
- UNKNOWN: A user agent the API cannot represent, such as one set outside the API.
Value/Type: string
js_rendering
JavaScript rendering mode used for this audit.
- RENDER_ALL: Every page was rendered with JavaScript before issues were detected.
- DISABLED: No JavaScript rendering; only static HTML was processed.
Value/Type: string
total_score
Overall quality score.
Value/Type: object
value
Value/Type: integer
delta
0 on the first audit report.Value/Type: integer
ai_search_score
AI search quality score. Absent when AI search data is unavailable.
Value/Type: object
value
Value/Type: integer
delta
0 on the first audit report.Value/Type: integer
thematic_scores
Quality scores by topic. Each score is an object with value and delta, like total_score. A topic that doesn’t apply to the site is absent, such as https for a site crawled over HTTP.
Value/Type: object
crawlability
Value/Type: object
https
Value/Type: object
int_seo
Value/Type: object
linking
Value/Type: object
markups
Value/Type: object
performance
Value/Type: object
status_code_groups
Number of pages per HTTP status code class, one entry per class that has pages.
Value/Type: array
group
HTTP status code class. Possible values:
- NO_RESPONSE: No HTTP response was received, for example because of a timeout or a connection error.
- INFORMATIONAL: 1xx informational responses.
- SUCCESS: 2xx successful responses.
- REDIRECTION: 3xx redirects.
- CLIENT_ERROR: 4xx client errors.
- SERVER_ERROR: 5xx server errors.
Value/Type: string
count
Value/Type: integer
errors
Issue types with ERROR severity.
Value/Type: array
issue_type
Issue type. Possible 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
count
Value/Type: integer
delta
count since the previous audit report.Value/Type: integer
checks
count of them failed.Value/Type: integer
warnings
WARNING severity. Same fields as errors.Value/Type: object[]
notices
NOTICE severity. Same fields as errors.Value/Type: object[]
new_issues
New issues, one entry per issue type.
Value/Type: array
issue_type
errors.issue_type.Value/Type: string
count
Value/Type: integer
fixed_issues
new_issues.Value/Type: object[]
hidden_issues
new_issues.Value/Type: object[]
excluded_issues
errors.issue_type.Value/Type: string[]
top_issues
errors.issue_type.Value/Type: string[]
top_insights
errors.issue_type.Value/Type: string[]
blocked_page_stats
Statistics on pages blocked from indexing.
Value/Type: object
ai_search
Pages blocked from AI search indexing, one entry per AI crawler.
Value/Type: array
agent
AI crawler the count is for. New crawlers may be added over time, so handle unknown values.
- UNKNOWN: Unknown crawler.
- CHATGPT_USER: OpenAI ChatGPT-User.
- OAI_SEARCH_BOT: OpenAI OAI-SearchBot.
- GOOGLEBOT: Google Googlebot.
- GOOGLE_EXTENDED: Google Google-Extended.
- PERPLEXITY_BOT: Perplexity PerplexityBot.
- PERPLEXITY_USER: Perplexity Perplexity-User.
- CLAUDE_USER: Anthropic Claude-User.
- CLAUDE_SEARCH_BOT: Anthropic Claude-SearchBot.
Value/Type: string
count
Value/Type: integer
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/audit-reports/6710b2c4e8f1a93d5c2e7a14/overview'
-H 'Authorization: Apikey YOUR_API_KEY'{
"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
Path parameters
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
issue_type
Issue type. Possible 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
severity
Severity of the issue type.
- ERROR: Critical issue that should be fixed first.
- WARNING: Issue that affects quality but is less critical than an error.
- NOTICE: Informational issue or minor recommendation.
Value/Type: string
total_issues_count
visibility, including those beyond the issues_preview limit.Value/Type: integer
issues_preview
Up to 100 occurrences of this issue type matching the requested visibility, sorted by source_url in ascending order, the default order of Get Issue Report.
Value/Type: array
page_id
Value/Type: string
page_title
unknown when the page could not be resolved.Value/Type: string
source_url
Value/Type: string
target_url
Value/Type: string
discovered
2026-09-14T08:12:45.312Z). You can use the value in a discovered filter as is.Value/Type: string
occurrence_number
0. Not an identifier: it is assigned per audit report and changes between crawls.Value/Type: integer
visibility
VISIBLE or HIDDEN. Hidden occurrences are excluded from scores and issue counts.Value/Type: string
info
Details specific to the issue type. Holds at most one of these keys, each an object: integer_info, long_info, string_info, hreflang_info, page_lang_info, timestamp_info, list_info, duplicate_info, referenced_duplicated_info, title_duplicate_info, hreflang_link_info, tag_info, resource_type_info, resource_type_and_code_info, resource_type_and_error_type_info, long_with_flag_info, url_code_info, redirect_chain_info, sitemap_broken_link_info, amp_info, dom_time_info, structured_data_info, http_code_info, malformed_llms_info, content_not_optimized_info.
Value/Type: object
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
audit_report_id
audit_report_id in the Get Issue Report response.Value/Type: string
visibility
VISIBLE if the request doesn’t set them.Value/Type: string[]
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/issues?visibility=VISIBLE,HIDDEN'
-H 'Authorization: Apikey YOUR_API_KEY'{
"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
Path parameters
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
page_id
Value/Type: string
page_title
unknown when the page could not be resolved.Value/Type: string
source_url
Value/Type: string
target_url
Value/Type: string
discovered
2026-09-14T08:12:45.312Z). You can use the value in a discovered filter as is.Value/Type: string
occurrence_number
0. Not an identifier: it is assigned per audit report and changes between crawls.Value/Type: integer
visibility
VISIBLE or HIDDEN. Hidden occurrences are excluded from scores and issue counts.Value/Type: string
info
Details specific to the issue type. Holds at most one of these keys, each an object: integer_info, long_info, string_info, hreflang_info, page_lang_info, timestamp_info, list_info, duplicate_info, referenced_duplicated_info, title_duplicate_info, hreflang_link_info, tag_info, resource_type_info, resource_type_and_code_info, resource_type_and_error_type_info, long_with_flag_info, url_code_info, redirect_chain_info, sitemap_broken_link_info, amp_info, dom_time_info, structured_data_info, http_code_info, malformed_llms_info, content_not_optimized_info.
Value/Type: object
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
audit_report_id
Value/Type: string
offset
Value/Type: integer
limit
Value/Type: integer
order_by
Value/Type: string
direction
Value/Type: string
filter
Value/Type: string
visibility
VISIBLE if the request doesn’t set them.Value/Type: string[]
total_count
visibility, ignoring pagination.Value/Type: integer
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'{
"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
Path parameters
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
page_id
Value/Type: string
url
Value/Type: string
title
Value/Type: string
meta_description
Value/Type: string
status_code
Value/Type: integer
errors
Value/Type: integer
warnings
Value/Type: integer
notices
Value/Type: integer
total
Value/Type: integer
issues_sum
Issue counts on the page, one entry per issue type.
Value/Type: array
issue_type
Issue type the count is for. Possible 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
count
Value/Type: integer
markups
Value/Type: string[]
markups_total
Value/Type: integer
depth
Value/Type: integer
issue_priority
Value/Type: integer
is_auditing
true if the page is currently being audited.Value/Type: boolean
with_amp
true if the page has an AMP version.Value/Type: boolean
hreflangs
hreflang annotations on the page.Value/Type: integer
with_hreflang
true if the page declares hreflang annotations.Value/Type: boolean
hreflang_issues_count
hreflang issues on the page.Value/Type: integer
canonicalization
Canonicalization state of the page. Possible values:
- NO_CANONICAL: The page declares no canonical URL.
- SELF_CANONICAL: The page declares itself as canonical.
- CANONICAL_TO_OTHER_PAGE: The page declares another page as canonical.
Value/Type: string
canonical
Value/Type: string
page_group
Page group by crawl outcome and issues. Possible values:
- HEALTHY: 2xx page with no issues.
- HAVE_ISSUES: 2xx page with at least one issue.
- REDIRECT: 3xx redirect.
- BROKEN: 4xx, 5xx, or 1xx response, or no response.
- BLOCKED: The crawler was blocked from the page.
Value/Type: string
type
Kind of resource the page is. Possible values:
- PAGE: Regular HTML page.
- ROBOTS_TXT: robots.txt file.
- SITEMAP: XML sitemap.
- LLMS_TXT: llms.txt file.
Value/Type: string
page_load_time
Value/Type: integer
js_css_amount
Value/Type: integer
js_css_total_size
Value/Type: integer
js_css_total_size_greater_than
true if the total JavaScript and CSS size exceeds the recommended threshold.Value/Type: boolean
ga
Google Analytics data for the page.
Value/Type: object
page_views
Value/Type: integer
incoming_internal_links
Value/Type: integer
outgoing_internal_links_count
Value/Type: integer
outgoing_external_links_count
Value/Type: integer
page_rank_score
Value/Type: integer
is_new_page
true if the page was first discovered in this audit.Value/Type: boolean
google_structured_data
Structured-data blocks found on the page, one entry per structured-data type.
Value/Type: array
type
Value/Type: string
valid
Value/Type: integer
invalid
Value/Type: integer
blocked_stats
Indexing-block status of the page.
Value/Type: object
ai_search
Whether and why the page is blocked from AI search.
Value/Type: object
blocked
true if the page is blocked from AI search.Value/Type: boolean
reasons
Value/Type: string[]
in_sitemap
true if the page is listed in the sitemap.Value/Type: boolean
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
order_by
Value/Type: string
direction
ASC or DESC. The requested value, or the endpoint default if the request doesn’t set it.Value/Type: string
filter
Value/Type: string
limit
Value/Type: integer
offset
Value/Type: integer
total_count
Value/Type: integer
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'{
"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
Path parameters
page_idRequired
Unique identifier of the audited page.
Value/Type: string
Response Parameters
data
Report for the requested page.
Value/Type: object
page
Page summary stats, the same fields as each row of the List Audited Pages endpoint.
Value/Type: object
page_id
Value/Type: string
url
Value/Type: string
title
Value/Type: string
meta_description
Value/Type: string
status_code
Value/Type: integer
errors
Value/Type: integer
warnings
Value/Type: integer
notices
Value/Type: integer
total
Value/Type: integer
issues_sum
Issue counts on the page, one entry per issue type.
Value/Type: array
issue_type
Issue type the count is for. Possible 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
count
Value/Type: integer
markups
Value/Type: string[]
markups_total
Value/Type: integer
depth
Value/Type: integer
issue_priority
Value/Type: integer
is_auditing
true if the page is currently being audited.Value/Type: boolean
with_amp
true if the page has an AMP version.Value/Type: boolean
hreflangs
hreflang annotations on the page.Value/Type: integer
with_hreflang
true if the page declares hreflang annotations.Value/Type: boolean
hreflang_issues_count
hreflang issues on the page.Value/Type: integer
canonicalization
Canonicalization state of the page. Possible values:
- NO_CANONICAL: The page declares no canonical URL.
- SELF_CANONICAL: The page declares itself as canonical.
- CANONICAL_TO_OTHER_PAGE: The page declares another page as canonical.
Value/Type: string
canonical
Value/Type: string
page_group
Page group by crawl outcome and issues. Possible values:
- HEALTHY: 2xx page with no issues.
- HAVE_ISSUES: 2xx page with at least one issue.
- REDIRECT: 3xx redirect.
- BROKEN: 4xx, 5xx, or 1xx response, or no response.
- BLOCKED: The crawler was blocked from the page.
Value/Type: string
type
Kind of resource the page is. Possible values:
- PAGE: Regular HTML page.
- ROBOTS_TXT: robots.txt file.
- SITEMAP: XML sitemap.
- LLMS_TXT: llms.txt file.
Value/Type: string
page_load_time
Value/Type: integer
js_css_amount
Value/Type: integer
js_css_total_size
Value/Type: integer
js_css_total_size_greater_than
true if the total JavaScript and CSS size exceeds the recommended threshold.Value/Type: boolean
ga
Google Analytics data for the page.
Value/Type: object
page_views
Value/Type: integer
incoming_internal_links
Value/Type: integer
outgoing_internal_links_count
Value/Type: integer
outgoing_external_links_count
Value/Type: integer
page_rank_score
Value/Type: integer
is_new_page
true if the page was first discovered in this audit.Value/Type: boolean
google_structured_data
Structured-data blocks found on the page, one entry per structured-data type.
Value/Type: array
type
Value/Type: string
valid
Value/Type: integer
invalid
Value/Type: integer
blocked_stats
Indexing-block status of the page.
Value/Type: object
ai_search
Whether and why the page is blocked from AI search.
Value/Type: object
blocked
true if the page is blocked from AI search.Value/Type: boolean
reasons
Value/Type: string[]
in_sitemap
true if the page is listed in the sitemap. Populated in List Audited Pages rows.Value/Type: boolean
linking_pages
Internal pages that link to this page.
Value/Type: object
pages
Linking pages returned in this response. The list may be truncated: total contains the full count.
Value/Type: array
page_id
Value/Type: string
url
Value/Type: string
total
pages.Value/Type: integer
canonicalizing_pages
Pages whose canonical URL points to this page.
Value/Type: object
pages
Canonicalizing pages returned in this response. The list may be truncated: total contains the full count.
Value/Type: array
page_id
Value/Type: string
url
Value/Type: string
total
pages.Value/Type: integer
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/pages/3f9a6e21c0d47b58/overview'
-H 'Authorization: Apikey YOUR_API_KEY'{
"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
Path parameters
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
severity
Severity of the issue type.
- ERROR: Critical issue that should be fixed first.
- WARNING: Issue that affects quality but is less critical than an error.
- NOTICE: Informational issue or minor recommendation.
Value/Type: string
issue_type
Issue type of the occurrences in this group. Possible 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
issues
Visible occurrences of this issue type on the page. Hidden occurrences are excluded.
Value/Type: array
page_id
Value/Type: string
page_title
unknown when the page could not be resolved.Value/Type: string
source_url
Value/Type: string
target_url
Value/Type: string
discovered
2026-09-14T08:12:45.312Z). You can use the value in a discovered filter as is.Value/Type: string
occurrence_number
0. Not an identifier: it is assigned per audit report and is not stable across re-crawls.Value/Type: integer
info
Details specific to the issue type. Contains a single key that names the kind of details, and its fields depend on that kind. Possible keys: integer_info, long_info, string_info, hreflang_info, page_lang_info, timestamp_info, list_info, duplicate_info, referenced_duplicated_info, title_duplicate_info, hreflang_link_info, tag_info, resource_type_info, resource_type_and_code_info, resource_type_and_error_type_info, long_with_flag_info, url_code_info, redirect_chain_info, sitemap_broken_link_info, amp_info, dom_time_info, structured_data_info, http_code_info, malformed_llms_info, content_not_optimized_info.
Value/Type: object
visibility
VISIBLE or HIDDEN. Hidden occurrences are excluded from scores and issue counts.Value/Type: string
total
Value/Type: integer
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/pages/3f9a6e21c0d47b58/issues'
-H 'Authorization: Apikey YOUR_API_KEY'{
"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
Path parameters
Response Parameters
data
JavaScript impact summary for the campaign.
Value/Type: object
changed_pages
Value/Type: integer
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/js-impact/changed-pages'
-H 'Authorization: Apikey YOUR_API_KEY'{
"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
Path parameters
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
url
Value/Type: string
changed
true if any tracked parameter changed after JavaScript rendering.Value/Type: boolean
title
Page title before and after JavaScript rendering.
Value/Type: object
value_before_js
Value/Type: string
value_after_js
Value/Type: string
words_count
Body word count before and after JavaScript rendering.
Value/Type: object
value_before_js
Value/Type: integer
value_after_js
Value/Type: integer
links_count
Number of outgoing links before and after JavaScript rendering.
Value/Type: object
value_before_js
Value/Type: integer
value_after_js
Value/Type: integer
canonical
Canonical tag value before and after JavaScript rendering.
Value/Type: object
value_before_js
Value/Type: string
value_after_js
Value/Type: string
meta_description
Meta description before and after JavaScript rendering.
Value/Type: object
value_before_js
Value/Type: string
value_after_js
Value/Type: string
meta_robots
Meta robots tag before and after JavaScript rendering.
Value/Type: object
value_before_js
Value/Type: string
value_after_js
Value/Type: string
client_side_redirect
Client-side redirect target before and after JavaScript rendering.
Value/Type: object
value_before_js
Value/Type: string
value_after_js
Value/Type: string
google_structured_data
Number of Google structured data items before and after JavaScript rendering.
Value/Type: object
value_before_js
Value/Type: integer
value_after_js
Value/Type: integer
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
offset
Value/Type: integer
limit
Value/Type: integer
order_by
Value/Type: string
direction
Value/Type: string
change_status
ALL if the request doesn’t set it.Value/Type: string
parameters
Value/Type: string[]
url_contains
Value/Type: string
total_pages
Value/Type: integer
changed_pages
Value/Type: integer
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'{
"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
Path parameters
Response Parameters
data
Internal linking report of the campaign.
Value/Type: object
incoming_internal_links_groups
Histogram of pages by number of incoming internal links, one entry per bucket. Empty when no data is available.
Value/Type: array
lower_bound
Value/Type: integer
upper_bound
Value/Type: integer
pages_count
Value/Type: integer
outgoing_internal_links_groups
Histogram of pages by number of outgoing internal links, one entry per bucket. Empty when no data is available.
Value/Type: array
lower_bound
Value/Type: integer
upper_bound
Value/Type: integer
pages_count
Value/Type: integer
internal_links_issues
Counts of internal linking issues, one entry per issue type.
Value/Type: array
issue_type
INTERNAL_LINK_BROKEN or SINGLE_INCOMING_INTERNAL_LINK.Value/Type: string
count
Value/Type: integer
checks
count failed.Value/Type: integer
prospective_pages
Pages that would benefit most from more internal links.
Value/Type: array
id
Value/Type: string
url
Value/Type: string
depth
Value/Type: integer
page_rank_score
Value/Type: integer
outgoing_links_total
Value/Type: integer
ga
Google Analytics counters for the page. Can be absent.
Value/Type: object
page_views
Value/Type: integer
link_distribution
Distribution of internal links across page groups. Absent when no data is available.
Value/Type: object
groups
Distribution groups, one entry per group, from the highest PageRank-style score to the lowest.
Value/Type: array
group
Distribution group. Pages are grouped by their PageRank-style score. Possible values:
- HEAVY: PageRank-style score above 70.
- MEDIUM: PageRank-style score above 10, up to 70.
- WEAK: PageRank-style score from 0 to 10.
Value/Type: string
lower_bound
HEAVY and MEDIUM, inclusive for WEAK.Value/Type: integer
upper_bound
Value/Type: integer
pages_count
Value/Type: integer
incoming_links_count
Value/Type: integer
pages_total
Value/Type: integer
links_total
Value/Type: integer
depths
"1"), and each value is the number of pages at that depth. Empty when no data is available.Value/Type: object
meta
Value/Type: object
request_id
Value/Type: string
status_code
Value/Type: integer
success
true if the request succeeded.Value/Type: boolean
curl -L 'https://api.semrush.com/apis/v4/site-audit/v1/campaigns/1234567/linking'
-H 'Authorization: Apikey YOUR_API_KEY'{
"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