Smart trainer database JSON and CSV API
Static files, CORS enabled, no key. Fields are read from the files we actually serve.
These are plain static files. There is no key, no sign-up and no rate limit beyond ordinary good manners: cache what you fetch and please do not poll more than once a day, because the files only change when we re-check the data.
- Licence: CC BY 4.0. Credit SmartBikeWiki and link to https://smartbikewiki.com/database/.
- CORS: every file under
/data/is served withAccess-Control-Allow-Origin: *, so you can call it straight from browser JavaScript. - Update cadence: Rebuilt whenever a model is re-checked; each record carries its own checked date. Prices change often, so treat price fields as the value on the checked date.
- Versioning: files are overwritten in place. The checked date below tells you which version you have.
- Related: embeds, charts and downloads and the press and media kit.
Endpoints
GET /data/trainer-database.json: Smart Trainer and Smart Bike Database (JSON, 21 records)GET /data/trainer-database.csv: Smart Trainer and Smart Bike Database (CSV) (CSV, 21 rows)
GET /data/trainer-database.json
One object per model with claimed specs, store price in the store's own currency, connectivity, source links and the findings named independent reviewers published. We ran no tests; nothing here is a score.
Full URL: https://smartbikewiki.com/data/trainer-database.json. Format: application/json. 21 records. Last checked 2026-10-02. Described on https://smartbikewiki.com/database/.
const res = await fetch("https://smartbikewiki.com/data/trainer-database.json");
const data = await res.json();
console.log(Array.isArray(data) ? data.length : Object.keys(data));Fields (26)
| Field | Type | Example | Filled |
|---|---|---|---|
| id | string | wahoo-kickr-v6 | 21 of 21 |
| brand | string | Wahoo | 21 of 21 |
| model | string | KICKR (2022, WiFi) | 21 of 21 |
| type | string | smart-trainer | 21 of 21 |
| status | string | current | 21 of 21 |
| claimedPowerAccuracy | string (nullable) | ±1% | 18 of 21 |
| maxPowerW | number (nullable) | 2200 | 18 of 21 |
| maxPowerNote | string (nullable) | Stated as sprint stability up to 2,200 W | 7 of 21 |
| maxSimulatedGradientPct | number (nullable) | 20 | 18 of 21 |
| minSimulatedGradientPct | number (nullable) | -10 | 8 of 21 |
| flywheel | string (nullable) | 16 lb (as stated by Wahoo) | 11 of 21 |
| noiseClaim | string (nullable) | 59 dB at 20 mph (Saris) | 2 of 21 |
| weight | string (nullable) | 47 lb / 22 kg | 13 of 21 |
| maxRiderWeight | string (nullable) | 250 lb / 113 kg | 10 of 21 |
| connectivity | string (nullable) | ANT+, ANT+ FE-C, WiFi, Bluetooth, Direct Connect | 16 of 21 |
| price | number (nullable) | 1049.99 | 11 of 21 |
| priceCurrency | string (nullable) | USD | 16 of 21 |
| priceNote | string | US list price $1,049.99 (Cyclingnews, Dec 2025 and Jul 20... | 21 of 21 |
| specSource | string (nullable) | https://www.wahoofitness.com/devices/indoor-cycling/bike-... | 18 of 21 |
| priceSource | string (nullable) | https://www.cyclingnews.com/bikes/save-usd200-on-the-waho... | 16 of 21 |
| publishedFindings | array | [{"reviewer":"BikeRadar","reviewedModel":"Wahoo KICKR V6"... | 21 of 21 |
| checked | string | 2026-09-29 | 21 of 21 |
| sources | array | ["https://www.wahoofitness.com/devices/indoor-cycling/bik... | 21 of 21 |
| priceLocal | number (nullable) | 1125 | 4 of 21 |
| priceStore | string (nullable) | Zwift US store (us.zwift.com) | 1 of 21 |
| priceType | string (nullable) | list | 1 of 21 |
Empty or null means the source did not state it, not that the answer is zero. Money is in the source's own currency and is never converted. Dates are ISO 8601.
GET /data/trainer-database.csv
The main spec and price columns as a flat file, plus a count of published findings per model.
Full URL: https://smartbikewiki.com/data/trainer-database.csv. Format: text/csv. 21 rows. Last checked 2026-10-02. Described on https://smartbikewiki.com/database/.
const res = await fetch("https://smartbikewiki.com/data/trainer-database.csv");
const rows = (await res.text()).trim().split(/
?
/);
console.log(rows.length - 1, "rows");Columns (17)
| Column |
|---|
| id |
| brand |
| model |
| type |
| claimedPowerAccuracy |
| maxPowerW |
| maxSimulatedGradientPct |
| weight |
| connectivity |
| price |
| priceCurrency |
| priceLocal |
| priceNote |
| specSource |
| priceSource |
| checked |
| publishedFindings |
Empty or null means the source did not state it, not that the answer is zero. Money is in the source's own currency and is never converted. Dates are ISO 8601.
How to credit
A visible mention with a link is enough, for example: "Data: SmartBikeWiki (smartbikewiki.com), CC BY 4.0." The citation below is ready to copy.
Cite this
Data version 2026-10-02. Stable address: https://smartbikewiki.com/database/. Free to reuse under CC BY 4.0 with a link back.