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

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.