Broken Link Crawler & SEO Audit | Meta Tags, Sitemaps avatar

Broken Link Crawler & SEO Audit | Meta Tags, Sitemaps

Pricing

from $1.75 / 1,000 page audits

Go to Apify Store
Broken Link Crawler & SEO Audit | Meta Tags, Sitemaps

Broken Link Crawler & SEO Audit | Meta Tags, Sitemaps

Extract an SEO audit of every page at $2.50 per 1,000 pages, 1/16 the price of the most-used per-page SEO audit Actor ($40), with broken-link checks and an XML sitemap gap check included free. Status, redirects, title and meta length, H1, canonical, noindex, missing alt text, issue summary.

Pricing

from $1.75 / 1,000 page audits

Rating

0.0

(0)

Developer

Aurelix

Aurelix

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 minutes ago

Last modified

Security

Limited permissions

Share

Audit every page of a website for SEO (status, redirects, titles, meta, H1, canonical, broken links, alt text) for $2.50 per 1,000 pages, no login.

For SEO consultants, agencies and site owners. Broken-link checks and an XML sitemap gap check are included free, and a summary row ranks issues by severity with a health score. Your first run with the example input costs about $0.0635 (25 pages in our test run).

Broken Link Crawler & SEO Audit: example output from a real run

Broken Link Crawler & SEO Audit: 75-second demo video

▶ Watch the 75-second demo

AuditOne site per run, up to 2,000 pages, plus its XML sitemap
ChecksStatus, redirects, title and meta length, H1, canonical, noindex, broken links, alt text, size, response time
Output33 fields per page row plus a ranked summary row; JSON, CSV, Excel, API
AutomateSchedules, webhooks, Zapier, Make, n8n, Google Sheets, MCP for AI agents
Price$2.50 per 1,000 pages ($1.75 per 1,000 pages on paid Apify plans)
Login neededNo
  • 1/16 the per-page leader's price. $2.50 per 1,000 pages against $40.
  • Link checks included. Up to 5,000 link checks per run at no charge.
  • No false alarms. 401, 403 and 429 answers reported as unverified, not broken.
  • Sitemap gaps found. Indexable pages missing from the sitemap, and bad sitemap URLs.
  • Ranked summary row. Issues by severity, a health score and example URLs, free.

Get started in 3 steps

  1. Enter the site URL, e.g. https://www.example.com, and set Max pages.
  2. Keep 'Read the XML sitemap' and 'Check external links' on for a full audit, or turn them off for a quick on-page check.
  3. Click Start, open the summary row for the ranked issues, then filter the page rows by issue code. Download JSON, CSV or Excel, or schedule it weekly.

▶ Try it with the example input

The form opens with an example input already filled in: that run costs about $0.0635 on the free plan.

How much does an SEO audit cost?

Pay per event: you pay only for what the run returns, plus a small start fee. Bronze, Silver, Gold and higher Apify plans pay less per result.

PagesFree planPaid plans (Bronze, Silver, Gold)
100$0.25$0.18
1,000$2.50$1.75
10,000$25.00$17.50

Totals include the $0.001 start fee per run, rounded to the cent. Apify's free plan includes $5 of credit a month, enough for about 2,000 pages.

The summary row, link checks, pages blocked by robots.txt, pages that could not be loaded, throttled (HTTP 429) pages, non-HTML files and pages over 2 MB are not charged.

Billing events

EventFree planPaid plans (Bronze, Silver, Gold)
page-audit$2.50 per 1,000 pages$1.75 per 1,000 pages
apify-actor-start$0.001 per run$0.001 per run
This Actorsmart-digital/complete-seo-audit-toolkhadinakbar/broken-link-checker
Price per 1,000, free plan$2.50 per 1,000 pages$40 per 1,000 pages$1 per 1,000 links checked
Price per 1,000, paid plans$1.75 per 1,000 pages$40 per 1,000 pages$1 per 1,000 links checked
Start fee per run$0.001$0$0.00005
Platform usage billed on topNoNoNo
Example: 25 pages, 100 link checks$0.063$1.00≈ $0.10, links only
On-page audit (title, meta, H1, canonical, noindex)✓✓✗
Broken-link checks✓ up to 5,000 per run, freeFirst 10 links per page✓ (the product)
Indexable pages missing from the XML sitemap✓not statednot stated
401/403/429 kept apart from broken links✓ (unverified)not statednot stated
Core Web Vitals, schema, accessibility✗✓✗

