# Craigslist Scraper: Search URLs, Cars, Housing & Deals (`scraperpro/craigslist-scraper`) Actor

Extract Craigslist listings, vehicle VINs, seller phones/emails, apartments, and high-res photos across 50+ US metros. Zero compute fees with Pay-Per-Event billing.

- **URL**: https://apify.com/scraperpro/craigslist-scraper.md
- **Developed by:** [ScraperPro](https://apify.com/scraperpro) (community)
- **Categories:** E-commerce, Lead generation, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 listings

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

## 🏷️ Craigslist Scraper: Search URLs, Cars, Housing & Deals

Supercharge your lead generation, automotive arbitrage, real estate intelligence, and local commerce with the ultimate **Craigslist Scraper and Search API**. Extract verified seller contacts (phone numbers and emails), car VINs and specs, apartment details, prices, exact map coordinates, and full-resolution photo galleries across any US metro area in seconds.

Simply paste any **Craigslist search URL**, choose from 50+ top US metro areas, or enter your target keywords—no browser automation setup, maintenance, or IP bans!

***

### 🌟 Why This Craigslist Scraper Outperforms the Rest

- **📞 Direct-Contact Extraction for Lead Generation**: Automatically parses real **phone numbers** and **email addresses** directly from the listing description. Filter by un-obfuscated contacts for outbound sales, automotive buying, or real estate wholesaling.
- **⚡ 10x Faster SAPI Batch Discovery**: Powered by Craigslist internal JSON feed architecture, retrieving thousands of matching postings in seconds without bulky browser overhead or JavaScript execution delays.
- **🚗 Deep Automotive Intelligence**: Extract vehicle year, make, model, trim, odometer mileage, full **17-character VIN**, transmission, fuel type, and clean/salvage title status directly from car and truck postings.
- **🏠 Comprehensive Real Estate & Housing Data**: Scrape apartments, homes for rent, commercial listings, and vacation rentals with **bedrooms**, **bathrooms**, **square footage (sqft)**, laundry, and parking details.
- **🏙️ 50+ Top US Metros Dropdown**: Effortlessly select from 50+ major US metropolitan areas (New York, Los Angeles, SF Bay Area, Chicago, Miami, Dallas, Seattle, Atlanta, etc.), or paste any custom Craigslist subdomain.
- **🔗 Direct Search & Listing URL Support**: Simply copy and paste any Craigslist search URL, category page, or direct listing URL from your browser. All filters, keywords, metros, and price bounds are automatically parsed and applied.
- **👤 Owner vs. Dealer Classification**: Instantly distinguish between private party sellers (`for sale by owner`) and commercial dealerships before reaching out.
- **📸 Full-Resolution Photo Galleries**: Extract up to 24 high-resolution photo URLs (1200x900) per post for visual inspection, computer vision training, or catalog syndication.
- **🛡️ Chrome 124 TLS Impersonation & Proxy Rotation**: Integrated with Apify residential proxies and genuine browser TLS fingerprints to prevent 429/403 blocks.
- **💰 100% Free Server Compute**: Backed by Pay-Per-Event (PPE) monetization—you pay **$0 for server compute and RAM**, and are only billed for verified listings saved to your dataset.
- **⚙️ Multi-Format Data Export**: Download clean, structured data directly to **Excel, CSV, JSON**, or integrate seamlessly with Python, Node.js, Webhooks, Google Sheets, or Zapier.

***

### 🎯 Popular Use Cases

- **📞 Sales Lead Generation & Wholesale Outbound**: Capture live seller phone numbers and emails for cars, equipment, real estate, and professional services for automated outreach.
- **🚙 Automotive Flippers & Dealerships**: Track undervalued cars, trucks, and motorcycles as soon as they are listed. Filter by price, private owner status, and mileage to find profitable flips before anyone else.
- **🏠 Real Estate, Rentals & Housing Intelligence**: Scrape apartments, houses for rent, commercial real estate, and vacation properties with location coordinates, bedroom counts, and square footage.
- **📦 E-commerce & Resale Arbitrage**: Source discounted electronics, smartphones, power tools, musical instruments, and vintage collectibles to resell on eBay, Amazon, Mercari, or Facebook Marketplace.
- **🛋️ Moving Sales & Estate Liquidations**: Monitor neighborhood garage sales, estate liquidations, and deep discounts on furniture and appliances.
- **💼 Lead Generation & Service Contractor Sourcing**: Discover local service providers, home contractors, freelancers, and gig workers across metropolitan regions.

***

### 🔗 Supported URL Formats & Examples

You can paste URLs directly into the `searchUrl` or `startUrls` input fields:

| URL Type | Example URL | What Gets Extracted |
| :--- | :--- | :--- |
| **Search with Filters** | `https://losangeles.craigslist.org/search/cta?query=tacoma&min_price=5000&max_price=20000` | Keyword, category, price bounds, and metro are auto-applied |
| **Filtered by Owner** | `https://sfbay.craigslist.org/search/cto?query=civic` | Auto-detects Cars & Trucks by Owner (`cto`) |
| **Category Browsing** | `https://chicago.craigslist.org/search/sss` | Automatically scrapes all items in the For Sale category |
| **Apartments / Housing** | `https://newyork.craigslist.org/search/apa?min_price=2000&max_price=3500` | Rental housing with beds, baths, sqft, and location details |
| **Paginated Search URL** | `https://miami.craigslist.org/search/cta?s=120` | Starts scraping from result offset 120 |
| **Modern Direct Listing** | `https://www.craigslist.org/view/d/santa-monica-2015-nissan-nv2500/7782194820` | Deep detail extraction for that exact listing |
| **Legacy Direct Listing** | `https://losangeles.craigslist.org/wst/cto/d/culver-city-2018-toyota-camry/7782194820.html` | Resolves canonical listing and extracts all attributes |

***

### 🔄 Pagination & High-Volume Sourcing

Unlike traditional scrapers that slowly click through paginated HTML pages, this Actor utilizes a high-efficiency **two-step query engine**:

1. **Query Initialization**: Analyzes your search filters, resolves the target metro area, and determines total matching results.
2. **Batch Ingestion**: Streams matching results directly from Craigslist server-side cache in batches of hundreds or thousands of postings in seconds.
3. **Offset & Depth Control**: Use the `maxItems` parameter to specify exactly how many results you need (from 1 up to 10,000+). Use `offset` (or paste a URL with `?s=120`) to skip already-scraped listings or resume previous jobs.

***

### 🛡️ Failure Handling & Anti-Blocking Architecture

This Actor is engineered for mission-critical reliability:

- **Automatic Proxy Rotation**: When a request encounters a rate limit (HTTP 429 or 403), the Actor immediately rotates to a fresh residential IP session and retries with exponential backoff.
- **Deleted & Expired Listing Fallback**: If a listing is removed or returns HTTP 404/410 between search discovery and detail fetch, the Actor gracefully falls back to the discovery summary. Every listing with a valid ID is preserved in your dataset and never dropped.
- **Incremental Dataset Flushing**: Data is pushed to your Apify dataset and billed in real-time batches of 10 items. Even if an Actor run is interrupted or aborted, all scraped data up to that second is securely saved in your dataset.

***

### 📥 Input Configuration

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `startUrls` | Array | `[]` | List of Craigslist search, category, or direct listing URLs. |
| `searchUrl` | String | `""` | Single Craigslist search or listing URL. |
| `searchQuery` | String | `""` | Keyword to search for (e.g. `toyota tacoma`, `iphone 15`, `sofa`). |
| `category` | Select | `"cta"` | Category code (e.g., `cta` for cars, `sss` for all for sale, `ela` for electronics, `apa` for housing). |
| `subdomain` | Select | `"losangeles"` | Select from top 50 US metros (Los Angeles, New York, SF Bay, Chicago, etc.) or paste custom URLs. |
| `minPrice` | Integer | `null` | Minimum listing price in USD. |
| `maxPrice` | Integer | `null` | Maximum listing price in USD. |
| `purveyor` | Select | `"all"` | Seller type: `all` (All Sellers), `owner` (By Owner), or `dealer` (By Dealer). |
| `maxItems` | Integer | `50` | Maximum number of listings to extract (1 to 10,000). |
| `offset` | Integer | `0` | Number of initial results to skip for pagination or bookmarking. |
| `scrapeDetails`| Boolean | `true` | When `true`, fetches full listing pages for complete vehicle specs, VINs, phone/email contacts, descriptions, and full photo galleries. |
| `maxConcurrency`| Integer | `5` | Maximum number of parallel detail page requests. |
| `proxyConfiguration`| Object | Residential | Apify proxy configuration (residential proxies recommended). |

***

### 📤 Sample Output Data

Each result is delivered in clean, structured JSON ready for analysis:

```json
{
  "listingId": "7782194820",
  "url": "https://www.craigslist.org/view/d/santa-monica-2015-nissan-nv2500-high/7782194820",
  "title": "2015 Nissan NV2500 High Roof Cargo Van",
  "price": 18500,
  "condition": "excellent",
  "description": "Clean 2015 Nissan NV2500 High Roof van. V8 5.6L engine, automatic transmission, cold A/C. Call or text me at (310) 555-1234 or email seller@gmail.com for questions. Clean title in hand.",
  "postDate": "2026-09-13T18:42:15-0700",
  "city": "Santa Monica",
  "state": "CA",
  "zipCode": "90401",
  "latitude": 34.0195,
  "longitude": -118.4912,
  "isDealer": false,
  "contactObfuscated": false,
  "phoneNumbers": [
    "(310) 555-1234"
  ],
  "emails": [
    "seller@gmail.com"
  ],
  "isVehicle": true,
  "vehicleYear": 2015,
  "vehicleMake": "Nissan",
  "vehicleModel": "NV2500",
  "vehicleMiles": 112400,
  "vehicleVin": "1N6BF0KY5FN812345",
  "vehicleTransmission": "automatic",
  "vehicleFuelType": "gas",
  "vehicleTitleStatus": "clean",
  "thumbnailUrl": "https://images.craigslist.org/00B0B_1ZBm7qXYZ_600x450.jpg",
  "imageUrls": [
    "https://images.craigslist.org/00B0B_1ZBm7qXYZ_1200x900.jpg",
    "https://images.craigslist.org/00H0H_2CDe8rUVW_1200x900.jpg"
  ]
}
```

***

### 💰 Pay-Per-Event Pricing

This Actor operates under Apify's **Pay-Per-Event (PPE)** monetization model:

- **Free Compute & RAM**: You pay **$0 for server compute**. Server runtime, CPU, and RAM usage are completely free.
- **Pay Only for Results**: You only pay for successfully extracted listings saved to your dataset.
- **Automatic Tier Discounts**: Volume discounts automatically apply based on your Apify subscription tier (Free, Bronze, Silver, Gold, Platinum, Diamond).
- **Fair Guarantee**: If a query returns 0 items (no IDs found), you are not charged for listings.

***

### ❓ Frequently Asked Questions (FAQ)

##### Can I extract phone numbers and emails?

Yes! The Actor automatically scans every listing description for phone numbers and email addresses and includes them in `phoneNumbers[]` and `emails[]`. The `contactObfuscated` field is set to `false` whenever direct contact information is detected.

##### Can I paste a search URL directly from my browser?

Yes! Simply copy any search URL from your browser (e.g. `https://losangeles.craigslist.org/search/cta?query=tacoma&min_price=5000&max_price=20000`) and paste it into `searchUrl` or `startUrls`. The Actor automatically parses the metro subdomain, keyword, category, and price range.

##### How many listings can I scrape in one run?

You can scrape from a single listing up to 10,000+ items per run by adjusting `maxItems`.

##### Does it support housing and real estate attributes?

Yes! For housing and apartments (`apa`, `rea`, `roo`), the Actor extracts `bedrooms`, `bathrooms`, `sqft`, housing type, laundry, and parking details whenever available.

##### Which US metro areas are supported?

All 400+ official Craigslist US metro areas are supported. You can select from the top 50 metros directly in the dropdown or paste any regional URL for smaller cities.

##### How does the Actor handle deleted or sold listings?

Craigslist listings are occasionally deleted between when a search query runs and when the detail page is fetched. This Actor detects HTTP 404/410 status codes gracefully and preserves the discovery record (listing ID, URL, title, price, location) in your dataset rather than dropping it.

# Actor input Schema

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

List of Craigslist search, category, or direct listing URLs (e.g. https://losangeles.craigslist.org/search/cta?query=tacoma).

## `searchUrl` (type: `string`):

Single Craigslist search or direct listing URL to scrape.

## `searchQuery` (type: `string`):

Keyword to search for (e.g., 'honda civic', 'macbook pro', 'leather sofa').

## `category` (type: `string`):

Craigslist category code.

## `subdomain` (type: `string`):

Select from top 50 US metros, or paste any specific Craigslist search URL into "Search or Listing URL" to target any other region worldwide.

## `minPrice` (type: `integer`):

Minimum listing price in USD.

## `maxPrice` (type: `integer`):

Maximum listing price in USD.

## `purveyor` (type: `string`):

Filter by owner or dealer.

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

Maximum number of listings to extract.

## `offset` (type: `integer`):

Number of initial listings to skip for pagination or bookmarking (e.g., 120, 240, 360).

## `scrapeDetails` (type: `boolean`):

When enabled, fetches full listing HTML to extract vehicle attributes (VIN, mileage, year, transmission), full descriptions, exact coordinates, and high-res photos.

## `maxConcurrency` (type: `integer`):

Maximum simultaneous detail requests.

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

Apify residential proxies are recommended to avoid Craigslist rate limits.

## Actor input object example

```json
{
  "startUrls": [],
  "category": "cta",
  "subdomain": "losangeles",
  "purveyor": "all",
  "maxItems": 50,
  "offset": 0,
  "scrapeDetails": true,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Extracted Craigslist listings, vehicle specs, high-resolution photos, prices, and locations.

# 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": [],
    "searchUrl": "",
    "searchQuery": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraperpro/craigslist-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": [],
    "searchUrl": "",
    "searchQuery": "",
}

# Run the Actor and wait for it to finish
run = client.actor("scraperpro/craigslist-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": [],
  "searchUrl": "",
  "searchQuery": ""
}' |
apify call scraperpro/craigslist-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraperpro/craigslist-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/P71neSQ6ED3DD3SUM/builds/7tYC5Aqvoqa6FDfxS/openapi.json
