When to use it
- Populating a fresh dev/staging instance with realistic data.
- Testing charts, filters, and aggregations across many users and date ranges.
- Reproducing a bug report - the reporter shares their seed and preset, you regenerate the same dataset locally.
Walkthrough
Users
- Number of users - 1 to 10. Each gets a personal record, provider connections, and the data blocks below.
- Override random seed - leave empty to get a new seed per run, or paste a seed to reproduce a dataset. After a run you can click Reuse last: N to repeat it.
Profile presets
One click fills the whole form with a tuned configuration. Any manual edit clears the preset label (but keeps the values).Workouts
Toggle to enable. Configure:- Count (1-500), Duration min/max (minutes), Date range (from/to).
- Workout types - pick specific types (running, cycling, …) or leave empty for random across all supported types.
Sleep records
Toggle to enable. Configure:- Count (1-365), Duration min/max, Date range. Count cannot exceed days in the range - only one sleep per day.
- Nap chance (%) - probability a given record is flagged as a nap.
- Weekend catch-up - shorter weekday sleep, longer weekend sleep.
- Stage distribution - pick a named profile (Optimal, Deep Deficit, REM Deprived, Restless, Athlete Recovery) or set custom min/max % for Deep, REM, and Awake. Light sleep fills the remainder (sum of max % must stay ≤95%).
Time series
Toggle to enable. Samples are emitted during workouts (heart rate, steps, etc. from the configured series types). Chance per workout (%) controls what fraction of workouts get samples. Disabling workouts also disables time series.Providers
- Provider pills - pick specific providers (Apple, Garmin, Oura, Polar, Suunto, WHOOP). Leave empty for a random sample.
- Connections per user (1-5) - how many providers to wire up per user. Apple is created as an SDK-style connection (no OAuth tokens); others get mock OAuth tokens.
Reproducibility
The seed fully determines the output for a given configuration. User names, emails, and IDs are intentionally randomized each run (so you don’t hit unique constraints), but workouts, sleep, time series, and provider selections are deterministic for the seed.How the seed is surfaced
Every generated user’s first name is prefixed with the seed and preset:1838273645- the seed usedactive_athlete- the preset id, orcustomif the form was edited
Reproducing someone else’s data
- Ask them for a user name (or grab it from a screenshot / bug report).
- Copy the seed (
1838273645) and preset (active_athlete) from the[SEED:...]prefix. - In Settings → Seed Data, click the matching preset, paste the seed into Override random seed, and generate.
custom, you also need the other form values - seed alone isn’t enough to reproduce a hand-tuned configuration.
Data is anchored to a fixed reference date (2025-01-01) inside the service, so the same seed produces the same dates regardless of when you run the generator. Explicit Date range inputs override this anchor.
API
The dashboard calls these developer-scoped endpoints. You can hit them directly if you want to script seeding.
All three require developer JWT auth (same as the rest of the dashboard).