Prices checked regularly on each Actor's Store page.

Benchmarks: how we compare

TestInputResultRun timePeak memory
First run (prefilled input)books.toscrape.com, Max pages 25, 100 link checks25 pages and 1 free summary row for $0.0635 in totalnot recordednot recorded
Docs site with sitemapdocs.apify.com, 25 pages, 7 sitemap files, 100 link checks25 pages audited69 s67 MB
Larger sitedocs.python.org/3/, Max pages 200, 500 link checks200 pages audited; 13 URLs blocked by robots.txt and 1 page over 2 MB skipped, none charged636 s117 MB
Short run timeoutdocs.python.org/3/, Max pages 200, run timeout 60 s35 pages plus the summary row, run SUCCEEDED and said it stopped early54 s86 MB
Field accuracy10 pages checked against an independent parse of the live HTML10 of 10 matched on title, title length, meta description, H1 count, canonical and status
Broken linksa test site with a 404 page, a 500 page and a dead external link3 of 3 reported broken; robots-blocked and 429 links reported as unverified
robots.txta test site with disallowed paths0 requests to disallowed paths out of 111

Apify cloud runs at the default 256 MB with plain HTTP and no proxy, except the broken-link and robots.txt rows, which used a local test site with a request log. About 1,100 pages an hour on the larger site, so a full 2,000-page audit needs a longer run timeout than the default hour.

What data you get

Broken Link Crawler & SEO Audit crawls one website and its XML sitemap and returns one row per page with every on-page check: status code, redirect chain, title and meta description with lengths, H1, canonical, noindex/nofollow, word count, link counts, broken links, images missing alt, page size, response time and the issue codes on that page, most severe first. A free summary row ranks the issues by severity and pages affected, with example URLs and a health score. Broken links count only real 404/410, 5xx and dead hosts; 401, 403 and 429 answers are reported as unverified.

  • One 'page' row per audited URL with 30+ fields, including the issue codes on that page, most severe first
  • broken_links: [{url, status_code, error}] per page, plus counts of broken and unverified links
  • in_sitemap per page and sitemap problems
  • One 'summary' row: pages audited, health score, status code counts, average response time, sitemap stats and issues ranked [{issue, severity, description, pages, examples}]
urlstatus_codetitle_lengthmeta_description_lengthh1_countword_countbroken_links_countimages_missing_alt_countresponse_time_msissues
https://docs.apify.com/20019016280016["duplicate_title", "missing_meta_description", "title_to...
https://docs.apify.com/academy/advanced-web-scraping200531631415003["meta_description_too_long"]
https://docs.apify.com/academy/anti-scraping/mitigation/c...2006662168400100["meta_description_too_short", "title_too_long"]
https://docs.apify.com/academy/anti-scraping/mitigation200561411311001199["slow_response"]

One full page record, exactly as a real run returned it (long text and lists shortened here). From a real run:

{
"record_type": "page",
"url": "https://docs.python.org/3/",
"final_url": "https://docs.python.org/3/",
"status_code": 200,
"redirect_count": 0,
"redirects": [],
"error": null,
"content_type": "text/html",
"response_time_ms": 4,
"page_size_bytes": 19632,
"crawl_depth": 0,
"in_sitemap": true,
"title": "Python 3.15.2 documentation",
"title_length": 27,
"meta_description": "The official Python documentation.",
"meta_description_length": 34,
"h1_count": 1,
"h1": "Python 3.15.2 documentation",
"canonical_url": "https://docs.python.org/3/index.html",
"noindex": false,
"nofollow": false,
"language": "en",
"word_count": 526,
"internal_links_count": 44,
"external_links_count": 12,
"images_count": 3,
"images_missing_alt_count": 0,
"broken_links_count": 0,
"broken_links": [],
"unchecked_links_count": 25,
"issues": [
"duplicate_title",
"canonical_to_other_url",
"duplicate_meta_description",
"... [2 more]"
],
"source_url": "https://docs.python.org/3/",
"scraped_at": "2026-11-04T07:48:53Z"
}

