GasBuddy Scraper icon

GasBuddy Scraper

Scrape GasBuddy station by station across the US and Canada. Returns brand, address, coordinates, phone, amenities, open status, ratings and reviews,…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

GasBuddy Scraper at a glance

GasBuddy Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes station, change type (incremental mode), station id, brand and address, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Web data
Pricing
$2.00 per 1,000 results (Free plan), from $1.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
36 options

Scrape GasBuddy station by station across the US and Canada. Returns brand, address, coordinates, phone, amenities, open status, ratings and reviews, plus the current cash and credit price for every fuel grade with who reported it and when. Incremental mode tracks price changes between runs.

What GasBuddy Scraper: Fuel Prices, Stations & Reviews can do

  • Station level pricing, not a state average. Every fuel grade a station sells comes back with its own cash price, credit price, formatted price, member discount, and who reported it and when.
  • Two ways to search. Look up a postal code, a city and state, a state wide sweep, or a coordinate pair for a radius search, or paste station and search links directly.
  • Filters beyond the site's own. Brand (checked against GasBuddy's own brand list), fuel grade and price age narrow the search itself; price range, star rating, amenities, open now and has a reported price are applied on top of the results, including amenity filtering GasBuddy does not offer.
  • Reviews on demand, priced fairly. The first page of member reviews for every station arrives free with the search itself. Only asking for more rows than that page holds triggers an extra, clearly priced request.
  • Built for price monitoring. Incremental mode returns only the stations whose price (or anything else) actually moved on a scheduled run, with changedFields naming exactly what changed, turning a live snapshot into a price history over time. GasBuddy does not publish a per-station price time series, so every row is the current snapshot; schedule runs in incremental mode to build your own history.
  • Resume an interrupted crawl, or split a very large sweep across several runs with a page position on a pasted search link, without re-reading or re-paying for rows a previous run already returned.

Choose what to collect

These inputs let you configure GasBuddy Scraper: Fuel Prices, Stations & Reviews. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredSearch mode looks up stations around each location you list. URL mode reads the station links you paste. Fill in the section that matches your choice, then set the filters below. Precedence: the mode you pick decides which list is read (Locations in search mode, Station or search links in URL mode); the other list is ignored. Exception: when you give links or Stations and no location of any kind, the run uses URL mode whatever this field says. ZIP codes, Cities, Coordinates and Street addresses are merged into Locations; Stations are merged into the links. Filters apply to both modes.

Choices: search, url

locationsarrayOne entry per area. Use a postal code (78701), a city and state (Austin, TX), a state (Texas), or a coordinate pair written as latitude,longitude (30.2672,-97.7431). A coordinate pair is what makes this a radius search: only then does GasBuddy return a distance per station, which is what Max distance filters on. Search mode only.
urlsarrayPaste station addresses such as https://www.gasbuddy.com/station/29330, bare station ids such as 29330, a search address such as https://www.gasbuddy.com/home?search=78701, or a state or city price page such as https://www.gasbuddy.com/gasprices/texas/austin. Append &page=2 (or &cursor=50 for an exact row offset) to a search address to start the walk deeper, which is how a big sweep is split across runs. A pasted station is always returned, even when the filters below would have excluded it. URL mode only.
zipCodesarrayAlias for postal codes in Locations. Added to the search list; search mode.
cityStatesarrayAlias for city-and-state entries such as Austin, TX in Locations. Search mode.
coordinatesarrayList of objects with latitude and longitude. Each pair becomes a radius search, so distance and Max distance work. Search mode.
stationsarrayAlias for station links or bare station ids in Station or search links. When no location of any kind is given the run uses link mode. With Locations also given and Mode left on search, the run stays in search mode: Stations are not looked up and the run log says so. With Mode set to URL, Stations are looked up and Locations are not read. Stations the site does not return are listed in the LOOKUP_STATUS record of the run's key-value store, not in the dataset.
Show 29 more inputs
More input fields
InputWhat it controls
streetAddressesarrayFull street addresses. Each is searched and only stations whose street line matches are kept (when used on its own). Search mode.
brandsarrayReturn only stations of these brands, for example Shell or Costco. Names are checked against GasBuddy's own brand list, so a misspelled brand is reported by name instead of silently returning everything. Several brands return stations of ANY of them. Applies to a location search and to a pasted search link.
brandNamesarrayAlias for Brands; merged with it.
fuelTypestringThe grade GasBuddy ranks the area by. Every grade the station sells is still returned in the prices list; this decides which grade drives the ordering and which stations qualify.

Choices: regular, midgrade, premium, diesel, e85, unl88

maxPriceAgeHoursstringPrices on GasBuddy are reported by its members. Set a window to keep only stations whose price was confirmed recently.

Choices: 0, 4, 8, 12, 24, 36, 48

