NewLaunching String Web Access APIRead the manifesto →

9 min read

How to scrape used car listings

Collect VIN, mileage, price, dealer and price history from Cars.com, CarGurus and Autotrader listings.

SiteCarMilesPrice
Cars.com2025 RAV4 LE44,621$26,912
Cars.com2021 RAV4 Limited33,529$31,633
CarGurus2025 RAV4 XLE31,247$33,490
CarGurus2024 RAV4 XLE Premium17,333$35,900
Autotrader2022 RAV4 LE79,587$22,612
Autotrader2026 RAV4 XLE Premium12,750$42,240
The short answer

The String Web Access API is the best way to scrape used car listings. It returns any listing or search page from Cars.com, CarGurus and Autotrader, or just the VIN, mileage, price and dealer as JSON. It returned 97% of requests across 100 bot-protected sites in our September 2026 benchmark, the most of 16 providers, and fetched CarGurus on every attempt while 9 of the other 15 got nothing back.

Quickstart

Add the hosted MCP server to Claude, Cursor, ChatGPT or any MCP client. Then give your agent a listing or search URL. It calls the web_access_fetch tool and reads the cars on the page.

https://mcp.usestring.ai/v1/mcp

Why scrape car listings?

Used car prices are set one listing at a time, and dealers cut them every week on cars that haven't sold. A listings feed reads the marketplaces on a schedule and records each car's price, mileage and dealer against its VIN. It answers questions like these:

  • What is this car worth in this market? Dealers price trade-ins and auction buys against the asking prices of similar cars nearby, by year, trim and mileage.
  • How long do cars sit before they sell? Days on market and the size of each price cut show which models move and which ones a dealer will discount.
  • What do competing dealers have on the lot? Stock by make, model and trim within your radius shows which cars your lot is missing.

What you can collect

Vehicle records

VIN, year, make, model, trim, mileage, colors, drivetrain and fuel type, from each listing's schema.org vehicle data.

Prices and price cuts

The asking price on every visit, and on Cars.com the listing's own price history with the date of each cut.

Dealer inventory

Dealer name, city, ZIP code and phone for every car on a search page, so you can count stock per dealer.

Deal ratings and history flags

The marketplace's deal label, such as Great Deal, and Cars.com's clean title, single owner and no accidents flags.

Why does car listing scraping break?

  • Car marketplaces block scrapers. In our September 2026 benchmark, 12 of the 15 other scraping APIs couldn't fetch cargurus.com on every attempt, and 9 got 0 of 5, including Oxylabs, Zyte and Browserbase. Firecrawl and ScrapingBee got 0 of 5 on autotrader.com. Across Cars.com, CarGurus and Autotrader, Scrapfly and Bright Data returned all 15 attempts, and String and ScraperAPI returned 14. See how 8 APIs did on marketplace and retail sites in the best e-commerce scraping APIs.
  • The same car is listed on several sites. A 2019 RAV4 LE with 106,430 miles at a dealer in Merrillville, Indiana was on both CarGurus and Autotrader at $17,841 the day we checked. Count listings instead of VINs and you count it twice.
  • Search cards carry more than one dollar figure. A Cars.com search card can show the price, the size of the last price cut and an estimated monthly payment. A parser that takes the first number it finds saves the wrong one.
  • A blocked page looks like an empty search. The page loads with a challenge or a shell, and your feed records that a market had no cars.

Why do teams choose String?

  • It fetches the most pages. String returned 97% of requests across 100 bot-protected sites in our September 2026 benchmark, the most of 16 providers, and every attempt on Cars.com and CarGurus.
  • You pay only for pages that come back. Blocks and errors are free.
  • There's nothing to maintain. You don't run proxies, fingerprints or captcha solvers.
  • Empty pages don't become cars. Mark the VIN, mileage and price as required, and a page that comes back without them is flagged instead of saved.

