Half of the appeal of a developer API is knowing what the free tier actually includes before you wire it up. The other half is not being surprised in month two by a credit-card capture page hiding behind the word "fair use." This page lays out the exact numbers.
Free tier: 50 placement tests per day, 1000 per month, 60 requests per minute, 5 concurrent SSE streams. SPF / DKIM / DMARC / DNSBL checks are not counted against any of these. Signup is required; a credit card is not.
The numbers
Three axes — per-minute, per-day, per-month — and one concurrency ceiling. Everything else is derived.
Free
tests per day: 50
tests per month: 1000
requests per minute: 60
concurrent streams: 5
retention: 30 days of test history
seed mailboxes: 22 providers
Starter ($19/mo)
tests per day: 500
tests per month: 10000
requests per minute: 300
concurrent streams: 20
retention: 12 months
Growth ($79/mo)
tests per day: 5000
tests per month: 100000
requests per minute: 1000
concurrent streams: 100
retention: 24 months + CSV exportWhat is counted vs not counted
A "test" means a real placement test — you send a message, it lands in our seed mailboxes, we record where. That is the expensive operation. Everything else — all the introspection endpoints — is free and uncapped per the 60 req/min ceiling.
- Counted as tests:
POST /api/tests,POST /api/campaigns/:id/test. - Not counted as tests, but subject to the per-minute cap:
GET /api/tests,GET /api/tests/:id,GET /api/tests/:id/stream,GET /api/me, every auth/DNS check endpoint. - Not counted at all: SPF, DKIM, DMARC lookups, DNSBL checks, Rspamd scoring of submitted content. These are basically free to run server-side so we do not bill for them.
Why SPF/DKIM/DMARC checks are not rate-limited
These endpoints do one DNS query each. A DNS query costs us roughly nothing — sub-millisecond from the resolver cache, microseconds when warm. Metering it would cost us more in accounting code than we would save in infrastructure. So we don't.
You can legitimately build a free SPF/DKIM/DMARC monitoring service on top of our API and never touch paid tiers. We know. That is fine. The interesting workloads are the placement tests, and those are the ones we price.
Concurrent streams
An SSE stream holds a server connection open for up to 10 minutes. Five concurrent streams on the free tier means you can have five tests running simultaneously with live event feeds. A sixth GET /api/tests/:id/stream request will receive a 429 with a Retry-After header.
If you are building a nightly monitor over 50 senders, do not open 50 SSE connections — iterate serially and close each one before opening the next. If you want realtime on a dashboard, consider polling instead; GET /api/tests/:id costs a single request-per-minute slot and is fine at a 10s polling interval.
Retention on the free tier
Thirty days of test history. Your test ID is queryable for 30 days after createdAt; after that the metadata is purged and the screenshot URLs 404. Upgrade to Starter for 12 months of retention or Growth for 24.
This matters if you are using tests as a historical record (for example, archiving placement trends). If you are, record the summary in your own database on the same day the test runs — it is a handful of columns and costs you nothing.
Upgrade thresholds
Three signals that you are about to outgrow free:
- You hit 429 Retry-After more than once a week. The per-minute ceiling is the first thing people outgrow.
- You need a historical trend longer than 30 days and you don't want to operate your own archive.
- You are exposing placement tests to more than a handful of tenants and your aggregate daily volume is over 50.
When any of these are true, Starter pays for itself in saved engineering time in the first week. The gap between Starter and Growth is less common to jump — most paid users sit on Starter for months before they need higher throughput.
Comparison with GlockApps free tier
For reference — this comparison is a frequent question in support. GlockApps offers 3 free placement tests on signup, total, not per month. After that you are paywalled. Our free tier gives you more tests in an afternoon than GlockApps gives you in a lifetime. We do this because placement data is a commodity; the actual value is in the monitoring, dashboards and alerting you build on top.
That said, GlockApps has features we do not — a reputation dashboard, bounce processing, seed lists in more regions. If those are what you need, it is the right tool. If you are a developer wiring up a monitor or a CI gate, start with us.
How we can afford this
Three reasons the free tier is the size it is:
- Our seed mailboxes are self-operated, not third-party. Marginal cost per test is cents, not dollars.
- Most free-tier users don't convert. We know this. The ones who do, convert decisively because they have already built their monitor on our API — switching cost is high for them and that means paying customers stick.
- Content marketing works. Every free placement test is a hand- raise for a future deliverability conversation. We write these articles, you find us in search, you try the tool, everybody wins.
A 429 Too Many Requests response with a Retry-After header telling you how many seconds to wait. No auto-upgrade. No "please add a payment method" modal. The request fails cleanly and you handle it like any other rate-limit signal. If it happens every day, you should upgrade; but nobody is going to charge you without your active consent.
Rate-limit headers on every response
Every response carries three headers you can read without guessing:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1751454060The reset time is a Unix timestamp. Back off until then if Remaining is zero. The same three headers appear on the daily and monthly test counters (prefixed X-Tests-Daily-* and X-Tests-Monthly-*).