9 min read
Collect VIN, mileage, price, dealer and price history from Cars.com, CarGurus and Autotrader listings.
| Site | Car | Miles | Price |
|---|---|---|---|
| Cars.com | 2025 RAV4 LE | 44,621 | $26,912 |
| Cars.com | 2021 RAV4 Limited | 33,529 | $31,633 |
| CarGurus | 2025 RAV4 XLE | 31,247 | $33,490 |
| CarGurus | 2024 RAV4 XLE Premium | 17,333 | $35,900 |
| Autotrader | 2022 RAV4 LE | 79,587 | $22,612 |
| Autotrader | 2026 RAV4 XLE Premium | 12,750 | $42,240 |
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.
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
One call returns a Cars.com listing's VIN, mileage, price, dealer and price history as JSON. If the page is missing any of them, you get "extracted": false back instead of a guess.
curl https://request.usestring.ai/v1/fetch \
-H "Authorization: Bearer $STRING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.cars.com/vehicledetail/f780861b-d51a-4edd-a7cc-64bab10f6247/",
"countryCode": "US",
"jsonSchema": {
"type": "object",
"properties": {
"vin": { "type": "string" },
"year": { "type": "integer" },
"make": { "type": "string" },
"model": { "type": "string" },
"trim": { "type": "string" },
"mileage": { "type": "integer" },
"price": { "type": "number" },
"dealer": { "type": ["string", "null"] },
"price_history": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": { "type": "string" },
"price": { "type": "number" }
},
"required": ["date", "price"]
}
}
},
"required": ["vin", "year", "make", "model", "trim", "mileage", "price", "dealer", "price_history"]
}
}'{
"vin": "2T3F1RFV5SW506503",
"year": 2025,
"make": "Toyota",
"model": "RAV4",
"trim": "LE",
"mileage": 44621,
"price": 26912,
"dealer": "Ed Napleton Honda",
"price_history": [
{ "date": "10/19/26", "price": 26912 },
{ "date": "10/15/26", "price": 27762 },
{ "date": "10/07/26", "price": 27912 }
]
}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:
VIN, year, make, model, trim, mileage, colors, drivetrain and fuel type, from each listing's schema.org vehicle data.
The asking price on every visit, and on Cars.com the listing's own price history with the date of each cut.
Dealer name, city, ZIP code and phone for every car on a search page, so you can count stock per dealer.
The marketplace's deal label, such as Great Deal, and Cars.com's clean title, single owner and no accidents flags.
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.
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.
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.
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.
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.
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.
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.
| Site | Car | Miles | Price |
|---|---|---|---|
| Cars.com | 2025 RAV4 LE | 44,621 | $26,912 |
| Cars.com | 2021 RAV4 Limited | 33,529 | $31,633 |
| CarGurus | 2025 RAV4 XLE | 31,247 | $33,490 |
| CarGurus | 2024 RAV4 XLE Premium | 17,333 | $35,900 |
| Autotrader | 2022 RAV4 LE | 79,587 | $22,612 |
| Autotrader | 2026 RAV4 XLE Premium | 12,750 | $42,240 |
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.
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.
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.
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?
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.
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.
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.
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.