Skip to content

Pages Usage Limits, Bandwidth & Billing

DodaTech Updated 2026-06-23 4 min read

In this tutorial, you'll learn about Pages Usage Limits, Bandwidth & Billing. We cover key concepts, practical examples, and best practices to help you understand and apply this topic effectively.

This tutorial explains the usage limits, bandwidth quotas, and billing structure for Cloudflare Pages, helping you plan capacity and avoid unexpected charges. Static Sites on the free plan can serve unlimited bandwidth with no traffic limits, making Pages an attractive option for high-traffic projects. The DodaZIP marketing site serves over 500,000 monthly visitors on the free plan without any usage overages.

Free Plan Limits

Cloudflare Pages offers a generous free tier with unlimited bandwidth and requests. Understanding the limits helps you plan when to upgrade.

flowchart LR
  A[Free Plan] --> B[Unlimited bandwidth]
  A --> C[Unlimited requests]
  A --> D[500 builds per month]
  A --> E[1 concurrent build]
  D --> F[3,000 build minutes]
  E --> G[Queue if busy]
  style A fill:#f90,color:#fff
  style B fill:#f90,color:#fff

Build Minutes

Build minutes are the total time your site takes to build across all deployments. Different plans offer different allocations.

// Calculate build minute usage from deployment data
const deployments = [
  { id: 'dep1', duration: 45, status: 'success' },
  { id: 'dep2', duration: 120, status: 'success' },
  { id: 'dep3', duration: 30, status: 'failed' },
  { id: 'dep4', duration: 90, status: 'success' }
];

const totalMinutes = deployments.reduce(function(sum, dep) {
  return sum + Math.ceil(dep.duration / 60);
}, 0);

const remainingFree = 3000 - totalMinutes;
const buildsThisMonth = deployments.length;

console.log('Total build minutes used: ' + totalMinutes);
console.log('Remaining this month: ' + remainingFree);
console.log('Builds this month: ' + buildsThisMonth);
// Expected output:
// Total build minutes used: 5
// Remaining this month: 2995
// Builds this month: 4

Bandwidth Monitoring

Although bandwidth is unlimited on the free plan, monitoring helps you understand traffic patterns and plan for scale.

// Estimate bandwidth usage from analytics
async function estimateBandwidth(apiToken, accountId) {
  const response = await fetch(
    'https://api.cloudflare.com/client/v4/accounts/' + accountId + '/pages/projects',
    { headers: { 'Authorization': 'Bearer ' + apiToken } }
  );

  if (!response.ok) {
    console.log('API error:', response.status);
    return;
  }

  const data = await response.json();
  let totalBytes = 0;

  for (const project of data.result) {
    totalBytes += project.latest_deployment.pages_config.usage || 0;
  }

  const megabytes = (totalBytes / (1024 * 1024)).toFixed(2);
  const gigabytes = (megabytes / 1024).toFixed(2);

  console.log('Total bandwidth: ' + megabytes + ' MB');
  console.log('Total bandwidth: ' + gigabytes + ' GB');
}
estimateBandwidth('YOUR_TOKEN', 'YOUR_ACCOUNT');
// Expected output:
// Total bandwidth: 1532.45 MB
// Total bandwidth: 1.50 GB

Concurrent Builds

Free plans support 1 concurrent build. Additional builds queue until the current build completes.

// Simulate build queue behavior
class BuildQueue {
  constructor(maxConcurrent) {
    this.maxConcurrent = maxConcurrent;
    this.running = 0;
    this.queue = [];
  }

  addBuild(projectName) {
    if (this.running < this.maxConcurrent) {
      this.running++;
      console.log(projectName + ': Build started immediately');
      return;
    }
    this.queue.push(projectName);
    console.log(projectName + ': Queued (position ' + this.queue.length + ')');
  }

  completeBuild() {
    this.running--;
    if (this.queue.length > 0) {
      const next = this.queue.shift();
      this.running++;
      console.log(next + ': Build started from queue');
    }
  }
}

const queue = new BuildQueue(1);
queue.addBuild('docs');
queue.addBuild('blog');
queue.addBuild('admin');
queue.completeBuild();
queue.completeBuild();
// Expected output:
// docs: Build started immediately
// blog: Queued (position 1)
// admin: Queued (position 2)
// blog: Build started from queue
// admin: Build started from queue

Plan Comparison

Choose the right plan based on your project needs.

# Plan comparison summary
# Free: Unlimited bandwidth, 500 builds/mo, 1 concurrent build, 3,000 build minutes
# Pro ($20/mo): Unlimited bandwidth, 5,000 builds/mo, 10 concurrent builds, 6,000 build minutes
# Business ($200/mo): Unlimited bandwidth, 20,000 builds/mo, 50 concurrent builds, 12,000 build minutes
# Enterprise (Custom): Unlimited builds, unlimited concurrent, custom build minutes

FAQ

Does Cloudflare Pages charge for bandwidth overages?

No. All Cloudflare Pages plans include unlimited bandwidth with no overage charges. You only pay for the plan itself plus any additional build minutes if you exceed the included allocation.

What happens if I exceed my build minute limit?

Builds are paused until the next billing cycle when your minutes reset. You can purchase additional build minutes as an add-on or upgrade to a higher plan for a larger allocation.

Can I have multiple Pages projects on the free plan?

Yes. You can create unlimited Pages projects on the free plan. Each project shares the same global limits for builds per month and concurrent builds across your account.

Practice Questions

  1. How many build minutes are included in the Cloudflare Pages free plan?
  2. What happens to a build when the maximum concurrent build limit is reached?
  3. Which Cloudflare API endpoint returns a list of Pages projects for your account?

Summary

Cloudflare Pages free plan includes unlimited bandwidth, unlimited requests, 500 builds per month, and 3,000 build minutes. Paid plans increase build limits and concurrent builds. Monitor usage through the Cloudflare dashboard or API to plan upgrades as your project grows.

Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro — security-first tools for the modern web.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro