Fair-use & limits

What a free audit does, and doesn't.

Free tier: $0, up to 200 pages per audit (50 without an account) — sampled from your sitemap, stratified across detected templates, 24-hour anonymous retention (30-day window for signed-in accounts), 3 audits per day per browser session. Pro tier: $19/month ($180/year with 14-day refund), up to 500 pages on a manual re-audit, up to 200 pages per scheduled monitoring run, 50 audits per day, unlimited retention. Comparable hosted crawlers like Screaming Frog ($259/year), Sitebulb ($35/month), and Ahrefs Site Audit ($129/month) charge for the same surface area. Written plainly. No dark patterns, no asterisks hiding behind footnotes. If something here feels unfair or unclear, reply to hello@pseolint.dev and we'll fix it.

Scope — what we actually audit

Audit focus
Programmatic-SEO sites (template-driven content at scale) and AI Overview readiness. The sample is stratified across detected templates and the site verdict reflects the worst template, not the average URL. SpamBrain triggers from the March 5, 2024 scaled-content-abuse update + the May 7, 2024 site-reputation-abuse policy + the AEO patterns that determine ChatGPT, Perplexity, and Google AI Overview citations.
Pages per anon audit (no account)
Up to 50, sampled from your sitemap.xml and stratified across detected templates.
Pages per free audit (signed-in)
Up to 200, sampled from your sitemap.xml and stratified across detected templates.
Pages per Pro audit (manual re-audit)
Up to 500 pages, stratified across templates. Re-audits use the larger sample for tighter variance estimates.
Pages per Pro scheduled monitoring run
Up to 200 pages per run, stratified across templates. The site verdict reflects the worst template, not the average URL.
Cumulative coverage (Pro monitoring)
Each monitoring run fetches up to 200 URLs; over time, audit history accumulates across runs. Coverage grows faster on sites with URL churn; stable sites converge quickly. The per-domain dashboard shows the running total.
Discovery source
sitemap.xml is authoritative. If the sitemap lists 9 URLs, we audit those 9. We do not follow links beyond the sitemap by default.
Deep-crawl discovery
Opt-in option (fillBudgetViaLinkDiscovery). When enabled, we follow same-origin links to top up the sample — respectfully, with robots.txt Disallow rules honored.
What we do not do
We do not attempt to log in, bypass paywalls, submit forms, execute logged-in-user journeys, or fetch non-HTML assets.

Why stratified sampling?

A flat random sample of 200 URLs across a 100k-URL directory is 0.2% coverage — dominated by the largest template cluster, leaving smaller templates barely sampled. A broken /listing/* template covering 90k pages would average out with clean category pages and score caution instead of concerning.

So we stratify the page budget across detected templates instead of drawing it flat — every template gets representation, not just the biggest cluster. The site verdict reflects the worst template, not the average URL. Fix the broken template: fix N pages in one shot.

What pseolint doesn't audit

Core Web Vitals / page speed
Out of scope. Use PageSpeed Insights (free) or the Chrome DevTools Lighthouse panel.
Broken links + general site crawl
Out of scope. Use Sitebulb ($35/mo) or Screaming Frog ($259/yr, free up to 500 URLs).
Competitor research / backlink audits
Out of scope. Use Ahrefs ($129/mo).
Keyword research + rank tracking
Out of scope. Use Semrush ($139.95/mo) or Ahrefs.
Image weight / asset optimization
Out of scope. PageSpeed Insights covers it; Sitebulb and Screaming Frog go deeper.
Schema-validator-style validation
Partial. We check schema-content consistency and required JSON-LD types as part of the AEO ruleset, but we don't replace Google's Rich Results Test for full schema validation.

Rate limits & cooldowns

Anonymous audits
3 per day per browser session
Free account audits
5 per day (does not roll over)
Pro account audits
50 per day
Cache between users
If anyone audited the same URL in the last 60 minutes, you get that result instantly (no new crawl fired). Free users cannot force a re-crawl.
Re-audit cooldown
Authenticated accounts can force a fresh audit. Minimum 5 minutes between forced re-audits of the same URL, regardless of plan — target sites pay for our crawls in bandwidth.
Per-host ceiling
A single domain can receive at most 30 fresh audits per hour across all users, to prevent viral-post amplification from hammering a target.

How we treat the site we're auditing

User-Agent
Mozilla/5.0 (compatible; pseolint/0.7.4; +https://pseolint.dev/bot)
robots.txt
Fully honored — both Disallow paths and Crawl-delay pacing (capped at 60 seconds per request).
Retry-After
Honored once per URL, capped at 30 seconds. We don't hammer sites that ask us to back off.
Concurrency
At most 5 parallel fetches, dropping to 1 if Crawl-delay is declared.
Total bandwidth per audit
Capped at 50 MB of fetched bytes. We stop when we hit it, even if the budget isn't filled.
SSRF protection
localhost, private networks, and non-http(s) schemes are rejected. We only audit public sites.

Retention — how long reports live

Anonymous (no account)
24 hours, then auto-deleted
Free account
30 days
Pro account
Indefinite (until you delete)
Monitored-domain audits (Pro)
90 days of history for trend charts
When a report expires
The cached HTML + structured summary are removed from object storage. Score, pageCount, and findingCount stay in the database for analytics. Source URL stays too.

What's public vs private

Free-tier audits
Public by default — shareable link + eligible for the /leaderboard. The URL + host + score are visible to anyone who has the share link.
Pro-tier audits
Private by default — only the audit owner can view.
Visibility toggle
Authenticated users can flip any of their own audits to private at any time via the audit page. Anonymous audits cannot be flipped (we can't confirm ownership).
Leaderboard inclusion
Public + completed + unexpired audits with 5+ pages. One entry per domain. Opt out by flipping to private (authed only) or letting an anonymous audit expire.

Accuracy caveats

Sampling is lossy
A 50-page sample of an 860-page site can miss template clusters entirely. The score reflects what we saw, not what's there. For full coverage, monitor on Pro or make sure your sitemap is complete.
No JavaScript rendering by default
We audit server-rendered HTML. Client-side rendered pages will look empty to us. Pro has optional browser rendering via CDP.
The rule set is a subset of SpamBrain
We infer plausible SpamBrain signals from public documentation, research, and observed patterns. We do not have access to Google's actual classifier and make no claim of one-to-one correspondence.
Score is a heuristic
Treat it as a structured conversation, not a verdict. A low score isn't a guarantee of indexing success. A high score isn't proof SpamBrain will act.
We can't see off-page signals
We measure on-page structural risk. We can't see the off-page authority and user-behaviour signals Google weighs most heavily — so a thin, templated page on a high-authority domain can rank fine, while a clean-looking page can still be suppressed by signals we don't observe. The audit covers the controllable, on-page surface of risk; pair it with your domain's authority for the off-page half.

Operational controls (when things go wrong)

Kill switch
AUDITS_MODE=readonly
What readonly mode does
New audits return 503 with a clear message; existing reports, leaderboards, and dashboards remain fully functional.
Blocklist
We can pause audits for a specific user or target host if abuse is detected. We always notify the affected party and explain why.

This page is the source of truth for what you can expect from pseolint's hosted audits. If you see behavior on the service that contradicts something here, that's a bug — please report it.

Sources