Fair-use & limits

What a free audit does, and doesn't.

Free tier: $0, up to 200 pages per audit (50 without an account) — v0.6 samples K=10 URLs per detected template up to the page budget, 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), K=20 per template on manual re-audits (up to 500 total), K=10 per template on the recurring weekly monitoring run (typically 80 fetches for a standard pSEO directory), 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. v0.6 audits by template — one verdict per template cluster, site verdict = worst template with ≥5% coverage. 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 (templates detected, K=10 per template up to budget)
Pages per free audit (signed-in)
Up to 200, sampled from your sitemap.xml (templates detected, K=10 per template up to budget)
Pages per Pro audit (manual re-audit)
K=20 per template — up to 500 total across all templates. Re-audits use the larger sample for tighter variance estimates.
Pages per Pro scheduled monitoring run
K=10 per template, every monitoring run. Typical pSEO directory: 8 templates × 10 samples = 80 fetches per run. More efficient than the v0.5 flat 200-page model and covers all templates instead of one dominant cluster.
Cumulative coverage (Pro monitoring)
10 URLs sampled per template every monitoring run — across all templates. A 12-week monitored site with 8 templates builds 8 × 10 × 12 = 960+ unique URLs in audit history (before deduplication). Coverage grows faster on sites with URL churn; stable sites converge quickly. The per-domain dashboard shows the running total across all templates.
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 per-template sampling?

v0.5 took a flat random sample of 200 URLs across the whole site. On a 100k-URL directory, that's 0.2% coverage — dominated by the largest template cluster, leaving smaller templates unsampled. A broken /listing/* template covering 90k pages would average out with clean category pages and score caution instead of concerning.

v0.6 allocates K=10 samples per template: T templates × K samples. A typical pSEO directory (T=8, K=10) = 80 fetches — fewer than the old 200, with full template coverage. 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.6.3; +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.

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.