Technical SEO Audit: Site Crawl, 0-100 Score, $3/1k avatar

Technical SEO Audit: Site Crawl, 0-100 Score, $3/1k

Pricing

Pay per event

Go to Apify Store
Technical SEO Audit: Site Crawl, 0-100 Score, $3/1k

Technical SEO Audit: Site Crawl, 0-100 Score, $3/1k

Audit any public page or crawl a whole site over plain HTTP: 0-100 score with category scores, top issues, broken links, canonical, hreflang, JSON-LD, redirects, TTFB, duplicate titles and descriptions, plus new/changed monitoring. Respects robots.txt. $0.003 per page.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Detroit Web Agent - Open Data

Detroit Web Agent - Open Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

Technical SEO Audit: features, price and a real output row

Run it free on Apify

Price per 1,000 pagesFree planStarterScaleBusiness
This Actor$3.00$3.00$3.00$3.00

Technical SEO Audit sample output table from a real run

Video walkthrough: Watch the 1-minute demo on YouTube

Technical SEO Page Audit output preview: real run results as a table

  • In short: Technical SEO Page Audit (Apify actor transparent_meteorite/technical-seo-page-audit) audits public web pages over plain HTTP and returns on-page SEO data plus a prioritised issue list and score.
  • Who it is for: SEO agencies, site owners and developers checking releases, lead-gen teams auditing prospect sites.
  • Input: a list of URLs, max pages, check broken links, max links to check, request delay.
  • Output: title, meta description, canonical, H1-H3, word count, internal/external and broken links, images missing alt, Open Graph, hreflang, JSON-LD types, redirect chain, TTFB, issues with severity, score.
  • Price: $0.003 per page plus $0.00005 per run start. Pay per result, no subscription; Apify's free plan credit covers a first test.
  • Limits: no JavaScript rendering, so client-side-only content is not seen; respects robots.txt.

Key facts

  • Actor name: Technical SEO Page Audit
  • Actor ID: transparent_meteorite/technical-seo-page-audit
  • Store page: https://apify.com/transparent_meteorite/technical-seo-page-audit
  • Data source: the public pages themselves
  • Pricing model: pay per event (apify-actor-start $0.00005, page-audited $0.003)
  • Output formats: JSON, CSV, Excel, XML, HTML table, RSS (Apify dataset)
  • Access: Apify Console, REST API, JavaScript/Python clients, schedules, webhooks, Apify MCP server
  • Login or third-party API key needed: no, only an Apify account
  • Also known as: SEO audit API, broken link checker, bulk on-page SEO checker, hreflang checker, technical SEO crawler
  • Maintainer: transparent_meteorite (independent developer)
  • Last updated: 2026-10-07

Audit any public page for technical SEO in one request: title, meta, canonical, headings, links, broken links, images without alt, Open Graph and Twitter tags, hreflang, JSON-LD, redirect chain, TTFB, and a prioritised issues list with a 0-100 score. Plain HTTP, no browser, robots.txt respected, $0.003 per page.

Paste a list of URLs, press Start, get one flat row per page. Every problem comes with a code, a severity (error, warning, info) and a plain-English message, so the output can feed a dashboard, a spreadsheet or an alert without any post-processing.

Run in 30 seconds

  1. Open the prefilled run (free Apify account; it creates a saved task with a working input).
  2. Press Start. The input is small on purpose, so the first run is quick and costs a few cents at most.
  3. Open the Output tab, switch to Table view, download as CSV, Excel or JSON.

Prefilled input:

{
"urls": [
"https://example.com",
"https://crawlee.dev"
],
"maxPages": 2,
"checkBrokenLinks": true,
"maxLinksToCheck": 5,
"requestDelayMs": 500,
"userAgent": "TechnicalSeoAuditBot/1.0 (+https://apify.com/transparent_meteorite)"
}

Ready-made presets by use case (each opens as a saved task you can edit):

Why choose this over alternatives

  • One row per page with a prioritised issues list and a score.
  • Broken links, canonical, hreflang, H1-H3, Open Graph/Twitter, JSON-LD types, redirect chain and TTFB.
  • Respects robots.txt; plain HTTP, no browser, easy to schedule.
  • $0.003 per page audited.
CheckThis actor
Automated tests on the current build130 passed, 0 failed (parser, issue rules, robots, redirects)
Price$0.003 per page

