CarGurus Scraper: Car Search, Prices & Dealer Data avatar

CarGurus Scraper: Car Search, Prices & Dealer Data

Pricing

from $1.00 / 1,000 results

Go to Apify Store
CarGurus Scraper: Car Search, Prices & Dealer Data

CarGurus Scraper: Car Search, Prices & Dealer Data

Export CarGurus vehicle search results with advertised prices, mileage, trim, seller information and listing URLs. Build a comparable-car dataset for pricing and sourcing directly from search results, without a separate vehicle-details mode.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

ScrapingMonkey

ScrapingMonkey

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Categories

Share

Extract CarGurus vehicle search results with asking prices, model years, mileage, specifications and listing links. CarGurus Scraper turns the listings into structured records for vehicle sourcing, price comparisons and market research. Choose how many results to collect for each input and export the cars you need.

Create a comparison dataset of advertised vehicles for pricing research and stock sourcing, retaining each original listing link. Keep comparable records in a spreadsheet, purchasing shortlist or recurring market report, with a link back to each source listing.

At a glanceDetails
πŸ“₯ InputSearch fields or links to the selected items; see the examples below
πŸ“€ OutputOne row per vehicle listing
πŸ“„ PaginationAutomatic up to maxResults for each input, when more results are available
πŸ” Login requiredNo
⚑ ProcessingMultiple inputs per run with automatic retries for temporary errors
πŸ’Ύ DeliveryOne complete Apify dataset table; CSV, JSON and Excel export

What the CarGurus scraper collects πŸš—

Collect CarGurus vehicle search results with asking prices, model years, mileage, specifications and listing links when available.

CollectionWhat you receive
CarGurus car listings scraperListing titles, asking prices, mileage, model years, published vehicle attributes, locations, seller names and photo urls, with original listing links.

Data can include:

  • Listing identity: Listing ID, title, vehicle URL, VIN and stock number when published
  • Vehicle specification: Make, model, trim, year, body type, fuel, transmission, engine and drivetrain
  • Price and mileage: Asking price, currency, mileage and measurement unit
  • Colour and vehicle features: Exterior and interior colour, published equipment and new-vehicle flag
  • Seller and location: Published seller ID and name, city, region and postcode
  • Images and market attributes: Image URLs and published attributes such as deal rating, days on market and fuel-economy figures

How to scrape CarGurus πŸš€

  1. Open the Actor input form.
  2. Fill in the search fields, or paste links to the items you want to collect.
  3. Set the maximum results and any optional filters.
  4. Start the Actor and review the collected rows.
  5. Export the dataset or connect it to your application.

CarGurus car listings scraper β€” input example

{
"mode": "cargurus-vehicle-search",
"postcode": "10001",
"radius": 50,
"maxResults": 10
}

maxResults: 10 means up to 10 results for each input. It does not guarantee that the website has that many matches. You can set the limit as low as 1.

CarGurus data fields and complete output πŸ“¦

Field groupIncluded data
Listing identityListing ID, title, vehicle URL, VIN and stock number when published
Vehicle specificationMake, model, trim, year, body type, fuel, transmission, engine and drivetrain
Price and mileageAsking price, currency, mileage and measurement unit
Colour and vehicle featuresExterior and interior colour, published equipment and new-vehicle flag
Seller and locationPublished seller ID and name, city, region and postcode
Images and market attributesImage URLs and published attributes such as deal rating, days on market and fuel-economy figures

Each collected item is a separate row. input identifies the submitted value and result_type identifies the selected mode. All returned fields appear in one table; columns that do not apply to a mode can be empty.

A complete JSON result is shown for every collection mode below, in the same order as the input examples. Each example includes every field for its mode; text and lists are not shortened. Values are representative and can change.

CarGurus car listings scraper β€” complete JSON result

{
"result_type": "cargurus-vehicle-search",
"input": "https://www.cargurus.com/search",
"status": "success",
"id": "458840050",
"url": "https://www.cargurus.com/details/458840050",
"title": "2019 Dodge Durango",
"make": "Dodge",
"model": "Durango",
"trim": "GT AWD",
"year": 2019,
"vin": "1C4RDJDG2KC633500",
"stock_number": "2670UT",
"price": 19897.0,
"currency": "USD",
"price_type": "asking",
"mileage": 82000.0,
"mileage_unit": "mi",
"body_type": "SUV / Crossover",
"fuel_type": "Gasoline",
"transmission": "8-Speed Automatic",
"drivetrain": "All-Wheel Drive",
"engine": "295 hp 3.6L V6",
"engine_cc": null,
"horsepower": null,
"doors": 4,
"seats": null,
"exterior_color": "White Knuckle Clearcoat",
"interior_color": "Black",
"condition": null,
"is_new": false,
"availability": null,
"description": null,
"location.display_name": "Huntington Station, NY",
"location.city": "Huntington Station",
"location.region": "NY",
"location.country": "US",
"location.postal_code": "11746",
"location.address": null,
"location.latitude": null,
"location.longitude": null,
"seller.id": "325916",
"seller.name": "Empire Mazda of Huntington",
"seller.url": null,
"seller.type": null,
"seller.rating": null,
"seller.review_count": null,
"images.url": [
"https://static.cargurus.com/images/forsale/2026/09/17/11/47/2019_dodge_durango-pic-2271256770200726007-1024x768.jpeg"
],
"features": [
"Sunroof/Moonroof",
"Navigation System",
"Alloy Wheels",
"Third Row Seating",
"Bluetooth",
"Backup Camera",
"Remote Start",
"Blind Spot Monitoring",
"Parking Sensors",
"Android Auto",
"Quick Order Package",
"CarPlay"
],
"attributes.group": [
"Vehicle",
"Vehicle",
"Vehicle",
"Vehicle"
],
"attributes.name": [
"deal_rating",
"days_on_market",
"city_mpg",
"highway_mpg"
],
"attributes.value": [
"FAIR_PRICE",
"6",
"18",
"25"
],
"inspection.category": [],
"inspection.item": [],
"inspection.status": [],
"published_at": null,
"updated_at": null
}