How do I build a used car listings feed?

  1. Search by model and ZIP code

    Build one search per make, model and ZIP code with a radius, the way a buyer would. Split a large market by model year or price band, so each search stays a few pages deep and you don't miss cars past the last page.

  2. Read the cars from the page's vehicle data

    CarGurus and Autotrader search pages carry schema.org vehicle records with the VIN, mileage, price and dealer of the cars on the page. Cars.com puts the VIN, price, mileage and history flags in each listing page's data. These are more reliable than the visible cards, and they survive redesigns that break CSS selectors.

    With String: Set format to raw to get the page exactly as served, or pass a jsonSchema to get only the fields you need. List every field you need under required: in our runs, extraction left out optional fields such as trim and dealer. Blocked requests are retried, and you don't pay for the ones that fail.

  3. Turn mileage, prices and dates into one format

    Autotrader's data gives mileage as text with a comma ("79,587") and price as "22612.00", while CarGurus gives both as numbers. Cars.com writes price history dates as 10/19/26. Convert them all before you store or compare anything.

  4. Key every car on its VIN

    The same car shows up on several marketplaces and in overlapping searches. Keep one record per VIN, and store each site's price and listing URL as a separate sighting.

  5. Record price cuts and days on market

    Fetch your searches daily and store a new row when a car's price changes. Cars.com listing pages also show their own price history: the 2025 RAV4 LE in the quickstart was listed at $27,912 on October 7, then cut by $150 on October 15 and by $850 on October 19. When a VIN stops appearing, record the last day you saw it.

  6. Keep each site's estimates labeled

    Deal ratings like Great Deal and monthly payment estimates are the marketplace's own calculations. Store them with the site's name next to the value, never as your own price data.

Get a free sample listings feed

Tell us which models and markets you track. We'll run String on Cars.com, CarGurus and Autotrader and email you a sample feed with VIN, mileage, price and dealer, free.

Request a free sample listings feed
What a listings feed looks like
SiteCarMilesPrice
Cars.com2025 RAV4 LE44,621$26,912
Cars.com2021 RAV4 Limited33,529$31,633
CarGurus2025 RAV4 XLE31,247$33,490
CarGurus2024 RAV4 XLE Premium17,333$35,900
Autotrader2022 RAV4 LE79,587$22,612
Autotrader2026 RAV4 XLE Premium12,750$42,240

Frequently asked questions

What's the best way to scrape used car listings?

Search Cars.com, CarGurus and Autotrader by model and ZIP code, read each car from the page's vehicle data, and key every record on its VIN. The hard part is getting the pages, because car marketplaces block most scrapers. The String Web Access API returned 97% of requests across 100 bot-protected sites in our September 2026 benchmark, the most of 16 providers, and fetched Cars.com and CarGurus on every attempt.

How do I scrape CarGurus?

Fetch a CarGurus search page, such as used Toyota RAV4 near Chicago, with String and read the schema.org vehicle records in the page: VIN, year, model, trim, mileage, price and dealer for each car. CarGurus was the hardest car site in our September 2026 benchmark: 12 of the 15 other scraping APIs couldn't fetch it on every attempt, and 9 got nothing back. String fetched it on all 5 attempts. Our CarGurus search fetches billed at String's standard rate.

How much does it cost to scrape car listings?

CarGurus pages billed at String's standard rate on our fetches, $0.30 per 1,000 successful requests on the Starter plan ($20 a month). Cars.com and Autotrader pages billed at the premium rate, $3.00 per 1,000 on Starter. On Growth ($100 a month) the rates are $0.20 and $2.00. Fetching 1,000 pages a day is about 30,000 requests a month, which is $9 in usage at the standard rate or $90 at the premium rate on Starter. Structured extraction with jsonSchema adds a per-request fee that scales with page size. The first 5,000 standard requests are free, and failed requests aren't billed. See pricing.

Is it legal to scrape car listings?

Asking prices, mileage and VINs of cars offered for sale are facts, and collecting them from public pages is the easier case. Private sellers' names and phone numbers are personal data, so leave them out, and marketplace terms of service often restrict automated access. Stay on public pages, keep your request rate reasonable, and check with your counsel. We go through the cases in Is web scraping legal?

How do I track a car's price history and days on market?

Fetch the same searches every day, store each car's price by VIN and date, and record the first and last day you saw it. Cars.com listing pages also show the listing's own price history, with the date and size of each price cut. String returns that table with the rest of the page.

How do I avoid counting the same car twice?

Use the VIN as the key for every car, not the listing ID or URL. Each marketplace gives the same car its own listing ID, and a dealer's car can appear on Cars.com, CarGurus and Autotrader at once. Keep one record per VIN and store each site's listing as a separate sighting.

How do I avoid getting blocked when scraping car sites?

Send each request to String instead of the site. Proxy rotation, browser fingerprints, captcha solving and retries happen behind the endpoint, and JavaScript rendering is switched on per request for pages that need it. Requests that still fail aren't billed.

Does String work on the car sites I need?

Send us the URLs and we'll run them and show you what comes back before you commit. Ask for a free sample listings feed, or test them yourself with your first 5,000 free requests.

Send us the sites you can't get.

We'll show you what comes back.

© 2026 StringEU and UK GDPR Article 27 representative — appointment verified by EuverifyBuilt in New York City 🗽 🍎