# Edmunds Used Cars Scraper - Listings, Prices & Deal Ratings (`parseforge/edmunds-used-cars-scraper`) Actor

Scrape Edmunds used car listings: price, deal rating, mileage, VIN, specs, dealer and photo for any search URL or ZIP code. Export to CSV, JSON, Excel or XML.

- **URL**: https://apify.com/parseforge/edmunds-used-cars-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.52 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🚗 Edmunds Used Cars Scraper

> 🚀 **Export Edmunds used car listings in seconds.** Paste any Edmunds search URL, set a ZIP code and a radius, and get every listing as a flat 56-field row: price, deal rating, market value, mileage, VIN, engine, MPG, accident history, dealer contact and the main photo. A five-listing verification run finished in 3.3 seconds.

Edmunds is one of the largest used car marketplaces in the United States. Its search results page embeds the full listing data that the site renders, and this Actor reads that data directly: no browser, no screenshots, no guessing from HTML. You get the same numbers a shopper sees on Edmunds, including the Edmunds deal rating (Great, Good, Fair) and the estimated market value behind it, in one table ready for CSV, JSON, Excel or XML.

The live coverage is large: the default search (used and certified pre-owned within 100 miles of Beverly Hills, CA) matched 220,381 listings at verification time, and Edmunds carries about 4.7 million VINs nationally. Each search URL yields up to 9,996 listings (476 pages of 21); narrow by make, model, ZIP code or radius to reach the rest.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Dealerships and dealer groups | Watch competitor prices, price drops and days on market for the models you stock |
| Used car buyers and brokers | Rank every listing within a radius by savings against Edmunds market value |
| Automotive analysts and lenders | Build price, mileage and age curves by make, model and region |
| Lead generation and marketing teams | Collect dealer names, addresses and phone numbers for the inventory they carry |

### 📋 What the Edmunds Used Cars Scraper does

> 💡 **Why it matters:** Edmunds shows 21 listings per page and hides most of the specs behind a click. Copying a few hundred cars by hand takes a day and misses the fields that matter for a decision, such as the market value estimate, the price drop and the accident count. This Actor collects all of them in one run and never bills for a row it did not deliver.

- 🔗 **Any Edmunds search:** paste a search results URL from edmunds.com with the filters you set on the site (make, model, year, price, body type, features, sort) or a make and model page such as `https://www.edmunds.com/used-toyota-camry/`. Pagination is automatic.
- 📍 **Your location, not the proxy's:** Edmunds centres a search on the visitor's location. Set a ZIP code and a radius (10 to 500 miles) and the Actor sends them the way the site does, so the results are the ones a shopper in that ZIP code would see.
- 💰 **Price intelligence:** list price, advertised price, recent price drop, Edmunds market value estimate, deal rating, savings in dollars and percent, and the estimated monthly loan payment.
- 🔧 **Specs and history:** VIN, stock number, trim, style, body type, mileage, colours, drivetrain, transmission, engine, horsepower, fuel type, EPA MPG, seats, accident count, owner count, usage type and clean title flag.
- 🏢 **Dealer contact:** dealer name, dealer group, street address, city, state, ZIP code, phone number, Edmunds sales rating and review count, and the distance from your ZIP code.
- 🖼️ **Photos:** the main listing photo URL and the photo count, plus the direct link to the listing on Edmunds.
- 🔁 **Clean data:** one VIN per row (duplicates across pages are removed), the same 56 columns on every row, and `Not Disclosed` instead of blank cells when Edmunds does not carry a value for that car.

### 🎬 Full Demo (🚧 Coming soon)

A short walkthrough video is in production.

### 📊 Output

Each row is one used car listing. Fields, in dataset order:

