Practical Data

Tables you can read
at a glance.

Conditional formatting for every table on the web, with the direction figured out for you. A Chrome extension that shades the comparable columns of any HTML table, so the better and worse rows show without reading every cell.

344 of 347 hand-labeled checks on real tables pass. See the core data tests

Examples

Model pricing

Prices are lower-is-better and span two orders of magnitude, so they get a log scale. The two vendor tables share one scale, and Category reads as an ordered set of grades.

docs.github.com
OpenAI
ModelCategoryInputCached inputOutput
GPT-5 miniLightweight$0.25$0.025$2.00
GPT-5.3-CodexPowerful$1.75$0.175$14.00
GPT-5.4Versatile$2.50$0.25$15.00
GPT-5.4Versatile$5.00$0.50$22.50
GPT-5.4 miniLightweight$0.75$0.075$4.50
GPT-5.4 nanoLightweight$0.20$0.02$1.25
GPT-5.5Powerful$5.00$0.50$30.00
GPT-5.5Powerful$10.00$1.00$45.00
GPT-5.6 LunaLightweight$0.20$0.02$1.20
GPT-5.6 LunaLightweight$0.40$0.04$1.80
Ignorednames or versionsOrdered labelslightweight → versatile → powerfulAmountlower is better · log scale · shared scaleAmountlower is better · log scale · shared scaleAmountlower is better · log scale · shared scale
Anthropic
ModelCategoryInputCached inputOutput
Claude Haiku 4.5Versatile$1.00$0.10$5.00
Claude Sonnet 4Versatile$3.00$0.30$15.00
Claude Sonnet 4.6Versatile$3.00$0.30$15.00
Claude Opus 4.8Powerful$5.00$0.50$25.00
Claude Opus 5Powerful$5.00$0.50$25.00
Claude Opus 5.5Powerful$4.00$0.20$20.00
Claude Sonnet 5Versatile$2.00$0.20$10.00
Claude Sonnet 5.5Versatile$2.00$0.20$10.00
Ignorednames or versionsOrdered labelslightweight → versatile → powerfulAmountlower is better · log scale · shared scaleAmountlower is better · log scale · shared scaleAmountlower is better · log scale · shared scale

Pitching stats

ERA, WHIP and FIP are lower-is-better; strikeouts per nine are higher-is-better. Season and age are numbers, but they place a row in time, so they stay plain.

baseball-reference.com
Standard Pitching Table
SeasonAgeTeamWLERAIPSOWHIPFIPERA+SO9
202023DET145.6332.0371.2195.758110.4
202124DET8124.34149.11641.2595.09989.9
202225DET783.52117.21171.1562.961118.9
202326DET732.8080.11020.8962.0015511.4
202427DET1842.39192.02280.9222.4917410.7
202528DET1362.21195.12410.8912.4518511.1
2026292TM1272.72158.21860.9642.5115510.6
202629DET752.7996.21160.9102.6015110.8
202629LAD522.6162.0701.0482.3616210.2
Ignoreda point in time (year, season, age)Ignoreda point in time (year, season, age)Ignoredlabels with no natural orderAmounthigher is better · log scaleAmountlower is better · linearAmountlower is better · linearAmounthigher is better · linearAmounthigher is better · linearAmountlower is better · linearAmountlower is better · linearAmounthigher is better · linearAmounthigher is better · linear

Pace of play

Game length (2:41) and time between plays (2:11) are read as clock durations: 3:00 is one more than 2:59. Shorter is better, so the 2023 pitch clock shows up as a wall of green.

baseball-reference.com
Time of Game For Season
YearGAvgTime%≥3:30Avg Tm Btwn PAAvg Tm Btwn BIP
202622182:420.52:103:15
202522162:380.12:083:10
202422092:360.32:063:09
202322262:390.42:083:13
202222043:0310.52:293:42
202120893:1018.72:333:52
20207203:0715.62:313:51
201922113:0513.52:283:43
201822103:008.92:253:37
201722463:0512.22:283:39
201622363:008.32:253:32
201522132:567.12:233:25
201421943:0211.12:283:33
201321802:588.32:253:27
201222312:555.82:223:24
201121852:514.52:193:16
Ignoreda point in time (year, season, age)Amountno better direction · linearAmountlower is better · linearAmountlower is better · log scaleAmountlower is better · linearAmountlower is better · linear