Use cases

  • SEO agencies running a technical audit before a client pitch
  • Site owners scheduling a weekly check for broken links and new 404s
  • Developers checking redirects, canonicals and noindex after a migration
  • Content teams finding missing titles, meta descriptions and H1s

Use-case recipes

Monthly technical SEO check of your own site

For site owners and in-house SEO. Run the full audit with the sitemap on. Open the summary row first: its issues are ranked by severity and pages affected, with example URLs. Then filter the page rows by an issue code to get the fix list for your developer.

{
"siteUrl": "https://books.toscrape.com",
"maxPages": 100,
"useSitemap": true,
"checkExternalLinks": true,
"maxLinkChecks": 500
}

For content teams. Keep external links on and raise maxLinkChecks so every link is tested. Filter page rows where broken_links_count is above 0; each broken_links entry gives the dead URL and its status code, so editors know which link to fix on which page.

{
"siteUrl": "https://books.toscrape.com",
"maxPages": 50,
"checkExternalLinks": true,
"maxLinkChecks": 1000
}

Quick on-page check before a launch

For developers checking a staging or new site that is publicly reachable. Turn off the sitemap and external links for a fast pass. Sort by title_length and meta_description_length and look for noindex left on by mistake.

{
"siteUrl": "https://books.toscrape.com",
"maxPages": 25,
"useSitemap": false,
"checkExternalLinks": false,
"maxLinkChecks": 0
}

Client audit for an agency

For agencies auditing a client's site with their permission. Use the health_score and the top 3 issues from the summary row in the pitch, and attach the page rows as a spreadsheet. After the fixes go live, track the changed pages with Website Change Tracker on the same site.

{
"siteUrl": "https://books.toscrape.com",
"maxPages": 200,
"useSitemap": true,
"maxLinkChecks": 300
}

Input