| Field | Description |
|---|---|
| 🖼 `imageUrl` | Main listing photo (600 x 400) |
| 🚗 `title` | Year, make, model and trim |
| 🔗 `url` | Listing page on Edmunds |
| 🔑 `vin` / 🆔 `listingId` / 🏷 `stockNumber` | Identifiers |
| 📋 `listingType` | `Used` or `Certified Pre-Owned` |
| 🏭 `make` / 🚘 `model` / 📅 `year` / ✨ `trim` / 🎨 `styleName` / 🚙 `bodyType` | Vehicle identity |
| 💰 `price` / 💱 `currency` / 🏷 `advertisedPrice` / 📉 `priceDrop` | List price in USD, the dealer's advertised price and the latest change |
| 📊 `marketValue` / ⭐ `dealRating` / 💵 `savings` / ％ `savingsPercent` | Edmunds market value estimate, deal rating (Great, Good, Fair) and the savings against it |
| 🗓 `monthlyPayment` | Estimated monthly loan payment shown by Edmunds |
| 🛣 `mileage` / 🎨 `exteriorColor` / 🪑 `interiorColor` | Odometer and colours |
| ⚙️ `drivetrain` / 🔧 `transmission` / 🔩 `engine` / 🐎 `horsepower` / ⛽ `fuelType` | Powertrain |
| 🏙 `mpgCity` / 🛤 `mpgHighway` / 🔀 `mpgCombined` / 💺 `seats` | EPA fuel economy and seating |
| 💥 `accidents` / 👤 `owners` / 🧾 `usageType` / 📄 `cleanTitle` | Vehicle history summary |
| 🏢 `dealerName` / 🏬 `dealerGroup` / 🏠 `dealerStreet` / 🌆 `dealerCity` / 🇺🇸 `dealerState` / 📮 `dealerZip` / 📞 `dealerPhone` | Dealer contact |
| 🌟 `dealerRating` / 🗣 `dealerReviewCount` / 📍 `distanceMiles` | Edmunds sales rating, review count and distance from your ZIP code |
| ⏳ `daysOnEdmunds` / 🕐 `listedAt` / 🕑 `firstPublishedAt` | Time on market |
| 📝 `sellersComments` / 📷 `photoCount` / 🧩 `features` | Seller text, photo count and the feature highlights Edmunds shows on the card |
| 🕒 `scrapedAt` | ISO timestamp of the collection |
| ❌ `error` | `null` on success; error rows carry only this field and are never charged |

Three real records from the verification run (default search URL, ZIP 90210, Max Items 5):

