Vol. 1 · About
What FairTest is, and is not.
What it is
FairTest reads the list price that private diagnostic labs in India already publish on their own websites for common blood tests. The headline finding is not lab-versus-lab: it is that the same lab publishes a different price for the same test in different cities. Metropolis charges ₹400 for an HbA1c test in Delhi and ₹700 for the identical test in Bangalore. FairTest fans a single search out across every city a lab covers, ranks the results, and links every card back to the exact page it was read from.
The cross-city numbers above describe a measured price difference, not a saving anyone can travel to collect: FairTest has no booking flow, and nobody should fly between cities for a blood draw. The one comparison in this dataset that is genuinely actionable today, because it needs no travel, is same-city, cross-lab: Orange Health Labs charges ₹490 for HbA1c in Bangalore against Metropolis's ₹700 for the identical test in the same city, verified live on both sites. Where a comparison like that exists, FairTest says so plainly; where it does not (most of the matrix, which tracks Metropolis alone across cities), it is not implied.
What it is not
- Not medical advice. It publishes a price, not a diagnosis or a recommendation.
- Not a booking service. There is no appointment flow anywhere in this product.
- Not a payments product. FairTest never handles money.
- Not a guarantee of the current price. Labs change list prices without notice; always confirm on the source page before paying.
The data contract
Every row returned by every collector is normalized to the same set of fields. A field the source did not publish is stored and rendered as an explicit not published state, never a fabricated number. Live extraction is messy: prices arrive as nested objects, lab names sometimes come back as page headings, and specimen types sometimes come back as prices. FairTest detects these defects, nulls the field rather than showing wrong data, and records why in field_health on the row itself.
| test_name | The test as searched, e.g. HbA1c, Lipid Profile. |
| lab | The diagnostic chain the price was published by. |
| city | City the price applies to. FairTest fans a search out across every city a lab publishes prices for. |
| price_inr | The published list price in Indian rupees. Null if not published. |
| currency | Always INR today. |
| turnaround | Reported turnaround time for results, as published. Null if not stated or not trustworthy. |
| fasting | Whether fasting is required before the sample is drawn. Null if not stated. |
| sample_type | Blood, urine, etc, as published. Null if not stated. |
| source_url | The exact page the price was read from. |
| collector_id | The Bright Data collector that produced the row. |
| scraped_at | Timestamp of the scrape that produced this row. |
| field_health | A ledger of any field FairTest could not trust as extracted, and why. Empty when every field extracted cleanly. |
The price matrix, and its cache
/matrix, /overcharge and /ranking all read the same 12-test, 10-city Metropolis dataset from a file on disk (data/price-matrix.json), not from live search. That file only changes when someone runs the full scrape or re-scrapes one test row from the matrix screen; it is never treated as fresher than its own scraped_at.
Live search on the home page is a separate path and is cached in server memory for 15 minutes per test: a repeat search for the same test inside that window is labelled "served from 15-minute cache" on screen rather than silently re-scraped, and the cache never hides that it is stale by the clock, only that it is deliberately not re-fetching yet.
Where two labs' tests are deliberately not compared
Metropolis names its test "TSH Ultrasensitive"; Orange Health names its plain "Thyroid Stimulating Hormone". TSH assay "generation" naming is not standardized across manufacturers or labs: a routine third-generation assay is sometimes marketed as "ultrasensitive" and sometimes not, and neither published test page states which assay generation is actually run. FairTest could not confirm these are the same test, so it does not cross-compare them: they are kept under separate search keys and never appear merged in one ranked result. HbA1c and Vitamin D, the other tests both labs publish, do not have this ambiguity (HbA1c is a single internationally standardized glycated-haemoglobin assay) and are compared normally.
Which sites are sourced
Two private diagnostic providers are tracked today, each against real per-city test pages rather than a homepage. A lab only appears with real rows once its Bright Data collector is provisioned with a real collector ID; until then it shows as not provisioned rather than filled with placeholder prices. A test with no verified page mapping for a lab is left out of that lab's results rather than guessed. See the collector registry for live status.
- Metropolis Healthcare: https://www.metropolisindia.com/
- Orange Health Labs: https://www.orangehealth.in/
- Thyrocare: https://www.thyrocare.com/