FieldTypeWhat it doesDefault
siteUrl (Site URL)stringHome page or any page of the site to audit, e.g. 'https://books.toscrape.com'."https://books.toscrape.com"
maxPages (Max pages)integerStop after this many pages are audited (and charged), e.g. 100.100
maxLinkChecks (Max extra link checks)integerUpper limit of extra requests for links that were not crawled as pages (external links, files, internal pages past 'Max...500
useSitemap (Read the XML sitemap)booleanFind sitemaps from robots.txt (or /sitemap.xml), crawl the URLs they list, and flag sitemap URLs that redirect, error or are...true
checkExternalLinks (Check external links)booleanAlso check links to other websites for 404/410, 5xx and dead hosts.true

All 5 fields, with examples: see the Input tab.

Switching from smart-digital/complete-seo-audit-tool

Already running smart-digital/complete-seo-audit-tool? Map its input fields to this Actor's like this:

smart-digital/complete-seo-audit-tool inputThis Actor's inputNotes
startUrlssiteUrlOne site per run, as a single URL. Run once per site, or start several runs through the API.
crawlPagesnot neededThe site is always crawled from siteUrl and its sitemap; set maxPages to 1 to audit only one page.
maxPagesmaxPagesPer run, 1 to 2,000 (default 100). Pages blocked by robots.txt and pages that could not be loaded do not count.
respectRobotsTxtnot neededrobots.txt is always obeyed, also for external link checks, and cannot be switched off.
maxConcurrencyno equivalentAt most two requests a second per site, slower when robots.txt sets a Crawl-delay.
includeSubdomainsno equivalentOne host per run (www. and the bare domain count as one); links to other subdomains are checked as external links.
excludeUrlPatternsno equivalentEvery in-scope URL is crawled up to maxPages.
auditLinkscheckExternalLinks + maxLinkChecksEvery link is checked, not only the first 10 of each page: internal links always, external ones when checkExternalLinks is on, up to 5,000 extra requests per run.
auditMetaTags / auditHeadings / auditContentnot neededTitle, meta description and their lengths, canonical, noindex/nofollow, H1 count and word count are always checked. Open Graph, Twitter Cards, H2-H6 hierarchy and readability are not.
auditPerformance / auditSchema / auditAccessibilityno equivalentNo Core Web Vitals, structured data or accessibility checks; each row has the page's download time and size only.
  • Price drops from $40 to $2.50 per 1,000 pages on the free plan (comparison table above), and link checks and the summary row are free.
  • Output is one page row per URL with an issues list (most severe first) and one summary row with the ranked issues, example URLs and a health score; filter by record_type.
  • Links answering 401, 403 or 429 are counted as unverified, not broken, so the broken list holds only 404/410, 5xx and dead hosts.
  • Each URL is audited once per run; a redirecting URL and its target are separate rows, because the redirect is a finding too.

Use with AI agents (Apify MCP server, Claude, ChatGPT, n8n AI agent)

Broken Link Crawler & SEO Audit is a ready-made tool for AI agents. Through the Apify MCP server an agent reads this Actor's input schema, fills in the input from your request, starts the run and reads the pages back. You pay the same per-result price as a run started by hand, from your own Apify account.

Example prompts

  • "Run an SEO audit of https://books.toscrape.com, up to 100 pages, and list the top issues with the pages affected"
  • "Find every broken link on https://example.com, including links to other sites, and give me a table of page, link and status code"
  • "Check which indexable pages of https://example.com are missing from its XML sitemap and which sitemap URLs redirect or return errors"

Claude (claude.ai and Claude Desktop)

Open Settings > Connectors, choose Add custom connector, paste https://mcp.apify.com/?tools=aurelix/seo-audit-crawler and sign in to Apify when asked. Then ask Claude one of the prompts above.

Claude Code, Cursor, VS Code and other MCP clients

$claude mcp add --transport http apify "https://mcp.apify.com/?tools=aurelix/seo-audit-crawler"

Clients configured with JSON take the same URL:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=aurelix/seo-audit-crawler"
}
}
}

A client without Apify sign-in sends the header Authorization: Bearer <YOUR_APIFY_TOKEN>; to run the server locally instead, use npx -y @apify/actors-mcp-server --actors aurelix/seo-audit-crawler with APIFY_TOKEN set.

ChatGPT

Where your ChatGPT plan offers custom connectors (developer mode), add https://mcp.apify.com/?tools=aurelix/seo-audit-crawler as a connector, sign in to Apify, and ask for the data in plain words.

n8n AI agent

Give an AI Agent node an MCP Client Tool with the endpoint https://mcp.apify.com/?tools=aurelix/seo-audit-crawler and a Bearer credential holding your Apify token. The agent can then call Broken Link Crawler & SEO Audit whenever a workflow step needs pages; for a fixed, non-agent workflow use Apify's n8n node with Run Actor instead.

Use it from AI agents (MCP), the API or no-code

Copy this to your AI assistant

Use the Apify Actor aurelix/seo-audit-crawler (Broken Link Crawler & SEO Audit) through Apify's MCP server or API. Main input: siteUrl (Site URL). Example input: {"siteUrl": "https://books.toscrape.com", "maxPages": 200, "useSitemap": true, "checkExternalLinks": true, "maxLinkChecks": 500}. Each result is one page with fields such as record_type, url, final_url, status_code, redirect_count, redirects, error, content_type. It costs $2.50 per 1,000 pages on Apify's free plan plus a $0.001 start fee per run, and needs no login.

MCP server URL for this Actor: https://mcp.apify.com/?tools=aurelix/seo-audit-crawler (setup for each client in the section above).

API

Start a run and read the dataset with Apify's REST API or the Python and JavaScript clients:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("aurelix/seo-audit-crawler").call(run_input={'siteUrl': 'https://books.toscrape.com', 'maxPages': 200, 'useSitemap': True, 'checkExternalLinks': True, 'maxLinkChecks': 500})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

