CarGurus Scraper - Used Car Listings & Dealer Leads
Pricing
from $4.00 / 1,000 car listing scrapeds
CarGurus Scraper - Used Car Listings & Dealer Leads
Scrape CarGurus used-car listings & dealer leads by location or search URL: VIN, price, Instant Market Value & deal rating, mileage, specs, photos, plus dealer name, phone & address. Optional listing details, dealer leads & monitoring. No login or API key.
Pricing
from $4.00 / 1,000 car listing scrapeds
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
CarGurus Scraper — US Used Car Listings, Deal Ratings & Dealer Leads
Scrape CarGurus — the largest US used-car marketplace — into clean, structured data. Pull every search result with year / make / model / trim, asking price, the CarGurus Instant Market Value & deal rating, mileage, VIN, body style, drivetrain, engine, MPG, colours, photos, and days on market — plus the selling dealer's name, phone and full address as a ready-to-use B2B lead. Add full listing-detail records (options, seller description, vehicle history, price history, all photos) and deduplicated dealer leads with one toggle. Built-in monitor mode returns only new listings and price drops between runs.
No API key, no login, no browser automation — fast HTTP straight to the source, with a 0–100 lead score on every record.
Why this CarGurus scraper?
Most car-listing scrapers give you a name and a price for a handful of cars, then break on the next site update. This actor ships the full CarGurus record with everything a pricing model, an inventory feed, or a dealer-prospecting list actually needs:
| Data | Typical car scrapers | This actor |
|---|---|---|
| Year / make / model / trim / body type | ✅ | ✅ |
| Asking price + MSRP + price-with-fees | partial | ✅ |
| CarGurus Instant Market Value + deal rating (Great/Good/Fair/High) + deal score | ❌ | ✅ |
| Mileage, VIN, condition (new / used / CPO) | partial | ✅ |
| Drivetrain, engine, transmission, MPG, exterior/interior colour | ❌ | ✅ |
| Days on market, stock number, photos | partial | ✅ |
| Vehicle history — accidents, owners, salvage/lemon/frame, fleet use (opt-in detail) | ❌ | ✅ |
| Price history, full options & seller description (opt-in detail) | ❌ | ✅ |
| Selling dealer name, phone, full street address, city/state/ZIP | partial | ✅ |
| Dealer leads (deduped, with rating & lead score) | ❌ | ✅ |
| Monitor mode — only new listings & price drops | ❌ | ✅ |
| Lead score (0–100) | ❌ | ✅ |
Who buys CarGurus data?
- Car dealers & dealer groups — track competitor pricing, deal ratings and days-on-lot on the exact year/make/model you stock.
- Automotive marketplaces, pricing & valuation tools — feed live asking prices, market values and mileage into your model.
- Dealer-facing SaaS, ad-tech, CRM & DMS vendors — build prospect lists of dealers by market, inventory and rating, with phone and address.
- Lenders, F&I, insurers & warranty providers — size markets and reach dealers and shoppers.
- Wholesalers, flippers & exporters — surface under-priced cars and recent price drops fast using the CarGurus deal rating.
- Researchers & analysts — used-car price trends, inventory and depreciation by make/model/region.
How to use
- Sign up for Apify — the free plan is enough to try this actor.
- Open the CarGurus Scraper, then either enter ZIP codes (with a search radius) or paste CarGurus search URLs built with your own make/model/price filters, and click Start.
- Watch results stream into the dataset table.
- Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.
Input
The easiest way to run an exact search is to set your filters on cargurus.com (make, model, price, year, mileage) and paste the resulting URL into Search URLs. Or search by location with ZIP codes:
{"zipCodes": ["90001", "78704"],"distance": 50,"maxResults": 100,"includeListingDetails": false,"includeDealerLeads": true,"dealRatingFilter": ["GREAT_PRICE", "GOOD_PRICE"],"makeFilter": ["Toyota", "Honda"],"maxMileage": 80000,"maxPrice": 30000,"withDealerPhoneOnly": true,"monitorMode": false}
| Field | Type | Description |
|---|---|---|
zipCodes | array | 5-digit US ZIP codes to search around. |
searchUrls | array | Paste any CarGurus search-results URL (best for make/model & advanced filters). |
startUrls | array | CarGurus search URLs or single /details/<id> listing URLs (auto-routed). |
distance | integer | Search radius around each ZIP, in miles (default 50). |
sortBy | string | best_match, newest_listed, lowest_price, highest_price, lowest_mileage, best_deal (honored best on pasted searchUrls). |
maxResults | integer | Cap on listing records (default 100). |
maxPagesPerSearch | integer | Result pages (24 listings each) to paginate per search (default 10). |
includeListingDetails | boolean | Open each listing for options, seller description, vehicle & price history, all photos, safety features. |
includeDealerLeads | boolean | Also output one deduplicated dealer record per dealership. |
conditionFilter | string | any / used / cpo / new. |
dealRatingFilter | array | Keep only listings with these CarGurus deal ratings. |
makeFilter | array | Keep only these makes. |
minYear / maxYear / maxMileage / minPrice / maxPrice | integer | Numeric filters (0 = off). |
withDealerPhoneOnly | boolean | Only listings that carry a dealer phone (best for lead-gen). |
excludePrivateSellers | boolean | Dealer listings only. |
monitorMode | boolean | Emit only new & price-changed listings between runs. |
proxyConfiguration | object | Defaults to Apify Residential, US (recommended). |
Output
Each listing is one row tagged type: "listing" (dealer rows are tagged type: "dealer"). Example listing:
{"type": "listing","listingId": "449427865","vin": "KL8CB6SA7LC408569","url": "https://www.cargurus.com/details/449427865","title": "2020 Chevrolet Spark","make": "Chevrolet","model": "Spark","year": 2020,"trim": "LS FWD","bodyType": "Hatchback","condition": "Used","price": 14195,"msrp": 14195,"marketValue": 15089,"priceVsMarket": 894,"dealRating": "GOOD_PRICE","dealRatingLabel": "Good Price","dealScore": 1.88,"mileage": 5489,"daysOnMarket": 25,"exteriorColor": "Caribbean Blue","drivetrain": "Front-Wheel Drive","engine": "1.4L I4","transmission": "Continuously Variable Transmission","fuelType": "Gasoline","mpgCombined": 33.6,"features": ["Bluetooth", "Backup Camera", "Android Auto", "CarPlay"],"photoUrl": "https://static.cargurus.com/.../2020_chevrolet_spark.jpeg","photoCount": 34,"dealerName": "Trust Auto","dealerPhone": "(443) 205-7240","dealerStreet": "1551 W Old Liberty Rd","dealerCity": "Sykesville","dealerState": "MD","dealerZip": "21784","dealerAddress": "1551 W Old Liberty Rd, Sykesville, MD, 21784","leadScore": 74,"scrapedAt": "2026-06-23T21:00:00.000Z"}
With includeListingDetails on, each listing also carries description, options, allPhotos, priceHistory, accidentCount, ownerCount, salvageTitle, lemon, frameDamage, safetyFeatures, and more.
Monitor mode
Turn on monitorMode to remember every listing (and its price) across runs. The next run emits only:
- new listings (
monitorStatus: "new"), and - price changes (
monitorStatus: "price_drop"/"price_increase").
State is stored in a named key-value store (monitorStoreName, default cargurus-scraper-monitor) — use a different name per tracked search to keep histories separate. This is orthogonal to Apify Schedules: the schedule decides when the run fires, monitor mode decides what's new — they work together without conflict.
Automate & schedule
- Apify API — start runs, fetch datasets, and manage schedules over REST.
- apify-client for JavaScript and apify-client for Python — official SDKs.
- Schedules — run it hourly/daily/weekly to track new inventory and price drops in a market; perfect for pricing feeds and dealer-prospecting pipelines.
- Webhooks — trigger downstream actions (CRM import, Slack alert, repricing job) the moment a run finishes.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/cargurus-scraper').call({zipCodes: ['90001'],distance: 50,includeDealerLeads: true,maxResults: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Integrate with any app
Connect the dataset to 5,000+ apps — no code required:
- Make — multi-step automation scenarios.
- Zapier — push new dealer leads straight into your CRM.
- Slack — get notified when a monitored search finds a new price drop.
- Google Drive / Sheets — auto-export every run to a spreadsheet.
- Airbyte — pipe results into your data warehouse.
- GitHub — trigger runs from commits or releases.
Use with AI assistants (MCP)
The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "find Toyota RAV4s near 90001 under $30k with a great deal rating and list the dealers" and let it run this scraper for you.
More scrapers from scrapesage
- Cars.com Scraper — US new & used car listings, prices and dealer leads.
- AutoScout24 Scraper — European used-car listings and dealers.
- AutoTrader Canada Scraper — Canadian car listings and prices.
- SgCarMart Used Car Scraper — Singapore used-car listings.
- US Auto Dealer Scraper — licensed auto-dealer registry leads.
- Vehicle Manufacturer Leads — manufacturer & importer firmographics.
- Google Maps Scraper — local business leads, emails and reviews.
- Website Contact Scraper — emails, phones and socials from any website.
Tips
- Make/model & advanced filters: build the exact search on cargurus.com and paste the URL into
searchUrls— CarGurus honors all its filters and sort there. - Best deals: set
dealRatingFilterto["GREAT_PRICE", "GOOD_PRICE"]to surface under-priced cars relative to the CarGurus Instant Market Value. - Cleanest dealer lists: turn on
includeDealerLeads+withDealerPhoneOnlyto get a deduplicated, phone-verified dealer prospect list. - Recurring monitoring: combine Schedules with
monitorModeto track only newly listed cars and price drops.
FAQ
Do I need a CarGurus API key or login? No. This actor reads the public server-rendered search and listing pages — no key, no login, no browser.
Can I search by make and model? Yes — paste a CarGurus search URL with your make/model filters into searchUrls, or search by zipCodes and apply makeFilter / minYear / maxPrice / maxMileage.
Why Residential proxy? CarGurus serves clean pages over US residential IPs but challenges datacenter IPs. The default is Apify Residential (US); blocked requests retry automatically on a fresh IP.
Does it get dealer phone numbers and addresses? Yes — every listing carries the selling dealer's name, phone, full street address and city/state/ZIP. Turn on includeDealerLeads for a deduplicated dealer list.
Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.
How do I track new inventory and price drops? Turn on monitorMode and create a Schedule; optionally add a webhook or Zapier zap to push changes into your CRM as they appear.
Not affiliated with or endorsed by CarGurus. Use responsibly and in accordance with applicable laws and terms. Scrapes only publicly available data.