Measured 2026-10-09 (source: this actor's own test suite and runs).

Sample output (real run)

PageStatusScoreTitle lenWordsLinks int / extBrokenImgs no altTTFB msIssues
https://apify.com200100471,16278 / 5800192none
https://crawlee.dev200944022116 / 100029thin-content (warning), json-ld-missing (info)
https://example.com2007214250 / 000245 warnings, 3 info

Full rows carry about 50 fields, see samples/output.json.

What you get

  • Status and speed: HTTP status, full redirect chain with each hop's status, final URL, time to first byte, total response time, HTML size, content type, X-Robots-Tag.
  • On-page tags: title and length, meta description and length, canonical (and whether it points to itself), meta robots, lang, viewport, charset.
  • Structure: H1 text and counts of H1, H2 and H3, the heading outline, empty headings, visible word count.
  • Links: internal and external link counts, nofollow count, empty-anchor links, and a broken-link check (404, 410, 5xx and unreachable hosts) with the failing URLs and status codes.
  • Images: total, missing alt attribute. Decorative alt="" is counted separately and never flagged.
  • Social: all Open Graph and Twitter Card tags as objects.
  • International: every hreflang entry, with validation of codes and the self-reference.
  • Structured data: JSON-LD @type values (including @graph and nested types) and a count of invalid JSON-LD blocks.
  • Verdict: issues (code, severity, message), issueCounts, overallScore / score (0-100: 100 minus 15 per error, 5 per warning, 1 per info) and indexable (true, false or null when unfetched).
  • Category scores: categoryScores gives a 0-100 score for each of eight groups (indexability, meta, content, links, social, structuredData, performance, international), and topIssues lists the 3 most important problems on the page, so you can sort a whole site by what to fix first.
  • Site summary row: with 2 or more pages the run ends with one free row (recordType: "site-summary") holding the average score, per-category averages, duplicate titles and duplicate meta descriptions (with the URLs sharing them) and the most common issues across the site.

Inputs

InputWhat it does
urlsPages to audit (a missing https:// is added). Empty input falls back to three example sites.
crawlPagesFollow same-site internal links (breadth first) from your URLs until maxPages, so one homepage becomes a whole-site audit.
maxCrawlDepthHow many link hops to follow when crawling (1-10, default 2).
maxPagesCap on pages audited and billed in the run.
excludeUrlPatternsSkip URLs by substring, * wildcard or /regex/, for start URLs, crawled pages and link checks.
auditCategoriesRun and score only the groups you tick. Unticking links skips every link request.
checkBrokenLinks, maxLinksToCheckBroken-link check and how many links per page to test.
monitorMode, monitorNameOutput only pages that are new or changed since the last run (changeType). Every audited page is still billed.
siteSummaryAppend the free site-summary row (default on).
requestDelayMs, userAgentPoliteness delay per host and the identifying User-Agent.

Output fields (added in 0.1.20)

FieldMeaning
overallScoreSame value as score, 0-100; null when the page was not fetched.
categoryScoresObject with a 0-100 score per enabled category.
topIssuesUp to 3 most important issues with code, severity, category, message.
recordTypepage for page rows, site-summary for the closing summary row.
crawlDepthLink hops from a start URL (crawl mode only).
changeTypenew or changed (monitor mode only).
duplicateTitles, duplicateDescriptionsSummary row only: groups of pages sharing the same title or description.

Whole-site audit example

{ "urls": ["https://yoursite.com/"], "crawlPages": true, "maxPages": 200, "maxCrawlDepth": 3, "excludeUrlPatterns": ["/cart", "*?sort=*"] }

Weekly regression watch (only new or changed pages)

{ "urls": ["https://yoursite.com/"], "crawlPages": true, "maxPages": 100, "monitorMode": true, "monitorName": "yoursite" }

Quick start

Zero config: press Start. It audits three example pages in under a minute.

Example 1: audit your key landing pages, skip link checks for speed

{ "urls": ["https://yoursite.com/", "https://yoursite.com/pricing", "https://yoursite.com/blog"], "checkBrokenLinks": false }

Example 2: full audit with broken-link checks on up to 50 links per page

{ "urls": ["https://yoursite.com/", "https://yoursite.com/docs"], "checkBrokenLinks": true, "maxLinksToCheck": 50, "maxPages": 100 }

Schedule it daily or weekly and compare score and issueCounts over time to catch regressions after a deploy.

Pricing

Pay per event: $0.003 per page audited ($3 per 1,000) plus a $0.00005 start fee. A page is billed when the server returned an HTTP response and the audit ran (a 404 page is still audited and billed). Pages blocked by robots.txt, invalid URLs and hosts that cannot be reached are returned as rows but never charged. Link checks are included in the page price. The site-summary row is free. Set a max charge in the run options and the actor stops cleanly when it is reached.

RunPagesCost
Zero-config default3about $0.009
Weekly check of 50 key pages50about $0.15 per run
Monthly audit of 1,000 pages1,000about $3

Apify's free plan includes $5 of monthly platform credit, which covers about 1,000 page audits with this actor (at $0.003 per result, plus small platform usage).

Use it with the API, n8n, Make, Zapier and AI agents

  • API: POST https://api.apify.com/v2/acts/transparent_meteorite~technical-seo-page-audit/runs with your input as the JSON body, then read the dataset items. Use the run-sync-get-dataset-items endpoint to get rows in one call.
  • n8n, Make, Zapier: use the Apify integration to run the actor on a schedule and send low scores or new error issues to Slack, email or a ticket tool.
  • Spreadsheets and BI: export JSON, CSV or Excel and pivot by issues[].code.
  • AI agents (MCP): the actor is available through the Apify MCP server, so an agent can audit a URL ("check this page for SEO problems") and read structured findings.

Use from AI agents (MCP, ChatGPT, Claude, Perplexity)

Technical SEO Page Audit works as a tool for AI assistants through the official Apify MCP server. Add this server URL to any MCP client (Claude Desktop, Claude Code, Cursor, ChatGPT connectors, VS Code):

https://mcp.apify.com/?actors=transparent_meteorite/technical-seo-page-audit

Claude Desktop / Cursor config:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?actors=transparent_meteorite/technical-seo-page-audit",
"headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
}
}
}