No-code: schedule it in 3 clicks

Send the results to Google Sheets, Zapier, Make, n8n, Slack or any webhook URL.

  1. Fill in the input, then click Save as a new task.
  2. In the task, click Schedule and pick daily or weekly (Apify Schedules).
  3. Open the task's Integrations tab to send every run's results to Slack, Google Sheets, email or any webhook.

Prefer n8n or Make? Ask in the Issues tab and we will share a ready-made workflow for it.

FAQ

Can I run an SEO audit without login?

Yes. It never logs in, so you need no website account, password or cookies; only a free Apify account to run it.

Is there an SEO audit API?

You can use this Actor as one. Start it with Apify's REST API or the Python and JavaScript clients and read the results as JSON (see the code above), or call it from an AI agent through MCP.

How much does an SEO audit cost?

About $2.50 for 1,000 pages on Apify's free plan and $1.75 on paid plans, start fee included. The free $5 monthly credit covers about 2,000 pages.

Can I export an SEO audit to Excel or Google Sheets?

Yes. Download the results as Excel, CSV, JSON, XML or HTML from the run's Storage tab, or send them to Google Sheets with Apify's Google Sheets integration or the API.

It reads only public data any logged-out visitor can see: the website you choose (crawl only sites you have the right to crawl, such as your own or a client's). It goes at a polite pace, respects robots.txt, never logs in and never solves CAPTCHAs. It returns technical SEO fields per page (status, titles, headings, links, issues); no personal data is extracted. To have a record removed, open an issue on this Actor's Issues tab; if a site owner formally asks us to stop, this Actor will stop. You are responsible for using the data lawfully, incl. anti-spam and privacy laws; this is not legal advice.

What counts as an audited page?

Each crawled HTML page on the site that returned an HTTP status, including redirects and 404s, because those are findings too. Free: URLs blocked by robots.txt, URLs that could not be loaded at all (timeout, dead connection), non-page files such as PDF, image or JSON (listed in the summary), pages the site throttles with HTTP 429 even after retries with backoff (listed in the summary and named in the status message) and pages over 2 MB (skipped with a log line).

Which issues are checked?

High: 5xx, 4xx, unreachable pages, broken links, missing title. Medium: noindex, bad sitemap URLs, missing H1, missing meta description, duplicate titles, redirect chains, responses over 1 s, images without alt. Low: canonical to another URL, duplicate descriptions, title over 60 or under 30 characters, description over 160 or under 70, multiple H1s, missing canonical, under 200 words, HTML over 1 MB, single redirects, indexable pages missing from the sitemap.

Does it respect robots.txt?

Always, and it cannot be switched off. Disallowed pages are not requested and are counted in the summary; external links are checked only where that site's robots.txt allows it.

Many sites answer automated checks with 401, 403 or 429 even when the page works in a browser. Those are counted as unverified so the broken list holds only real 404/410, 5xx and dead-host links.

Does it render JavaScript?

No. It audits the HTML the server sends, which is what search engines index first. Links injected only by JavaScript are not discovered.

What is the health score?

The share of audited pages, from 0 to 100, that have no high or medium issue. Low issues, such as a title a little too long, do not lower it. It is in the summary row and in the run's status message.

What am I charged when the site is down or blocks the crawl?

Only the $0.001 start fee. URLs blocked by robots.txt are counted in the summary, pages that could not be loaded come back as free rows with an error, and the summary row is always free. Only page rows with an HTTP status are charged.

How are pages found?

From the site URL and, with Read the XML sitemap on, from the sitemaps named in robots.txt or at /sitemap.xml (sitemap indexes and .gz files included, up to 25 sitemap files). Links on crawled pages are then followed within the same host until Max pages is reached.

What exactly is response_time_ms?

The time to download the page, headers and body, from Apify's servers. Requests are timed one at a time, and up to 100 rows over 80 ms are re-timed alone after the crawl, so the crawler's own load does not show up as a slow server. A page over 1 second gets the slow_response issue.

Requests for links that were not crawled as pages: external links, files and internal pages beyond Max pages. Internal links are checked first. Links over the cap are counted in unchecked_links_count, not reported as fine or broken. Set it to 0 to rely only on the status of crawled pages.

How long does an audit take?

About 1,100 pages an hour at two requests a second. If the run timeout comes near, the run stops crawling early, still checks links, saves every page row and the summary, ends SUCCEEDED and says it stopped early.

Can I track progress after fixing issues?

Yes. Save the input as a task, schedule it weekly or monthly, and compare the summary rows: health_score and the pages count of each issue. There is no built-in diff between runs.

Limits (stated honestly)

  • One host per run: www. and the bare domain count as one site; other subdomains are not crawled (their links are checked as external).
  • At most two requests per second per site, slower with a robots.txt Crawl-delay; up to 2,000 pages per run (about 1,100 pages an hour, so a full 2,000-page audit takes nearly 2 hours; raise the run timeout accordingly).
  • No JavaScript rendering and no Core Web Vitals or Lighthouse scores; response time is the time to download the page (headers and body) from Apify's servers, and any page over 80 ms is re-timed alone at the end so the crawler's own load never counts as a slow server.
  • Link checks are capped by 'Max extra link checks' (internal links first); links over the cap are counted as not checked.
  • Duplicate titles and descriptions are compared only across the pages audited in the run, ignoring noindex pages.
  • HTML pages over 2 MB are skipped (not charged) to keep memory low; they are listed in the summary.

Public Aurelix Actors, grouped by the data they collect. All are pay-per-result and need no login.

AI, content and SEO

  • Google Trends by Region: Google Trends interest over time, by region and rising queries for any number of keywords, plus trending searches.
  • Google Autocomplete API: Expands seed keywords into hundreds of real Google and YouTube autocomplete phrases, tagged by search intent.
  • PDF to Markdown OCR & Table Extraction: Turns linked PDF and Word files into Markdown per page, with tables as JSON rows, RAG chunks and OCR.
  • Website to Markdown API: Crawls a site and returns one row of clean main-content Markdown per page, with title, headings and links.

Jobs and hiring data

  • Greenhouse Jobs Scraper: Live jobs from a company's Greenhouse, Lever, Ashby or SmartRecruiters board, with salary and Canadian province tags.
  • LinkedIn Jobs Country Filter Scraper: Public LinkedIn job postings by keyword and country: title, company, location, seniority, job type, salary text, description.
  • Multi Job Board Scraper: LinkedIn, about 50 company career sites, Remote OK and We Work Remotely jobs in one deduplicated list.

E-commerce and product data

Leads and company data

  • Funded Companies Hiring: Companies that just raised money (SEC Form D), with their open roles and business contacts, as a new-only monitor.
  • Google Maps Phone Scraper: Local business lists from Google Maps: phones, websites, ratings, hours, coordinates; optional website emails and socials.
  • Recently Funded Companies API: US companies that just filed an SEC Form D: amount raised, industry, state, executives, confirmed website.
  • Tech Stack API: CMS, e-commerce platform, analytics, ad pixels, chat, CDN and email provider for each domain you enter.

Ad intelligence

  • Competitor Watch: One report per competitor with only what is new: Meta and TikTok ads, page changes, Shopify products and prices, jobs.
  • Facebook Ad Library Search & API: Facebook and Instagram business ads from the Meta Ad Library: copy, creatives, landing pages, dates, optional EU reach.

Canada and government data

  • Canada Building Permits: Building permits and development applications from 7 Canadian cities: address, type, status, dates, value, contractor company.

Recent changes

  • 0.1: Comparison with other SEO audit and broken-link tools; price units stated (per audited page, link checks free).

The full history is on the Changelog tab.

Tested daily

An automated health check runs this Actor every day on a fixed input and checks that at least 6 pages come back with record_type, url, source_url, scraped_at filled in; a failed check alerts the maintainer straight away.

Your feedback

Missing a field, found a bug or need another filter? Open an issue on the Issues tab; we aim to answer within a day. If this Actor saved you time, a short review helps other people find it.