Benchmarks, by row

Here each row is a benchmark and each column a model, so the model judges the table row-wise: every benchmark gets its own scale, and each row's best model is the greenest.

blog.cloudflare.com
Benchmark scores by model
BenchmarkClefClef-flashJevDiffusionGemma JevKev 9BLaya
BFCL · case exact98.4798.7695.7596.5294.5138.13
ToolRet · nDCG@1069.1966.4365.2861.2164.2612.69
API-Bank · accuracy91.9393.1188.1983.6656.3011.41
Home appliances · case exact82.9597.7352.2742.0525.000.00
When2Call · accuracy72.3765.5880.9775.4449.6211.94
BANKING77 · macro-F194.2090.9379.7474.2884.8314.29
CLINC150+OOS · macro-F197.4366.7789.2783.4979.033.19
BRIGHT · nDCG@1045.9139.2647.5242.9438.5319.90
Amazon ESCI · macro-F157.4857.3955.2153.3749.2224.40
PhishNChips · accuracy79.6075.0562.5585.3550.7550.15
Ignorednames or versionsAmounthigher is better · linearAmounthigher is better · linearAmounthigher is better · linearAmounthigher is better · linearAmounthigher is better · linearAmounthigher is better · linear

Card prices

Rarity is ordered Common → Uncommon → Rare → Mythic from pairwise judgments. Prices run from $4 to $237, so they get a log scale, read as lower-is-better; weekly change reads as higher-is-better.

mtggoldfish.com
Price History
CardSetRarityPriceWeekly (%)
Mox Opal #223MM2Mythic237.09-4.00%
Sheoldred, the Apocalypse #107DMUMythic105.010.00%
Mox Amber #224DOMMythic92.22-2.00%
Gemstone Caverns #274PLISTRare63.15-1.00%
Minamo, School at Water's Edge #118 FoilFMB1Rare57.870.00%
Cavern of Souls #269LCIMythic51.740.00%
Boseiju, Who Endures #266NEORare51.400.00%
Amulet of Vigor #121WWKRare50.990.00%
Claws of Gix #107TSBSpecial12.52+5.00%
Untimely Malfunction #161DSKUncommon9.74+6.00%
Sink into Stupor #241MH3Uncommon8.82+3.00%
Relic of Progenitus #213MMAUncommon7.48-3.00%
Faerie Macabre #86MMACommon6.960.00%
Pyretic Ritual #153M11Common6.50+7.00%
Desperate Ritual #163CHKCommon6.460.00%
Witch Enchanter #239MH3Uncommon5.99+1.00%
Lorien Revealed #60LTRCommon4.59-7.00%
Ignorednames or free textIgnorednames or free textOrdered labelscommon → uncommon → rare → special → mythicAmountlower is better · log scaleAmounthigher is better · linear

Hurricanes

Storm classification is text, but the model orders it: Tropical storm, then Category 1 through 5.

en.wikipedia.org
Costliest Atlantic hurricanes
NameNominal damage (Billions USD)SeasonStorm classification at peak intensity
Katrina$125.02005Category 5 hurricane
Harvey$125.02017Category 4 hurricane
Ian$112.02022Category 5 hurricane
Maria$91.62017Category 5 hurricane
Helene$78.72024Category 4 hurricane
Irma$77.22017Category 5 hurricane
Ida$75.32021Category 4 hurricane
Sandy$68.72012Category 3 hurricane
Ike$38.02008Category 4 hurricane
Milton$34.62024Category 5 hurricane
Andrew$27.31992Category 5 hurricane
Wilma$26.52005Category 5 hurricane
Ivan$26.12004Category 5 hurricane
Michael$25.52018Category 5 hurricane
Florence$24.22018Category 4 hurricane
Laura$23.32020Category 4 hurricane
Ignorednames or free textAmountlower is better · linearIgnoreda point in time (year, season, age)Ordered labelscategory 3 hurricane → category 4 hurricane → category 5 hurricane

