← All guides
Build · Limits

How much history you actually get: backfill limits by provider

Pricing pages list "historic health data retrieval" as a feature with no number next to it. The documentation underneath has the numbers, and for some providers it is four weeks. That gap decides what your first session can show a user.

By Chinmay Bhatt, Founder, HumotronUpdated 15 October 20263 min read
Written forEngineer scoping an integration
The job in handFinding out what you get on day one
Read it in3 min
01The short version
  • Backfill depth is set by each provider, not by your vendor.
  • Some providers give 180 days. Some give 28.
  • Heart-rate history is often shorter than everything else, even where sleep goes back months.
  • If you need a baseline, somebody has to hold history over time. It does not have to be you.
02Roughly what each provider allows
ProviderBackfillThe catch
OuraUp to around 180 daysHeart rate often much shorter
WhoopUp to around 180 daysDocs advise against requesting more than 30 at once
FitbitUp to around 90 daysSome time-series may cover only 30
GarminUp to around 90 daysOne backfill per user per application, up to 12 hours, events may arrive out of order
WithingsUp to around 90 daysAdvise against large requests
PolarAround 28 days—
SuuntoAround 28 days—
Health Connect30 days before permission was grantedReinstalling resets the window

Figures as published in aggregator documentation at the time of writing, and they change. Treat this as the shape of the problem, then confirm against current provider docs before you design around any single row.

03Rate limits bite during backfill, not steady state

Limits are usually per application, not per user, so they get tighter as you grow. One provider documents 100 requests a minute and 10,000 a day against the API key. Polling one endpoint hourly for a thousand members is 24,000 requests a day — over that limit before you have backfilled anything or retried anything.

The practical failures to design for: 429 on limit, 424 when the provider rate-limits underneath your vendor, and a 504 when a synchronous historical fetch runs past the timeout. Large requests generally have to go asynchronous and come back on a webhook.

04What this means for your first session

A user connects and expects to see something about themselves. What you can show is decided by that table, not by your product design.

Do
  • Design the empty state for 28 days, not 180
  • Treat a missing night as null, never as zero
  • Store the day boundary with its timezone at capture
  • Expect out-of-order and duplicate events
Don’t
  • Promise a user "six months of history" generically
  • Assume the pricing page bullet is the spec
  • Compare one brand’s score with another’s
  • Run backfill on the same budget as steady-state polling

Humotron reads the last six months of daily summaries once, at connection, within whatever each provider actually allows, and holds the baseline over time so the partner does not have to. You get the ranking and the reason, not the history.

05Questions

Why is Apple different?

Apple Health has no server-side REST API. Access is on-device, which means a native app in the flow rather than a server-to-server call. That is a product constraint, not a vendor one.

Can we extend backfill by paying more?

Not usually. The ceiling is the provider’s, so no aggregator can sell you past it.

How long until a baseline is useful?

It depends on the signal and the person. The relevant point is that a baseline is built forward from consent, so whoever holds it needs to be holding it continuously.