---
title: Blockquote pricing
description: Four Blockquote plans — anonymous, free account, Pro, and Agency — what each includes, how an agent authenticates, how the limits work, and how to buy or cancel.
canonical: https://blockquote.io/
---

# Blockquote pricing

- Anonymous: 1 scan per day and 3 per month from one network, no account. Full score, all 34 check results, 1 full fix; the rest keep their titles and are locked. Use MCP for this tier: an anonymous `POST /api/v1/scan` needs a Cloudflare Turnstile token, which only a browser produces.
- Free account: $0, no card. 1 scan per day, 30 per month. Full score, all 34 check results, 3 full fixes, scan history and the before/after comparison.
- Pro: $12/month or $120/year. Complete fix list, 5 monitored URLs re-scanned weekly with a digest email in any week a score moves, API keys for agents and scripts. Fair-use ceiling: 200 scans/month (30 in any one day).
- Agency: $29/month. 25 monitored URLs, API keys plus webhook API access. Fair-use ceiling: 500 scans/month (60 in any one day).

Prices are end prices with tax included — the same number in every country. See [refunds and right of withdrawal](https://blockquote.io/refunds).

## Billing options

All amounts below are in US dollars (USD), with tax included.

| Subscription | Charge | Payment interval |
|---|---|---|
| Free account | $0 | No subscription payment |
| Pro monthly | $12 | Every month |
| Pro yearly | $120 | Every year |
| Agency monthly | $29 | Every month |

Pro yearly costs $10 per month when averaged over twelve months. Stripe charges $120 for the year, not $10 each month.
Pro yearly saves $24 compared with twelve $12 monthly payments.
Agency has a monthly checkout option. There is no Agency yearly checkout option.

A yearly subscription keeps the same daily and calendar-month scan ceilings as its monthly equivalent.
The payment interval does not change the scan counter reset dates.

## Choose a plan by the work

- Use anonymous access for an occasional public-page check without an account.
- Use a free account to keep scan history and read three full fixes per report.
- Use Pro when you need the full fix list, account API keys, or up to five weekly monitors.
- Use Agency when you need up to twenty-five weekly monitors or webhook callbacks.

SDK installation is free. Select a plan for the production features and limits your integration requires.

## What each plan includes

An anonymous visitor and a free account read the same checks. They differ in the fix list, in history, and in what meters them: a network for the anonymous visitor, an account for the free account.

- Score and check results: every plan gets the full 0–100 score, the 3 category scores, and every check result. No check result is held back by plan.
- Fix list: an anonymous visitor keeps the first 1 recommendation with its copy-paste fix, a free account the first 3 recommendations. The rest of the list needs Pro or Agency.
- Monitoring: Pro watches 5 monitored URLs, Agency watches 25 monitored URLs. Blockquote re-scans each one weekly and emails a digest in any week a score moves.
- History: every account keeps its earlier scans, so a score reads as a trend and not as one number. An anonymous visitor has no account and no history.
- API keys: Pro and Agency only. A key authenticates REST and MCP calls as your account.
- Webhook callbacks: Agency only. Blockquote POSTs every weekly monitor result to your endpoint, signed with HMAC.

Weekly monitor re-scans do not spend the scan allowance of the plan. Blockquote dispatches them from its own scheduler.

## Compare account limits

| Capability | Free account | Pro | Agency |
|---|---|---|---|
| Scans per UTC day | 1 | 30 | 60 |
| Scans per UTC calendar month | 30 | 200 | 500 |
| Monitored URLs | 0 | 5 | 25 |
| Complete fix list | No | Yes | Yes |
| API keys | No | Yes | Yes |
| Webhook callbacks | No | No | Yes |
| Account history | Yes | Yes | Yes |
| PDF export | No | Yes | Yes |
| White-label export | No | No | Yes |

The daily and monthly limits apply together. Reaching either limit stops new scans until that counter resets.
A public report read does not start another scan.

## Test an integration before buying

The [sandbox](https://blockquote.io/api/v1/sandbox.md) serves a synthetic report without credentials, billing, or scan quota.
It demonstrates the response format. It does not analyze a URL or represent a paid scan result.

```sh
curl https://blockquote.io/api/v1/sandbox/scan/sandbox-example
```

This request returns HTTP 200 and a synthetic report. No account or payment method is required.

The [Python SDK and CLI on PyPI](https://pypi.org/project/blockquote-agents/) and
[JavaScript SDK and CLI on npm](https://www.npmjs.com/package/blockquote-agents) are free to download.
The same account limits apply when these clients call the production API.
Installing a client does not create an account or grant a paid plan.

## How an agent or a script authenticates

There are two credentials, and they do different work.

- API key: an `Authorization: Bearer bq_…` token. Create it on the account page. Blockquote shows the token exactly once, and you can revoke it at any time. An account holds at most 5 keys you create yourself; connected apps do not count against that.
- Session cookie: a magic link to the account address signs a browser in.

Key management takes the session only. No bearer key can create or revoke a key, so a leaked key cannot make itself safe from rotation. Billing and webhook configuration refuse every key the account page issues today.

Each key carries a scope, fixed when you create it. Every key reads reports. A key can add scans, monitors, or both, so `POST /api/v1/keys` accepts any scope set that includes reports. The account page offers 3 of those sets: reports only, scans and reports (the default), or scans, reports and monitors.

Scanning over MCP needs no credential. Anonymous MCP calls run under the per-network limits in the list above and return the anonymous report tier. An anonymous `POST /api/v1/scan` also needs a Turnstile token from the website form, so a script uses a Pro or Agency API key.

## How the limits work

- An anonymous caller is metered per network, by the UTC day and calendar month.
- An account is metered against its plan. The monthly ceiling bounds the cost. The daily ceiling stops one day from spending the whole month.
- A refused scan answers HTTP 429. The JSON body names the limit, the number used, and `resetAt` — the instant the refusing counter rolls over. A daily counter rolls over at midnight UTC. A monthly counter rolls over on the 1st, UTC.
- A cached report costs nothing. Blockquote serves a recent report for the same URL without spending a scan.

## How to buy and how to cancel

- Buy: sign in, open the account page, and pick a plan. Checkout runs through Stripe.
- Pay yearly for Pro and the year costs two months less than twelve monthly payments.
- Cancel: open the billing portal from the account page. A cancellation stops the next renewal, and the plan runs to the end of the period you already paid for.
- Consumers in the EU and the EEA can withdraw within 14 days of the purchase. The [refunds and right of withdrawal](https://blockquote.io/refunds) page states how much money comes back and how to declare a withdrawal.

## What Blockquote does not do

Blockquote does not measure keyword rank, backlinks or Core Web Vitals.

## One-time paid passes for agents

Choose a prepaid offer from the table below. Prices include tax.
It does not renew. Existing subscriptions remain separate.
Each pass uses its plan's daily, UTC calendar-month, and monitor limits above.
Purchase does not reset usage. Refunds and disputes revoke pass access.

Read the offer at `GET https://blockquote.io/api/v1/billing/plan-pass`.
Sign in through `/account`; free accounts can use their session cookie.
Existing read-scoped API keys also work. MCP OAuth tokens are not REST credentials.

Send `POST https://blockquote.io/api/v1/billing/plan-pass` with JSON:

```json
{
  "sku": "pro-monthly",
  "purchaseId": "Generate a UUID and reuse it for retries",
  "acceptTerms": true,
  "consentImmediateService": true,
  "billingAddress": {
    "country": "Your two-letter billing country",
    "postalCode": "Your billing postal code",
    "city": "Your billing city",
    "line1": "Your billing street address",
    "state": "Your billing region, where required"
  }
}
```

Use actual billing details. Stripe calculates included tax before issuing a payment challenge.
`acceptTerms` accepts [the terms](https://blockquote.io/terms).
`consentImmediateService` requests immediate service before the withdrawal period ends.
It acknowledges proportionate payment for elapsed service on withdrawal; see [refunds](https://blockquote.io/refunds).

The authenticated endpoint returns HTTP 402 with a complete MPP Stripe `charge` challenge.
For this example, authorize the $12 payment through an MPP wallet, then retry the identical JSON body.
With a session, send `Authorization: Payment <credential>`.
With a bearer API key, keep `Authorization: Bearer <key>` and send `Payment-Authorization: Payment <credential>`.
Success includes `Payment-Receipt`, the order identifier, and `expiresAt` in Unix milliseconds.
Reuse the same purchase identifier, body bytes, and credential after an uncertain response.
An HTTP 503 does not authorize a second purchase; unresolved payments require reconciliation.

### Prepaid offers

| SKU | Plan | Price including tax | Duration |
| --- | --- | --- | --- |
| `pro-monthly` | Pro | $12 USD | 30 days |
| `pro-yearly` | Pro | $120 USD | 365 days |
| `agency-monthly` | Agency | $29 USD | 30 days |

Send `sku` with the purchase request. All offers are one-time payments and never renew.
There is no Agency yearly offer. Existing subscriptions or current passes prevent another pass purchase.
