AAA Gas Prices Scraper & Monitor - US National & State Averages avatar

AAA Gas Prices Scraper & Monitor - US National & State Averages

Pricing

from $1.40 / 1,000 area price row returneds

Go to Apify Store
AAA Gas Prices Scraper & Monitor - US National & State Averages

AAA Gas Prices Scraper & Monitor - US National & State Averages

AAA gas prices from the public AAA Fuel Prices pages: US national average, all 50 states + DC and metro areas, for regular, mid-grade, premium, diesel and E85, with the page date. Monitoring mode returns only areas whose price changed, with the previous price. Unofficial.

Pricing

from $1.40 / 1,000 area price row returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Get today's AAA gas prices as clean rows: the US national average, the average for each of the 50 states and DC, and the average for every metro area AAA lists in a state. Each row has regular, mid-grade, premium and diesel (and E85 for the national average), the date AAA prints on the page ("Price as of"), and yesterday, week-ago, month-ago and year-ago prices where AAA gives them. Then turn on monitoring mode, schedule the Actor once or twice a day, and each run returns only the areas whose price changed, with the previous price and the difference.

Source: the public AAA Fuel Prices pages at gasprices.aaa.com. Unofficial. This Actor is not affiliated with, endorsed by or sponsored by AAA (American Automobile Association) or OPIS. AAA is a trademark of its owner. The values are AAA's; the Actor only reads what the public page shows.

Built for people who need the AAA number every day without opening the page: prediction-market traders who follow gas price markets, fuel and fleet analysts, journalists and newsletter writers, pricing teams, and anyone who keeps a daily series in a sheet or a database.

  • National, state and metro averages in one run. Empty input = the national average. states: ["all"] adds all 50 states and DC from one page. includeMetros adds each state's metro areas.
  • Monitoring mode for alerts. The first run remembers the prices (free). Later runs return only the areas that changed, with previousRegular, regularChange and the same for every fuel. Set minChangeUsd (for example 0.02) to be told only about moves of 2 cents or more.
  • The date AAA shows is on every row. priceDate is the "Price as of" date on the page, so you can see when a run read yesterday's numbers because AAA had not updated yet.
  • Cross-checked on the page. The same price appears in two places on each AAA page (the table and the headline figure, the table and the map, the metro heading and its table). If the two disagree, that price is null and the row says why. Nothing is guessed.
  • Polite by design. No login, no API key, no browser, no proxy. The Actor reads robots.txt on every run and keeps the 10 seconds between requests that AAA's robots.txt asks for.

Sister Actors for prediction-market work: Kalshi Markets Scraper, Kalshi Weather Markets API and US Weather Forecast API.

What you get

One row per area. Prices are US dollars per gallon, with the four decimals AAA shows.

FieldExampleMeaning
areaTypenational / state / metroWhat the row is about
areaNameNational, Texas, Austin-San MarcosThe area as AAA names it
stateCode, stateNameTX, TexasThe state (empty on the national row)
priceDate, priceAsOf2026-10-05, 10/5/26The "Price as of" date on AAA's page, as a date and as AAA writes it
regular, midGrade, premium, diesel4.3653, 4.8604, 5.2603, 6.3207Today's average ("Current Avg.")
e853.3068National row only. AAA does not show E85 for states or metros, so it is null there
regularYesterday, regularWeekAgo, regularMonthAgo, regularYearAgo4.3697, 4.4768, 4.1459, 3.1339AAA's own comparison prices. The same four exist for midGrade, premium, diesel and e85. Present on the national row and on state and metro rows read with includeMetros; null on state rows read from the state table (that table has today's prices only)
changeType, changedFuelsprice-changed, ["regular","diesel"]Monitoring mode only: the watched fuels that moved by at least minChangeUsd
previousRegular, regularChange4.3653, 0.0048Monitoring mode: the price in the last row this watch returned for the area (or the starting point) and today minus that. The same pair exists for every fuel
previousPriceDate, previousCheckedAt2026-10-05, ISO timeMonitoring mode: when the previous price was read and the AAA date it carried
source, sourceUrlnational-page, https://gasprices.aaa.com/Which AAA page the row was read from: national-page, state-list-page or state-page
noteEmpty on a normal row. Says why when a value is null or a row is a free reason row
statusokok on a price row. Anything else is a free row that explains itself
checkedAtISO timeWhen this run read the page

Example row (national average, monitoring mode, some fields left out):

{
"status": "ok",
"changeType": "price-changed",
"areaType": "national",
"areaName": "National",
"priceDate": "2026-10-06",
"regular": 4.3701,
"midGrade": 4.8604,
"premium": 5.2603,
"diesel": 6.3007,
"e85": 3.3068,
"regularYesterday": 4.3653,
"changedFuels": ["regular", "diesel"],
"previousRegular": 4.3653,
"regularChange": 0.0048,
"previousDiesel": 6.3207,
"dieselChange": -0.02,
"previousPriceDate": "2026-10-05",
"source": "national-page",
"sourceUrl": "https://gasprices.aaa.com/",
"checkedAt": "2026-10-06T10:00:10.500Z"
}

