Car Listings Scraper for CarGurus avatar

Car Listings Scraper for CarGurus

Pricing

from $5.00 / 1,000 listing scrapeds

Go to Apify Store
Car Listings Scraper for CarGurus

Car Listings Scraper for CarGurus

Scrape CarGurus car listings (US, CA, UK) with VIN, price, deal rating, mileage, and dealer contact. MCP/API-ready.

Pricing

from $5.00 / 1,000 listing scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

50

Total users

15

Monthly active users

10 days ago

Last modified

Share

What is Car Listings Scraper for CarGurus?

This Apify Actor pulls structured car listings from CarGurus marketplaces in the US, Canada, and UK. It accepts a postal or ZIP-based search, or one or more CarGurus search URLs, and returns one record per listing with fields such as VIN, price, total price, MSRP, deal rating, mileage, dealer name, phone, distance, and scraped timestamp. The output is designed for inventory review, lead generation, pricing analysis, and AI workflows that need a single listing as a clear JSON record. This Actor is usable through Apify MCP and through the Apify API.

This Actor is not affiliated with, endorsed by, or sponsored by CarGurus.

Best fit and connected workflows

This Actor fits workflows where a team needs current CarGurus inventory in a structured form.

Common routing paths include:

  • Marketplace inventory review for a city, postal code, or dealership area
  • Lead lists built from dealer name, phone, and listing URL
  • Price and deal-rating analysis using price, totalPrice, dealRating, dealScore, and priceDifferential
  • Inventory filtering by make, model, year, mileage, and price range
  • AI agent workflows that need a consistent listing schema through Apify MCP

If you already have a CarGurus search results page with filters set in the browser, searchUrls keeps that query structure intact and reuses the page filters directly.

Practical scenario

A used-car buyer named Maya is reviewing Toyota Camry inventory near ZIP code 90210. She starts with a US marketplace search, a Camry model filter, a maximum mileage threshold, and default deal-first sorting. The Actor returns records with title, year, price, totalPrice, dealRating, mileage, dealerName, phone, and listingUrl. Maya uses dealRating, totalPrice, and mileage to shortlist vehicles, then opens the listingUrl for the cars that look worth a closer look.

Input fields

FieldTypeDescription
countrystringCarGurus marketplace to search. Use US, CA, or UK.
postalCodestringZIP, Canadian postal/FSA, or UK outcode/postcode used as the search center.
distanceintegerSearch radius around the postal code.
makestringOptional make filter matched against listing make names.
modelstringOptional model filter matched against listing model names.
minPriceintegerMinimum total price to keep.
maxPriceintegerMaximum total price to keep.
minYearintegerMinimum model year to keep.
maxYearintegerMaximum model year to keep.
maxMileageintegerMaximum mileage to keep.
sortBystringSort order such as deal_score, price_asc, price_desc, mileage_asc, year_desc, or distance.
searchUrlsarrayOne or more CarGurus search or inventory URLs. Reuses the URL filters directly.
maxResultsintegerMaximum number of listings returned per run.
proxyConfigurationobjectProxy settings used to reach CarGurus.

Focused JSON input example

{
"country": "US",
"postalCode": "10001",
"distance": 50,
"make": "Toyota",
"model": "Camry",
"minYear": 2019,
"maxMileage": 60000,
"sortBy": "deal_score",
"maxResults": 100,
"proxyConfiguration": {
"useApifyProxy": true
}
}

Output fields

Each dataset item is one CarGurus listing.

FieldTypeDescription
listingIdstringCarGurus internal listing ID.
listingUrlstringPermalink to the listing detail page.
titlestringListing title.
makestringVehicle make.
modelstringVehicle model.
trimstring or nullTrim level.
yearinteger or nullModel year.
vinstring or nullVehicle Identification Number.
stockNumberstring or nullDealer stock number.
bodyTypestring or nullBody style.
pricenumber or nullSticker price in local currency.
totalPricenumber or nullPrice including dealer fees.
msrpnumber or nullManufacturer suggested retail price.
priceCurrencystringISO currency code.
dealRatingstring or nullCarGurus deal rating.
dealScorenumber or nullNumeric deal score from 0 to 1.
priceDifferentialnumber or nullDifference versus CarGurus IMV.
mileageinteger or nullOdometer reading.
daysOnMarketinteger or nullDays the listing has been on the market.
exteriorColorstring or nullExterior color.
interiorColorstring or nullInterior color.
transmissionstring or nullTransmission type.
driveTrainstring or nullDrivetrain.
fuelTypestring or nullFuel type.
enginestring or nullEngine display name.
combinedMpgstring or nullCombined fuel economy string.
optionsarrayFeature and option strings.
imageUrlstring or nullPrimary photo URL.
pictureCountinteger or nullNumber of photos.
sellerTypestring or nullSeller type.
dealerNamestring or nullDealer or seller name.
isFranchiseDealerboolean or nullWhether the seller is a franchise dealer.
sellerCitystring or nullSeller city and region.
sellerRegionstring or nullSeller state or region code.
sellerPostalCodestring or nullSeller postal or ZIP code.
phonestring or nullDealer phone number.
distancenumber or nullDistance from the searched postal code.
countrystringMarketplace code.
scrapedAtstringISO 8601 scrape timestamp.

