# Classic.com Cars Scraper (`shahidirfan/classic-com-cars-scraper`) Actor

Scrape classic & vintage car listings from Classic.com. Extract prices, specifications, descriptions, photos & seller details. Ideal for automotive market research, price tracking, inventory analysis & ML training datasets. Structured, production-ready data.

- **URL**: https://apify.com/shahidirfan/classic-com-cars-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Automation, Developer tools, Other
- **Stats:** 2 total users, 2 monthly users, 95.5% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

### What does Classic Cars Scraper do?

Classic Cars Scraper collects structured vehicle listing and market data from Classic.com, the classic car marketplace. Run it with a Classic.com search URL or a keyword such as `porsche 911`, and it returns prices, locations, sellers, mileage, transmission, image URLs, and listing status for classic, collectible, and enthusiast cars. The output works for market research, pricing analysis, dealer lead monitoring, and inventory watchlists.

The scraper follows pagination automatically and can save up to the number of results you set. You choose the result type, so a single run can collect individual listings, classic car market pages, or both.

### Why use Classic Cars Scraper?

- **Structured classic car data without manual copy-paste** - Turn Classic.com search results into a clean dataset with vehicle attributes ready for analysis.
- **Automation-ready output** - Export results to JSON, CSV, Excel, or XML, or send them to Google Sheets, Airtable, webhooks, Make, or Zapier.
- **Price and market monitoring** - Schedule recurring runs for target models and track price movement, seller types, and vehicle condition signals over time.
- **Lead generation from dealers and auction houses** - Collect seller names, locations, and listing links to support outreach and inventory checks.
- **Works from a URL or a keyword** - Paste a filtered Classic.com search URL, or simply type a model name and let the scraper build the search.

### What data can you extract from Classic.com?

| Field | Description |
|-------|-------------|
| `title` | Vehicle listing title, such as `2018 Porsche 911 GT2 RS` |
| `url` | Direct vehicle detail URL on Classic.com |
| `listing_url` | Seller or auction house listing URL |
| `seller` | Dealer, auction house, or private seller name |
| `price` | Displayed listing price |
| `location` | Vehicle location such as city, county, state, and country |
| `image_url` | Primary vehicle image URL |
| `image_urls` | All vehicle image URLs exposed on the result page |
| `photo_count` | Number of photos displayed for the listing |
| `lot_date` | Displayed listing or lot date |
| `condition` | Condition category such as original, restored, or modified |
| `mileage` | Displayed mileage such as `44k mi` |
| `transmission` | Transmission such as automatic, manual, or semi-automatic |
| `drive_side` | Left-hand or right-hand drive |
| `listing_status` | Sale status such as for sale, sold, or pending |
| `sale_type` | Sale format such as fixed price or auction |
| `source_page_url` | Search result page where the listing was found |

Market result records add `market_id`, `record_type`, `for_sale_count`, and `listings_count`.

### How to use Classic Cars Scraper