```json
[
  {
    "imageUrl": "https://www.edmunds.com/assets/m2/for-sale/10-SLATV4C05MU207071/img-1-600x400.jpg",
    "title": "2021 Rolls-Royce Cullinan Base",
    "url": "https://www.edmunds.com/rolls-royce/cullinan/2021/vin/SLATV4C05MU207071/",
    "vin": "SLATV4C05MU207071",
    "listingId": "87f3627dedfc36a2e92a5bbc06d57c07",
    "stockNumber": "MMU207071",
    "listingType": "Used",
    "make": "Rolls-Royce",
    "model": "Cullinan",
    "year": 2021,
    "trim": "Base",
    "styleName": "4dr SUV AWD (6.7L 12cyl Turbo 8A)",
    "bodyType": "SUV",
    "price": 250077,
    "currency": "USD",
    "advertisedPrice": 250077,
    "priceDrop": -6000,
    "marketValue": 331817,
    "dealRating": "Great",
    "savings": 81740,
    "savingsPercent": 24.6,
    "monthlyPayment": 4326.77,
    "mileage": 15667,
    "exteriorColor": "Gray",
    "interiorColor": "Black leather",
    "drivetrain": "all wheel drive",
    "transmission": "Automatic",
    "engine": "6.7L 12-cylinder gas",
    "horsepower": 563,
    "fuelType": "premium unleaded (required)",
    "mpgCity": 12,
    "mpgHighway": 20,
    "mpgCombined": 14,
    "seats": 5,
    "accidents": 0,
    "owners": 1,
    "usageType": "Lease",
    "cleanTitle": "Yes",
    "dealerName": "Mercedes-Benz of Calabasas",
    "dealerGroup": "Sonic Automotive",
    "dealerStreet": "24181 Calabasas Rd",
    "dealerCity": "Calabasas",
    "dealerState": "CA",
    "dealerZip": "91302",
    "dealerPhone": "818-591-2377",
    "dealerRating": 4.905,
    "dealerReviewCount": 42,
    "distanceMiles": 14.3,
    "daysOnEdmunds": 6,
    "listedAt": "2026-07-24T07:00:00.000Z",
    "firstPublishedAt": "2026-09-02T01:47:22.000Z",
    "sellersComments": "Only 15,667 Miles! Boasts 20 Highway MPG and 12 City MPG! Carfax One-Owner Vehicle. This Rolls-Royce Cullinan boasts a Twin Turbo Premium Unleaded V-1...",
    "photoCount": 33,
    "features": ["AWD/4WD", "Bluetooth", "Navigation", "Leather Seats", "Sunroof/Moonroof"],
    "scrapedAt": "2026-09-08T04:55:50.065Z",
    "error": null
  },
  {
    "imageUrl": "https://www.edmunds.com/assets/m2/for-sale/40-JM1DKDC76K0414463/img-1-600x400.jpg",
    "title": "2019 Mazda CX-3 Touring",
    "url": "https://www.edmunds.com/mazda/cx-3/2019/vin/JM1DKDC76K0414463/",
    "vin": "JM1DKDC76K0414463",
    "listingId": "13af962ed186fbf329231d443aafa187",
    "stockNumber": "K0414463B",
    "listingType": "Used",
    "make": "Mazda",
    "model": "CX-3",
    "year": 2019,
    "trim": "Touring",
    "styleName": "Touring 4dr SUV (2.0L 4cyl 6A)",
    "bodyType": "SUV",
    "price": 16685,
    "currency": "USD",
    "advertisedPrice": 16685,
    "priceDrop": -300,
    "marketValue": 21067,
    "dealRating": "Great",
    "savings": 4382,
    "savingsPercent": 20.8,
    "monthlyPayment": 288.68,
    "mileage": 22225,
    "exteriorColor": "Snowflake White Pearl Mica",
    "interiorColor": "Black leatherette/cloth",
    "drivetrain": "front wheel drive",
    "transmission": "Automatic",
    "engine": "2.0L 4-cylinder gas",
    "horsepower": 148,
    "fuelType": "regular unleaded",
    "mpgCity": 29,
    "mpgHighway": 34,
    "mpgCombined": 31,
    "seats": 5,
    "accidents": 0,
    "owners": 4,
    "usageType": "Personal Use",
    "cleanTitle": "Yes",
    "dealerName": "California Motors Direct Montclair",
    "dealerGroup": "LA Auto Exchange",
    "dealerStreet": "10385 Central Ave",
    "dealerCity": "Montclair",
    "dealerState": "CA",
    "dealerZip": "91763",
    "dealerPhone": "909-895-4459",
    "dealerRating": 3,
    "dealerReviewCount": 2,
    "distanceMiles": 41.5,
    "daysOnEdmunds": 39,
    "listedAt": "2026-07-27T07:00:00.000Z",
    "firstPublishedAt": "2026-07-31T16:32:56.000Z",
    "sellersComments": "Experience refined driving in this 2019 Mazda CX-3 Touring, featuring a premium BOSE 7-Speaker Audio Sound System and a Power Sliding-Glass Moonroof f...",
    "photoCount": 23,
    "features": ["Back-up camera", "Bluetooth", "Sunroof/Moonroof", "Keyless Entry/Start", "Blind Spot Monitoring"],
    "scrapedAt": "2026-09-08T04:55:50.065Z",
    "error": null
  },
  {
    "imageUrl": "https://www.edmunds.com/assets/m2/for-sale/4e-W1Y4KBHY4ST196362/img-1-600x400.jpg",
    "title": "2025 Mercedes-Benz Sprinter 2500 144\" WB Cargo",
    "url": "https://www.edmunds.com/mercedes-benz/sprinter/2025/vin/W1Y4KBHY4ST196362/",
    "vin": "W1Y4KBHY4ST196362",
    "listingId": "7450e127f0e95c781b95b75dd51c25eb",
    "stockNumber": "4L1027",
    "listingType": "Used",
    "make": "Mercedes-Benz",
    "model": "Sprinter",
    "year": 2025,
    "trim": "2500 144\" WB Cargo",
    "styleName": "2500 144\" WB Cargo 3dr Van (2.0L 4cyl Turbodiesel 9A)",
    "bodyType": "Full Size Van",
    "price": 42995,
    "currency": "USD",
    "advertisedPrice": 42995,
    "priceDrop": -500,
    "marketValue": 62057,
    "dealRating": "Great",
    "savings": 19062,
    "savingsPercent": 30.7,
    "monthlyPayment": 743.89,
    "mileage": 21600,
    "exteriorColor": "Arctic White",
    "interiorColor": "Maturin Black cloth",
    "drivetrain": "rear wheel drive",
    "transmission": "Automatic",
    "engine": "2.0L 4-cylinder diesel",
    "horsepower": 170,
    "fuelType": "diesel",
    "mpgCity": "Not Disclosed",
    "mpgHighway": "Not Disclosed",
    "mpgCombined": "Not Disclosed",
    "seats": 2,
    "accidents": 0,
    "owners": 1,
    "usageType": "Personal Use",
    "cleanTitle": "Yes",
    "dealerName": "Mercedes-Benz of Valencia",
    "dealerGroup": "Trophy Automotive Group",
    "dealerStreet": "23355 Valencia Blvd",
    "dealerCity": "Valencia",
    "dealerState": "CA",
    "dealerZip": "91355",
    "dealerPhone": "661-724-4385",
    "dealerRating": "Not Disclosed",
    "dealerReviewCount": "Not Disclosed",
    "distanceMiles": 23.8,
    "daysOnEdmunds": 46,
    "listedAt": "2026-07-23T07:00:00.000Z",
    "firstPublishedAt": "2026-07-24T09:39:43.000Z",
    "sellersComments": "Acoustic Package, Active Distance Assist DISTRONIC®, Active Lane Keeping Assist, Blind Spot Assist, Cargo Protection Package, Digital Rearview Mirror,...",
    "photoCount": 30,
    "features": ["Back-up camera", "Bluetooth", "Tire Pressure Warning", "USB Inputs", "Stability Control"],
    "scrapedAt": "2026-09-08T04:55:50.065Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

| | What you get |
|---|---|
| **Edmunds' own numbers** | The deal rating, market value estimate, savings and monthly payment come from the data Edmunds renders, not from a formula of ours. |
| **Location that works** | Edmunds ignores a `zip` parameter in the URL and centres on the visitor's IP. This Actor sends the location the way the site does, so ZIP 90210 really returns Los Angeles cars and ZIP 10001 returns New York cars. |
| **56 columns, one shape** | Every row has the same keys in the same order, so CSV imports, joins and Excel filters behave. |
| **No blanks, no nulls** | A value Edmunds does not carry for a car is `Not Disclosed`, never an empty cell. |
| **Honest ceilings** | The Actor reports how many listings match the search and how many pages Edmunds serves, and stops at that page instead of looping. |
| **Fast and cheap** | HTTP only, 1 GB of memory, about 21 listings per second per search. No browser to warm up. |

### 📈 How it compares to alternatives

Other Edmunds actors on the Store take a URL and return a handful of card fields, or rely on a headless browser that costs several times more per run. The public surface has one hard limit for everyone, and this Actor states it.

| Feature | This Actor | Typical Edmunds scrapers | By hand |
|---|---|---|---|
| Fields per listing | 56 | 10 to 25 | Whatever you copy |
| Market value, deal rating, savings | Yes | Rarely | Visible one car at a time |
| ZIP code and radius that Edmunds honours | Yes, via the site's own location mechanism | Often ignored (results follow the proxy IP) | Yes |
| Accident count, owners, usage type, clean title | Yes | Rarely | Behind a click |
| Dealer phone, address, rating, distance | Yes | Partly | Behind a click |
| Listings per search URL | Up to 9,996 (476 pages), 630 on make and model pages | Same public limit | 21 per page |
| Duplicate VINs across pages | Removed | Varies | Manual |
| Memory and speed | 1 GB, about 3 s for the first page | 2 to 4 GB with a browser | Hours |

### 🚀 How to use

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Edmunds Used Cars Scraper](https://apify.com/parseforge/edmunds-used-cars-scraper?fpr=vmoqkp).
3. Paste one or more Edmunds search URLs (or keep the default used and certified search), set the ZIP code and radius, choose Max Items and click **Start**.
4. Download the dataset as CSV, Excel, JSON or XML from the **Storage** tab, or read it through the API.

A first run:

```json
{
  "startUrls": [{ "url": "https://www.edmunds.com/inventory/srp.html?inventorytype=used%2Ccpo&radius=100" }],
  "maxItems": 10,
  "zipCode": "90210",
  "radius": "url"
}
```

To scrape a specific model, build the search on edmunds.com and paste its URL, for example `https://www.edmunds.com/inventory/srp.html?inventorytype=used%2Ccpo&make=toyota&model=toyota%7Ccamry`, or use the model page `https://www.edmunds.com/used-toyota-camry/`.

