Methodology
Mars Score is a transparent, category-weighted composite score from 0 to 100. Every contributing spec, its weight, and its normalization range is published here. Nothing hidden, nothing weighted by hand.
Data sources
- Amazon Product Advertising API — primary metadata, pricing, imagery, variant data. Refreshed every 6 hours for prices, every 24 hours for specs.
- BestBuy API — US availability cross-reference, merged by UPC where possible.
- Editorial review — top 200 products in each category receive manual editorial review. Specs the parser is not confident about are flagged for human verification.
- User suggestions— moderated queue. Approved suggestions are credited in the product's edit history.
The Mars Score formula
For any product in category C:
- For every spec group in
C, we collect every required spec value the product has. - Each value is normalized to a 0–1 range using one of three methods declared in the category config —
minmax(linear),minmax_inverse(for “lower is better” specs like weight), orlog_minmax(for specs with wide dynamic range like camera megapixels). - Group score = arithmetic mean of normalized values × 100.
- Raw Mars Score = weighted average of group scores, using the per-category weights below.
- Display rescale. The raw 0–100 score is mapped to a 35–95 presentation range so flagship products land where buyers expect them (88–94) without inflating budget models. The mapping is a pure function:
display = 35 + (raw / 100) ^ 0.85 × 60
Anchor points: raw 0 → display 35, raw 50 → 67, raw 70 → 79, raw 90 → 89, raw 100 → 95. Relative ranking between any two products is preserved exactly — rescaling is monotonic. The transformation lives inrescaleScoreinsrc/lib/score/mars.ts.
Confidence (the percentage of required specs that were actually present) is tracked separately and surfaced on the product page when below 80%. Products below 40% confidence have their score hidden entirely — we don't guess at numbers we can't back up with data.
Example: Smartphones weights
For smartphones, the Mars Score is a weighted average of these seven groups:
| Group | Weight | Required specs |
|---|---|---|
| Design | 8% | none |
| Display | 18% | Screen size, Refresh rate |
| Performance | 25% | RAM, AnTuTu, CPU total clock |
| Cameras | 18% | Main camera |
| Battery | 20% | Battery capacity |
| Connectivity | 7% | none |
| Operating System | 4% | none |
Normalization ranges
Each required spec has a published min/max range. A smartphones battery of 3,000 mAh normalizes to 0; 8,000 mAh normalizes to 1; everything in between is linear.
| Spec | Method | Min | Max |
|---|---|---|---|
| antutu_score | minmax | 200,000 | 3,500,000 |
| ram_gb | minmax | 4 | 24 |
| battery_capacity_mah | minmax | 3,000 | 8,000 |
| screen_size_in | minmax | 4.7 | 7.5 |
| refresh_rate_hz | minmax | 60 | 240 |
| main_cam_mp | log_minmax | 8 | 250 |
| weight_g | minmax_inverse | 130 | 250 |
| promised_os_years | minmax | 1 | 7 |
| cpu_total_ghz | minmax | 5 | 30 |
How this differs from other comparison sites
Most product-comparison sites — including versus.com, RTINGS, GSMArena — compute a single composite score, but the formula behind it is either undocumented, locked inside thousands of lines of internal code, or moved between versions without retroactive recomputation. Buyers see “76 / 100” and have no way to verify why.
vsMars publishes the entire pipeline on this page:
- The exact per-category weights (table above) — auditable, versioned.
- The exact normalization ranges (table above) — every spec's 0-1 bounds visible.
- The exact display rescale formula (above) — a one-line function.
- An open-source audit script (
scripts/audit-mars-scores.ts) that lets you reproduce every Mars Score on every product, locally, in 10 seconds. - A confidence threshold (≥40%) below which the score is hidden, not guessed.
If you find a Mars Score you disagree with, the disagreement is concrete and resolvable: either you have a different spec value (in which case tell us, with a citation), or you weight categories differently (in which case the methodology is fully exposed and you can compute your own ranking). No “trust the algorithm” black box.
What we don't do
- No hand-tuning per product.Mars Score is computed from the formula above. We never bump a product's score because we like it or because a brand asked.
- No paid placement in rankings. Affiliate revenue does not influence Mars Score, sort order, or which products appear in category top-10 lists.
- No black-box AI scoring. Every input, weight, and step is public. The full implementation is in
src/lib/score/mars.tsin our codebase.
Versioning
Mars Score weights are versioned per category. The current smartphones weights are version 1. When we change weights — typically once or twice a year as a category matures — we publish a changelog and recompute every score retroactively, so historical comparisons stay consistent.