SEO Audit Tool & Broken Link Checker: Website Crawler
Pricing
$1.50 / 1,000 results
SEO Audit Tool & Broken Link Checker: Website Crawler
SEO audit tool and broken link checker: crawl a website and get a 0-100 SEO score per page with issues and fix hints: titles, meta, Open Graph, schema, headings, broken links and images, Core Web Vitals hints, robots/sitemap. No browser. CSV export. $1.50/1k pages.
Pricing
$1.50 / 1,000 results
Rating
0.0
(0)
Developer
Atesen Software
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Security
Limited permissionsShare
SEO Audit Tool and Public SaaS Pricing & Link Auditor
Use auditMode: "pricing" for source-backed price candidates, metadata and CTA links from public SaaS pages. The Console example audits two publisher-owned pages with one safe link probe per page. Omit auditMode, or select seo, to keep the existing SEO crawler.
{"auditMode": "pricing","startUrls": ["https://atesensoftware.com/apps/web/attachment-bundler/","https://attachment-bundler.atesensoftware.com/"],"maxPricingPages": 2,"maxPricingLinks": 1,"pricingRunSeconds": 30,"pricingRequestSeconds": 5}
Pricing mode emits one pricing_page row per attempted page, up to the page cap: HTTP status, redacted final URL, title, canonical, detected noindex directives, priceCandidates with literal currency evidence and verbatim whitespace-normalized surrounding text, allowlisted JSON-LD Offer/PriceSpecification fields, explicit CTA labels/hrefs, and bounded link-probe results. $ alone remains an unspecified dollar currency. Billing intervals remain null; the context retains actual "per month" or "30 days" wording. No billing period, checkout amount or price correctness is inferred.
Empty pages and JavaScript app shells produce unknown_no_price_in_static_html. A 403, 401, 429 or detected challenge is unknown_blocked, never a confirmed broken link. Only observed 404/410 link responses are broken. Unprobed links, robots refusals, deadlines and network errors remain explicit unknowns. No login, purchase, OAuth, form submission or browser action is performed.
| Pricing input | Default | Bound |
|---|---|---|
maxPricingPages | 2 | 1–20 explicit pages; no automatic page discovery |
maxPricingLinks | 1 | 0–20 safe CTA HEAD probes per page |
pricingRunSeconds | 30 | 1–60 seconds shared wall-time budget |
pricingRequestSeconds | 5 | 1–10 seconds per DNS/request, further limited by remaining run time |
Pricing mode fetches public HTTP(S) HTML on standard ports. Credentials, all query-bearing URLs and common auth/payment/action routes are skipped. Private, loopback, link-local, multicast, reserved and metadata IPv4 addresses are blocked. Each connection is pinned to a freshly validated public IPv4 address; redirects are revalidated and capped at three. IPv6-only hosts are unsupported. Robots rules apply at each destination, including link probes. Requests start at least one second apart per hostname; longer declared crawl delays are honored. Responses are capped at 1 MiB, without automatic retries, proxies or challenge workarounds. Compressed responses that ignore the identity-encoding request remain unknown. These safeguards describe pricing mode; legacy SEO mode retains its existing behavior.
Static extraction excludes scripts, templates, hidden attributes and inline-hidden elements. It does not compute CSS layout or execute JavaScript. Computed visibility, dynamic prices, country-specific prices, taxes and customer offers are outside its evidence. This is an experimental utility without a market-demand or revenue claim.
Pricing mode uses the existing result event for successfully audited HTML pages. Failed, blocked or non-HTML page rows have no custom result event. Pricing configuration is unchanged; the live Pricing tab is authoritative. RUN_SUMMARY records actual page/request counts and budget/time stops. The legacy CSV outputs below apply to SEO mode.
An explicit zero event-charge budget produces no billable page rows. Pricing mode also stops before fetching a page when that budget is zero. API and CLI callers should set maxTotalChargeUsd explicitly and check the actual run options; the event cap is distinct from any platform-usage charges shown for the run.
Existing SEO mode
Crawl any website and get a full technical SEO audit for every page plus a broken link checker in the same run, at $1.50 per 1,000 pages ($0.0015 per audited page; site summary, issue and status rows are free). You get a 0–100 SEO score with a letter grade, broken links and images (4xx/5xx and redirect chains), meta/Open Graph/Twitter checks, structured data (JSON-LD) validation, Core Web Vitals risk hints, robots.txt and sitemap checks, and ready-made CSV reports.
No browser, no proxy and no setup. Paste a list of domains and press Start.
What does SEO Audit Tool do?
For each website you enter, the actor:
- Fetches the start page and checks site-wide signals: robots.txt, XML sitemap (URL count), HTTP→HTTPS redirect, www/non-www consistency, HSTS and soft-404 handling.
- Crawls internal pages (breadth-first, follows robots.txt) up to your page limit.
- Audits every HTML page against 55+ checks in 10 categories and scores it from 0 to 100 (A–F).
- Checks every internal and external link and every image for 4xx/5xx errors and redirect chains.
- Finds duplicate titles and meta descriptions across the site.
- Writes one row per page, one summary row per site and three CSV files (pages, issues, broken links).
Why use this SEO audit tool?
| This actor | Typical browser-based SEO audit actor | |
|---|---|---|
| Price per 1,000 pages | $1.50 | $30–40 |
| Broken link + image checks | ✅ internal and external | often extra or missing |
| Structured data validation | ✅ JSON-LD, microdata, RDFa, required properties | basic |
| Core Web Vitals risk hints | ✅ LCP / CLS / INP risk per page | — |
| Score per category + grade | ✅ 10 categories | single score |
| CSV reports | ✅ PAGES.csv, ISSUES.csv, BROKEN_LINKS.csv | JSON only |
| Memory | 512 MB | 2–4 GB |
| Failed or blocked sites | free status row, not charged | often charged or the run fails |
What does it check?
- Meta: title (missing, length, pixel width, duplicates), meta description (missing, length, duplicates), canonical (missing, points elsewhere, relative, multiple), meta robots and X-Robots-Tag (noindex/nofollow), charset, lang, favicon, hreflang.
- Headings & content: missing or multiple H1, skipped heading levels, word count, thin content, text-to-HTML ratio.
- Technical: HTTP status, redirect chains, HTTPS, mixed content, URL length/uppercase/underscores/parameters, indexability.
- Mobile: viewport meta tag.
- Performance hints: TTFB, HTML size, DOM size, render-blocking scripts and stylesheets, number of third-party domains, compression,
document.write, missing preconnect. - Images: missing alt text, missing width/height (CLS risk), lazy-loaded hero image (LCP risk), legacy formats, broken images.
- Links: broken internal/external links, redirected links, empty anchor text, nofollow internal links, few internal links.
- Structured data: JSON-LD parse errors, schema types, missing required properties (Product, Offer, Article, Organization, LocalBusiness, Event, Recipe, FAQPage, BreadcrumbList, JobPosting and more).
- Social: Open Graph (title, description, image) and Twitter Card tags.
Each issue has a severity (critical / warning / notice), a category, a message and a fix hint.
Core Web Vitals hints
The actor does not run a browser, so it cannot measure real LCP, CLS or INP. Instead it estimates the risk (low / medium / high) of each metric from the HTML: slow server response, render-blocking resources, lazy-loaded hero images, images without dimensions, heavy DOM, many third-party scripts and so on. Use the hints to find pages to fix. For measured values use PageSpeed Insights or the Chrome UX Report.
How much does it cost?
Pay per event. You pay only for audited HTML pages: $0.0015 per page ($1.50 per 1,000 pages), the same on every Apify plan, with no start fee.
These rows are free: site summary rows, issue rows, status rows for invalid, unreachable, blocked or non-HTML URLs, and pages that failed to load. Link and image checks are included in the page price.
Example: auditing 20 websites with 50 pages each (1,000 pages) costs about $1.50.
Input
| Field | Default | Description |
|---|---|---|
startUrls | – | Websites or pages to audit. Domains without https:// are fine. |
maxPagesPerSite | 25 | Maximum pages audited (and charged) per website. |
crawl | true | Follow internal links. Off = audit only the listed URLs. |
maxDepth | 10 | Maximum link depth from the start page. |
checkLinks / checkExternalLinks | true | Check links for 4xx/5xx errors. |
maxLinkChecksPerSite | 500 | Unique links checked per site. |
checkImages / maxImageChecksPerSite | true / 200 | Check images for errors. |
respectRobotsTxt | true | Skip URLs disallowed by robots.txt. |
includeSubdomains | false | Treat subdomains as part of the site. |
includeUrlPatterns / excludeUrlPatterns | – | Only crawl, or skip, URLs that contain these strings. |
ignoreQueryParameters | false | Treat ?a=1 variants as the same page. |
outputIssueRows | false | Also write one dataset row per issue. |
maxConcurrency | 4 | Parallel requests per run. |
Example input:
{"startUrls": ["https://example.com", "books.toscrape.com"],"maxPagesPerSite": 50,"checkExternalLinks": true}
Output
The dataset contains rows of four types (use the views in the Output tab):
page: one row per audited page, with URL, status, title, description, canonical, H1, word count, links, images, schema types,score,grade, per-category scores (scoreMeta,scoreTechnical, …),cwvLcpRisk/cwvClsRisk/cwvInpRisk,issueIds,issuesText,brokenLinksand the fullissuesarray.site: one summary per website, withsiteScore, grade, average category scores, top issues, broken link count, duplicate titles and descriptions, robots.txt, sitemap, HTTPS, www and soft-404 results.issue: one row per issue (only ifoutputIssueRowsis on).status: free rows for invalid input, unreachable, blocked, HTTP error or non-HTML start URLs.
Example page row (shortened):
{"type": "page","url": "https://books.toscrape.com/","statusCode": 200,"score": 71,"grade": "C","title": "All products | Books to Scrape - Sandbox","metaDescription": null,"h1": "All products","wordCount": 412,"cwvLcpRisk": "medium","issueIds": "DESC_MISSING; CANONICAL_MISSING; IMG_NO_DIMENSIONS; OG_MISSING","brokenLinkCount": 0}
CSV reports
The key-value store of every run contains spreadsheet-ready files (UTF-8, open directly in Excel or Google Sheets):
PAGES.csv: one line per page with all scores and the main fields.ISSUES.csv: one line per issue with page, severity, category, message and fix hint.BROKEN_LINKS.csv: source page, broken URL, status code and link type.RUN_SUMMARY: JSON totals for the run.
Tips
- Monitor your site weekly: create a task with your domains and add a schedule (for example
0 6 * * 1). ComparesiteScoreandbrokenLinkCountbetween runs. - Start with
maxPagesPerSite: 25to check a site cheaply, then raise the limit for a full crawl. - Turn off
checkExternalLinksfor very large sites to finish faster. - Some sites block automated requests. The actor then writes a free
blockedstatus row and charges nothing.
FAQ
Does it use a browser? No. It downloads raw HTML with a browser-like HTTP client, so it is fast and cheap. Content rendered only by JavaScript is not seen, and neither is it by many crawlers.
Is it legal? The actor reads only public pages and follows robots.txt by default. Audit sites you own or have permission to analyse.
Something is missing or wrong? Open an issue on the Issues tab and we will look at it.
Pricing
Pay per event: $0.0015 per result ($1.50 per 1,000 audited pages). Each audited page row is one result event. Site summary rows, issue rows, status rows, error rows and empty lookups are not charged. The run stops when it reaches the maximum cost per run. No Apify proxy and no login.