---
title: "Cloudflare Stream Pricing: Per-Minute vs Per-GB Costs"
description: "Cloudflare Stream pricing charges for stored and delivered minutes. Model real bills, compare per-minute and per-GB costs, and find your break-even point."
url: https://www.zerobuffer.io/blogs/cloudflare-stream-pricing
date_published: 2026-08-18
date_modified: 2026-08-18
topic: "C6 — Video Streaming & Live Streaming"
keywords: ["cloudflare stream pricing","mux video","free cdn for images","livestreaming platforms","event live streaming services","private livestream"]
word_count: 2767
author: "Sahil Asopa"
author_url: https://www.zerobuffer.io/authors/sahil-asopa
author_profiles: ["https://www.linkedin.com/in/sahilasopa/","https://github.com/sahilasopa"]
publisher: ZeroBuffer
license: © 2026 Apexnova Private Limited
---
![Per-minute video billing and per-GB delivery models plotted across a global streaming network](https://www.zerobuffer.io/blogs/cloudflare-stream-pricing/thumbnail.png)

# Cloudflare Stream Pricing: Per-Minute vs Per-GB Costs

A video bill can look predictable right up until viewing time, autoplay, and bitrate turn a small library into millions of delivered minutes. **Cloudflare Stream pricing** is unusually easy to quote, but the unit it meters is not the unit many infrastructure teams already forecast.

Cloudflare Stream charges $5 for each 1,000 minutes of storage capacity and $1 per 1,000 minutes delivered. That includes ingest, encoding, and bandwidth, but a flat per-GB delivery model can cost less when your average delivered bitrate is low; convert viewer-minutes to gigabytes before choosing.

This guide models both approaches with the same workload. It also covers the billable events that simple calculators miss, including buffering, live recordings, downloads, and simulcasting.

## How Cloudflare Stream pricing works

Cloudflare Stream has two core billing dimensions:

- **Minutes stored:** prepaid in $5 blocks of 1,000 minutes. Duration, not source file size or the number of generated renditions, consumes the allocation.
- **Minutes delivered:** postpaid at $1 per 1,000 minutes across viewers. Ingest, encoding, and bandwidth do not appear as separate charges.

The same rates apply to on-demand and live video. Cloudflare's [current Stream pricing documentation](https://developers.cloudflare.com/stream/pricing/) says storage covers uploaded originals and live recordings, while delivery covers playback through its player or HLS/DASH manifests, MP4 downloads, and SRT or RTMP simulcast outputs.

That makes the headline formula simple:

```text
storage blocks = ceiling(stored minutes / 1,000)
storage capacity cost = storage blocks × $5
delivery cost = delivered minutes × $0.001
modeled Stream bill = storage capacity cost + delivery cost
```

The formula is a planning model, not an invoice replica. Existing prepaid capacity, enterprise terms, taxes, other Cloudflare products, and timing within the billing cycle can change what appears on a specific invoice.

### What “minutes delivered” actually means

Delivered minutes are audience minutes, not the runtime of each unique asset. If two viewers each watch 30 minutes, Cloudflare records 60 delivered minutes and the delivery charge is $0.06.

The “per-minute” label can also be misleading if you interpret it as rounding every play session to a full 60 seconds. For uploaded video, Cloudflare says HLS, DASH, and Stream Player usage is rounded to the four-second segment length. Live and recorded-live rounding follows the source stream's keyframe interval or GOP size.

Billing follows requested media, not only the frames a viewer consciously watches:

- Client-side preloading and buffering count when segments are requested.
- A segment served from browser or client cache is not billed again.
- MP4 downloads are billed according to the fraction of the file delivered.
- Simulcasting a live feed to an RTMP or SRT destination counts as delivery.

These rules are why multiplying “plays” by asset duration usually overstates one workload and understates another. Use observed watch time and player behavior.

### What consumes storage capacity

Uploaded originals and recorded live broadcasts consume storage by duration, rounded to the second. Multiple adaptive-bitrate renditions do not add more Stream storage minutes, and neither do the downloadable MP4 files Stream generates.

Direct Creator and TUS uploads introduce a temporary reservation. Your application declares `maxDurationSeconds`, and that maximum is removed from available capacity until the upload completes, expires, or fails. Cloudflare's [Direct Creator Upload documentation](https://developers.cloudflare.com/stream/uploading-videos/direct-creator-uploads/) explains that the actual video duration replaces the reservation after processing.

Capacity is operational, not merely financial. If a self-serve account runs out of storage, Cloudflare says it cannot upload another video or start another live stream until capacity is added or content is deleted.

## Cloudflare Stream pricing calculator: model the real bill

Start with four inputs for one billing period:

1. Total minutes retained in the video library.
2. Delivered viewer-minutes for VOD and live playback.
3. Downloaded media, expressed as delivered minutes or the equivalent fraction Stream reports.
4. Billable simulcast output minutes.

For a new account, round stored minutes up to 1,000-minute capacity blocks. Add every delivery path before applying $0.001 per minute.

| Workload | Stored minutes | Delivered minutes | Storage capacity | Delivery | Modeled Stream total |
|---|---:|---:|---:|---:|---:|
| Training library | 6,000 | 120,000 | $30 | $120 | $150 |
| User-generated video app | 50,000 | 300,000 | $250 | $300 | $550 |
| Two-hour live event, 2,500 viewers at 75% average watch time | 120 | 225,000 | $5 minimum block | $225 | $230 |

The live example assumes the account needs a new storage block and has no other delivery. The event creates 225,000 viewer-minutes because `120 × 2,500 × 0.75 = 225,000`. Cloudflare automatically records live streams, so even an unwatched broadcast consumes storage; its [live-video documentation](https://developers.cloudflare.com/stream/stream-live/) confirms that live encoding and packaging do not add separate charges.

### Forecast from concurrency without fooling yourself

For a scheduled live event, use:

```text
viewer-minutes = average concurrent viewers × event minutes
```

Do not use peak concurrency for the full duration unless that is truly the expected audience curve. For VOD, use monthly active viewers × plays per viewer × average minutes watched, then add a player-overhead factor derived from production analytics.

Cloudflare exposes delivered-minute analytics in its dashboard and GraphQL API. The [Stream analytics API](https://developers.cloudflare.com/stream/getting-analytics/fetching-bulk-analytics/) can break `minutesViewed` down by video, creator, country, and time, which is enough to replace launch assumptions with measured usage after the first billing period.

## Where Cloudflare Stream pricing can drift from the estimate

The rate card stays fixed while application behavior moves the metered quantity. Audit these five areas before approving a budget.

### Autoplay, previews, and aggressive buffering

A muted preview carousel can generate delivery without a user choosing a video. So can a player that buffers far beyond the current position before the viewer exits. Lazy-load players, set preload behavior deliberately, and compare requested segment duration with visible watch time.

Cached loops are the counterexample. If the client replays locally cached segments, Cloudflare does not record a new delivery for those requests. Test the actual mobile and web players because Cloudflare notes that some mobile HLS libraries do not cache segments by default.

### Short clips and rounding

Four-second VOD segment rounding is small for a 45-minute lesson but material for a feed of two-second clips. Model `ceiling(watch seconds / 4) × 4` for uploaded content when session lengths cluster below a segment boundary. Do not use a blanket 60-second rounding assumption based on older comparisons.

### Downloads and offline playback

An MP4 download counts according to the portion transferred. A download that completes may shift consumption earlier than streaming would, even if the viewer never watches the file. Separate downloads from interactive playback in the product model.

Cloudflare also states in its [Stream FAQ](https://developers.cloudflare.com/stream/faq/) that the exact uploaded original is not downloadable; the optional download is an encoded MP4. That product constraint may matter more than the transfer price when original-file retrieval is part of your workflow.

### Live recordings and simulcast destinations

Every live input is recorded automatically. An event with zero viewers has no playback delivery charge, but the recording consumes storage capacity. If the same event is sent to external platforms over billable SRT or RTMP outputs, add those output minutes to delivery even though viewers watch elsewhere.

### User-generated upload reservations

An application that issues many long-lived direct-upload URLs can reserve more capacity than the duration of completed videos suggests. Keep `maxDurationSeconds` realistic and expire unused upload URLs promptly. Otherwise, creators may hit a capacity error even while the final library appears to fit.

![A bitrate meter converts viewer minutes into gigabytes before comparing two delivery bills](https://www.zerobuffer.io/blogs/cloudflare-stream-pricing/mid-article.png)

## Compare Cloudflare Stream pricing with flat per-GB delivery

Per-minute and per-GB prices cannot be compared without a bitrate. One delivered minute at 1 Mbps transfers far fewer bytes than one minute at 8 Mbps, while Cloudflare charges the same delivery rate for both.

Using decimal gigabytes, the conversion is:

```text
GB delivered = viewer-minutes × average delivered Mbps × 60 / 8 / 1,000
per-GB delivery cost = GB delivered × price per GB
effective Cloudflare $/GB = $0.001 / (average Mbps × 0.0075)
```

The average delivered bitrate must include the renditions viewers actually receive, not the top bitrate in the ladder. Weight bitrate by watch time across every rendition, and include audio in the measured transfer when possible.

### Calculate a watch-time-weighted bitrate

Suppose 50% of viewing time is delivered at 1 Mbps, 35% at 3 Mbps, and 15% at 6 Mbps. The weighted average is `(0.50 × 1) + (0.35 × 3) + (0.15 × 6) = 2.45 Mbps`. One million viewer-minutes would therefore transfer about 18,375 GB, producing a $90.04 delivery line at $0.0049/GB versus $1,000 at Cloudflare's listed minute rate.

Use bytes transferred from production as the stronger input when you have them. Dividing total delivered bits by total watch seconds automatically captures rendition switches, audio, early exits, and unusual ladder choices. Keep protocol overhead and non-video application traffic separate unless the per-GB provider bills those bytes through the same delivery zone.

The following comparison holds delivery at one million viewer-minutes and uses $0.0049/GB for the flat model. It excludes storage from both sides so the table isolates the delivery billing unit.

| Average delivered bitrate | Data delivered | Cloudflare Stream delivery | Flat $0.0049/GB delivery | Difference |
|---:|---:|---:|---:|---:|
| 1 Mbps | 7,500 GB | $1,000 | $36.75 | $963.25 |
| 3 Mbps | 22,500 GB | $1,000 | $110.25 | $889.75 |
| 5 Mbps | 37,500 GB | $1,000 | $183.75 | $816.25 |
| 8 Mbps | 60,000 GB | $1,000 | $294.00 | $706.00 |

At Cloudflare's $0.001 per delivered minute, the delivery-only break-even against $0.0049/GB is about 27.2 Mbps average delivered bitrate. Below that point, the modeled per-GB transfer charge is lower; above it, the per-minute charge is lower. Most teams should calculate from their own CDN logs rather than treat that threshold as a performance or quality recommendation.

This is also not an all-in vendor quote. Cloudflare Stream bundles encoding and bandwidth with its minute rates, while an ordinary CDN comparison may require separate encoding, storage, origin egress, player, analytics, and support lines. Compare the complete architecture after normalizing delivery.

### Where a flat per-GB stack changes the economics

[ZeroBuffer](/pricing) charges a flat $0.0049/GB for CDN delivery in every region, includes multi-rendition video encoding, and prices S3-compatible storage separately at $0.01/GB per month per replica. That [OTT delivery structure](/cdn-for-ott) lets a team pay for bytes actually transferred rather than viewer time, while retaining the option to model storage and replica count as explicit lines.

The decision is not “minutes bad, bytes good.” A minute bundle is attractive when resolution-independent delivery, one API, and minimal infrastructure work outweigh unit-cost optimization. Per-GB pricing is attractive when you control the bitrate ladder, serve bandwidth-efficient streams, need a regional flat rate, or already operate the storage and delivery workflow.

## Cloudflare Stream vs Mux video pricing vs per-GB delivery

Mux is another video API rather than a plain CDN, so it is a closer functional comparison to Stream. Its current [video pricing](https://www.mux.com/pricing) separates input, storage, and delivery, varies rates by resolution, meters without rounding to a full minute, and includes a free monthly delivery allocation on listed self-serve plans.

| Decision factor | Cloudflare Stream | Mux video | Flat per-GB video stack |
|---|---|---|---|
| Primary delivery unit | Viewer-minutes | Minutes, with resolution tiers | Gigabytes transferred |
| Listed delivery baseline | $0.001/minute | Starts at $0.0008/minute after listed allowance for up to 720p | Provider's $/GB rate |
| Encoding | Included | Input starts free | Must be verified; may be bundled or separate |
| Storage | $5 per 1,000 minutes of capacity | Per minute per month, resolution-dependent | Usually GB-month, sometimes per replica |
| Main forecasting input | Watch time | Watch time plus resolution mix | Actual bytes or bitrate-weighted watch time |
| Case for the per-GB alternative | Low average bitrate can make minute delivery expensive per byte | Resolution tiers still require watch-time forecasts | Exposes the transfer unit directly and rewards byte efficiency |

Do not choose from the starting delivery rate alone. Mux's pricing changes with resolution and workflow; Cloudflare's stored-minute block may dominate a large, lightly watched library; and a per-GB stack may need more engineering. Build one worksheet with library duration, retained bytes, input minutes, viewer-minutes, resolution mix, average bitrate, downloads, live outputs, and replica count.

## A practical Cloudflare Stream pricing audit

Run this audit with 30 days of representative traffic—or a conservative launch forecast if the product is new.

1. **Inventory retained video.** Record unique asset duration, live recording duration, retention policy, and the number of storage blocks required.
2. **Export delivered minutes.** Separate VOD, live, download, and simulcast usage. Segment by creator or content type if behavior differs.
3. **Measure bytes at the player or CDN.** Calculate the watch-time-weighted average delivered bitrate rather than relying on the encoding ladder.
4. **Inspect preloading.** Compare requested segment duration with actual playhead progress for short sessions.
5. **Model growth independently.** Library growth raises storage; audience growth raises delivery. They do not move in lockstep.
6. **Price the complete alternatives.** Include encoding, stored bytes, replicas, delivery, origin transfer, analytics, player work, security, and support.
7. **Stress-test three scenarios.** Use expected, event-spike, and low-engagement cases. A pricing model should survive all three.

Also validate product fit. Cloudflare Stream supports signed URLs and origin restrictions for private playback, as described in its [security documentation](https://developers.cloudflare.com/stream/viewing-videos/securing-your-stream/). Its [current overview](https://developers.cloudflare.com/stream/) describes H.264 adaptive-bitrate output from 360p through 1080p, and the FAQ says HDR uploads are delivered as SDR. Requirements such as codec choice, HDR, DRM, detailed quality-of-experience analytics, original-file access, or multi-CDN failover can outweigh a small price difference.

## Frequently asked questions

### How much does Cloudflare Stream cost?

Cloudflare Stream lists storage at $5 per 1,000 minutes of capacity and delivery at $1 per 1,000 viewer-minutes. Ingress, encoding, and bandwidth are included rather than billed as separate Stream lines. A flat per-GB alternative can still be cheaper for bandwidth-efficient delivery, so convert viewer-minutes using your average bitrate.

### Is Cloudflare Stream free?

No general free Stream tier is listed in Cloudflare's current pricing documentation. Storage is prepaid in 1,000-minute blocks, while delivered minutes are usage-based; this is separate from Cloudflare's free website CDN plan or any free CDN for images a team may be evaluating.

### Does Cloudflare Stream charge for bandwidth or egress?

Not as a separate Stream charge. Bandwidth is included in the delivered-minute price, which is why the bill does not fall when the same watch time uses a lower bitrate. A per-GB CDN exposes that bandwidth unit directly.

### How are Cloudflare Stream viewing minutes calculated?

Viewing minutes add the video delivered across all viewers. For uploaded VOD, Cloudflare rounds web playback to four-second segments; preloaded segments can count, while content replayed from client cache does not create another delivery request.

### How much does a two-hour Cloudflare live stream cost?

It depends on audience watch time. A two-hour event with 2,500 viewers watching 75% on average produces 225,000 delivered minutes, or $225 in delivery, before simulcast outputs. The automatic recording also uses storage capacity, with self-serve capacity bought in $5 blocks of 1,000 minutes.

### Is Cloudflare Stream cheaper than Mux?

There is no universal winner. Cloudflare has two simple rate dimensions, while Mux varies storage and delivery by resolution and advertises allowances and workflow-specific prices. A flat per-GB stack can undercut both on delivery when average bitrate is low, but the comparison must include storage, encoding, analytics, and engineering.

### When is per-GB video delivery cheaper than Cloudflare Stream?

Against $0.0049/GB, Cloudflare's $0.001-per-minute delivery rate breaks even at about 27.2 Mbps average delivered bitrate. Below that bitrate, the flat per-GB delivery line is lower in this model; storage and all other platform costs still need separate comparison.

## Conclusion: choose the billing unit you can control

Cloudflare Stream pricing is easy to explain: buy stored-minute capacity, then pay for delivered viewer-minutes. It is strongest when a team values one managed live-and-VOD workflow, included encoding, and a resolution-independent rate more than granular infrastructure economics.

But predictable arithmetic is not automatically the lowest bill. A per-minute model monetizes time even when efficient encoding reduces bytes, while a flat per-GB model turns that efficiency into a lower delivery charge. Export one month of delivered minutes and bytes, run the same expected and peak scenarios through both formulas, and choose the architecture whose cost drivers your team can measure and control.

If bytes are the driver you want to control, ZeroBuffer meters exactly that: a flat $0.0049/GB priced by volume rather than geography, stepping down to $0.0035/GB above 750 TB, with multi-rendition encoding included at no extra charge and S3-compatible storage priced separately at $0.01/GB-month per replica. Every improvement to your ladder and bitrate shows up as a smaller bill instead of leaving it unchanged. [Convert your delivered minutes to the per-GB model](/tools/cdn-cost-calculator), then [see the full rate card](/pricing).