Illustrative JSON output record

{
"listingId": "440604442",
"listingUrl": "https://www.cargurus.com/Cars/link/440604442",
"title": "2018 Audi A3 2.0T quattro Premium Plus",
"make": "Audi",
"model": "A3",
"trim": "2.0T quattro Premium Plus",
"year": 2018,
"vin": "WAUJEGFF0J1000000",
"stockNumber": null,
"bodyType": null,
"price": 18995,
"totalPrice": 19990,
"msrp": null,
"priceCurrency": "USD",
"dealRating": "GOOD_PRICE",
"dealScore": 0.97,
"priceDifferential": -1200,
"mileage": 52310,
"daysOnMarket": 41,
"exteriorColor": null,
"interiorColor": null,
"transmission": null,
"driveTrain": "ALL_WHEEL_DRIVE",
"fuelType": "Gasoline",
"engine": null,
"combinedMpg": null,
"options": ["Leather Seats", "Sunroof/Moonroof", "Navigation System"],
"imageUrl": null,
"pictureCount": null,
"sellerType": null,
"dealerName": "Route 7 Nissan",
"isFranchiseDealer": true,
"sellerCity": "Danbury, CT",
"sellerRegion": null,
"sellerPostalCode": null,
"phone": "(505) 472-7262",
"distance": 21.4,
"country": "US",
"scrapedAt": "2026-06-24T16:00:00.000Z"
}

How it works

The Actor uses CarGurus search results through the hidden searchResults.action JSON API described in the live contract. It applies the marketplace selection from country, then searches by postal code or by the supplied searchUrls. Structured filters such as price, year, mileage, make, and model are enforced on the returned listings. Results are saved to the default dataset, and the run summary is written to the default key-value store.

Pricing

This Actor uses Pay per event with Apify platform usage included pricing. The live Pricing tab shows the current billing details for your account and execution configuration.

Events in the live contract:

  • Actor start
  • Listing scraped

Example: if a run returns one hundred listings, the billed events include one actor start and one hundred listing scraped events. That makes the run cost scale with the amount of listing data returned, plus any Apify platform usage charges shown in the Pricing tab.

Use with AI agents (MCP)

This Actor is available as an Apify Actor usable through Apify MCP. The tool returns structured CarGurus listing data for agent workflows that need inventory, pricing, and dealer contact fields in a predictable schema.

Actor identity: khadinakbar/cargurus-scraper

Tool description: retrieve CarGurus marketplace listings using a postal search or saved CarGurus results URL, then read the dataset items as JSON.

Find Toyota Camry listings in the US marketplace near 10001, sort by deal score, and return up to 50 records. I need VIN, total price, mileage, dealer phone, and listing URL for each item.

Output interpretation:

  • dealRating, dealScore, and priceDifferential describe CarGurus' own listing evaluation fields
  • listingUrl points to the listing detail page
  • phone, dealerName, and sellerCity identify the seller shown on the listing
  • scrapedAt gives the scrape timestamp for the returned dataset record

Provenance and scope:

  • Data comes from public CarGurus listing results
  • The Actor supports the US, CA, and UK marketplaces
  • searchUrls can preserve filters already set in a CarGurus results page
  • Pagination continues until the requested result count is reached or the search space is exhausted

Cost guidance:

  • Each returned listing is charged as a Listing scraped event
  • A smaller maxResults value reduces event count
  • The live Pricing tab is the source of truth for billing details

Apify API example

import { ApifyClient } from "apify-client";
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor("khadinakbar/cargurus-scraper").call({
country: "US",
postalCode: "10001",
distance: 50,
make: "Toyota",
model: "Camry",
maxResults: 10,
proxyConfiguration: {
useApifyProxy: true,
},
});
const dataset = await client.dataset(run.defaultDatasetId).listItems({
clean: true,
format: "json",
});
console.log(dataset.items);

Best results and outcome guidance

Use a single marketplace and a focused location first, then narrow with make, model, minYear, maxYear, minPrice, maxPrice, and maxMileage as needed. deal_score is the default sort order and is a practical starting point when reviewing listings by value. If you already have a CarGurus results page configured in the browser, paste that URL into searchUrls to reuse the same filters and search structure.

Continue the workflow

Design note

I found that the output contract exposes a separate listings dataset link and a summary record in key-value storage, which makes it clear that the run result is split between row-level listing data and run-level metadata.

FAQ

Can I search by country and postal code?

Yes. Set country to US, CA, or UK, then provide a matching postalCode.

Can I use a saved CarGurus search page instead of structured filters?

Yes. Paste one or more results-page URLs into searchUrls to reuse the exact CarGurus filters from the browser.

Which fields are most useful for lead generation?

dealerName, phone, sellerCity, listingUrl, vin, and title are the main contact and record-identity fields.

Which fields are most useful for pricing analysis?

price, totalPrice, msrp, dealRating, dealScore, priceDifferential, mileage, and daysOnMarket support review and comparison workflows.

Is this Actor usable through Apify MCP?

Yes. It is an Apify Actor usable through Apify MCP and returns structured listing data that agent workflows can consume.

Responsible use

Use this Actor for lawful, public-data workflows such as market research, inventory monitoring, and internal analysis. Respect CarGurus terms, applicable law, and third-party rights when collecting, storing, and using listing data.