CarGurus Scraper — US, Canada & UK Listings with Deal Ratings avatar

CarGurus Scraper — US, Canada & UK Listings with Deal Ratings

Pricing

from $2.50 / 1,000 listing scrapeds

Go to Apify Store
CarGurus Scraper — US, Canada & UK Listings with Deal Ratings

CarGurus Scraper — US, Canada & UK Listings with Deal Ratings

Used-car listings from CarGurus (US, Canada, UK): price, mileage, deal rating, market value, VIN and dealer phone. No login. Several makes and models per run. From $2.50 per 1,000 cars; pay only for cars found.

Pricing

from $2.50 / 1,000 listing scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

73

Total users

24

Monthly active users

2 days ago

Last modified

Features

Limited permissions

Share

What is CarGurus Scraper?

CarGurus Scraper gives you used-car listings from CarGurus in the US, Canada and UK: price, mileage, deal rating, CarGurus market value, VIN and dealer details. No login needed, you pay only for the cars it finds, and you can search several makes and models in one run. Cars start at $2.50 per 1,000 on the Gold plan and above ($4.00 per 1,000 on the Free plan).

Start in one of two ways: paste a CarGurus search URL you already filtered in the browser, or give a ZIP/postal code (or several) plus make, model, year, price and mileage filters. Each car is one record with 48 fields (plus about 30 more with the optional details add-on from 24 November 2026), including VIN, price, total price, CarGurus market value (expectedPrice), deal rating, price difference vs. market, mileage, days on market, specs, fuel economy, safety rating, main photo, dealer name, dealer ID, phone and distance. Use it for car prices research, dealer inventory review, lead generation and AI workflows that need one 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, applied by CarGurus itself so narrow searches stay fast
  • Several makes and models in one run (for example Toyota Camry and Honda Accord)
  • 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 is comparing Toyota Camry inventory across New York, Chicago and Los Angeles. One run with postalCodes ["10001", "60601", "90012"], make Toyota, model Camry, minYear 2019 and maxMileage 60000 returns every matching Camry and Camry Hybrid with dealRating, expectedPrice, priceDifferential and daysOnMarket. Sorting the dataset by priceDifferential shows which cars are priced furthest below market and how long they have been listed, which is where a dealer is most likely to negotiate.

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.
postalCodesarrayMore ZIP/postal codes searched in the same run with the same filters. Listings are de-duplicated; maxResults applies to the whole run.
distanceintegerSearch radius around the postal code (miles in the US and UK, km in Canada). Only cars inside it are returned.
includeDistantListingsbooleanKeep the far-away cars CarGurus mixes in (nationwide delivery or nationwide fallback). Off by default.
includeDetailsbooleanOptional car details add-on, off by default. Starts on 24 November 2026 at $0.0015 per detailed car (see Car details below). Before that date, switching it on stops the run with a clear message and nothing is charged.
makestringOptional brand, e.g. Toyota. In the US and Canada CarGurus filters it directly.
modelstringOptional model, e.g. Camry (also finds Camry Hybrid). Add the make for the fast path.
makesarrayMore brands searched in the same run.
modelsarrayMore models searched in the same run, matched within the makes.
minPriceintegerMinimum total price (sent to CarGurus and checked on each listing).
maxPriceintegerMaximum total price.
minYearintegerOldest model year.
maxYearintegerNewest model year.
maxMileageintegerMaximum mileage.
sortBystringSort order: deal_score, price_asc, price_desc (by total price incl. fees), 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
}

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.
expectedPricenumber or nullCarGurus estimated market value (IMV) for this car.
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.
colorGroupstring or nullNormalized color group, e.g. BLACK.
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.
cityMpgnumber or nullCity fuel economy.
highwayMpgnumber or nullHighway fuel economy.
doorsinteger or nullNumber of doors.
safetyRatingstring or nullNCAP overall safety rating shown by CarGurus.
optionsarrayFeature and option strings.
imageUrlstring or nullMain photo URL (one photo per row).
pictureCountinteger or nullPhoto count as reported in CarGurus search results (often 0 even when the listing has photos).
isFeaturedboolean or nullWhether the dealer paid to feature the listing.
sellerTypestring or nullSeller type.
sellerIdstring or nullCarGurus dealer ID, stable across that dealer's listings.
dealerNamestring or nullDealer or seller name.
isFranchiseDealerboolean or nullWhether the seller is a franchise dealer.
franchiseMakestring or nullBrand the dealer is franchised for.
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.
detailsAddedbooleanOnly with includeDetails: true when the car's details were found and added.
detailsStatusstringOnly with includeDetails: added, unavailable, skipped_budget or skipped_after_repeated_failures.
photos, photoCountarray, integerOnly with includeDetails: all photo URLs and their count.
priceHistoryarrayOnly with includeDetails: dated price points, oldest first.
accidentCount, ownerCount, isFleetinteger, integer, booleanOnly with includeDetails, US only: vehicle history counts.
daysAtDealer, daysOnCarGurus, savedByShoppersintegerOnly with includeDetails.
dealerRating, dealerReviewCount, dealerStreet, dealerLatitude, dealerLongitude, dealerWebsite, dealerLogoUrl, dealerHours, dealerSocialmixedOnly with includeDetails: dealer details.
description, specs, dealerFees, dealerFeesTotal, returnPolicyDays, safetyRatingsmixedOnly with includeDetails: the seller's description and specifications.
countrystringMarketplace code.
scrapedAtstringISO 8601 scrape timestamp.

