SEO Audit Tool - Technical On-Page SEO Checker & Score avatar

SEO Audit Tool - Technical On-Page SEO Checker & Score

Pricing

from $20.00 / 1,000 page auditeds

Go to Apify Store
SEO Audit Tool - Technical On-Page SEO Checker & Score

SEO Audit Tool - Technical On-Page SEO Checker & Score

Check the SEO of a website or page: technical and on-page audit of titles, meta descriptions, canonicals, robots, hreflang, headings, alt text, structured data, broken links, robots.txt and sitemap, with a 0-100 score and issue list per page. Site crawl. $20 per 1,000 pages; failed pages are free.

Pricing

from $20.00 / 1,000 page auditeds

Rating

0.0

(0)

Developer

Tenfold Fleet

Tenfold Fleet

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

What does SEO Audit Tool do?

SEO Audit Tool runs a technical and on-page SEO audit of any website and returns one row per page with a 0-100 SEO score, a prioritized issue list (error / warning / notice) and every on-page signal search engines read: title and meta description length, canonical URL, robots meta and X-Robots-Tag, hreflang, H1-H3 headings, word count, image alt text, internal and external links, broken links, mixed content, Open Graph and Twitter Card tags, JSON-LD structured data, robots.txt and XML sitemap.

Audit a list of URLs, or switch on crawl mode to audit a whole site: it starts from your URL and follows internal links and the sitemap.xml, breadth-first, up to the page limit you set. Plain HTTP requests, no browser, so it's fast: about 100 pages per minute. Use it as an SEO audit API, a bulk website SEO checker, or a lightweight Screaming Frog alternative in the cloud.

Why use an SEO audit tool?

  • ๐Ÿ”Ž Technical SEO audits for clients: get structured, sortable findings instead of a PDF, then export to Google Sheets or Excel.
  • ๐Ÿท๏ธ Find missing or duplicate titles and meta descriptions across a whole site (see the SUMMARY record).
  • ๐Ÿ”— Find broken links (404, 410, 5xx, dead domains, bad SSL) on every page.
  • ๐Ÿšฆ Check indexability: noindex tags, X-Robots-Tag headers, robots.txt blocks and canonicals pointing elsewhere.
  • ๐Ÿ› ๏ธ Monitor SEO in CI or on a schedule: run after each deploy and alert when the score drops.
  • ๐Ÿค– Feed AI agents and SEO dashboards with a factual, scored snapshot of any page via API or MCP.

Runs on the Apify platform, so you get an API, scheduling, webhooks and integrations with Make, Zapier, n8n, Google Sheets and Slack.

What data can it extract?

FieldWhat you get
score, issues[], errorCount, warningCount, noticeCount0-100 SEO score and issues with code, severity and a plain-English message
statusCode, redirectChain[], responseTimeMs, pageSizeBytesHTTP status, every redirect hop with its status, server response time, HTML size
isHttps, mixedContent[]HTTPS check and HTTP resources loaded on HTTPS pages
title, titleLength, metaDescription, metaDescriptionLengthTitle and description with character counts
canonicalUrl, canonicalIsSelf, metaRobots, xRobotsTag, isIndexable, blockedByRobotsTxtIndexability signals
hreflang[], lang, viewport, charsetInternational and mobile signals
h1, h2, h3 (+ counts), wordCountHeading texts and visible word count
imagesCount, imagesMissingAlt, imagesMissingAltSample[]Image alt-text coverage
internalLinks, externalLinks, nofollowLinks, brokenLinks[]Link counts and broken links (optional check)
openGraph, twitterCardAll og: and twitter: tags
schemaTypes[]Structured data types from JSON-LD and microdata (Organization, Product, Article...)
robotsTxt, sitemaps[]Site-level robots.txt and XML sitemap presence

How to run an SEO audit of a website

  1. Click Try for free.
  2. Paste one or more URLs into URLs to audit.
  3. To audit a whole site, switch on Crawl each site and set Max pages per site.
  4. Optionally switch on Check for broken links.
  5. Click Start, then sort the table by Score to see the weakest pages first. Download as JSON, CSV, Excel or HTML, or fetch results through the API.

How much does it cost?

You pay $0.02 per page successfully audited ($20 per 1,000 pages), Apify platform usage included. Pages that fail are free: unreachable sites, timeouts, HTTP 4xx/5xx responses and bot-protection pages are returned as error rows and never charged. Set a maximum cost per run in the run options and the audit stops when it is reached. Apify's free plan includes monthly credit, enough to audit hundreds of pages at no cost.

How is the SEO score calculated?

Every page starts at 100. Each issue found subtracts a fixed number of points (minimum score 0):