One area is one row with the fuels as columns (not one row per fuel), so a daily export of all states is 52 rows and opens as one table in a sheet.

Input

FieldWhat it does
statesTwo-letter codes or names, one per line, or all. Empty = only the national average
skipNationalOn = leave out the national row
includeMetrosOn = read each listed state's own page: the state row gets yesterday / week / month / year prices, and every metro area in the state gets a row
monitoringModeOn = return only areas whose price changed since the last row you received
minChangeUsdMonitoring: smallest change to report, in dollars (0.02 = 2 cents). Empty = any change
fuelsMonitoring: which fuels trigger a row. Empty = all
watchNameMonitoring: a name for what is remembered, one per schedule
resetMonitoringStateMonitoring: forget and start again

Examples

National average and all states (52 rows, 3 requests, about 25 seconds):

{ "states": ["all"] }

Follow the national regular price and be told only when it moves by 1 cent or more:

{ "monitoringMode": true, "fuels": ["regular"], "minChangeUsd": "0.01", "watchName": "national-regular" }

Texas and California with their metro areas:

{ "states": ["TX", "CA"], "includeMetros": true, "skipNational": true }

Monitoring mode

  1. First run: the Actor remembers today's price for every area you asked for and returns one free baseline-saved row. No price rows, no charge.
  2. Later runs: each area is compared with the price in the last row you received for it (or with the starting point). An area is returned when one of the watched fuels differs by at least minChangeUsd. The row carries the previous price and the difference for every fuel.
  3. Nothing changed: the run returns one free no-change row and costs one check.

Because the comparison is against the last row you received, small moves add up: with minChangeUsd at 0.02, an area that rises 1 cent on each of two days is returned on the second day, with the price from the starting point as previousRegular.

If a run reaches the maximum charge you set, the changes it could not return are not marked as seen. The next run returns them.

Do not run two schedules with the same watchName at the same moment. Apify's key-value store has no atomic update, so two runs that finish in the same second can overwrite each other's memory.

When AAA updates

AAA's page says the averages are updated daily, and it prints the date as "Price as of". The Actor copies that date into priceDate on every row. If you run before AAA has updated for the day, you get the previous day's numbers with the previous day's priceDate; the Actor does not relabel them. For a daily record, schedule one run in the US morning and, if you want to be sure, a second one a few hours later: in monitoring mode the second run costs one check when nothing changed.

For prediction markets

Kalshi lists markets on the average price of regular gas. Kalshi's public contract terms for that market (the AAAGAS contract) say "The Source Agency is AAA". This Actor reads the same public AAA page a person would open. It is not Kalshi's settlement feed and not an official record: Kalshi decides how and when it reads the value, and AAA's page can change during the day. Use the rows to follow the number, not as proof of how a market will settle.

Limits you should know

  • What AAA publishes is what you get. State and metro tables have no E85. The state table has today's prices only; the comparison prices for a state need includeMetros.
  • No history beyond AAA's own columns. The page shows today, yesterday, a week ago, a month ago and a year ago. To build a daily series, schedule the Actor and keep the rows.
  • No station prices and no county rows. This Actor returns AAA's averages for the nation, states and metro areas.
  • 10 seconds between requests. AAA's robots.txt asks for it and the Actor keeps it. National plus all states is 3 requests (about 25 seconds). With includeMetros, each state adds about 10 seconds.
  • No retries around a block. If AAA answers 403, 429 or a verification page, the Actor stops asking for that page and returns a free row that says so. It does not use proxies.
  • A state code AAA does not know gets no request. AAA answers an unknown ?state= with the national page. The Actor checks state names before asking and checks the heading of the page that comes back, so national numbers are never returned as a state's.

Price

Pay per event, no start fee:

  • $0.002 for each area row returned (price-returned), less on paid Apify plans. National plus all 51 states is 52 rows, about $0.10.
  • $0.001 for a monitoring run where nothing changed (check-done), once per run.
  • Free: the first monitoring run, and every row that only explains why something was not returned.

Set a maximum charge per run in Apify if you want a hard ceiling. The Actor never charges past it, and it tells you which areas were left out.

FAQ

Is this an official AAA API? No. AAA does not publish one. The Actor reads AAA's public web pages.

Why is regular empty on a row? The two places where AAA's page shows that price disagreed when the run read it, or the price could not be read. The note field says which. The Actor does not pick one.

Why did I get yesterday's date? AAA had not updated yet when the run started. See "When AAA updates".

Can I get all metro areas in the country? Yes: states: ["all"] with includeMetros. It takes about 9 minutes because of the 10 seconds between requests.

Thanks for using this Actor

We build these tools for people who run them every day, and we improve them from what users tell us.

  • Missing a field, or need another filter? Tell us in the Issues tab. If the data is there, we add it.
  • Found a bug or a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.

If this Actor saved you time, a short review helps other people find it.