Credits and pricing
How cloud credits work, what an audit costs, and how to control spend
Cloud audits are priced in credits - small integers, not dollars. A signed-in audit spends credits at every level, including one you run with squirrel audit on your own machine. A local audit costs nothing only when it runs signed out or with --offline, which means no cloud rendering and no cloud checks.
Getting credits
| Source | Credits | Notes |
|---|---|---|
| Free plan | 500/month | One account per email inbox, no card required; resets monthly on your signup date (details) |
| Pro plan (190/yr) | 3,000/month | Resets each billing period; unused monthly credits expire |
| Team plan (290/seat/yr) | 3,000/seat/month | Pooled across the org; see Team plan for seat billing rules |
| Credit top-up (min $10) | 100 per $1 | Paid plan only; pick any amount; never expire |
Annual billing is 12 months for the price of 10. Your monthly credits still arrive every month; you just pay once a year.
Monthly credits are spent before purchased top-up credits. Subscribe and top up from the Billing & Credits page in the dashboard.
One free allowance per inbox
The Free plan’s 500 monthly credits go to one account per email inbox. The first account on an inbox to receive them keeps them. A newer account on the same inbox starts with 0 free credits, and so does an account on a throwaway-inbox service such as Mailinator or YOPmail. The account itself still works: you can sign in and use the dashboard, and a signed-in squirrel audit runs locally, the same as for any account that is out of credits. It just has no free cloud credits.
The same applies to a second free organization created by the same account: it starts with 0 free credits. Sign in to your first organization to use the free credits.
Two addresses count as the same inbox when they deliver to the same mailbox:
- A
+tagis ignored on Gmail, Outlook, Hotmail, Live, MSN, iCloud, Proton and Fastmail addresses, soname+test@gmail.comis the same inbox asname@gmail.com. On any other domain,staff+alice@example.comandstaff+bob@example.comare separate inboxes. - Dots in a Gmail address are ignored, and
googlemail.comisgmail.com, soj.doe@gmail.comis the same inbox asjdoe@gmail.com. - Capital letters never matter.
Deleting the first account, or changing its email address, does not free the inbox for a new account. Accounts whose organization was created before 24 October 2026 keep their free credits whatever their address.
If your account shows 0 free credits:
- Sign in with the account you created first on that inbox. Its free credits are still there.
- Upgrade to Pro or Team. Paid plans get their own monthly credits and can top up.
- If you think this is a mistake, contact support from the dashboard.
Free, Pro, and Team run the same audit at the same price: the base charge includes every cloud service (AI analysis, editor’s summary, blocking check, tech + site metadata, report publishing) on every plan. The one difference is the Full level: its every-page crawl is Pro and Team, and on Free a Full audit samples one page per URL pattern first instead, the way Surface does. Scheduled audits are on every plan: free re-audits one website weekly or monthly, Pro and Team re-audit every website daily. Pro and Team just grant more monthly credits and unlock top-ups, that daily cadence and extra scheduled sites, and higher render concurrency - Team adds pooled credits, invites, and roles on top. Custom request headers are on every plan.
Max pages per cloud audit
Audits triggered from the dashboard - on-demand (“Run now”) and scheduled - crawl up to a plan-based page ceiling:
| Plan | Max pages per cloud audit |
|---|---|
| Free | 500 |
| Pro | 2,000 |
| Team | 10,000 |
Free stays at 500 for a technical reason rather than a pricing one: free audits run on a smaller container, and a 10,000-page audit needs several gigabytes of memory to hold the crawl.
A crawl config above your plan’s ceiling isn’t an error - it’s clamped automatically, the same way render_concurrency is. This limit is separate from the CLI’s own crawl cap: squirrel audit run locally on your machine crawls up to 10,000 pages on every plan - see Crawl Limits.
If you’re driving audits through the REST API or the MCP server, a clamped run’s response carries a notice field (type: "page_limit_clamped", with the requested and applied page counts and an upgrade hint) so your integration or agent can surface it - the audit still runs normally either way.
Checking your balance
squirrel creditsPlan: Pro
Balance: 2340 credits (2000 monthly + 340 purchased)
monthly credits reset 2026-07-08
Pricing:
audit 50 base + 2 per audited page
(analysis, tech detection, publishing included)
external links 1 per link the cloud verifies for an audit, at most 1 per page
(internal links, and links checked from your machine, are free)
content_gaps 25 per run
keyword_gaps 25 per run
Top up: https://app.squirrelscan.com/upgrade?plan=pro&interval=month&org=01J0ORGEXAMPLE0000000000A&src=clisquirrel auth status also shows your balance, and the start banner of every audit shows the estimated spend against it.
Pricing
Every signed-in audit has one flat price:
| Item | Cost | Notes |
|---|---|---|
| Audit base | 50 per audit | covers every included service below |
| Audited page | 2 per page | every page the report shows as audited, however it was fetched: plain HTTP, a cloud browser render, the local or cloud render cache, a 304 Not Modified, or a plain fetch after a render failed |
| External link check | 1 per link | each distinct external destination the cloud verifies for an audit (it works, redirects or is broken), cloud or signed-in CLI, at most 1 per page of the audit’s page limit. A link it cannot verify, or does not answer in time, costs nothing (see below) |
A page is charged once per audit. Rendering it, serving it from a cache, or retrying a request never adds a second charge, and the same external link on twenty pages is one check. Run the audit again and it is charged again: it is a new audit.
The page count is the one in the report’s coverage line (“Coverage: audited 12 of 12 known pages”), or its page count when there is no coverage line. A URL the crawl fetched but could not audit, such as a 404 kept for its broken-link finding or a 500, is not an audited page. A cloud render paid for one while the audit ran is refunded when the audit completes, so an audit’s page charge always matches the pages its report shows. A re-audit is only charged for the pages it fetched itself: pages a smart audit carries forward from an earlier audit are not charged again.
Internal links (on the site you are auditing: its own host and its www twin) are always free. A link to another of your domains, such as example.co.uk linking to example.com, is an external link and is charged like one. The external-link charge applies to any audit that sends its external links to the cloud: a cloud audit with external link checking turned on, which every audit level does unless the website or the run switches it off, and a signed-in squirrel audit at surface or full. A quick squirrel audit checks its external links on your machine, for free.
An external link costs a credit only when the cloud verifies it: it works, redirects or is broken. A link it cannot verify costs nothing: one behind a bot wall, a throttled one, one the run’s limit on deeper checks for its site left unverified, or a 404 waiting for its confirming check. The report lists those as unverified. A link it does not answer in time costs nothing either. An audit reserves its link credits up front, and the reserve is settled down to the links the cloud verified.
A signed-in squirrel audit sends its external links to the cloud’s dead-link check, which answers the ones it can within a time limit, and pays 1 credit for each distinct link the cloud verifies, at most 1 per page of the audit’s page limit. A link the cloud answers as unverifiable costs nothing, as above. The CLI checks every link the cloud left unanswered on your machine, and those are free. Its estimate before the audit includes the link reserve. Signed out, or at the quick level, the CLI checks links on your machine and nothing is charged; --offline checks no external links at all.
Signed-in CLI link checks were free before v0.0.114. A CLI from before it no longer gets cloud link checks: the cloud refuses them and charges nothing, and the CLI checks its links on your machine until you run squirrel self update.
An audit signed in with an org API key (CI) is not registered as a cloud run: it pays no audit base, no page charge and nothing for its links, which it checks on the runner. Pages it renders in the cloud are billed as standalone renders, 2 credits each. See What an API-key audit costs.
A dead-link check called directly, outside an audit (POST /v1/services/dead-links with no run), costs 1 credit for each distinct link it verifies, counted as an audit counts them (by scheme, host and path, so the same page with a different query string or fragment is one link). A link it cannot verify or does not answer costs nothing.
The base includes everything else: AI page analysis (ai/llm-parsability, ai/page-type-match), authority signals, the Blocking check, technology detection, site metadata, the editor’s summary, and publishing the report. None of these are charged separately.
Rendering does not change the price. An HTTP-only (--http) audit costs the same per page as a rendered one, so pick the render mode for accuracy, not to save credits.
Opt-in add-ons are the only extra charges:
| Add-on | Cost | Notes |
|---|---|---|
| Keyword gaps | 25 per audit | gaps/keywords (opt-in) |
| Content gaps | 25 per audit | gaps/content (opt-in) |
A 19-page audit costs 88 credits: 50 base + 38 for its pages. A 100-page audit costs 250. A cloud audit of the same 19 pages that checks 7 distinct external links costs 95.
Spend controls
Three guardrails keep an audit from spending more than you expect:
[cloud]
max_credits_per_audit = 1000 # hard cap per audit; 0 = unlimited
confirm_threshold = 50 # estimates above this prompt before spending
enabled = true # master switch for all cloud features- Per-audit cap - if a full audit would cost more than
max_credits_per_audit, the page limit comes down to what the cap covers (475 pages at the default of 1000, or 316 for an audit whose external links the cloud checks, at 3 credits per page) and the run tells you. Cloud enrichment past the cap is truncated deterministically and the remaining rules reportskippedwith reasoncredit-cap-reached. - Confirmation prompt - in a terminal, an estimate above
confirm_thresholdasks before proceeding. Use--yesto skip prompts (e.g. in CI or agent workflows). Non-interactive runs proceed without prompting, bounded by the cap. - Master switch -
enabled = falseturns off all cloud calls for the project.
See the cloud configuration reference for all options.
When credits run out
Nothing breaks. A signed-in audit needs at least 52 credits (the base plus one page) to start, or 53 when the cloud checks its external links (one page plus its link): below that, the CLI runs the audit locally instead and tells you so. Above that, an audit your balance can’t fully cover is not refused and does not stop part-way: its page limit comes down to what the balance pays for (50 base + 2 per page, or 3 per page for an audit whose external links the cloud checks, cloud or signed-in CLI), and the run says how many pages it kept. Cloud audits started from the dashboard, the API, the MCP server, or a schedule work the same way. If credits still run out mid-audit, cloud rules report skipped with reason insufficient-credits, the audit completes with all local rules, and you see a single warning with a top-up link. If an audit fails after you were charged, the charge is automatically refunded.
The audit engine can also keep cloud results it has already paid for when the cloud analysis step (AI page analysis, authority signals, gap analysis, the raw vs rendered comparison and the rest) is stopped early. A caller that runs the engine can give that step a deadline, so a slow provider cannot hold the audit up. When the deadline is reached, every result that had already come back is kept and used by the rules, rules whose results had not come back report skipped with reason service-unavailable, and no new cloud call is started. The spend lists each call known to be charged, once: every call that came back, plus any render batch the cloud had accepted. A call still running at the deadline is not listed and may still be charged, so the estimated balance after the run is marked approximate. Your balance is always the authoritative figure. The CLI does not set a deadline on this step, so a CLI audit always waits for the cloud analysis to finish.
Every credit warning the CLI prints states what the run would have cost, the credits you have left, the date your monthly credits reset, and an upgrade link: the notice when a low balance shrinks an audit’s page limit, the out-of-credits notice when a run cannot be tracked, and the low-balance footer after one. squirrel credits shows the same balance, reset date and link.
That link is scoped to the organization that ran out, so it opens checkout for that organization rather than whichever one your browser used last. Credits are not shared between organizations, so the distinction matters: topping up the wrong one leaves the blocked audit blocked. The link works signed out, and carries the organization through the login. The MCP server returns the same facts as fields on its run_audit response, so an agent can relay them without a second call.
One exception: squirrel credits --upgrade answers before reading your balance, so you can reach the upgrade page without logging in first. It prints the general upgrade URL rather than an organization-scoped one.