ActorsComparePricingFAQAboutBrowse actors on Apify
SEO Site Audit icon

Search and SEO

SEO Site Audit: Website Crawler and Lighthouse

SEO Site Audit is an Apify actor (API) by CheapAPI Labs. Crawls a site and reports status codes, titles, broken links, duplicates, speed and Lighthouse scores. It costs $6.90 per 1,000 audited pages on the Apify Free plan and $3.40 on Gold, plus $0.002 per website, billed through your Apify account with no API key.

Compared with the most used SEO audit crawler on Apify Store (about 670 users): 1,000 pages of one website costs $6.90 on Free and $3.40 on Gold here and $40 and $30 there (Apify Store listing prices, checked September 2026). Apify platform usage is billed on top here.

Our prices updated 30 October 2026; competitor prices as checked in the comparison. 3 Apify users have run this actor (Apify Store count, 30 October 2026).

Free plan$6.90per 1,000 audited pages
Gold plan$3.40per 1,000 audited pages
API keyNot neededbilled by Apify

What does SEO Site Audit return?

Crawl any website and get a full technical SEO audit for every page, status codes, titles, meta descriptions, H1s, canonicals, indexability, broken links, duplicate content, page speed, an onpage score and a plain English list of issues, plus a site summary and optional Lighthouse scores.

Who this is for: SEO agencies auditing client sites, site owners and marketers checking their own website, and developers who need crawl data in a pipeline or CI check.

Why this Actor

  • From $3.40 per 1,000 audited pages (Gold plan; $6.90 on Free), no monthly fee; Apify platform usage is billed separately, versus $30 (Gold) / $40 (Free) for the most used SEO audit crawler in the Store and $5 (Gold) / $10 (Free) for a 28-field budget crawler. One per page auditor is $0.40 cheaper on Gold ($3 vs $3.40) but finds no broken links, site wide duplicates or Lighthouse scores (see the comparison below).
  • 99 fields per page plus 60+ SEO checks (full field reference): onpage score 0 to 100, a priority (high / medium / low) and a fix hint for every issue, word count, readability, links, page size, timings, broken link targets, Core Web Vitals (optional), and site wide checks (sitemap, robots.txt, SSL, HTTPS/www redirects, 404 page, duplicates across the site).
  • Lighthouse on demand: performance, accessibility, best practices and SEO scores with LCP, TBT, CLS and failed audits, from $0.007 per URL.
  • Crawl exactly what you need: include only and exclude URL patterns (/blog/, *?sort=, *.pdf$), crawl speed from gentle (5 s between requests) to fastest (0.1 s), depth and time limits.
  • Free change monitoring: each page is marked new, changed or unchanged versus the previous run, with the changed fields, schedule it weekly and review only what moved. No browser, proxies or API keys to set up.

One example row from a real run, shortened:

