Billing units and plans

What consumes a unit, what never does, and the limits each plan enforces.

A dashboard with a bar chart and a donut chart

Usage is metered in four units. Every billable request writes its units to the workspace ledger before the response returns, and that ledger is what you are charged from. Reporting is a read of it: GET /v1/usage and the dashboard can trail the ledger by up to five minutes, so a total taken seconds after a bulk run may still be climbing.

UnitConsumed byAmount
lookup_cachedA matched or stale store profile from existing observations1 per store
lookup_liveA scan queued by refresh: true1 per queued domain, at queue time
history_queryOne page of store history or signal search (later release)1 per page
refresh_requestedReserved for explicit scan requests (later release)1 per domain

What is never billed

  • A no_match result, whatever the reason. Unknown domains cost nothing to ask about. Queueing a scan for one is a separate charge: with refresh: true, the lookup stays free and each queued domain costs a lookup_live unit at queue time.
  • A 404 not_found on GET /v1/stores/{domain}.
  • Any error response (4xx or 5xx).
  • An idempotent replay (Idempotent-Replayed: true).
  • GET /v1/account, GET /v1/usage, GET /v1/technologies, and GET /v1/health.

A stale profile is billed like a fresh one: the data is real, just older than the plan's freshness window, and the stale flag lets you decide whether a refresh is worth a lookup_live unit.

Plan limits

Limits are enforced from the workspace plan at request time and returned on GET /v1/account as plan.limits. The table below is the current default per plan; the values on the account endpoint are authoritative for your key.

Enrich batch is the per-request domain cap for your plan, returned as plan.limits.enrich_batch_max. 100 is the contract maximum, not a universal default.

PlanRPMConcurrencyEnrich batchIncluded lookup_cached / periodFreshness windowLive refreshes / period
Free302252530 days0
Pro1205100plan-defined30 days100
Growth3001010010,00030 daysplan-defined
Partnernegotiatednegotiated100meterednegotiatedmetered

When the included allowance is used up, non-partner keys receive 402 payment_required with a reset_at timestamp. Partner keys continue and are metered.

Reading your usage

GET /v1/usage returns the current period totals and a per-key breakdown, including revoked keys that consumed units this period so the numbers reconcile. As above, these totals are a report and can trail the ledger by up to five minutes. Every response also carries X-Usage-Remaining for the lookup_cached unit, so a bulk run can stop before it hits the wall.

Prices per unit are on the pricing page. This page describes what a unit is, not what it costs.

On this page