Sample output record

A real listing row from a ZIP 10001 Toyota Camry search (dealer phone left out here):

{
"listingId": "459166145",
"listingUrl": "https://www.cargurus.com/Cars/link/459166145",
"title": "2024 Toyota Camry SE FWD",
"make": "Toyota",
"model": "Camry",
"trim": "SE FWD",
"year": 2024,
"vin": "4T1G11AK4RU845162",
"stockNumber": "B6359",
"bodyType": "Sedan",
"price": 25155,
"totalPrice": 26150,
"msrp": 28995,
"expectedPrice": 26876,
"priceCurrency": "USD",
"dealRating": "GREAT_PRICE",
"dealScore": 0.988964,
"priceDifferential": 1721,
"mileage": 23034,
"daysOnMarket": 53,
"exteriorColor": null,
"colorGroup": "UNKNOWN",
"interiorColor": "Black",
"transmission": "Automatic",
"driveTrain": "Front-Wheel Drive",
"fuelType": "Gasoline",
"engine": "2.5L I4",
"combinedMpg": "33 MPG",
"cityMpg": 28,
"highwayMpg": 39,
"doors": 4,
"safetyRating": "Not Rated",
"options": [
"Adaptive Cruise Control",
"Alloy Wheels",
"Bluetooth",
"Backup Camera",
"Heated Seats"
],
"imageUrl": "https://static.cargurus.com/images/forsale/2026/10/06/21/10/2024_toyota_camry-pic-2679369764754176616-1024x768.jpeg",
"pictureCount": 0,
"isFeatured": true,
"sellerType": "DEALER",
"sellerId": "889839",
"dealerName": "Paul Miller Toyota",
"isFranchiseDealer": true,
"franchiseMake": "Toyota",
"sellerCity": "Pinebrook , NJ",
"sellerRegion": "NJ",
"sellerPostalCode": "07058",
"phone": null,
"distance": 19.695755,
"country": "US",
"scrapedAt": "2026-11-09T16:49:18.566Z"
}

Car details (optional add-on, starts 24 November 2026)

From 24 November 2026 you can switch on includeDetails to add the full detail page of each car to its record. It costs $0.0015 extra per detailed car on every plan (for example Gold and above: $0.0025 + $0.0015 = $0.0040 per detailed car; Free: $0.0055). You are charged the extra amount only for cars where CarGurus returned the details, and never for cars saved without them. Until that date the option is off, and a run that asks for it stops with a clear message before anything is charged.

What it adds to each car:

  • All photos (full size), with photoCount
  • Dated price history (priceHistory), days at the dealer, days on CarGurus, and how many shoppers saved the car
  • Accident count, owner count and a fleet-use flag (US only; CarGurus does not show these for Canada and the UK)
  • Dealer rating and review count, dealer address position, opening hours, website, logo and social links (when the dealer has them)
  • The seller's full description, specification sections, dealer fees (such as a documentation fee), return window and safety ratings when shown

Good to know: some cars have no photos or no price changes at CarGurus, so those fields can be empty for them. A car is saved with details only when CarGurus returns its detail page; otherwise it is saved normally with detailsAdded: false and the extra charge is not applied. Details are not available for every car, and the full vehicle history report text is not included.

How it works

The Actor reads CarGurus search results as JSON, page by page, until it has maxResults listings or CarGurus has no more cars. In the US and Canada it looks up your make and model in the CarGurus catalog, so CarGurus returns only matching cars; year, price and mileage are sent with the search too. Every filter is also checked again on each listing, so nothing outside your filters is returned or charged. In the UK, make and model are checked on each listing. If a page is blocked, the Actor retries it and then uses backup routes before giving up. Results go to the default dataset; the run summary (OUTPUT) shows the outcome, how many requests were made, which route served each page, and any warnings.

Pricing

This Actor uses Pay per event pricing with Apify platform usage included: you pay a tiny start event ($0.00005 per run) and one listing-scraped event per car saved, with no separate usage charge. Runs with no matching cars cost only the start event.

Optional from 24 November 2026: Listing details added at $0.0015 per detailed car, the same on every plan, charged only for cars saved with details.

Price per car by your Apify plan:

PlanPer carPer 1,000 cars
Free$0.004$4.00
Bronze$0.0035$3.50
Silver$0.003$3.00
Gold and above$0.0025$2.50

Example: one hundred cars on the Free plan cost 100 x $0.004 + $0.00005 = $0.40005. The run cost scales only with the number of cars returned, and maxResults caps it. The Pricing tab always shows the current prices.

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 CarGurus has no more cars

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, and the price per car depends on your Apify plan

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

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.

What happens when a search has no matching cars?

The run succeeds with an empty dataset and outcome: VALID_EMPTY in the run summary. You are charged only the small start event. A run fails only when no listing could be collected because CarGurus could not be reached (or the run ran out of time before the first listing).

CarGurus mixes far-away cars into local results (cars offered with nationwide delivery, or a nationwide list when nothing is nearby). The Actor returns and charges only cars inside your radius. Turn on includeDistantListings to keep them too.

Do I get every photo of each car?

No. Each row has the main photo (imageUrl). Open listingUrl for the full gallery.

Can I search only new or only used cars?

Not with a field yet. Paste a CarGurus results URL with that filter set into searchUrls.

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.

⌂ 换网址