Free-plan runs return up to 10 listings as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 listings per run.

### 💼 Business use cases

**🏷️ Competitive prices for dealerships.** A dealer group runs the Actor every morning for the ten models it stocks within 50 miles, sorts by `savingsPercent` and `priceDrop`, and re-prices the cars that have slipped below the market.

**📉 Days-on-market analysis.** An inventory manager tracks `daysOnEdmunds` and `priceDrop` for a make and model across several ZIP codes to learn how long comparable cars sit before their price moves.

**📞 Dealer lead lists.** A marketing team scrapes certified pre-owned inventory for a brand in a state, groups by `dealerName`, `dealerPhone` and `dealerGroup`, and builds a list of dealers carrying the models its product targets.

**💳 Lending and residual value.** An auto lender collects price, mileage, year and `marketValue` for thousands of listings to fit depreciation curves by segment and check its own valuations.

### 🔌 Automating Edmunds Used Cars Scraper

- **Make and Zapier:** run the Actor on a schedule and append new listings to Google Sheets or Airtable.
- **Slack:** post a message when a run returns a listing with `dealRating: Great` and a `priceDrop` below zero for a model you watch.
- **Airbyte:** sync the dataset into BigQuery, Snowflake or Postgres for price dashboards.
- **GitHub Actions:** refresh a market snapshot every night and commit the CSV.
- **Google Drive:** save each run as an Excel file in a shared folder.