maxReportAgeHoursintegerKeep stations with at least one price reported within this many hours. Any whole number; also narrows the site-side price-age filter to the nearest step. Used when Maximum price age is Any age.
minPriceintegerKeep stations whose cheapest reported price is at least this much. Left empty means no lower bound.
maxPriceintegerKeep stations whose cheapest reported price is at most this much. Left empty means no upper bound.
minStarRatingintegerKeep only stations rated at least this many stars by GasBuddy members. Left empty means any rating, including unrated stations.
amenitiesarrayKeep only stations that have ALL of the amenities you pick. GasBuddy publishes no amenity filter of its own, so this is applied to the stations it returns.
openNowOnlybooleanKeep only stations GasBuddy currently reports as open.
withPricesOnlybooleanKeep only stations that have at least one grade with a real reported price. Turn this on when an unpriced station is no use to you.
maxDistanceMilesintegerKeep only stations within this many miles of the point you searched. Only a coordinate entry (latitude,longitude) makes GasBuddy return a distance, so a station with no distance is kept rather than dropped.
fetchReviewsbooleanAdd GasBuddy member reviews to each station. The first page of reviews comes back with the search itself and is never charged. Only asking for MORE rows than that page holds costs an extra request per station, and only that is charged.
maxReviewsPerStationintegerUpper bound on review rows per station (at most 1000). Up to 10 arrive free with the search; anything above that fetches extra pages and charges the review surcharge once for that station. 0 means no reviews.
maxStationsintegerStop after this many matching stations across all locations. 0 means no limit, which on a whole state can be thousands of billed rows.
maxPagesintegerStop each location after this many result pages. 0 means walk to the end of that area.
resumeFromRunIdstringContinue ONE interrupted crawl: paste that run's id (or its dataset id) and stations it already returned are skipped. For recurring monitoring use Incremental mode below instead, which remembers the previous run by itself.
incrementalModebooleanRun the same search on a schedule and get only what moved. Every station is labelled NEW, UPDATED, REAPPEARED or UNCHANGED, and changedFields names exactly what changed, which is how you build a price history over time. Unlike Resume from a previous run, this remembers the previous run itself.
stateKeystringName this monitoring campaign so several schedules can track different searches without sharing a baseline. Left empty, a key is derived from the mode, locations, links and every filter.
emitUnchangedbooleanIncremental mode only. Returns stations whose prices did not move, labelled UNCHANGED. These are extra rows and they are billed like any other result.
emitExpiredbooleanIncremental mode only. Returns a final row labelled EXPIRED for a station that is no longer found, but only after a run that completed a full scan. These are extra rows and they are billed like any other result.
changeScopestringIncremental mode only. Any field: any non-ignored field that moves makes a station UPDATED. Prices only: only the lowest price, its fuel grade, the price unit and the per-grade cash price, credit price and member discount are compared, so a changed phone number, hours, amenities or rating never creates a billable row. A station that disappears from the results is not necessarily closed; there is no stock count for a gas station, the posted price is its availability signal.

Choices: all, priceAndStock

compactUpdatesbooleanIncremental mode only. UPDATED and EXPIRED rows become slim: station id, link, name, current prices, priceChanges (old and new value per moved field) and variantChanges (per fuel grade: ADDED, REMOVED or CHANGED with old and new). NEW rows stay complete. A compact row has no reviews, so it carries no review charge.
expireAfterMissedScansintegerIncremental mode with Also return stations that disappeared only. A station is marked EXPIRED after this many consecutive complete scans no longer listed it (1 = the first one). EXPIRED means the site stopped listing the station in this search, not that it closed or has no fuel.
ignoreFieldsForChangesarrayIncremental mode only. Field names that must never make a station UPDATED or appear in changedFields, kept in the output. Nested fields use a dotted path, for example prices.creditReportedBy. Already ignored by default: scrapedAt, distance, distanceMiles, searchLocation, searchTerm, priceTrend, offers, reviews, topSpotters.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify -> Settings -> Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

