Car Listings Scraper for CarGurus
Pricing
from $5.00 / 1,000 listing scrapeds
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
Maintained by CommunityActor stats
0
Bookmarked
50
Total users
15
Monthly active users
10 days ago
Last modified
Categories
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, andpriceDifferential - 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
| Field | Type | Description |
|---|---|---|
country | string | CarGurus marketplace to search. Use US, CA, or UK. |
postalCode | string | ZIP, Canadian postal/FSA, or UK outcode/postcode used as the search center. |
distance | integer | Search radius around the postal code. |
make | string | Optional make filter matched against listing make names. |
model | string | Optional model filter matched against listing model names. |
minPrice | integer | Minimum total price to keep. |
maxPrice | integer | Maximum total price to keep. |
minYear | integer | Minimum model year to keep. |
maxYear | integer | Maximum model year to keep. |
maxMileage | integer | Maximum mileage to keep. |
sortBy | string | Sort order such as deal_score, price_asc, price_desc, mileage_asc, year_desc, or distance. |
searchUrls | array | One or more CarGurus search or inventory URLs. Reuses the URL filters directly. |
maxResults | integer | Maximum number of listings returned per run. |
proxyConfiguration | object | Proxy 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.
| Field | Type | Description |
|---|---|---|
listingId | string | CarGurus internal listing ID. |
listingUrl | string | Permalink to the listing detail page. |
title | string | Listing title. |
make | string | Vehicle make. |
model | string | Vehicle model. |
trim | string or null | Trim level. |
year | integer or null | Model year. |
vin | string or null | Vehicle Identification Number. |
stockNumber | string or null | Dealer stock number. |
bodyType | string or null | Body style. |
price | number or null | Sticker price in local currency. |
totalPrice | number or null | Price including dealer fees. |
msrp | number or null | Manufacturer suggested retail price. |
priceCurrency | string | ISO currency code. |
dealRating | string or null | CarGurus deal rating. |
dealScore | number or null | Numeric deal score from 0 to 1. |
priceDifferential | number or null | Difference versus CarGurus IMV. |
mileage | integer or null | Odometer reading. |
daysOnMarket | integer or null | Days the listing has been on the market. |
exteriorColor | string or null | Exterior color. |
interiorColor | string or null | Interior color. |
transmission | string or null | Transmission type. |
driveTrain | string or null | Drivetrain. |
fuelType | string or null | Fuel type. |
engine | string or null | Engine display name. |
combinedMpg | string or null | Combined fuel economy string. |
options | array | Feature and option strings. |
imageUrl | string or null | Primary photo URL. |
pictureCount | integer or null | Number of photos. |
sellerType | string or null | Seller type. |
dealerName | string or null | Dealer or seller name. |
isFranchiseDealer | boolean or null | Whether the seller is a franchise dealer. |
sellerCity | string or null | Seller city and region. |
sellerRegion | string or null | Seller state or region code. |
sellerPostalCode | string or null | Seller postal or ZIP code. |
phone | string or null | Dealer phone number. |
distance | number or null | Distance from the searched postal code. |
country | string | Marketplace code. |
scrapedAt | string | ISO 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, andpriceDifferentialdescribe CarGurus' own listing evaluation fieldslistingUrlpoints to the listing detail pagephone,dealerName, andsellerCityidentify the seller shown on the listingscrapedAtgives 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
searchUrlscan 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 scrapedevent - A smaller
maxResultsvalue 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
- Then use Mobile.de Scraper — Vehicle Price & Stock Monitor to extend this Actor with a neighboring vehicle-market research source when the brief calls for Mobile data.
- Then use Autotrader UK Scraper to extend this Actor with a neighboring vehicle-market research source when the brief calls for Autotrader data.
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.