Summary

  • Cloudflare's Infrequent Access example combines one million reads with 1,000GB of retrieval and a $29.90 total: an implied average of 0.001GB retrieved per read.
  • If every read retrieves the entire 1GB object, retrieval processing costs $10,000. Keeping the example's other charges gives a conditional total of $10,019.90.

One column in Cloudflare's R2 worked example has an excellent memory. It remembers that every object was read a thousand times. The next column remembers only that the objects existed. Together they produce a remarkably tidy $29.90 estimate.

The official pricing page, examined on October 28, sets out the workload: write 1,000 objects averaging 1GB to Infrequent Access storage, keep them for five days, then delete them. During those five days, read each object 1,000 times. The Class B row duly counts a million reads and charges $0.90. The retrieval row multiplies 1,000 objects by 1GB, producing 1,000GB and a $10 processing charge. The repeat-read multiplier stops at the column border.

The example does not specify the bytes returned per read; billed retrieval counters from a real workload would establish what that workload owes.

The thousandth of an object hiding in the total

Divide the printed 1,000GB retrieval quantity by the million reads and the average is 0.001GB per read. That is one-thousandth of the average object's size. Such an average is a workload assumption. A buyer needs to see it before adopting the total.

Now specify a different, explicit workload: every read retrieves the entire 1GB object. The arithmetic becomes 1,000 objects × 1,000 reads × 1GB, or one million GB. At the listed Infrequent Access retrieval-processing rate of $0.01 per GB, that line costs $10,000.

Component Printed example Conditional whole-object reads
Storage $10 $10
Class A operations $9 $9
Class B operations $0.90 $0.90
Retrieval processing $10 $10,000
Total $29.90 $10,019.90

The second column of prices preserves the example's other three charges. It is a calculation under a stated assumption, rather than a customer invoice. The $9,990 difference comes from specifying what each read returns. No rate increase is required.

A request count cannot supply that information by itself. Cloudflare lists both HeadObject and GetObject under Class B. Reading metadata and obtaining object content can therefore appear within the same operation class. Treating every counted operation as an entire object would introduce another unsupported assumption. The useful correction is to state the payload budget alongside the request budget.

The free exit has a neighbouring cashier

R2 lists internet egress as free for both Standard and Infrequent Access. Infrequent Access separately lists retrieval processing at $0.01 per GB. The journey out and the work of fetching the data occupy different tariff lines.

In the whole-object scenario, a million Class B operations cost ninety cents while the associated retrieval processing costs $10,000. A budget built around request prices would spend its attention on the smallest moving part. The expensive quantity is how much data those operations retrieve.

Nor does the name Infrequent Access restrain an application. The example itself gives an object a thousand reads in five days. A storage class supplies a price structure; the application supplies the behaviour that runs through it. Calling an object cold cannot stop another team adding a job that reads it repeatedly.

The market consequence arrives before any bill: two buyers can look at the same stored capacity and the same operation count while pricing different workloads. One has supplied a tiny average payload, perhaps without noticing. The other has supplied complete objects. Their totals are competing assumptions wearing identical units of “reads”.

Five days in storage, thirty days on the meter

The example's other surprising charges can be reconciled with the published rules. Its thousand writes cost $9 because Cloudflare rounds usage up to the next billing unit; Infrequent Access Class A operations cost $9 per million. The page also gives the example of 1,000,001 operations being billed as two million. Small counts do not necessarily produce proportionately small bills.

Its $10 storage charge covers 1,000GB-months despite deletion after five days. The official storage-class guide specifies a thirty-day minimum for Infrequent Access. Earlier deletion, movement or replacement still attracts the minimum-duration charge. The delete operation is free. The storage commitment survives the button.

The Standard free tier does not apply to Infrequent Access. Borrowing the neighbouring example's free requests would erase charges this example retains. The neighbouring Standard example also keeps objects for a month, whereas this one deletes them after five days. Their totals are unsuitable as a ready-made comparison of equivalent workloads.

These details make the remaining gap more conspicuous. There is a rule for the write charge, a rule for the storage duration and a multiplication for the read count. The bytes returned by each read still need an input.

Who supplied the missing number?

An application owner can hand finance a correct request forecast. Finance can multiply stored capacity by a correct retrieval rate. Both pieces of arithmetic can be accurate while the assembled budget describes no agreed workload. The missing connection is repeat retrieval of the same bytes.

Before approving the estimate, the buyer should require operations and retrieval volume to describe the same actions over the same period. Metadata checks should be identified as such. Whole-object reads should carry their whole-object byte assumption. A total capacity figure cannot quietly stand in for the volume fetched over and over again.

Cloudflare publishes the processing rate plainly enough to do this calculation. Its worked example needs the other half of the multiplication. A precise-looking total earns its place in a procurement budget only when the behaviour behind it is equally precise.