# Craigslist Listings Scraper (`piotrv1001/craigslist-listings-scraper`) Actor

The Craigslist Listings Scraper extracts listings from any Craigslist city or all US areas — titles, prices, posting dates, categories, coordinates and photos, plus optional descriptions and attributes, with price and date filters. Ideal for resale research, price tracking and market monitoring.

- **URL**: https://apify.com/piotrv1001/craigslist-listings-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** E-commerce, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 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.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🚀 Craigslist Listings Scraper

Extract listings from Craigslist in any city or across the whole United States. The **Craigslist Listings Scraper** returns every matching post as structured data (title, price, posting date, category, location with coordinates and photos), with the full description and attributes when you need them.

Use it for resale and arbitrage research, local price tracking, car and housing market analysis, or a daily feed of new posts.

### ✨ Features

- 📋 **Complete results**: collects every listing that matches your search, not just the first page.
- 🇺🇸 **Any city or the whole country**: search one or more Craigslist sites (`newyork`, `sfbay`, `chicago`…) or all 400+ US areas at once.
- 🗂️ **All major sections**: for sale (electronics, furniture, cars & trucks, bikes, tickets, free stuff…), housing, jobs, gigs and services.
- 💲 **Price and freshness filters**: minimum/maximum price, posted today, and listings with photos only.
- 📝 **Optional details**: full description plus the listing's attributes (condition, make, odometer, transmission, bedrooms, square footage…).
- 📍 **Exact location**: site, neighbourhood code, latitude and longitude for every listing.

### 🛠️ How It Works

1. **Enter a keyword** (optional) and pick a **category**.
2. **Choose locations**: Craigslist site names such as `newyork` or `sfbay`, or turn on **Search all US areas**.
3. **Set filters and a maximum**, then run. Listings land in the dataset, and the `SUMMARY` record shows how many matched in each location.

### ⚙️ Input

| Field | Description |
|---|---|
| `query` | Search keyword, e.g. `iphone`, `couch`, `toyota tacoma` (leave empty for the whole category) |
| `category` | Section to search, e.g. `sss` all for sale, `cta` cars & trucks, `fua` furniture, `apa` apartments, `jjj` jobs |
| `locations` | Craigslist sites as in the address (`newyork` for newyork.craigslist.org); full Craigslist URLs work too |
| `searchAllUsAreas` | Search every US Craigslist site |
| `maxItems` | Maximum listings in total (default 50) |
| `minPrice` / `maxPrice` | Price range |
| `postedToday` | Only listings posted today |
| `hasImages` | Only listings with photos |
| `includeDetails` | Add the full description and attributes |

Example: used cars between $5,000 and $15,000 in the SF Bay Area, with details:

```json
{
    "category": "cta",
    "locations": ["sfbay"],
    "minPrice": 5000,
    "maxPrice": 15000,
    "maxItems": 200,
    "includeDetails": true
}
```

### 📊 Sample Output Data

```json
[
    {
        "postingId": 7972524429,
        "url": "https://sfbay.craigslist.org/sfc/cto/d/olema-mga-1957-roadster-hardtop-for-sale/7972524429.html",
        "title": "MGA 1957 Roadster hardtop for sale",
        "price": 7500,
        "priceText": "$7,500",
        "currency": "USD",
        "postedAt": "2026-09-25T07:23:58.000Z",
        "category": "cars & trucks - by owner",
        "categoryCode": "cto",
        "site": "sfbay",
        "subarea": "sfc",
        "latitude": 38.0467,
        "longitude": -122.7699,
        "images": [
            "https://images.craigslist.org/00909_60E8fdZIINW_0dp0t2_600x450.jpg",
            "https://images.craigslist.org/00n0n_j1OeBWv6zZ9_0CI0t2_600x450.jpg"
        ],
        "description": "Hello selling a 1957 MGA Roadster and hardtop needs complete restoring have parts and extra must sell\nno time to restore car..",
        "attributes": {
            "1957 mga roadster": true,
            "fuel": "gas",
            "odometer": "8,888,888",
            "title status": "clean",
            "transmission": "manual"
        }
    }
]
```

`description` and `attributes` appear only when **Include description and attributes** is on.

### 💰 Pricing

- **$0.001 per listing** ($1 per 1,000 listings).
- **+$0.001 per listing** when **Include description and attributes** is on.

### ⚠️ Good to know

- Craigslist shows posts until they expire (typically 30–45 days), so results cover live listings only.
- A single search returns at most 10,000 listings per location. For very large searches (e.g. all of New York for sale), narrow by keyword, category or price range; the log tells you when this happens.
- With **Search all US areas**, listings are collected location by location. Set **Maximum listings** high enough to cover the whole country.
- Seller phone numbers and emails are not shown publicly by Craigslist and are not included.

Find the deals, track the prices and monitor new posts with the **Craigslist Listings Scraper**! 🚀

# Actor input Schema

## `query` (type: `string`):

What to search for, e.g. "iphone", "couch" or "toyota tacoma". Leave empty to get every listing in the category.

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

Craigslist section to search.

## `locations` (type: `array`):

Craigslist sites to search, as in the address: "newyork" for newyork.craigslist.org, "sfbay", "chicago", "losangeles"… Full craigslist URLs work too.

## `searchAllUsAreas` (type: `boolean`):

Search every Craigslist site in the United States (400+). Listings are collected location by location, so set "Maximum listings" high enough to cover the whole country.

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

Stop after this many listings in total.

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

Only listings priced at least this much.

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

Only listings priced at most this much.

## `postedToday` (type: `boolean`):

Only listings posted today, handy for daily monitoring.

## `hasImages` (type: `boolean`):

Only listings with photos.

## `includeDetails` (type: `boolean`):

Open each listing to add its full description and attributes (condition, make, odometer, bedrooms…). Charged as an extra event per listing.

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

The default Apify Proxy works well.

## Actor input object example

```json
{
  "query": "iphone",
  "category": "sss",
  "locations": [
    "newyork"
  ],
  "searchAllUsAreas": false,
  "maxItems": 50,
  "postedToday": false,
  "hasImages": false,
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

No description

## `summary` (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 = {
    "query": "iphone",
    "locations": [
        "newyork"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/craigslist-listings-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 = {
    "query": "iphone",
    "locations": ["newyork"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/craigslist-listings-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 '{
  "query": "iphone",
  "locations": [
    "newyork"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call piotrv1001/craigslist-listings-scraper --silent --output-dataset

```

## MCP server setup

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