Free · No signup · Official data

SAT to ACT Conversion Chart

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.

The full SAT ⇄ ACT conversion chart

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

SAT totalACT composite
160036
159036 *
158036
157036
156035
155035
154035 *
153035
152034
151034
150034 *
149034
148033
147033
146033 *
145033
144032
143032 *
142032
141031
140031 *
139031
138030
137030 *
136030
135029
134029 *
133029
132028
131028 *
130028
129027
128027 *
127027
126027
125026
124026 *
123026
122025
121025 *
120025
119024
118024 *
117024
116024
115023
114023 *
113023
112022
111022 *
110022
109021
108021 *
107021
106021
105020
104020 *
103020
102019
101019 *
100019
99019
98018
97018 *
96018
95017
94017
93017 *
92017
91016
90016
89016 *
88016
87015
86015
85015 *
84015
83015
82014
81014
80014 *
79014
78014
77013
76013 *
75013
74013
73013
72012
71012 *
70012
69012
68011
67011 *
66011
65011
64010
63010 *
62010
6109
6009
5909 *

ACT composite → SAT total

ACT compositeSAT total
361590 (1570–1600)
351540 (1530–1560)
341500 (1490–1520)
331460 (1450–1480)
321430 (1420–1440)
311400 (1390–1410)
301370 (1360–1380)
291340 (1330–1350)
281310 (1300–1320)
271280 (1260–1290)
261240 (1230–1250)
251210 (1200–1220)
241180 (1160–1190)
231140 (1130–1150)
221110 (1100–1120)
211080 (1060–1090)
201040 (1030–1050)
191010 (990–1020)
18970 (960–980)
17930 (920–950)
16890 (880–910)
15850 (830–870)
14800 (780–820)
13760 (730–770)
12710 (690–720)
11670 (650–680)
10630 (620–640)
9590 (590–610)

SAT Math → ACT Math

SAT MathACT Math
80036
79035
78035 *
77035
76034
75033
74033 *
73032
72032 *
71031
70030 *
69030
68029
67028
66028 *
65027
64027 *
63027
62026
61026 *
60025
59025 *
58024 *
57024
56023 *
55023
54022
53021
52020
51019
50018 *
49018
48017
47017 *
46017
45016
44016
43016 *
42016
41015
40015 *
39015
38015
37014
36014 *
35014
34013
33013 *
32013
31012 *
30012
29011
28011 *
27010
26010 *

ACT Math → SAT Math

ACT MathSAT Math
36800
35780
34760
33740
32720
31710
30700
29680
28660
27640
26610
25590
24580
23560
22540
21530
20520
19510
18500
17470
16430
15400
14360
13330
12310
11280
10260

SAT EBRW → ACT English/Reading

SAT EBRWACT English/Reading
80072
79072 *
78071
77071 *
76070
75070 *
74069
73068
72067
71066
70064
69063
68061
67060
66058
65057
64055
63054
62052
61051
60049
59048
58046
57045
56044
55043
54042
53040
52039
51038
50037
49035
48034
47033
46032
45031
44030
43029
42028
41027
40026
39025
38024
37023
36022
35021
34020
33019
32018
31017
30016
29015
28014

ACT English/Reading → SAT EBRW

ACT English/ReadingSAT EBRW
72790
71770
70750
69740
68730
67720
66710
65700
64700 *
63690
62680
61680 *
60670
59660
58660 *
57650
56640
55640 *
54630 *
53630
52620
51610 *
50610
49600
48590
47580
46580 *
45570
44560
43550
42540 *
41540
40520
39520
38510
37500 *
36500
35490
34480
33470
32460
31450
30440
29430
28420
27410
26400
25390
24380
23370
22360
21350
20340
19330
18320
17310
16300
15290
14280

Free JSON API — no key, no rate limit

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.

Endpoints

PathInput domain
/v1/sat-to-act/total/{score}.json400–1600, step 10
/v1/sat-to-act/math/{score}.json200–800, step 10
/v1/sat-to-act/erw/{score}.json200–800, step 10
/v1/act-to-sat/composite/{score}.json1–36
/v1/act-to-sat/math/{score}.json1–36
/v1/act-to-sat/english-reading/{score}.json1–36
/v1/tables.jsonthe entire dataset, one request
/v1/index.jsonmachine-readable endpoint list

Example

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"
}

Behaviour you can rely on

CaseResponse
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

Use it in two lines

// 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, ...}

About the data

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.

Download the whole dataset

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.

FileWhat 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

Using this commercially

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

Buy the commercial license →

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.

What's next

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.