nameStation
changeTypeChange type (incremental mode) (text)
stationIdStation ID
brandBrand
addressLine1Address
cityCity
stateState
postalCodePostal code
countryCountry
latitudeLatitude
longitudeLongitude
phonePhone
Show 22 more fields
distanceDistance
openStatusOpen status
lowestPriceCheapest price
lowestPriceFuelTypeCheapest grade
priceUnitPrice unit
currencyCurrency
lastPriceReportedAtPrice reported at
lastPriceReportedByReported by
fuelsGrades sold (array)
amenitiesAmenities (array)
starRatingRating
ratingsCountRatings
reviewCountReviews
cardPaymentAvailableCard payment (boolean)
hasActiveOutageOutage (boolean)
searchLocationSearched area
urlURL (link)
changedFieldsChanged fields (array)
firstSeenAtFirst seen
lastSeenAtLast seen
pricesprices
reviewsreviews

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "stationId": "90210001",
  "name": "Example Fuel Stop",
  "url": "https://www.gasbuddy.com/station/90210001",
  "brand": "Example Fuel Brand",
  "brandId": "501",
  "brandLogoUrl": "https://images.example.test/b/501.png",
  "allBrands": [
    "Example Fuel Brand"
  ],
  "addressLine1": "400 Sample Ave",
  "addressLine2": null,
  "city": "Example City",
  "state": "TX",
  "postalCode": "00000",
  "country": "US",
  "latitude": 29.9012,
  "longitude": -95.4123,
  "phone": "555-010-0100",
  "distance": "1.2mi",
  "distanceMiles": 1.2,
  "openStatus": "open",
  "openingHours": null,
  "nextOpenAt": null,
  "nextCloseAt": null,
  "amenities": [
    "C-Store",
    "Pay At Pump",
    "Air Pump"
  ],
  "amenityIds": [
    "c_store",
    "pay_at_pump",
    "air"
  ],
  "fuels": [
    "regular_gas",
    "midgrade_gas",
    "premium_gas",
    "diesel"
  ],
  "prices": [
    {
      "fuelType": "regular",
      "fuelProduct": "regular_gas",
      "label": "Regular",
      "cashPrice": null,
      "cashPostedAt": null,
      "cashReportedBy": null,
      "creditPrice": 3.29,
      "creditPostedAt": "2026-02-01T09:00:00.000Z",
      "creditReportedBy": "sample-member",
      "formattedPrice": "$3.29",
      "memberDiscount": 0
    },
    {
      "fuelType": "diesel",
      "fuelProduct": "diesel",
      "label": "Diesel",
      "cashPrice": null,
      "cashPostedAt": null,
      "cashReportedBy": null,
      "creditPrice": null,
      "creditPostedAt": null,
      "creditReportedBy": null,
      "formattedPrice": null,
      "memberDiscount": 0
    }
  ],
  "lowestPrice": 3.29,
  "lowestPriceFuelType": "regular",
  "lastPriceReportedAt": "2026-02-01T09:00:00.000Z",
  "lastPriceReportedBy": "sample-member",
  "priceUnit": "dollars_per_gallon",
  "currency": "USD",
  "starRating": 4.1,
  "ratingsCount": 56,
  "reviewCount": 12,
  "reviews": [
    {
      "reviewId": "sample-review-1",
      "rating": 5,
      "text": "Sample review text.",
      "reviewedAt": "2026-01-15T00:00:00.000Z",
      "agreeCount": 2,
      "author": "sample-member"
    }
  ],
  "topSpotters": [
    {
      "name": "sample-member",
      "reportCount": 9,
      "streakDays": 3
    }
  ],
  "priceTrend": [
    {
      "areaName": "Example City",
      "country": "US",
      "todayAverage": 3.35,
      "todayLow": 3.15,
      "direction": "falling"
    }
  ],
  "offers": [],
  "cardPaymentAvailable": true,
  "emergencyStatus": null,
  "hasActiveOutage": false,
  "isTruckFleetSite": false,
  "isEnterprise": false,
  "searchTerm": "Example City, TX",
  "searchLocation": "Example City, TX",
  "scrapedAt": "2026-02-01T12:00:00Z"
}

Ways to use this data

  • Fuel price comparison apps: pull the cheapest current price per grade across an area to power a station finder or a price alert tool.
  • Market and competitor pricing research: track brand level and area pricing over time with Incremental mode, without re-paying for stations whose price has not moved.
  • Fleet and logistics fuel planning: filter by grade, price range and amenities such as diesel or truck stop access along a route.
  • Site selection and local research: amenities, opening status and member ratings for a station or a whole area.
  • Data journalism and price trend research: build a dataset of regional price movement using scheduled Incremental runs and changedFields.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does GasBuddy Scraper return?

The documented output for GasBuddy Scraper includes station, change type (incremental mode), station id, brand, address, city, state and postal code. Availability of each field depends on the source page and the selected mode.

How much does GasBuddy Scraper cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Which views does the dataset have?

Besides the overview, the Prices view lists the cash and credit price per fuel grade, the Reviews view lists member reviews, and the Changes view lists changeType and changedFields of Incremental runs. A run summary is saved under the OUTPUT key of the key-value store.

Why is brand sometimes null?

GasBuddy indexes independent, unbranded stations with an empty brand list, so brand comes back null for them, and a wide search will reach them. name is still always populated for those stations, so they are never silently dropped.

Why did Incremental mode bill far more stations than Max stations in one run?

See the tip above under Resume and recurring updates: Also return stations that disappeared tombstones every tracked station a complete scan did not see, and that batch is not limited by Max stations. Keep it off until you are ready for a full reconciliation run.

Can I use it with AI agents or automation tools?

Yes. Call it from any Apify integration, or trigger it from Make, Zapier, n8n or a webhook through the Integrations tab.

Ready to collect with GasBuddy Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.