CarGurus Scraper - Used Car Listings & Dealer Leads avatar

CarGurus Scraper - Used Car Listings & Dealer Leads

Pricing

from $4.00 / 1,000 car listing scrapeds

Go to Apify Store
CarGurus Scraper - Used Car Listings & Dealer Leads

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

Scrape Sage

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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:

DataTypical car scrapersThis actor
Year / make / model / trim / body type
Asking price + MSRP + price-with-feespartial
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, photospartial
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/ZIPpartial
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

  1. Sign up for Apify — the free plan is enough to try this actor.
  2. 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.
  3. Watch results stream into the dataset table.
  4. 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
}
FieldTypeDescription
zipCodesarray5-digit US ZIP codes to search around.
searchUrlsarrayPaste any CarGurus search-results URL (best for make/model & advanced filters).
startUrlsarrayCarGurus search URLs or single /details/<id> listing URLs (auto-routed).
distanceintegerSearch radius around each ZIP, in miles (default 50).
sortBystringbest_match, newest_listed, lowest_price, highest_price, lowest_mileage, best_deal (honored best on pasted searchUrls).
maxResultsintegerCap on listing records (default 100).
maxPagesPerSearchintegerResult pages (24 listings each) to paginate per search (default 10).
includeListingDetailsbooleanOpen each listing for options, seller description, vehicle & price history, all photos, safety features.
includeDealerLeadsbooleanAlso output one deduplicated dealer record per dealership.
conditionFilterstringany / used / cpo / new.
dealRatingFilterarrayKeep only listings with these CarGurus deal ratings.
makeFilterarrayKeep only these makes.
minYear / maxYear / maxMileage / minPrice / maxPriceintegerNumeric filters (0 = off).
withDealerPhoneOnlybooleanOnly listings that carry a dealer phone (best for lead-gen).
excludePrivateSellersbooleanDealer listings only.
monitorModebooleanEmit only new & price-changed listings between runs.
proxyConfigurationobjectDefaults 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

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 dealRatingFilter to ["GREAT_PRICE", "GOOD_PRICE"] to surface under-priced cars relative to the CarGurus Instant Market Value.
  • Cleanest dealer lists: turn on includeDealerLeads + withDealerPhoneOnly to get a deduplicated, phone-verified dealer prospect list.
  • Recurring monitoring: combine Schedules with monitorMode to 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.