Convert an SAT score to an ACT score — or an ACT score back to an SAT score — using the official 2018 concordance tables published jointly by the College Board and ACT. These are the tables admissions offices and counselors are expected to use; this page is the whole thing, with nothing retyped by hand.
Use the converter below, read the full chart, or call it as a free JSON API.
Every published row of the 2018 concordance, both directions. An ACT score maps to a band of SAT scores, so the SAT column shows the midpoint and the range — that band is what you want when comparing a student against a college's published mid-50%. Rows marked * fell outside the concordance study sample and are extrapolated.
| SAT total | ACT composite |
|---|---|
| 1600 | 36 |
| 1590 | 36 * |
| 1580 | 36 |
| 1570 | 36 |
| 1560 | 35 |
| 1550 | 35 |
| 1540 | 35 * |
| 1530 | 35 |
| 1520 | 34 |
| 1510 | 34 |
| 1500 | 34 * |
| 1490 | 34 |
| 1480 | 33 |
| 1470 | 33 |
| 1460 | 33 * |
| 1450 | 33 |
| 1440 | 32 |
| 1430 | 32 * |
| 1420 | 32 |
| 1410 | 31 |
| 1400 | 31 * |
| 1390 | 31 |
| 1380 | 30 |
| 1370 | 30 * |
| 1360 | 30 |
| 1350 | 29 |
| 1340 | 29 * |
| 1330 | 29 |
| 1320 | 28 |
| 1310 | 28 * |
| 1300 | 28 |
| 1290 | 27 |
| 1280 | 27 * |
| 1270 | 27 |
| 1260 | 27 |
| 1250 | 26 |
| 1240 | 26 * |
| 1230 | 26 |
| 1220 | 25 |
| 1210 | 25 * |
| 1200 | 25 |
| 1190 | 24 |
| 1180 | 24 * |
| 1170 | 24 |
| 1160 | 24 |
| 1150 | 23 |
| 1140 | 23 * |
| 1130 | 23 |
| 1120 | 22 |
| 1110 | 22 * |
| 1100 | 22 |
| 1090 | 21 |
| 1080 | 21 * |
| 1070 | 21 |
| 1060 | 21 |
| 1050 | 20 |
| 1040 | 20 * |
| 1030 | 20 |
| 1020 | 19 |
| 1010 | 19 * |
| 1000 | 19 |
| 990 | 19 |
| 980 | 18 |
| 970 | 18 * |
| 960 | 18 |
| 950 | 17 |
| 940 | 17 |
| 930 | 17 * |
| 920 | 17 |
| 910 | 16 |
| 900 | 16 |
| 890 | 16 * |
| 880 | 16 |
| 870 | 15 |
| 860 | 15 |
| 850 | 15 * |
| 840 | 15 |
| 830 | 15 |
| 820 | 14 |
| 810 | 14 |
| 800 | 14 * |
| 790 | 14 |
| 780 | 14 |
| 770 | 13 |
| 760 | 13 * |
| 750 | 13 |
| 740 | 13 |
| 730 | 13 |
| 720 | 12 |
| 710 | 12 * |
| 700 | 12 |
| 690 | 12 |
| 680 | 11 |
| 670 | 11 * |
| 660 | 11 |
| 650 | 11 |
| 640 | 10 |
| 630 | 10 * |
| 620 | 10 |
| 610 | 9 |
| 600 | 9 |
| 590 | 9 * |
| ACT composite | SAT total |
|---|---|
| 36 | 1590 (1570–1600) |
| 35 | 1540 (1530–1560) |
| 34 | 1500 (1490–1520) |
| 33 | 1460 (1450–1480) |
| 32 | 1430 (1420–1440) |
| 31 | 1400 (1390–1410) |
| 30 | 1370 (1360–1380) |
| 29 | 1340 (1330–1350) |
| 28 | 1310 (1300–1320) |
| 27 | 1280 (1260–1290) |
| 26 | 1240 (1230–1250) |
| 25 | 1210 (1200–1220) |
| 24 | 1180 (1160–1190) |
| 23 | 1140 (1130–1150) |
| 22 | 1110 (1100–1120) |
| 21 | 1080 (1060–1090) |
| 20 | 1040 (1030–1050) |
| 19 | 1010 (990–1020) |
| 18 | 970 (960–980) |
| 17 | 930 (920–950) |
| 16 | 890 (880–910) |
| 15 | 850 (830–870) |
| 14 | 800 (780–820) |
| 13 | 760 (730–770) |
| 12 | 710 (690–720) |
| 11 | 670 (650–680) |
| 10 | 630 (620–640) |
| 9 | 590 (590–610) |
| SAT Math | ACT Math |
|---|---|
| 800 | 36 |
| 790 | 35 |
| 780 | 35 * |
| 770 | 35 |
| 760 | 34 |
| 750 | 33 |
| 740 | 33 * |
| 730 | 32 |
| 720 | 32 * |
| 710 | 31 |
| 700 | 30 * |
| 690 | 30 |
| 680 | 29 |
| 670 | 28 |
| 660 | 28 * |
| 650 | 27 |
| 640 | 27 * |
| 630 | 27 |
| 620 | 26 |
| 610 | 26 * |
| 600 | 25 |
| 590 | 25 * |
| 580 | 24 * |
| 570 | 24 |
| 560 | 23 * |
| 550 | 23 |
| 540 | 22 |
| 530 | 21 |
| 520 | 20 |
| 510 | 19 |
| 500 | 18 * |
| 490 | 18 |
| 480 | 17 |
| 470 | 17 * |
| 460 | 17 |
| 450 | 16 |
| 440 | 16 |
| 430 | 16 * |
| 420 | 16 |
| 410 | 15 |
| 400 | 15 * |
| 390 | 15 |
| 380 | 15 |
| 370 | 14 |
| 360 | 14 * |
| 350 | 14 |
| 340 | 13 |
| 330 | 13 * |
| 320 | 13 |
| 310 | 12 * |
| 300 | 12 |
| 290 | 11 |
| 280 | 11 * |
| 270 | 10 |
| 260 | 10 * |
| ACT Math | SAT Math |
|---|---|
| 36 | 800 |
| 35 | 780 |
| 34 | 760 |
| 33 | 740 |
| 32 | 720 |
| 31 | 710 |
| 30 | 700 |
| 29 | 680 |
| 28 | 660 |
| 27 | 640 |
| 26 | 610 |
| 25 | 590 |
| 24 | 580 |
| 23 | 560 |
| 22 | 540 |
| 21 | 530 |
| 20 | 520 |
| 19 | 510 |
| 18 | 500 |
| 17 | 470 |
| 16 | 430 |
| 15 | 400 |
| 14 | 360 |
| 13 | 330 |
| 12 | 310 |
| 11 | 280 |
| 10 | 260 |
| SAT EBRW | ACT English/Reading |
|---|---|
| 800 | 72 |
| 790 | 72 * |
| 780 | 71 |
| 770 | 71 * |
| 760 | 70 |
| 750 | 70 * |
| 740 | 69 |
| 730 | 68 |
| 720 | 67 |
| 710 | 66 |
| 700 | 64 |
| 690 | 63 |
| 680 | 61 |
| 670 | 60 |
| 660 | 58 |
| 650 | 57 |
| 640 | 55 |
| 630 | 54 |
| 620 | 52 |
| 610 | 51 |
| 600 | 49 |
| 590 | 48 |
| 580 | 46 |
| 570 | 45 |
| 560 | 44 |
| 550 | 43 |
| 540 | 42 |
| 530 | 40 |
| 520 | 39 |
| 510 | 38 |
| 500 | 37 |
| 490 | 35 |
| 480 | 34 |
| 470 | 33 |
| 460 | 32 |
| 450 | 31 |
| 440 | 30 |
| 430 | 29 |
| 420 | 28 |
| 410 | 27 |
| 400 | 26 |
| 390 | 25 |
| 380 | 24 |
| 370 | 23 |
| 360 | 22 |
| 350 | 21 |
| 340 | 20 |
| 330 | 19 |
| 320 | 18 |
| 310 | 17 |
| 300 | 16 |
| 290 | 15 |
| 280 | 14 |
| ACT English/Reading | SAT EBRW |
|---|---|
| 72 | 790 |
| 71 | 770 |
| 70 | 750 |
| 69 | 740 |
| 68 | 730 |
| 67 | 720 |
| 66 | 710 |
| 65 | 700 |
| 64 | 700 * |
| 63 | 690 |
| 62 | 680 |
| 61 | 680 * |
| 60 | 670 |
| 59 | 660 |
| 58 | 660 * |
| 57 | 650 |
| 56 | 640 |
| 55 | 640 * |
| 54 | 630 * |
| 53 | 630 |
| 52 | 620 |
| 51 | 610 * |
| 50 | 610 |
| 49 | 600 |
| 48 | 590 |
| 47 | 580 |
| 46 | 580 * |
| 45 | 570 |
| 44 | 560 |
| 43 | 550 |
| 42 | 540 * |
| 41 | 540 |
| 40 | 520 |
| 39 | 520 |
| 38 | 510 |
| 37 | 500 * |
| 36 | 500 |
| 35 | 490 |
| 34 | 480 |
| 33 | 470 |
| 32 | 460 |
| 31 | 450 |
| 30 | 440 |
| 29 | 430 |
| 28 | 420 |
| 27 | 410 |
| 26 | 400 |
| 25 | 390 |
| 24 | 380 |
| 23 | 370 |
| 22 | 360 |
| 21 | 350 |
| 20 | 340 |
| 19 | 330 |
| 18 | 320 |
| 17 | 310 |
| 16 | 300 |
| 15 | 290 |
| 14 | 280 |
The same data, machine-readable. Every valid lookup is a static file on a CDN: no server to rate-limit you, no key to rotate, no cold start. Fetch it from a browser, a spreadsheet, a Lambda, or a student's phone.
| Path | Input domain |
|---|---|
/v1/sat-to-act/total/{score}.json | 400–1600, step 10 |
/v1/sat-to-act/math/{score}.json | 200–800, step 10 |
/v1/sat-to-act/erw/{score}.json | 200–800, step 10 |
/v1/act-to-sat/composite/{score}.json | 1–36 |
/v1/act-to-sat/math/{score}.json | 1–36 |
/v1/act-to-sat/english-reading/{score}.json | 1–36 |
/v1/tables.json | the entire dataset, one request |
/v1/index.json | machine-readable endpoint list |
curl https://examstats.surge.sh/v1/sat-to-act/total/1350.json
{
"input": { "scale": "SAT total (400-1600)", "total": 1350 },
"concordant": { "scale": "ACT composite (1-36)", "act": 29 },
"source": "2018 ACT/SAT Concordance Tables"
}
Going the other way returns the full band of SAT scores that concord to an ACT score, which is what you want when you are comparing a student against a college's published mid-50%:
{
"input": { "scale": "ACT composite (1-36)", "composite": 30 },
"concordant": { "scale": "SAT total (400-1600)", "total": 1370,
"range": [1360, 1380] },
"source": "2018 ACT/SAT Concordance Tables"
}
| Case | Response |
|---|---|
| Valid score, published mapping | 200 with concordant populated |
| Valid score, below the table (e.g. SAT 400) | 200, "concordant": null, plus a note —
never a 404, so you don't have to tell "bad input" apart from
"no published equivalent" |
| Extrapolated row (starred in the official PDF) | 200 with a note warning that the score fell
outside the concordance study sample |
| Score off the scale or not a multiple of 10 | 404 — round to the nearest 10 first |
// JavaScript
const r = await fetch(`https://examstats.surge.sh/v1/sat-to-act/total/${sat}.json`);
const { concordant } = await r.json(); // -> { act: 29 }
# Python
import urllib.request, json
u = f"https://examstats.surge.sh/v1/act-to-sat/composite/{act}.json"
data = json.load(urllib.request.urlopen(u))["concordant"] # -> {"total": 1370, ...}
Extracted programmatically from the official ACT/College Board concordance PDF — never retyped by hand. The build pipeline checks full key coverage, monotonicity, that the ACT→SAT ranges tile 590–1600 without gaps or overlaps, and spot-checks published rows; it refuses to emit a dataset if any check fails.
These 2018 tables are the current official crosswalk. They concord the current SAT (2016 redesign onward) with the ACT. They are not a concordance for the pre-2016 SAT.
Every published mapping, flattened into one long-format table — six crosswalks, both directions, with the SAT bands and the extrapolation flags intact. Same build, same validation as the API.
| File | What it is |
|---|---|
concordance.csv |
Long format, one row per mapping — drops straight into Excel, Sheets, pandas or R |
concordance.sqlite |
Indexed SQLite database, ready to ship inside an app that has to work offline |
tables.json |
The nested source-of-truth JSON |
Free for personal use, study, research, classroom use and evaluation. Always. No key, no metering, no expiry.
If you are putting these numbers inside something you sell — a test-prep product, a counselling platform, a client deliverable — or redistributing the dataset, buy the commercial license. It is a one-time payment, perpetual, covers unlimited end users, and your Stripe receipt is the licence document.
$29 · one-time · perpetual
Includes the CSV, the SQLite build and the JSON, plus any dataset added to v1 later. Questions, or need an invoice or a site-wide licence for a larger team? Email me.
Percentile ranks and a superscore endpoint are the next datasets, built through the same validated pipeline. Want one of those, or a dataset added? Tell me what you need.