SEO Audit & Site Audit Scraper - Broken Links & Score
Pricing
from $0.76 / 1,000 page auditeds
SEO Audit & Site Audit Scraper - Broken Links & Score
Scrape any website for an SEO audit: titles, meta descriptions, H1, canonical, noindex, hreflang, broken links, sitemap and orphan pages, with a 0-100 score per page. For agencies, migrations and weekly checks.
Pricing
from $0.76 / 1,000 page auditeds
Rating
0.0
(0)
Developer
Scrapewise Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Features
Share
SEO Audit: Site Audit and SEO Crawler with a 0-100 Score
This SEO audit tool is a site audit and SEO crawler that visits every page of a website and checks on-page SEO: titles, meta descriptions, H1, canonical, noindex, hreflang, broken links, sitemap, robots.txt, HTTPS and orphan pages.
Give it one site such as https://example.com or a list of sites and get one row per page with a 0-100 score and a list of issues. Use it for client audits, migrations and weekly checks, and export to JSON, CSV or Excel.
At a glance
- Price: US$ 0.90 per 1,000 audited pages + US$ 0.025 per website summary
- A 200-page website: about US$ 0.21, in about 1 minute
- What you get for it: page rows with 60+ fields, a website summary with prioritized issues, broken links checked, an HTML report
- Free: error pages, redirects, non-HTML files, pages skipped by robots.txt
One real row
A page of crawlee.dev, audited on 2026-09-30 in the Apify cloud (lists shortened):
{"type": "page","site": "crawlee.dev","url": "https://crawlee.dev/python","statusCode": 200,"score": 92,"issueCount": 2,"issues": [{ "code": "META_DESCRIPTION_DUPLICATE", "severity": "medium", "message": "Same meta description on 4 pages" },{ "code": "NO_STRUCTURED_DATA", "severity": "low", "message": "No JSON-LD or microdata" }],"depth": 1,"responseTimeMs": 35,"htmlSizeBytes": 69909,"inSitemap": true,"inlinks": 186,"title": "Crawlee for Python · Fast, reliable Python web crawlers.","titleLength": 56,"titlePixels": 502,"metaDescriptionLength": 144,"metaDescriptionDuplicateCount": 4,"h1": ["Build reliable web scrapers. Fast."],"h1Count": 1,"canonical": "https://crawlee.dev/python/","canonicalStatus": "self","noindex": false,"hreflang": [{ "lang": "en", "url": "https://crawlee.dev/python/" }, { "lang": "x-default", "url": "https://crawlee.dev/python/" }],"openGraph": { "title": "Crawlee for Python · Fast, reliable Python web crawlers.", "image": "https://crawlee.dev/python/img/crawlee-python-og.png" },"wordCount": 668,"structuredDataTypes": [],"imagesTotal": 30,"imagesMissingAltCount": 0,"internalLinksCount": 16,"externalLinksCount": 11,"brokenLinksCount": 0}
The website summary of the same run: 200 pages audited in 69 seconds, score 91 (A), 1 broken internal link, 92 pages sharing a meta description, certificate valid until 2026-11-17, llms.txt present. In other runs the same day, htmx.org (279 pages, whole site) came back with 13 broken links, 5 orphan pages and 3 pages returning 404, and a coffee shop on Shopify (150 pages) with a sitemap URL blocked by its own robots.txt and noindex pages listed in the sitemap.
What you can do with it
- Technical SEO audits for your own website or for clients, on a schedule, without installing a desktop crawler.
- Broken link monitoring: every link found on the audited pages is checked, internal and external.
- Pre-launch and migration checks: redirects, canonicals, noindex left behind, sitemap and robots.txt coherence.
- Agency prospecting: audit a list of prospect websites and open the conversation with their score and top 3 issues.
- Content cleanup: find duplicate titles and descriptions, thin pages, missing H1 and images without alt.
Input
| Field | What it does |
|---|---|
startUrls | Websites or domains, one per line. The crawl stays on each website |
maxPagesPerSite | Stop after this many pages per website (default 100, up to 10,000) |
includeSubdomains | Also crawl blog.example.com when you start at example.com |
includePatterns, excludePatterns | Only crawl, or skip, URLs containing a text or wildcard pattern (/blog/, */tag/*) |
crawlSitemapUrls | Fill the remaining budget with sitemap URLs (default on) |
checkExternalLinks, maxLinkChecksPerSite | Check outgoing links for 4xx, 5xx and dead domains (default on, 500 per website) |
minWordCount | Thin content threshold (default 200 words) |
respectRobotsTxt, maxConcurrencyPerSite, delayMs | Politeness: robots.txt and Crawl-delay honored, 4 requests at a time per website by default |
proxyConfiguration | Optional; most websites need none |
{ "startUrls": ["https://crawlee.dev", "example.com"], "maxPagesPerSite": 200, "excludePatterns": ["/tag/"] }
Output
Rows have type: page, site or error. The dataset has two views, Pages and Website summaries.
Page fields: url, finalUrl, statusCode, redirectChain, redirectCount, responseTimeMs, htmlSizeBytes, depth, inlinks, inSitemap, score, issues (code, severity, message), title, titleLength, titlePixels, titleDuplicateCount, metaDescription (+ length, pixels, duplicates), h1, h1Count, headings, headingCounts, headingSkips, canonical, canonicalStatus (self, other, missing), metaRobots, xRobotsTag, noindex, nofollow, hreflang, hreflangMissingReturn, openGraph, twitterCard, lang, viewport, favicon, wordCount, thinContent, structuredDataTypes, microdataTypes, jsonLdInvalid, imagesTotal, imagesMissingAlt, imagesEmptyAlt, internalLinksCount, externalLinksCount, brokenInternalLinks, brokenExternalLinks, linksToRedirects, mixedContent.
Website fields: score, grade, averagePageScore, pagesAudited, crawlComplete, topIssues (prioritized, with pages affected and example URLs), https, httpRedirectsToHttps, wwwConsolidated, certificate (issuer, valid to, days left), robotsTxt (sitemaps declared, crawl delay, AI crawlers blocked), llmsTxt, sitemap (URLs, broken, redirecting, noindex, non-canonical, blocked by robots.txt), orphanPages, duplicateTitles, duplicateMetaDescriptions, brokenLinksFound, averageResponseTimeMs, structuredDataTypes.
Issue codes
High: HTTP_ERROR, TITLE_MISSING, BROKEN_INTERNAL_LINKS, CANONICAL_TO_ERROR, NO_HTTPS, CERTIFICATE_INVALID, ROBOTS_BLOCKS_SITE, SITEMAP_URLS_BROKEN, SITEMAP_URLS_BLOCKED_BY_ROBOTS. Medium: META_DESCRIPTION_MISSING, TITLE_DUPLICATE, META_DESCRIPTION_DUPLICATE, H1_MISSING, NOINDEX, IMAGES_MISSING_ALT, BROKEN_EXTERNAL_LINKS, THIN_CONTENT, REDIRECT_CHAIN, SLOW_RESPONSE, VIEWPORT_MISSING, MIXED_CONTENT, HREFLANG_NO_RETURN, JSON_LD_INVALID, SITEMAP_MISSING, ORPHAN_PAGES, WWW_NOT_CONSOLIDATED, and more. Low: length, heading order, Open Graph, Twitter card, URL hygiene and similar.
Pricing
| Event | Price |
|---|---|
| Page audited (HTML page with a 2xx answer) | US$ 0.90 per 1,000 |
| Website summary | US$ 0.025 per website |
A 50-page blog costs about US$ 0.07, a 1,000-page store about US$ 0.93.
FAQ
Does it render JavaScript? No. It reads the HTML the server sends, which is what search engines index first. Websites that build all content in the browser will show little text; that is itself an SEO finding.
Will it hurt my server? It sends at most 4 requests at a time per website by default, honors robots.txt and Crawl-delay, and you can lower the concurrency or add a delay.
Why is orphanPages.count empty? Orphan pages can only be known when the whole website was crawled. Raise maxPagesPerSite until crawlComplete is true.
Why is a link reported as blocked and not broken? Sites like LinkedIn answer 403 or 999 to every automated check. Those links are counted in externalLinksBlockedCheck and never flagged as broken.
How is the score computed? Each page starts at 100 and loses 15 points per high issue, 6 per medium and 2 per low. The website score is the average page score minus half the weight of the website issues.
Limitations
- JavaScript is not executed and Core Web Vitals are not measured.
- Pixel widths use Arial at Google's sizes (20 px titles, 14 px descriptions); Google's own cut can differ by a few characters.
- Link checks stop at
maxLinkChecksPerSite; the summary tells how many were not checked.
Changelog
- 2026-11-10: lower price: US$ 0.90 per 1,000 audited pages on Free, less on paid plans.
- 2026-09-30, 0.1: first release.