{
  "website": "https://example-shop.com",
  "url": "https://example-shop.com/",
  "pageType": "html",
  "statusCode": 200,
  "redirectUrl": null,
  "onpageScore": 97.07,
  "issuesCount": 4,
  "issues": [
    "Links from HTTPS to HTTP pages",
    "Meta keywords not relevant to page content",
    "Low text-to-HTML ratio",
    "Images without alt text"
  ],
  "issueCodes": [
    "httpsToHttpLinks",
    "irrelevantMetaKeywords",
    "lowContentRate",
    "noImageAlt"
  ],
  "issueDetails": [
    {
      "code": "httpsToHttpLinks",
      "priority": "medium",
      "fixHint": "Change links on this HTTPS page that point to http:// URLs to their https:// versions."
    },
    {
      "code": "irrelevantMetaKeywords",
      "priority": "low",
      "fixHint": "Remove the meta keywords tag (search engines ignore it) or make it match the content."
    },
    {
      "code": "lowContentRate",
      "priority": "low",
      "fixHint": "Little visible text compared with HTML code. Add content or reduce inline code, scripts and markup."
    },
    {
      "code": "noImageAlt",
  …
}

Which fields do you get?

One row per crawled page (HTML pages, broken URLs and redirects) in the dataset:

Field Type Example
id string 3f9c1a0b7d2e4c61 (stable across runs: hash of website + URL)
url string https://example-shop.com/
statusCode number 200
pageType string html / broken / redirect
redirectUrl string https://example-shop.com/ (for redirects)
onpageScore number (0 to 100) 97.07
issuesCount, issues, issueCodes number, array 4, ["Images without alt text", …], ["noImageAlt", …]
issueDetails array [{"code": "noImageAlt", "priority": "medium", "fixHint": "Add descriptive alt text…"}], one entry per issue code, same order
title, titleLength, titleMissing, titleTooShort, titleTooLong, duplicateTitle string, number, boolean "Example Shop – Running Shoes…", 55, false
metaDescription, metaDescriptionLength, metaDescriptionMissing, duplicateMetaDescription string, number, boolean "Shop running shoes…", 123
h1, h1Count, h1Missing, h1List, h2Count, h3Count string, number, boolean, array "Running shoes for every runner", 1
wordCount, textToHtmlRatio, readabilityScore number 1165, 0.047, 31.26
canonicalUrl, canonicalIsSelf string, boolean https://example-shop.com/, true
indexable, nonIndexableReason boolean, string false, robots_txt / meta_tag / redirect / canonicalized_to_other_url
duplicateContent boolean false
hasBrokenLinks, brokenLinksCount, brokenLinks boolean, number, array true, 2, [{"url": "…/missing", "statusCode": 404, "anchorText": "Old offer"}]
hasBrokenResources boolean broken images, scripts or CSS
clickDepth, internalLinksCount, externalLinksCount, inboundLinksCount number 0, 130, 33, 11
imagesCount, imagesWithoutAlt, scriptsCount, renderBlockingScripts number, boolean 58, true, 48, 12
pageSizeBytes, totalTransferSizeBytes, domSize number 148362, 2184530, 162918
loadTimeMs, timeToFirstByteMs, timeToInteractiveMs, largestContentfulPaintMs, cumulativeLayoutShift number (Core Web Vitals: null without Full browser rendering) 486, 112, 512
isHttps, hasStructuredData, socialTags, misspelledWords, deprecatedTags mixed true, {"og:type": "website"}
lighthousePerformanceScore, lighthouseAccessibilityScore, lighthouseBestPracticesScore, lighthouseSeoScore, lighthouse number, object 45, 75, 54, 85 (when Lighthouse is on)
checks object all 60+ true/false checks
changedSinceLastRun, changeType boolean, string true, new / changed / unchanged / baseline (first run)
changedFields, previousOnpageScore, previousStatusCode array, number, number ["title", "onpageScore"], 92.5, 200
website, fetchedAt, scrapedAt string context

Full field reference, all 99 fields of a page row</b> (generated from the dataset schema)

# Field Type Description
1 id * string Stable row ID: first 16 hex characters of SHA-256 of website + page URL. Same page of the same website gets the same ID in every run.
2 website * string The website exactly as you entered it in the input.
3 url * string Crawled page URL.
4 pageType string or null "html" (normal page), "broken" (4xx/5xx or unreachable) or "redirect" (3xx).
5 statusCode number or null HTTP status code of the page.
6 redirectUrl string or null Redirect target (Location header) for redirect pages.
7 onpageScore number or null Onpage score 0 to 100 computed from the page checks (100 = no issues).
8 issuesCount * number Number of issues found on the page.
9 issues * array Issues in plain English, e.g. "Images without alt text".
10 issueCodes array Machine readable issue codes matching "issues", e.g. "noImageAlt".
11 issueDetails array One entry per issue code, in the same order: {code, priority (high / medium / low), fixHint (one sentence fix suggestion)}.
12 title string or null Content of the <title> tag.
13 titleLength number or null Title length in characters.
14 titleMissing boolean or null True if the page has no title (HTML pages only).
15 titleTooShort boolean or null True if the title is shorter than "Title too short below" (default 30).
16 titleTooLong boolean or null True if the title is longer than "Title too long above" (default 65).
17 duplicateTitle boolean or null True if another crawled page of the website has the same title.
18 metaDescription string or null Content of the meta description tag.
19 metaDescriptionLength number or null Meta description length in characters.
20 metaDescriptionMissing boolean or null True if the page has no meta description (HTML pages only).
21 duplicateMetaDescription boolean or null True if another crawled page has the same meta description.
22 h1 string or null First H1 heading on the page.
23 h1Count number or null Number of H1 headings.
24 h1Missing boolean or null True if the page has no H1 (HTML pages only).
25 h1List array or null All H1 headings on the page.
26 h2Count number or null Number of H2 headings.
27 h3Count number or null Number of H3 headings.
28 wordCount number or null Words of visible text on the page.
29 textToHtmlRatio number or null Visible text size divided by HTML size (0 to 1).
30 readabilityScore number or null Flesch Kincaid readability index of the page text.
31 titleRelevance number or null How well the title matches the page content (0 to 1).
32 descriptionRelevance number or null How well the meta description matches the page content (0 to 1).
33 canonicalUrl string or null URL in the canonical link tag.
34 canonicalIsSelf boolean or null True if the canonical URL points to the page itself.
35 indexable boolean or null True if search engines may index the page.
36 nonIndexableReason string or null Why the page is not indexable, e.g. robots_txt, meta_tag, redirect, canonicalized_to_other_url, error_status_code.
37 metaRobotsFollow boolean or null False if the meta robots tag says nofollow.
38 duplicateContent boolean or null True if another crawled page has (nearly) the same content.
39 hasBrokenLinks boolean or null True if the page links to a broken URL.
40 brokenLinksCount number Number of broken links listed for the page.
41 brokenLinks array or null Broken link targets (URL, status code, anchor text), up to 100 per page.
42 hasBrokenResources boolean or null True if an image, script or stylesheet on the page is broken.
43 clickDepth number or null Clicks from the start page (0 = start page).
44 internalLinksCount number or null Links to pages of the same website.
45 externalLinksCount number or null Links to other websites.
46 inboundLinksCount number or null Links from other crawled pages to this page.
47 imagesCount number or null Number of images on the page.
48 imagesSizeBytes number or null Total size of the page images in bytes.
49 imagesWithoutAlt boolean or null True if at least one image has no alt text.
50 scriptsCount number or null Number of scripts on the page.
51 stylesheetsCount number or null Number of stylesheets on the page.
52 renderBlockingScripts number or null Number of render blocking scripts.
53 renderBlockingStylesheets number or null Number of render blocking stylesheets.
54 pageSizeBytes number or null HTML size in bytes (uncompressed).
55 compressedSizeBytes number or null HTML size in bytes as transferred (compressed).
56 totalTransferSizeBytes number or null Total transferred bytes including resources.
57 domSize number or null Size of the rendered DOM.
58 loadTimeMs number or null Total page load time in ms.
59 timeToFirstByteMs number or null Time to first byte (server waiting time) in ms.
60 downloadTimeMs number or null HTML download time in ms.
61 connectionTimeMs number or null Connection time in ms.
62 timeToInteractiveMs number or null Time to interactive in ms.
63 domCompleteMs number or null Time until the DOM is complete in ms.
64 largestContentfulPaintMs number or null Largest Contentful Paint in ms (with Full browser rendering only).
65 firstInputDelayMs number or null First Input Delay in ms (with Full browser rendering only).
66 cumulativeLayoutShift number or null Cumulative Layout Shift (with Full browser rendering only).
67 isHttps boolean or null True if the page is served over HTTPS.
68 hasStructuredData boolean or null True if the page has schema.org / microdata markup.
69 metaKeywords string or null Content of the meta keywords tag.
70 charset any Character set of the page (code or name).
71 generator string or null Content of the meta generator tag (CMS).
72 faviconUrl string or null Favicon URL.
73 socialTags object or null Open Graph and Twitter Card tags as key/value pairs.
74 misspelledWords array or null Misspelled words (with "Check spelling" on).
75 deprecatedTags array or null Deprecated HTML tags used on the page.
76 duplicateMetaTags array or null Meta tags that appear more than once.
77 contentEncoding string or null Content Encoding header, e.g. gzip or br.
78 mediaType string or null Content Type media type, e.g. text/html.
79 server string or null Server header.
80 cacheable boolean or null True if the page may be cached.
81 cacheTtlSeconds number or null Cache lifetime in seconds.
82 urlLength number or null URL length in characters.
83 lastModified object or null Last modified dates from the HTTP header, sitemap and meta tag.
84 customJsResult any Result of your "Custom JavaScript" snippet.
85 checks object or null All 60+ page checks as true/false (with "Include all check results" on).
86 lighthousePerformanceScore number or null Lighthouse performance score 0 to 100 (Lighthouse pages only).
87 lighthouseAccessibilityScore number or null Lighthouse accessibility score 0 to 100.
88 lighthouseBestPracticesScore number or null Lighthouse best practices score 0 to 100.
89 lighthouseSeoScore number or null Lighthouse SEO score 0 to 100.
90 lighthouse object or null Lighthouse details: device, scores, FCP, LCP, TBT, CLS, Speed Index, TTI, server response time, failed audits, version.
91 changedSinceLastRun boolean or null True if the page is new or changed since the previous run (null on the first run).
92 changeType string or null new, changed, unchanged or baseline (first run).
93 changedFields array Which fields changed since the previous run, e.g. ["title", "onpageScore"].
94 previousOnpageScore number or null Onpage score in the previous run.
95 previousStatusCode number or null Status code in the previous run.
96 javascriptRendered boolean True if the page was crawled with JavaScript rendering.
97 browserRendered boolean True if the page was crawled with full browser rendering.
98 fetchedAt string or null When the page was fetched (ISO 8601).
99 scrapedAt * string When this run started (ISO 8601).

* always present and never null. Other fields are null (or an empty array) when the value does not apply to the page, e.g. Lighthouse fields on pages without a Lighthouse audit. checks is left out when Include all check results is off.

Issue priorities and fix hints: issueDetails gives every issue code a priority, high (hurts indexing, rankings or visitors directly, e.g. broken pages, notIndexable, duplicate content), medium (worth fixing soon, e.g. missing meta description, slow server) or low (minor, e.g. missing image title attributes), and a one sentence fixHint. They come from a fixed table per issue code, so they are free and consistent between runs; sort by priority to build a to do list.

That is 99 fields per page, all declared in the dataset schema (see the reference above). Plus a site summary per website in the key value store record SITE_SUMMARY: overall onpage score, pages crawled, top issues with page counts, broken links/resources, duplicate titles/descriptions/content, not indexable pages, redirect loops, CMS, server, SSL validity/expiry, sitemap/robots.txt/HTTPS/www redirect/404 checks, and, with change monitoring, new/changed/unchanged page counts and the previous run's onpage score.

How much does SEO Site Audit cost?

You pay per event, through your Apify account. Main price: $6.90 per 1,000 audited pages on the Apify Free plan and $3.40 on Gold, plus $0.002 per website. Every event and plan:

Price per event in USD by Apify plan. Platinum and Diamond pay the Gold price. Apify platform usage: billed separately by Apify.
EventFreeBronzeSilverGold
Audited pageOne crawled page delivered to your dataset with status code, title/meta/H1 checks, word count, canonical, indexability, broken links, duplicate flags, speed metrics, onpage score and issues list. Loading of images, scripts and CSS is included.$0.0069$0.0055$0.0045$0.0034
Website summaryCharged once per website that delivered at least one page: the site summary with overall score, issue counts, sitemap/robots.txt/SSL checks and crawl status.$0.002$0.002$0.002$0.002
JavaScript rendering (add on)Only when "JavaScript rendering" is on: charged per crawled page (delivered, or charged as a checked page) because every crawled page is rendered. Needed for sites built with React, Vue, Angular and similar.$0.002$0.002$0.002$0.002
Full browser rendering with Core Web Vitals (add on)Only when "Full browser rendering" is on: charged per crawled page (delivered, or charged as a checked page) for real browser rendering that measures Core Web Vitals such as LCP and CLS. JavaScript rendering is charged as well.$0.0065$0.0065$0.0065$0.0065
Lighthouse auditCharged per page with a successful Lighthouse audit (performance, accessibility, best practices and SEO scores, Core Web Vitals and failed audits). Tests the service could not run are free; see "Lighthouse test without result".$0.07$0.021$0.014$0.007
Crawled page not deliveredCharged per page that was crawled but not delivered: left out by "Only pages with issues" or your URL patterns (including the start page crawled for link discovery), beyond your page limit, or when the crawl results could not be read or the crawl start got no answer (the crawl may still run). Never charged when every crawled page is delivered.$0.0009$0.0009$0.0009$0.0009
Website crawled without delivered pagesCharged once per website whose crawl was started but delivered no page (unreachable site, everything filtered out, results unreadable, or the crawl start got no answer). Websites with delivered pages pay the website summary instead. Rejected input is free.$0.0003$0.0003$0.0003$0.0003
Lighthouse test without resultOnly with Lighthouse on: charged per Lighthouse test that the service ran (or may have run, when no answer arrived) but that returned no usable report, for example when the page could not be loaded. Tests the service rejected or could not start are free.$0.0065$0.0065$0.0065$0.0065

How do I call SEO Site Audit API from code?

Every run is one HTTP request to the Apify API with your Apify token; the input below is the actor's own example. The synchronous endpoint returns the rows in the response for runs up to 300 seconds; for longer runs start a run and fetch its dataset.

curl -X POST "https://api.apify.com/v2/acts/cheapapi~seo-site-audit/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"startUrls":[{"url":"https://books.toscrape.com"}],"maxPagesPerSite":20,"runLighthouse":false,"crawlSpeed":"normal"}'

With the JavaScript client:

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('cheapapi/seo-site-audit').call({
  "startUrls": [
    {
      "url": "https://books.toscrape.com"
    }
  ],
  "maxPagesPerSite": 20,
  "runLighthouse": false,
  "crawlSpeed": "normal"
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

How does SEO Site Audit compare with alternatives?

A typical run: 1,000 pages of one website. Prices are the per page charge × 1,000 on the Free and Gold plans (event fees only). For this Actor, Apify platform usage is billed separately by Apify (at the default 256 MB a small run typically uses about $0.001 to $0.005), on top of the price shown.

1,000 pages (Free / Gold) Crawls the whole site Fields per page (as listed) Broken link targets Site wide duplicates Lighthouse JavaScript rendering Change tracking
Most used SEO audit crawler (~670 users) $40 / $30 ✓ ~40 (as listed) ✓ titles, headings lab speed metrics ✗ ✗
Most used SEO data extractor (~480 users) $300 / $10 ✗ (your URLs only) 11 (as listed) ✗ ✗ ✗ ✓ ✗
Budget SEO audit crawler (~110 users) $10 / $5 ✓ 28 (as listed) ✗ ✗ ✗ ✗ ✗
Low cost per page auditor (~190 users) $5 / $3 optional not stated (structured data focus) ✗ ✗ ✗ ✗ ✗
This Actor $6.90 / $3.40 plus platform usage ✓ 99 + 60+ checks ✓ (URL, status, anchor) titles, descriptions, content ✓ ($0.007 to $0.07 per URL) ✓ (+$0.002 per page) ✓ free

The low cost per page auditor costs $1.90 (Free) / $0.40 (Gold) less per 1,000 pages. It checks structured data, social tags and headings of the URLs you give it; this Actor adds broken link targets, duplicate titles/descriptions/content across the site, indexability reasons, Lighthouse, JavaScript rendering, a site summary (sitemap, robots.txt, SSL, redirects) and free change tracking between runs. Our total includes the $0.002 website summary fee. Rival field counts are as listed on their Store pages, not independently verified.

Cheaper still: a very new crawler with about 4 users charges $0.50 per 1,000 pages (plus a small start fee and platform usage) for a basic audit, status, title/description, canonical, headings, word count, links, image alt gaps, indexability and structured data. If that is all you need, it costs less; it does not list broken link targets, site wide duplicates, Lighthouse, JavaScript rendering or change tracking.

Lighthouse only? If you just need Lighthouse / PageSpeed scores for URLs you already know, a PageSpeed API Actor (90 users) is cheaper at about $0.002 per URL versus our $0.007 (Gold) – $0.07 (Free), and a free Lighthouse Actor (200 users) charges only platform usage. Use this Actor when you also need the crawl, issues, broken links and duplicates.

Prices, user counts and feature lists from public Apify Store listings, checked September 2026.

Not included

  • Keyword rankings and search volumes, this Actor audits pages, not Google positions. Use Domain SEO Analyzer for the keywords a domain ranks for, or Keyword Research Tool for volumes and ideas.
  • Backlinks (who links to the site), only links on the crawled pages are analysed. Use Backlink Checker.
  • Real user (field) Core Web Vitals, Lighthouse and full browser rendering measure lab values from one test run, not visitor data.
  • Pages behind a login, only publicly reachable pages are crawled.
  • Automatic fixes, you get issues and data, not changes to your website.

What is it used for?

  • Technical SEO audits for clients or your own sites, export the issue list straight into a spreadsheet.
  • Pre- and post migration checks: find broken links, redirect chains, lost canonicals and not indexable pages.
  • Content quality reviews: thin content, missing or duplicate titles, descriptions and H1s, low readability.
  • Scheduled monitoring: run weekly; changeType and changedFields show which pages are new or changed (title, meta description, H1, canonical, status, indexability, issues, score) since the last run.
  • Section audits: audit only /blog/ or /products/ with include patterns, and skip faceted or cart URLs with exclude patterns.
  • Performance tracking with Lighthouse and Core Web Vitals for your key landing pages.
  • Lead generation for agencies: audit prospects' websites and send them the top issues.

What is not included?

  • Keyword rankings and search volumes, this Actor audits pages, not Google positions. Use Domain SEO Analyzer for the keywords a domain ranks for, or Keyword Research Tool for volumes and ideas.
  • Backlinks (who links to the site), only links on the crawled pages are analysed. Use Backlink Checker.
  • Real user (field) Core Web Vitals, Lighthouse and full browser rendering measure lab values from one test run, not visitor data.
  • Pages behind a login, only publicly reachable pages are crawled.
  • Automatic fixes, you get issues and data, not changes to your website.

What are the limits?

  • Lighthouse runs only on crawled HTML pages with status 2xx (the start page first); URLs outside the crawl are not tested.
  • The crawler identifies itself with its own user agent; sites with aggressive bot protection may block it (try Use extra crawler network or a Custom user agent).
  • Core Web Vitals per page (largestContentfulPaintMs, cumulativeLayoutShift, firstInputDelayMs) are measured only with Full browser rendering; otherwise they are null. Lighthouse always measures them.
  • Broken link details are listed for up to 5,000 broken links per website (100 per page).
  • If the crawl reaches Max crawl time, it is stopped and the pages crawled so far are delivered (site wide duplicate checks may then be incomplete).
  • When several websites share a small budget, pages are allocated in input order, so the last websites may be skipped.
  • URL patterns match the URL path and query from its start (robots.txt style * and $), not full regular expressions. Pages behind excluded URLs can still be reached if other links point to them through included sections.
  • Change monitoring compares with the last run of the same website in the same monitoring store; changing thresholds or skipped checks changes onpage scores and shows up as changes. pagesNotCrawledAgain can include pages that were simply outside this run's page limit. Up to 40,000 URLs per website are remembered.

Questions about SEO Site Audit

Is there a limit on the Apify Free plan?

Yes: up to $0.25 of this Actor's results per calendar month, enough to try it. Apify pays developers nothing for Free plan usage while our data costs are real, so this keeps the Actor sustainable. Runs that reach the allowance stop cleanly and keep everything collected so far; the allowance resets on the 1st of the month. Any paid Apify plan has no limit.

Is it legal?

Crawling publicly available pages for SEO analysis is generally fine, but only audit websites you own or have permission to audit, respect the website's terms, and keep a gentle crawl speed for sites you don't control. Turning off Respect robots.txt should be limited to your own sites.

How fresh is the data?

Every run crawls the website live, so results reflect the site at the time of the run (fetchedAt per page).

Why did I get fewer pages than "Max pages per website"?

The website may have fewer reachable pages, robots.txt or your URL patterns may exclude parts of it, the crawl may have hit Max crawl time or Max crawl depth, or your Maximum cost per run capped it. Images, scripts and CSS files are checked but not returned as rows. See RUN_SUMMARY (including pagesFilteredOutByUrlPatterns) and crawlStopReason in SITE_SUMMARY.

How do I audit only part of a website?

Put a section URL into Websites (e.g. https://example.com/blog/) and add /blog/ to Only URLs matching. Use Exclude URLs matching for carts, filters, tag pages or PDFs.

How does change monitoring work?

After each run, a compact fingerprint of every page (status, onpage score, title, meta description, H1, canonical, indexability, word count, issues) is saved in the named key value store seo-site-audit-monitor in your account. The next run of the same website compares against it and fills changedSinceLastRun, changeType and changedFields. The first run is the baseline. It is free; switch it off with Track changes since the last run.

How do I control the budget?

Set Maximum cost per run in the run options: the page limit is reduced up front so the run never goes over it. Rendering add ons and Lighthouse are only charged when you switch them on.

Why was I charged for "Crawled page not delivered" or "Website crawled without delivered pages"?

The crawler visited those pages, which costs the same whether or not you keep them. With Only pages with issues or URL patterns, pages that do not qualify cost $0.0009 each instead of the full page price. A website that could not be reached still costs $0.0003 + one checked page. If the crawl results could not be read, or the crawl start got no answer (the crawl may still have run), the pages up to the crawl's page limit are charged as checked pages; RUN_SUMMARY lists pagesChecked, websitesChecked and the error. With JavaScript or browser rendering on, the rendering add on applies to checked pages too, because they were rendered.

Why was I charged $0.0065 for a Lighthouse test without result?

The test ran (or may have run, when no answer arrived) but returned no usable report, for example because the page did not load in the test browser. Tests that could not be started are free. RUN_SUMMARY.lighthouseChecked counts them.

Is Apify platform usage included?

No. Apify platform usage (compute) is billed separately by Apify, on top of the event fees. At the default 256 MB memory a small run typically uses about $0.001 to $0.005; long crawls wait longer and use more. Each run's usage is shown in Apify Console.

Can I schedule it?

Yes, create an Apify Schedule (e.g. every Monday) and a webhook or Make/Zapier scenario that sends you the rows where changeType is new or changed.

Which export formats are available?

JSON, CSV, Excel, XML, HTML and RSS from the Output tab or the API, plus Google Sheets through the integration.

How long does an audit take?

Roughly 1 to 3 minutes for 20 pages and 5 to 10 minutes for a few hundred pages at the normal crawl speed. Choose Fast only for sites that can handle it.

Something doesn't work, where do I get help?

Open an issue on the Actor's Issues tab with the run link and your input (without private data) and we will look into it.

Run SEO Site Audit on Apify

The form opens with a working example. Free Apify accounts get a small monthly allowance.

Open on Apify