Issue codeSeverityPoints
title-missingerror-15
not-httpserror-15
noindexerror-15
blocked-by-robots-txterror-15
mixed-contenterror-10
viewport-missingerror-10
broken-linkserror-10
meta-description-missingwarning-8
h1-missingwarning-8
redirect-chain (2+ redirects)warning-5
slow-response (over 2,000 ms)warning-5
images-missing-altwarning-5
title-too-long (over 60 characters)warning-4
page-too-large (HTML over 1 MB)warning-4
structured-data-invalid (JSON-LD that doesn't parse)warning-4
canonical-missingnotice-3
lang-missingnotice-3
thin-content (under 200 words)notice-3
title-too-short (under 30 characters)notice-2
meta-description-too-long (over 160 characters)notice-2
meta-description-too-short (under 70 characters)notice-2
multiple-h1notice-2
canonical-points-elsewherenotice-2
open-graph-missing (no og:title or og:image)notice-2
structured-data-missingnotice-2
robots-txt-missingnotice-2
sitemap-missingnotice-2

noindex counts robots meta tags (robots, googlebot) and X-Robots-Tag headers that apply to Google. broken-links is only checked when Check for broken links is on.

Input

{
"urls": ["https://www.example.com"],
"crawl": true,
"maxPagesPerSite": 50,
"checkBrokenLinks": true,
"maxLinksToCheck": 50
}

With crawl off (default), only the listed URLs are audited, which is ideal for checking a set of landing pages.

Output

One row per page. Example (shortened):

{
"url": "http://bbc.co.uk/",
"finalUrl": "https://www.bbc.co.uk/",
"statusCode": 200,
"score": 93,
"errorCount": 0,
"warningCount": 1,
"noticeCount": 1,
"issues": [
{ "code": "redirect-chain", "severity": "warning", "message": "URL goes through 2 redirects before the final page." },
{ "code": "title-too-short", "severity": "notice", "message": "Title is 10 characters; aim for 30-60." }
],
"redirectChain": [{ "url": "http://bbc.co.uk/", "statusCode": 301 }, { "url": "https://bbc.co.uk/", "statusCode": 301 }],
"responseTimeMs": 606,
"title": "BBC - Home",
"titleLength": 10,
"metaDescriptionLength": 144,
"canonicalUrl": "https://www.bbc.co.uk/",
"canonicalIsSelf": true,
"isIndexable": true,
"hreflang": [{ "lang": "en-gb", "url": "https://www.bbc.co.uk/" }],
"h1Count": 1,
"h1": ["BBC Homepage"],
"wordCount": 1405,
"imagesCount": 87,
"imagesMissingAlt": 0,
"internalLinks": 121,
"externalLinks": 16,
"schemaTypes": ["CollectionPage", "NewsMediaOrganization", "ItemList"],
"robotsTxt": true,
"sitemaps": ["https://www.bbc.co.uk/sitemap.xml"],
"error": null
}

The run also saves a SUMMARY record in the key-value store with, per site: pages audited, average score, the most common issues, and duplicate titles and meta descriptions with the URLs that share them.

Tips

  • Bare domains work: example.com is fetched as https://example.com, with an http:// fallback.
  • Crawl mode skips files (PDF, images, ZIP), pages disallowed by robots.txt, and links that redirect to another domain.
  • Broken-link results are cached, so links in the site header and footer are checked only once per run.
  • If a site blocks datacenter traffic, enable Apify Proxy in the input.

FAQ

Does it render JavaScript?

No. It reads the HTML the server returns, the same first view Google gets before rendering. That keeps it fast and cheap. Pages built entirely in the browser (empty HTML shells) will show low word counts and missing headings, which is itself a useful SEO signal.

Does it measure Core Web Vitals?

No. It reports server response time and HTML size. For lab Core Web Vitals use Google PageSpeed Insights.

Some servers reject automated requests. To avoid false alarms, only definite failures count as broken: HTTP 404, 410 and 5xx (except 503), dead domains, refused connections and invalid SSL certificates. Bot-blocking responses (400, 401, 403, 429, 999...) and timeouts are not reported. Failed HEAD requests are retried with GET.

Can I audit thousands of pages?

Yes. Add as many URLs as you like, or set Max pages per site up to 5,000 in crawl mode. At about 100 pages per minute, 5,000 pages take close to an hour, so raise the run Timeout for very large crawls (the SUMMARY record is saved as the run goes). Use the run's maximum-cost setting to cap spend.

Disclaimer

This tool reads publicly available web pages only, the same way a search engine crawler does. Only audit sites you own or have permission to test, and respect each site's terms of service.

More tools from Tenfold Fleet

ActorPrice
ATS Jobs Scraper - Greenhouse, Lever, Ashby & 5 More$2 per 1,000 (job posting)
Website Contact Scraper - Emails, Phones & Socials$8 per 1,000 (website with contacts)
Google Ads Transparency Center Scraper - Competitor Ads by Site$1 per 1,000 (ad scraped)
Google News Scraper - Articles, Real URLs & Full Text$2 per 1,000 (article)
Keyword Search Volume, CPC & Difficulty Checker (Bulk)$5 per 1,000 (keyword with data)
Remote Jobs Aggregator - RemoteOK, WWR, Himalayas & 4 more$1.2 per 1,000 (unique remote job)
Shopify Products Scraper - Prices, Variants & Stock$0.8 per 1,000 (product)
Shopify App & Theme Detector - Store Analyzer & Contacts$8 per 1,000 (shopify store analyzed)
Sitemap URL Extractor - All URLs from sitemap.xml & robots.txt$0.4 per 1,000 (url extracted)
Technology Detector - Wappalyzer & BuiltWith Alternative$10 per 1,000 (website analyzed)
URL to Markdown - Web Page to LLM-Ready Text for AI Agents$1 per 1,000 (page converted)
Workday Jobs Scraper - myworkdayjobs.com API with Salary$1.5 per 1,000 (job posting)
YouTube Comments Scraper - Replies, Likes & Sort by Newest$0.6 per 1,000 (comment scraped)
YouTube Transcript Scraper - Captions & Subtitles API$3 per 1,000 (transcript extracted)