Images, tags and other lists stay with their parent result instead of creating extra rows. Invalid or unavailable inputs, inputs with no results, and requests that fail after all retries produce a row with status: failed. At most one failed row is saved per input; it includes error_code and error_message explaining the outcome. A normal end of pagination after collected results does not add a failed row.

Input requirements and collection settings βš™οΈ

SettingWhat to enter
Maximum results per search or link (maxResults)Collect up to this many results for each search or link. Minimum: 1.
Postcode (postcode)Postcode to search around.
Search radius (radius)Distance from the postcode in miles.
Collection modeFields to use
Vehicle SearchPostcode, Search radius

The result limit applies separately to each search or supplied link. Collection ends earlier when no more matching results are available.

CarGurus scraping use cases 🎯

Compare asking prices

Group CarGurus vehicle search results by make, year and mileage to compare the prices sellers advertise for similar cars.

Build an acquisition shortlist

Collect candidate vehicles from CarGurus, then share their prices, specifications and source links with the purchasing team.

Benchmark advertised stock

Compare the mix of models, ages and mileage represented in CarGurus listings when planning which vehicles to stock.

Track catalogue changes

Save repeated CarGurus exports and compare matching listing IDs to identify changes in advertised prices or availability.

Prepare market reports

Use CarGurus listing records as source material for dealer reports, pricing dashboards and automotive market analysis.

Pricing and saved-result behavior πŸ’°

See the Actor's Pricing tab for the active pricing model and current rate. Store settings may change, so this README does not claim a fixed cost.

Under dataset-item pricing:

  • Each collected item saved in the dataset is one result.
  • Images, tags and other values attached to that item do not create additional rows.
  • Automatic retry attempts do not create extra dataset rows.
  • A saved failed row is also one billable dataset item, including invalid inputs, unavailable items, no results, or exhausted retries. At most one failed row is saved per input, including when some results were already collected.
  • maxResults caps all saved rows for each input, including its failed row. Repeated copies of the same input are processed once. More inputs or a higher limit can produce more saved results.

CarGurus scraper API and integrations πŸ”Œ

Replace $ACTOR_ID with the ID shown in the Actor API tab and $APIFY_TOKEN with your token.

curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"cargurus-vehicle-search","postcode":"10001","radius":50,"maxResults":10}'

Use schedules for recurring collection, webhooks for completion notifications, and Apify integrations for Google Sheets, Make, Zapier, cloud storage, a CRM or your own application.

Reliability, retries, and public-data limits ⚠️

Temporary connection errors, timeouts and access restrictions are retried automatically, up to five attempts. Invalid inputs save a failed row without an HTTP request; confirmed unavailable items save a failed row without unnecessary retries. Exhausted retries also save a failed row. Results already collected remain available if a later request fails, and normal pagination completion adds no error row. Collection also stops after two consecutive fully processed pages add no new results, even if the website provides another cursor. Required detail lookups are completed before checking a page; new results reset the counter, and independent reply branches are checked separately. Failures while initializing the Actor, saving data or scheduling requests stop the run instead of being reported as a failed website result.

This Actor collects search results; there is no separate vehicle-details mode.

Optional fields are available only when the website publishes them.

CarGurus controls which information is publicly available. Removed, private or restricted items may be unavailable, and optional values can be null or empty. A run can still fail if the results cannot be saved.

Frequently asked questions ❓

Does it require an account on CarGurus?

No. You do not need to provide an account, password or login cookies. Only publicly available information is collected.

How does maxResults work?

It limits the number of saved results separately for every input. The minimum is 1. With maxResults set to 10, each input returns at most 10 available results.

What can I use to search CarGurus?

Choose postcode, search radius in the input form.

What is included in CarGurus vehicle records?

The output includes asking prices, model years, mileage, specifications and listing links when those values are published. Availability varies by listing and selected mode.

Why are some fields empty?

The website may not publish that value, or the field may belong to a different collection mode. Missing values remain null or empty instead of being guessed.

Can I export the results to a spreadsheet?

Yes. Download CSV, Excel or JSON from the Apify dataset. All returned fields are included in the same results table.

Support and responsible use πŸ›Ÿ

For a reproducible issue, share the run ID, selected mode, result limit and a safe public example through the support channel. Never disclose access tokens, passwords or proxy credentials.

Use public CarGurus information lawfully and responsibly. Follow applicable privacy, copyright, data-protection, contractual and platform requirements when storing, analyzing or redistributing results.