1. Open the Actor on Apify Store.
2. Enter a Classic.com search URL or a search keyword.
3. Set `results_wanted` and `max_pages` for coverage.
4. Choose a result type: `listings`, `markets`, or `all`.
5. Run the Actor.
6. Download the dataset or connect it to your workflow.

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrl` | String | No | - | Classic.com search URL. Takes priority over `keyword`. |
| `startUrls` | Array | No | `[]` | Multiple Classic.com URLs to process in one run. |
| `keyword` | String | No | - | Search keyword such as `ferrari dino`. Used when no start URL is provided. |
| `results_wanted` | Integer | No | `20` | Maximum number of results to save. |
| `max_pages` | Integer | No | `5` | Maximum number of result pages to fetch. |
| `result_type` | String | No | `listings` | Result type to request: `listings`, `markets`, or `all`. If the start URL already contains a result type, the URL is respected. |
| `proxyConfiguration` | Object | No | - | Proxy settings for reliable collection at larger scale. |

### Usage Examples

#### Collect From a Classic.com Search URL

Collect listings from a standard Classic.com search page:

```json
{
  "startUrl": "https://www.classic.com/search?result_type=listings",
  "results_wanted": 20,
  "max_pages": 3
}
```

#### Search by Keyword

Run a keyword search when you do not have a saved URL:

```json
{
  "keyword": "porsche 911",
  "results_wanted": 50,
  "max_pages": 5
}
```

#### Collect Market Results

Gather classic car market pages instead of individual listings:

```json
{
  "keyword": "corvette",
  "result_type": "markets",
  "results_wanted": 20,
  "max_pages": 1
}
```

#### Combine Listings and Markets

Request both record types in one run:

```json
{
  "keyword": "ferrari dino",
  "result_type": "all",
  "results_wanted": 100,
  "max_pages": 6
}
```

### Sample Output

Each dataset item is one classic car listing:

```json
{
  "listing_id": "1493745",
  "title": "2013 Chevrolet Corvette",
  "url": "https://www.classic.com/veh/2013-chevrolet-corvette-1g1ye3dw8d5101163-Wxob3Qn/",
  "listing_url": "https://www.classic.com/s/grahams-auto-truck-clinic-mWjvvbW/lots/2013-chevrolet-corvette-4yqA9X4",
  "seller": "Graham's Auto Truck Clinic",
  "price": "$27,995*",
  "location": "Dane County, Wisconsin, USA",
  "image_url": "https://images.classic.com/vehicles/example.webp?ar=16%3A9&fit=crop&h=338&w=600",
  "image_urls": [
    "https://images.classic.com/vehicles/example.webp?ar=16%3A9&fit=crop&h=338&w=600"
  ],
  "photo_count": 61,
  "result_page_image_count": 1,
  "missing_gallery_image_count": 60,
  "lot_date": "Jul 11, 2026",
  "condition": "Original & Highly Original",
  "mileage": "44k mi",
  "transmission": "Automatic",
  "drive_side": "LHD",
  "listing_status": "For Sale",
  "sale_type": "Fixed-price",
  "source_page_url": "https://www.classic.com/search?result_type=listings"
}
```

### Tips for Best Results

- Use specific model and year keywords for tighter datasets. `porsche 911` returns more listings than `porsche`.
- Paste a filtered Classic.com search URL when you need exact search filters from the site.
- Start with `results_wanted` between 20 and 50 for quick test runs.
- Increase `max_pages` only when you need broader coverage across more result pages.
- Download JSON for integrations, or CSV and Excel for price comparison and reporting.
- Some listings do not display every attribute. Empty fields are removed so the dataset stays clean.

### Integrations

- **Google Sheets** - Review classic car listings in a spreadsheet.
- **Airtable** - Build a searchable vehicle database.
- **Slack** - Send new listing updates to a channel.
- **Webhooks** - Forward records to your own systems after each run.
- **Make** - Create automated price and inventory workflows.
- **Zapier** - Trigger follow-up actions on new records.

#### Export Formats

- **JSON** - For developers and data pipelines.
- **CSV** - For spreadsheet analysis.
- **Excel** - For business reporting.
- **XML** - For legacy systems.

### Frequently Asked Questions

#### Can I use a Classic.com URL instead of a keyword?

Yes. `startUrl` takes priority over `keyword`, so you can paste a filtered Classic.com search URL directly and skip keyword entry.

#### Can I export Classic.com data to CSV or Excel?

Yes. Apify datasets can be downloaded as JSON, CSV, Excel, XML, and other supported formats from the dataset page or through the API.

#### Does the scraper handle pagination?

Yes. `max_pages` controls how many result pages are fetched, and results are deduplicated across pages.

#### Can I run the scraper on a schedule?

Yes. Use Apify schedules to run recurring searches for selected models or market segments and keep a fresh feed of listings.

#### Why are some fields missing from a record?

Some Classic.com listings do not display every attribute. Empty values are removed to keep the dataset clean, so a missing field usually means the source did not publish it.

#### How many listings can I collect?

Set `results_wanted` to the number you need. Larger runs may require more pages and proxy support.

#### Is it legal to scrape Classic.com?

Scraping public web data can be legal, but you are responsible for complying with applicable laws, the website terms of service, and privacy rules. Use the data responsibly and respect rate limits.

### Related Actors

Looking for classic and collector car data from other vehicle marketplaces? These related Actors from the same developer cover broader automotive inventory:

- [Cars.com Scraper](https://apify.com/shahidirfan/cars-com-scraper) - Collect new and used vehicle listings, pricing, mileage, VINs, and dealer details from Cars.com.
- [Autotrader.ca Scraper](https://apify.com/shahidirfan/autotrader-scraper) - Extract Canadian vehicle listings with specs, prices, and seller information from Autotrader Canada.
- [AutoScout24 Scraper](https://apify.com/shahidirfan/autoscout24-scraper) - Gather used and new car listings across European markets from AutoScout24.

### Support

For issues, feature requests, or custom Actor work, use the Issues tab on the Actor page or contact the developer through Apify Console.

### Legal Notice

This Actor is designed for legitimate data collection from publicly available sources. Users are responsible for using the data responsibly and complying with applicable laws and website terms.

# Actor input Schema

## `startUrl` (type: `string`):

Classic.com search URL to scrape. This takes priority over Keyword.

## `keyword` (type: `string`):

Search keyword to use when Start URL is empty.

## `results_wanted` (type: `integer`):

Maximum number of listings to collect.

## `max_pages` (type: `integer`):

Maximum number of search result pages to fetch.

## `result_type` (type: `string`):

Classic.com result type.

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

Use Apify Proxy if requests are challenged or rate limited.

## Actor input object example

```json
{
  "startUrl": "https://www.classic.com/search?result_type=listings",
  "keyword": "porsche 911",
  "results_wanted": 20,
  "max_pages": 3,
  "result_type": "listings",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "startUrl": "https://www.classic.com/search?result_type=listings",
    "keyword": "porsche 911",
    "results_wanted": 20,
    "max_pages": 3,
    "result_type": "listings"
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/classic-com-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 = {
    "startUrl": "https://www.classic.com/search?result_type=listings",
    "keyword": "porsche 911",
    "results_wanted": 20,
    "max_pages": 3,
    "result_type": "listings",
}

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

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

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

```

## CLI example

```bash
echo '{
  "startUrl": "https://www.classic.com/search?result_type=listings",
  "keyword": "porsche 911",
  "results_wanted": 20,
  "max_pages": 3,
  "result_type": "listings"
}' |
apify call shahidirfan/classic-com-cars-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=shahidirfan/classic-com-cars-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/CMHOOaKoDSHOXXAWf/builds/oj99pWBjQBizfcefL/openapi.json