Populations

The first row is the World total. The model flags it as an aggregate, so it is left out of the scale instead of washing out every country.

en.wikipedia.org
List of countries and territories by total population
LocationPopulation% of worldDate
World8,232,000,000100%13 Jun 2025
India1,429,404,00017.3%1 Jul 2026
China1,404,890,00017.0%31 Dec 2025
United States341,784,8574.1%1 Jul 2025
Indonesia288,315,0893.5%31 Dec 2025
Pakistan241,499,4312.9%1 Mar 2023
Nigeria223,800,0002.7%1 Jul 2023
Brazil214,211,9512.6%1 Jul 2026
Bangladesh169,828,9112.1%14 Jun 2022
Russia146,028,3251.8%1 Jan 2025
Mexico131,231,9191.6%30 Jun 2026
Japan122,650,0001.5%1 Sep 2026
IgnorednamesAmountno better direction · log scaleAmountno better direction · log scaleDatesearliest to latest

Rows judged to be totals and kept out of the scale: "World".

Numbers that aren't amounts

Jersey numbers, birth years and zip codes are numeric but not comparable, so they stay plain. Height and scoring are measures.

synthetic test page
Roster
PlayerJersey #BornZip codeHeight (in)Points per game
Ada Park231998941107421.4
Ben Ortiz72001100277912.9
Cy Moreau11199560614818.2
Di Okafor341999303077717.5
Eli Sato0200398103725.1
Ignoredlabels with no natural orderIgnoredan identifier, not an amountIgnoreda point in time (year, season, age)Ignoredan identifier, not an amountAmountno better direction · linearAmounthigher is better · linear

How it works

  1. Read

    Code extracts each table, resolves merged cells, and parses values: $0.025, .312, 6' 6", 1.5B, 20–25, 2:59, ≤ 272K. A 2:41 game length is a duration; a 7:05 start time is not. It computes the ranges and spreads, and describes them in words.

  2. Judge

    A System One model (Jev) answers narrow, typed questions with probabilities:

    • Is this column an amount, an identifier, a time, a rank, or a cutoff?
    • Is a higher value better, worse, or neither?
    • Do ratios matter more than differences (log scale)?
    • Are these labels ordered grades? Which of two is the lower grade?
    • Is this row a total? Do same-named columns in other tables share a scale?
    • Are values compared down each column, or across each row?
  3. Paint

    D3 maps each value onto a ColorBrewer scale and blends it over the page's own background. Every cell keeps WCAG AA text contrast, and the extension restores the page exactly when you turn it off.

165 / 165
hand-labeled columns shaded or left plain correctly, across 21 test pages (a regression check, not an accuracy estimate)
81 / 81
directions of "better" judged correctly
~$0.001
typical cost to judge a page; repeat visits are free

Open source, top to bottom.

Practical Data is MIT-licensed. The extension, the questions it asks the model, the test pages and the recorded answers are all on GitHub.

  • Read what you install

    The store package is built unminified from the same repository, so the code running in your browser reads like the source.

  • No key needed

    A free endpoint judges tables without a key and keeps only the answers and anonymous counts. With your own key, table text goes straight to your provider and nothing passes through the author. The extension has no analytics or telemetry. Privacy policy

  • Check the claims yourself

    One command replays every recorded judgment offline: unit tests, the hand-labeled eval, and 21 pages in a real browser. No key needed.

$ git clone https://github.com/philrenaud/practical-data
$ cd practical-data && npm install
$ npx playwright install chromium
$ npm run check

Install

  1. Install Practical Data from the Chrome Web Store.
  2. It works without a key. To use your own, paste a TypeSafe API key on the options page.

Tables are judged as they scroll into view, up to 200 per page. Table text (headers, sample values, a few rows) is sent to be judged, through the free endpoint or straight to your own provider; nothing is sent for sites you turn off. The free endpoint has a daily allowance per browser. A key gives unlimited use, and a typical page costs about a tenth of a cent on it. The toolbar popup turns a page or a whole site off, and ⌥⇧H toggles the current page.