Every integration starts from the [Apify API](https://docs.apify.com/api/v2) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### 🌟 Beyond business use cases

- **Research:** collect listings for the same model across ten metro areas to study regional price differences.
- **Personal:** watch the cars that match your next purchase within 25 miles and get notified when one drops in price.
- **Non-profit:** a community credit union checks whether the cars its members are quoted sit above the Edmunds market value.
- **Experimentation:** feed `sellersComments` and `features` into an LLM to prototype a listing quality score.

### 🤖 Ask an AI assistant about this scraper

Give an AI agent live access to Edmunds listings through the Model Context Protocol:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/edmunds-used-cars-scraper"
```

Then ask in plain language, for example "Find certified Toyota Camrys within 25 miles of 10001 with a Great deal rating and sort them by savings".

### ❓ Frequently Asked Questions

#### 🔗 Which Edmunds URLs can I paste?

Any inventory search results URL (`https://www.edmunds.com/inventory/srp.html?...`) with the filters you set on the site, and any make and model page such as `https://www.edmunds.com/used-honda-civic/`. Editorial pages such as `https://www.edmunds.com/used-cars/` carry no inventory and produce an error row.

#### 📍 Why does the ZIP code matter?

Edmunds centres every search on the visitor's location and ignores a `zip` parameter in the URL. The Actor sends the ZIP code through the same mechanism the site uses, so the listings, distances and dealer set are the ones a shopper in that ZIP code would see. Leave it empty and the results follow the location of the proxy IP.

#### 📏 Which radius values work?

10, 25, 50, 75, 100, 200 and 500 miles, exactly the options Edmunds offers. "Keep the URL setting" leaves the radius in your URL untouched (Edmunds defaults to 100 miles).

#### 📦 How many listings can I collect per search?

Edmunds serves 21 listings per page and at most 476 pages for a search results URL, so up to 9,996 listings per URL. Make and model pages stop at 30 pages (630 listings). Use several URLs or narrower filters (make, model, ZIP code, radius) to go beyond that; the run log prints the total that matched and the page ceiling.

#### 🔑 Do I need an API key or an Edmunds account?

No. Everything comes from the public search results pages.

#### 🛡️ Do I need a proxy?

Yes. Edmunds is protected by Akamai and blocks datacenter IPs, so the Actor uses Apify residential proxies in the United States by default. Keep the default unless you have your own residential proxy.

#### ⭐ What is `dealRating`?

Edmunds' own label (Great, Good, Fair, and so on) comparing the list price with its market value estimate for that car in that area. `marketValue`, `savings` and `savingsPercent` are the numbers behind that label as Edmunds shows them.

#### 🖼️ Why is `imageUrl` sometimes `Not Disclosed`?

Some listings have no dealer photos. When Edmunds shows a stock image instead, the Actor reports `Not Disclosed` and `photoCount: 0` rather than a placeholder.

#### ⚠️ What do `Not Disclosed` values mean?

Edmunds does not carry that value for that car: for example MPG on commercial vans, a dealer rating for dealers without reviews, or the owner count when the history report is missing. The column is still present so every row has the same shape.

#### 🔁 Can the same car appear twice?

No. Listings are de-duplicated on VIN across all pages and all start URLs in a run.

#### ⏰ Can I run this on a schedule?

Yes. Use the Apify scheduler to run it hourly, daily or weekly, and add a webhook or an integration to push new rows downstream.

#### 📄 What output formats are supported?

JSON, CSV, Excel, XML, HTML table and RSS, from the Storage tab or through the API.

#### ❌ What happens when Edmunds blocks a request?

The Actor retries up to four times, switching to a fresh proxy session each time. If a page still does not answer, it writes one error row with the URL and continues; error rows are never charged.

### 🔌 Integrate with any app

The dataset is available through the Apify API the moment the run finishes. Use the `run-sync-get-dataset-items` endpoint for one-shot calls, webhooks to trigger downstream jobs, or the Make, Zapier, Airbyte and LangChain integrations listed on the Actor page.

### 🔗 Recommended Actors

- [Autolist Scraper](https://apify.com/parseforge/autolist-scraper?fpr=vmoqkp)
- [Healthgrades Doctor & Provider Scraper](https://apify.com/parseforge/healthgrades-scraper?fpr=vmoqkp)
- [Website Content Crawler](https://apify.com/parseforge/website-content-crawler?fpr=vmoqkp)
- [USAspending Awards Scraper](https://apify.com/parseforge/usaspending-scraper?fpr=vmoqkp)

***

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA) with your run ID, your input and what you expected.

> **⚠️ Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Edmunds.com, Inc. It collects only publicly available data. You are responsible for using the data in compliance with Edmunds' terms of use and applicable data-protection laws.

# Actor input Schema

## `startUrls` (type: `array`):

Edmunds used-car inventory pages to read: a search results URL (https://www.edmunds.com/inventory/srp.html?...) with any filters you set on the site, or a make and model page such as https://www.edmunds.com/used-toyota-camry/. Each URL is paginated automatically (21 listings per page, up to 9,996 per search).

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `zipCode` (type: `string`):

Five-digit U.S. ZIP code the search is centred on. Leave empty to let Edmunds pick the location of the proxy IP.

## `radius` (type: `string`):

Distance from the ZIP code in miles. "Keep the URL setting" leaves the radius parameter of each start URL untouched (Edmunds defaults to 100 miles).

## `proxyConfiguration` (type: `object`):

Edmunds is protected by Akamai and blocks datacenter IPs, so residential U.S. proxies are on by default. Keep them on unless you route the run through your own residential proxy.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.edmunds.com/inventory/srp.html?inventorytype=used%2Ccpo&radius=100"
    }
  ],
  "maxItems": 10,
  "zipCode": "90210",
  "radius": "url",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields: photo, title, price, deal rating, mileage, dealer, location

## `fullData` (type: `string`):

Complete dataset with all 56 fields per listing

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.edmunds.com/inventory/srp.html?inventorytype=used%2Ccpo&radius=100"
        }
    ],
    "maxItems": 10,
    "zipCode": "90210",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/edmunds-used-cars-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.edmunds.com/inventory/srp.html?inventorytype=used%2Ccpo&radius=100" }],
    "maxItems": 10,
    "zipCode": "90210",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/edmunds-used-cars-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.edmunds.com/inventory/srp.html?inventorytype=used%2Ccpo&radius=100"
    }
  ],
  "maxItems": 10,
  "zipCode": "90210",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call parseforge/edmunds-used-cars-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/edmunds-used-cars-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/2zfUuFu6sVcA8IB9i/builds/ZYs5IyyLnTDOXigvc/openapi.json
