D1-heavy API: about $1,471.25 a month on Workers Paid
A month that looks like the numbers below comes to roughly $1,471.25, base fee included. The meter that runs out first is D1 rows read, at 5904% of its included usage. Prices are the public list as of 2026-09-15; the real invoice is the only truth.
Adjust the numbers → ← Usage Guard
Estimated bill
Total per month $1,471.25
Workers Paid base fee $5.00
Meter closest to (or past) its included usage: D1 rows read — 1.48T / 25B (5904%)
Overages
- D1 rows read: 1.45T → $1,451.00
- D1 rows written: 10M → $10.00
- Workers requests: 10M → $3.00
- D1 storage (GB): 3 → $2.25
Usage assumed for the month
- Workers requests: 20M
- D1 rows read: 1.48T
- D1 rows written: 60M
- D1 storage (GB): 8
What this setup looks like
A JSON API on Workers with one D1 database behind it: a few tables, and queries that scan more than they filter. The rows read figure is the order of magnitude from a public incident in September 2026, where one endpoint without an index re-read the same large table on every call for a month.
Why D1 rows read runs out first
D1 bills rows read, not queries. A query that scans a 500,000-row table because no index fits counts 500,000 rows, and it does that on every request. Workers Paid includes 25B rows read a month; at 1.48T this API is at 5904% of the allowance, and rows read is over 98% of the total. Rows written and storage barely register next to it.
What to watch in GraphQL Analytics
Pull d1AnalyticsAdaptiveGroups by database and day and put readQueries next to rowsRead. A rising rows-per-query ratio means the same queries scan more each time. The fix is an index; the check is EXPLAIN QUERY PLAN on the hot query, looking for SCAN where you expected SEARCH.
Prices and included usage copied from Cloudflare's public pricing pages on 2026-09-15. Approximate: some meters round up to the next unit, Workers AI and bandwidth are not included, and the real invoice is the only truth.
Background: the eight public Cloudflare bill incidents of 2026, seven of them D1 rows read
Other typical bills
Also exploring
Paying for Workers and wary of a surprise invoice? See Usage Guard — per-metric spike alerts and an optional stop switch.
Routing support@ through Cloudflare and reading it in Gmail? See Routed Inbox — a small shared inbox on Email Routing, no seat pricing.
Managing Cloudflare for many clients? See Zone Audit — config drift and baseline checks across accounts.