// Guides2026-09-165 min read

How to Compare Cloudflare Traffic Year over Year

“Is traffic up compared to last year?” is one of the most common questions a founder or growth lead asks. The Cloudflare dashboard is a natural place to look for the answer.

Whether you can answer it depends on one number: how far back your plan lets you query.

Step 1: Check whether you have a year of data

Daily traffic comes from the httpRequests1dGroups dataset. Its retention depends on your plan, and Cloudflare exposes the exact limit through the API.

Follow how to check your exact Cloudflare analytics retention limits and look at httpRequests1dGroups.notOlderThan:

  • 365 days or more: you can compare directly. Skip to Step 3.
  • Less than 365 days: last year’s data is already gone. Go to Step 2.

Step 2: Start building history now

There’s no way to recover data Cloudflare no longer keeps. The next best thing is to start keeping it today, so this time next year, the comparison works.

Two ways to do that:

  1. Monthly CSV export — run the CSV export on the 1st of each month and append to one file.
  2. Automated nightly snapshot — a small Worker that archives yesterday’s analytics to R2.

Don’t wait for the question. Traffic history is one of those things you only need after it’s too late to collect.

Step 3: Compare the right days

The naive comparison, “September 16, 2026 vs. September 16, 2025”, compares a Wednesday to a Tuesday. For most sites, weekday effects are larger than the growth you’re trying to measure.

Compare the same weekday instead, 364 days apart (exactly 52 weeks):

This year Compare to Why
Wed, Sep 16, 2026 Wed, Sep 17, 2025 Same weekday, 52 weeks earlier

For monthly or quarterly totals, weekday alignment matters less. Compare totals directly, but watch for holidays that move between months.

Step 4: Calculate the change in SQLite

With a year of daily data in traffic.csv (columns from the CSV export), load it into SQLite:

sqlite3 traffic.db -cmd '.mode csv' '.import traffic.csv daily'

Then compare each day to the same weekday last year:

SELECT
  cur.date,
  cur.requests                      AS requests,
  prev.requests                     AS requests_last_year,
  ROUND(100.0 * (cur.requests - prev.requests) / prev.requests, 1) AS pct_change
FROM daily AS cur
JOIN daily AS prev
  ON prev.date = date(cur.date, '-364 days')
ORDER BY cur.date DESC
LIMIT 30;

Swap requests for uniques, pageViews, or bytes to compare other metrics.

Reading the results carefully

  • Bot traffic changes can look like growth. Compare threats too, and remember that unique visitors are counted by IP.
  • Caching changes affect bytes and cachedRequests, not visitor counts.
  • A single day is noisy. Use 7-day or 28-day rolling totals for decisions.

Get year-over-year without the setup

MetricKeeper archives your Cloudflare analytics from the day you connect, so year-over-year comparisons are ready when you need them. Connect a read-only token and your history starts building immediately.

Get Early Access →