Then ask in plain language, for example: "How do I run a technical SEO audit on many URLs through an API?"

Call it directly over HTTP (runs the actor and returns the dataset items in one request):

curl -X POST "https://api.apify.com/v2/acts/transparent_meteorite~technical-seo-page-audit/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://apify.com", "https://crawlee.dev", "https://example.com"], "maxPages": 25, "checkBrokenLinks": true, "maxLinksToCheck": 15}'

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("transparent_meteorite/technical-seo-page-audit").call(run_input={"urls": ["https://apify.com", "https://crawlee.dev", "https://example.com"], "maxPages": 25, "checkBrokenLinks": true, "maxLinksToCheck": 15})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

The same actor works in n8n, Make, Zapier, LangChain, LlamaIndex and CrewAI through their Apify integrations.

Questions people ask

How do I run a technical SEO audit on many URLs through an API? Pass the URLs to this actor; each page comes back as one row with the checks and a scored issue list.

Does it check broken links? Yes, with checkBrokenLinks true it tests up to maxLinksToCheck links per page.

Does it render JavaScript? No, it audits the HTML the server returns, which is what most crawlers index first.

Use it from code

Small real input: it returns only a couple of rows, so a test run costs very little (see Pricing). Set the APIFY_TOKEN environment variable to your token from Apify Console > Settings > API & Integrations.

Python (pip install apify-client)

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run_input = {'urls': ['https://example.com'], 'maxPages': 1, 'checkBrokenLinks': False}
run = client.actor("transparent_meteorite/technical-seo-page-audit").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript / Node.js (npm install apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const input = {
"urls": [
"https://example.com"
],
"maxPages": 1,
"checkBrokenLinks": false
};
const run = await client.actor('transparent_meteorite/technical-seo-page-audit').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

curl (runs the actor and returns the dataset items in one call)

curl -X POST "https://api.apify.com/v2/acts/transparent_meteorite~technical-seo-page-audit/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://example.com"], "maxPages": 1, "checkBrokenLinks": false}'

Send results to Google Sheets, Zapier, Make or n8n

  • Google Sheets: every run's dataset has a CSV export link: https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&clean=true (the dataset ID is on the run's Storage tab). In Sheets, =IMPORTDATA("<that link>") loads it. Anyone with the link can read that dataset, so share it carefully. To export to Google Drive automatically, use the Google Drive integration on the actor's Integrations tab.
  • Zapier: in the Apify app, use the trigger Finished Actor run (or Run Actor as an action) with transparent_meteorite/technical-seo-page-audit, then Fetch dataset items and pass the rows to Google Sheets, a CRM or Slack.
  • Make: the Apify app has Watch Actor Runs, Run an Actor and Get Dataset Items modules; connect them to any Make app.
  • n8n: install the Apify node (@apify/n8n-nodes-apify) and use Run an Actor and get dataset, or the On new Apify event trigger.
  • Schedule and webhooks: create a Task with your input, add a Schedule in Apify Console, and add a webhook if you want a call when a run finishes.

See the Apify integrations docs for setup steps.

Use cases

  • SEO agencies: bulk on-page audits of client or prospect URLs with a prioritized issue list.
  • Developers: check titles, meta, canonicals, hreflang and broken links after a release.
  • Lead generation: audit prospect sites and use the issues as an outreach opener.
  • Monitoring: schedule a weekly run on key pages and compare scores.

New to Apify? Create a free account and run this Actor in under a minute. Some links are affiliate links.

More tools from the same publisher that fit this workflow:

Use from AI agents: every actor here is callable through the Apify MCP server (mcp.apify.com) and our open-data-actors MCP endpoint.

FAQ

Is this allowed? It requests only public pages over plain HTTP, identifies itself with the TechnicalSeoAuditBot User-Agent, reads and obeys robots.txt (including Allow, wildcards, $ and Crawl-delay up to 10 s) and waits at least 500 ms between requests to the same host. It never logs in and refuses private, loopback and metadata addresses.

Does it crawl my whole site? No. It audits exactly the URLs you give it and, for broken-link checks, requests the links found on those pages. Feed it your sitemap URLs for site-wide coverage.

How is a link counted as broken? 404, 410, any 5xx, or a host that does not exist or refuses the connection. 401, 403, 429 and 999 responses are treated as "blocked" (many sites refuse bots), and timeouts are unverified; neither is reported as broken, to avoid false alarms. A HEAD request is tried first, with a GET fallback.

Why is my page missing from the charges? If robots.txt disallows the URL, or the host is unreachable, the row is returned with an explanatory issue and no charge.

Does it render JavaScript? No, it reads the HTML the server sends, which is what most crawlers see first. Content added only by client-side JavaScript (including titles set by scripts) is not seen.

What do the severities mean? error is something that blocks indexing or breaks the page (4xx/5xx, noindex, missing title, broken links, very slow TTFB). warning is a likely ranking or usability problem. info is an improvement opportunity.

What is TTFB here? Time from sending the request until response headers arrive, including DNS and TLS for the first request to a host, measured from where the actor runs.

More questions

How do I run an SEO audit on many URLs through an API? Pass the URLs in urls and set maxPages; call it from the API examples above. Each page gets one row with its SEO data, issues and score.

Does it check broken links? Yes, when checkBrokenLinks is on; maxLinksToCheck caps how many links per page are tested.

Does it render JavaScript? No. It fetches pages over plain HTTP, so content added only by client-side JavaScript is not seen.

Does it respect robots.txt? Yes.

How this compares

Desktop crawlers and SEO suites do far more (JavaScript rendering, site-wide crawl graphs, keyword data). This actor is a lightweight per-page check you can call from an API or a schedule and pay per page; use it for quick bulk checks, not as a replacement for a full SEO suite.

Limitations

  • HTML as served only, no JavaScript rendering, no Core Web Vitals or Lighthouse metrics.
  • Link checks sample the first maxLinksToCheck links on each page (internal first). linksNotChecked tells you how many were left.
  • Only the first 3 MB of each page is read.
  • Sites that block datacenter traffic may answer 403 or 429; those rows are returned with the status and are billed because a response was received.
  • Word count is visible body text, not a readability measure.

Reliability

Last 30 days, measured from Apify run records (all runs, including our own daily health checks): 20 of 20 finished runs succeeded (100.0%), median run time 3.6 s (90th percentile 16.2 s). Aborted runs (0) are not counted.

Updated 2026-10-11 automatically every week from the run history. Report any failure on the Issues tab with the run URL.

More resources

Changelog

  • 2026-10-05: Launched: on-page checks, broken links, hreflang, robots handling.
  • 2026-10-09: Output tab table view; video walkthrough.
  • 2026-10-09: Input sections, status messages, examples.
  • 2026-10-09: Branding: maintained by Detroit Web Agent - Open Data.
  • 2026-10-09: README free-credit note; clear log line and status when your Maximum cost per run is reached.
  • 2026-10-11: Closing log line points to the Issues tab; Reliability section added to this README.
  • 2026-10-13: Added a Run in 30 seconds section with a one-click prefilled run link, saved use-case presets and cross-links to pairing actors.
  • 2026-10-13: 0.1.20: crawl mode (crawlPages), audit category toggles, excludeUrlPatterns, 0-100 overallScore with categoryScores and topIssues, free site-summary row with duplicate titles/descriptions, monitorMode (new/changed since last run), empty-input fallback to example sites.

Works well with

Other actors from Detroit Web Agent - Open Data that pair with this one:

What the free plan gets you

Free plan: about 1,670 audited pages from your $5 monthly Apify credit (at $0.003 each, today's price); default settings return about 1 row (one sample page; add more URLs to scale). Need more? Upgrade your Apify plan or set a higher result limit in the input.

Need more than the data?

This actor is built by Detroit Web Agent, a small Detroit studio that builds websites, lead pages and simple data tools for small businesses. If you want these results turned into a working website, a landing page or a CRM import, or you need a field this actor does not cover yet, open an issue on the Issues tab or visit detroitwebagent.com.


Built and maintained by Detroit Web Agent - Open Data (Detroit, Michigan). Questions, bugs or a field you need: open an issue on this Actor's Issues tab and we will reply there.