Build a Bike Specification Comparison Readers Can Verify
Prepare a bike comparison spreadsheet with exact variants, consistent units, gearing calculations and source notes, then publish a filterable public table.

A useful bike specification comparison starts with one row per exact build and frame size—not one row per brand. Keep numbers sortable, preserve the manufacturer’s wording, and attach sources so readers can check what each value describes.
The workflow below turns manufacturer specifications into a public dataset. The result is a table readers can filter and verify, rather than an unsupported “best bike” ranking.
1. Define what each row represents
Choose a scope before collecting specifications: for example, US-market, non-electric road bikes with their listed stock components. Record the model year or generation, frame size and whether the source describes a current or archived model.
Size matters even when the model name stays the same. Trek’s archived Domane AL 2 Gen 4 specification lists different crank lengths by size and reports its weight specifically for size 56. Giant’s Contend AR 3 also lists size-specific crank and stem lengths. Those differences belong in the dataset, not in an assumption that every build is identical. (Trek specifications, Giant specifications)
A practical record key combines:
brand + model + year_or_generation + market + frame_size
If a source offers several component alternatives for that record, retain them in a note. Don’t silently choose one.
2. Start with a small, sourced extract
This two-record teaching sample uses manufacturer pages checked on 26 October 2026. It deliberately includes an archived model to show why source status needs its own field; it is not a current-stock shortlist. Trek labels this page “2024–2026” and “Archived”; Giant’s page identifies the Contend AR 3 as a 2026 model.
| Bike and source | Source status | Selected size | Chainrings, teeth | Cassette, teeth | Stock tire label | Listed bike weight, kg |
|---|---|---|---|---|---|---|
| Trek Domane AL 2 Gen 4 | Archived, 2024–2026 | 56 | 50/34 | 11–32 | 700×32 mm | 10.55 |
| Giant Contend AR 3 | Current page, 2026 | M | 50/34 | 11–36 | 700×33c | Not stated |
The selected sizes are examples, not a claim that Trek 56 and Giant M are equivalent fits. Giant describes its sizing guide as a reference and advises checking size with an authorized dealer. (Giant sizing guidance)
Keep Giant’s weight cell blank in the numeric spreadsheet column, with weight_status = not_stated. Its page gives no numeric bike weight and recommends having a dealer weigh the bike. Trek cautions that its published weights are based on pre-production painted frames and may vary in final production. A zero or an estimated value would create a misleading weight comparison. (Giant weight note, Trek weight note)
3. Separate numbers from labels and notes
Use a single header row, no merged cells, and one value per cell. Suggested fields:
| Field group | Example columns | Preparation rule |
|---|---|---|
| Identity | brand, model, year_or_generation, market, frame_size |
Store size as text; preserve labels such as M or 56. |
| Geometry | stack_mm, reach_mm, wheelbase_mm |
Convert to one unit and keep the original values in notes. |
| Drivetrain | small_chainring_teeth, large_chainring_teeth, cassette_min_teeth, cassette_max_teeth |
Split tooth counts into numeric columns. |
| Components | crank_length_mm, stem_length_mm, brake_type |
Use the selected size’s specifications; preserve component alternatives in notes. |
| Tires | stock_tire_label, stock_tire_width_mm, max_tire_width_mm |
Keep nominal fitted width separate from maximum clearance; don’t present it as measured width. |
| Weight | bike_weight_kg, weight_size, weight_basis, weight_status |
Preserve the measurement context. |
| Provenance | source_url, checked_on, source_status, notes |
Keep the source attached to the record. |
Watch units during extraction. Trek’s geometry table uses centimetres unless otherwise noted: size 56 frame stack is 59.1 cm, so store 591 under stack_mm. Giant’s geometry table supplies millimetres and inches. Copying 59.1 into a millimetre column would introduce a tenfold error. (Trek geometry, Giant geometry)
If adding prices, use separate fields for amount, currency, market, price type and check date. Don’t compare a sale price with another bike’s original list price without labeling the difference. The broader product comparison workflow covers these variant and provenance checks.
4. Calculate a narrowly defined comparison
“More gears” is not the same field as lowest gearing. For these chain-driven bikes, add a derived column:
lowest_ratio = small_chainring_teeth / cassette_max_teeth
Using the sourced tooth counts above:
- Trek:
34 / 32 = 1.063, rounded. - Giant:
34 / 36 = 0.944, rounded.
That compares drivetrain ratios only. Don’t label it “speed” or “distance per pedal turn”: distance also requires wheel circumference, and speed additionally requires cadence—the rate of pedaling. Preserve the input columns so readers can reproduce the result, and describe the formula beside the published table.
5. Publish and check the reader’s view
Export the cleaned comparison as CSV, or retain XLSX if that better suits your working file. Keep only the intended public data: no customer details, private contact information or internal purchasing notes.
TablePage’s homepage states that it accepts CSV, TSV, XLSX and XLS uploads and generates a public dataset page with a shareable link and filterable table. (TablePage publishing overview)
After uploading, inspect the public page:
- Confirm numeric columns behave as numbers rather than formatted text.
- Check that blank weights have not become zero.
- Verify model, size, source status and check date remain visible.
- Open the source links and spot-check several component values.
- Include the scope, unit conventions, missing-value rule and calculation definition with the shared comparison.
Give the page a descriptive title such as “US road-bike specifications: selected builds, checked 26 October 2026.” That tells readers what the dataset covers without implying a complete market survey or a performance test.