# Craigslist Scraper (`ivanvs/craigslist-scraper`) Actor

Extract data from classified advertisements on Craigslist. Scrape details from jobs, housing, items wanted, items for sale, services, community service, gigs, events and resumes listed on Craigslist. Download listings data in JSON, XML, Excel, and other versatile

- **URL**: https://apify.com/ivanvs/craigslist-scraper.md
- **Developed by:** [Gen First](https://apify.com/ivanvs) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 1,041 total users, 12 monthly users, 100.0% runs succeeded, 36 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$25.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period. You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

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

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

Scrape data from [Craigslist](https://craigslist.org/) easily with Craigslist Scraper.

### About

Craigslist is an American classified advertisements website with sections devoted to jobs, housing, for sale, items wanted, services, community service, gigs, résumés, and discussion forums.

Craig Newmark began the service in 1995 as an email distribution list to friends, featuring local events in the San Francisco Bay Area. It became a web-based service in 1996 and expanded into other classified categories. It started expanding to other U.S. and Canadian cities in 2000, and now covers 70 countries.

### How to use

In order to use Craigslist Scraper you need to provide URL that you want to scrape.

Currently we are supporting all categories for scraping:

- gigs
- jobs
- housing
- events
- communities
- resumes
- services
- for sale

Only *english* translation of site is currently supported.

Example of valid search pages:

- https://newyork.craigslist.org/search/ggg - this is search page that will be scraped
- https://newyork.craigslist.org/search/jjj#search=1~list~0 - search page for jobs that should be scraped
- https://newyork.craigslist.org/search/hhh#search=1~list~0 - search page for housing that should be scraped
- https://newyork.craigslist.org/search/sss#search=1~list~0 - search page for sale that should be scraped
- https://newyork.craigslist.org/mnh/dmg/7524843421.html - this is post that should be scraped

If you are doing often parsing it is advised to configure `useApifyProxy` to `true`.

```json
{
  "maxConcurrency": 1,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "urls": [
    {
      "url": "https://newyork.craigslist.org/search/ggg"
    }
  ]
}
```

#### Example

If you want to scrape all gigs from New Yourk request would look like this.

```json
{
  "maxConcurrency": 1,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "urls": [
    {
      "url": "https://newyork.craigslist.org/search/ggg"
    }
  ]
}
```

### Data Output Example - gigs

```json
[
  {
    "id": "7536953147",
    "url": "https://newyork.craigslist.org/que/lbg/7536953147.html",
    "title": "Deli grill men",
    "datetime": "2022-09-22T11:13:56-0400",
    "location": "Astoria",
    "category": "gigs",
    "label": "post",
    "price": "$15",
    "longitude": "-73.937645",
    "latitude": "40.759908",
    "mapAccuracy": "5",
    "post": "QR Code Link to This Post\n            \n        \nDeli experience require, Time must be flexible know how to Prepare sandwiches,breakfast, salads.  Must know how to operating slicer and how to sanitize equipment, clean and Organize and Honesty responsible.  A good attitude and desire to learn, must speaking Spanish and fluent in English. Must work in Sunday. stops in person \naround 8am to 2 pm or text me  6467446519 Thank you. 40 hours a week",
    "notices": ["do NOT contact me with unsolicited services or offers"],
    "phoneNumbers": ["909-9909-3322"]
  }
]
```

### Data Output Example - jobs

```json
[
  {
    "id": "7537414885",
    "url": "https://newyork.craigslist.org/mnh/fbh/7537414885.html",
    "title": "**Hiring Floor Managers ($75-90k) at La Pecora Bianca!**",
    "datetime": "2022-09-23T12:42:59-0400",
    "location": "Upper East Side",
    "category": "jobs",
    "label": "post",
    "longitude": "-73.954092",
    "latitude": "40.774656",
    "mapAccuracy": "10",
    "post": "QR Code Link to This Post\n            \n        \nWe are seeking talented Floor Managers to join our opening team!\n\nUNPARALLELED COMPENSATION & BENEFITS:\n-Quality of life: Consistent schedules with consecutive days off\n-$75-90K including base salary and quarterly bonus\n-Bonuses paid every quarter\n-Gold insurance plan with 75% company contribution for all tier plans, including family plans\n-Paid time off\n-Paid parental leave\n-401k with company match up to 6%\n-Complimentary gym membership\n-Quarterly dining stipends\n-Commuter benefits, flexible spending and dependent care accounts\n\nFAST PROMOTION TRACK:\n\nLa Pecora Bianca is the fastest growing Italian restaurant group in NYC, with multiple locations opening in the next 6-12 months. We support long-term tenure through consistent feedback and mentoring, and unlimited opportunities for growth and advancement. High performing managers will have fast track opportunities for AGM roles.\n\nHIGH LEVEL OF RESPONSIBILITY:\n\nThis position will be responsible for tasks including scheduling, beverage purchasing & inventory, daily financial reporting & management, hiring and training of all line level positions, managing and driving service standards at high volume, and developing guest relations.\n\nHAVE YOUR VOICE HEARD:\n\n​​We believe the best ideas can come from within and empower our entire team to shape our company’s direction.\n\nLa Pecora Bianca is a proud Equal Opportunity Employer.",
    "notices": [
      "Principals only. Recruiters, please don't contact this job poster.",
      "do NOT contact us with unsolicited services or offers"
    ],
    "compensation": "$75-$90k salary and bonus, health insurance, paid time off, paid sick time, 401k with company match, quarterly bonus, etc",
    "employmentType": "full-time",
    "jobTitle": "Floor Managers",
    "phoneNumbers": ["909-9909-3322"]
  }
]
```

### Data Output Example - housing

```json
[
  {
    "label": "post",
    "id": "7538275333",
    "title": "Private room/bath for rent",
    "location": "Queens",
    "price": "$750",
    "longitude": "-73.897471",
    "latitude": "40.702576",
    "mapAccuracy": "5",
    "post": "QR Code Link to This Post\n            \n        \nIf you are looking for a safe, quiet, and peaceful place to live this is for you. The room is fully furnished with new TV and Direct TV with movie channels. Tenants have use of the whole house that includes a fully furnished kitchen and living room with leather couches. This is a very beautiful property with large shade trees, pic-nic tables, camp fire pit, a nature trail, privacy fence, and security cameras. Excellent location. Perfect for business professionals or mature college student.\n\nWell-trained pets are preferred.Street parking is also available.\nAll utilities included to the rent.\nIf you really interested. feel free to contact with me. Thanks",
    "notices": ["it's ok to contact this poster with services or other commercial interests"],
    "datetime": "2022-09-25T17:00:54-0400",
    "url": "https://newyork.craigslist.org/que/roo/7538275333.html",
    "category": "housing",
    "pics": [
      "https://images.craigslist.org/00H0H_irQhVngzks3z_04Q04Q_600x450.jpg",
      "https://images.craigslist.org/00e0e_j7aM6nxffhqz_05r07g_600x450.jpg"
    ],
    "amenities": [
      "air conditioning",
      "cats are OK - purrr",
      "dogs are OK - wooof",
      "furnished",
      "apartment",
      "w/d in unit",
      "off-street parking",
      "private bath",
      "private room",
      "rent period: monthly"
    ],
    "availableFrom": "2022-09-27",
    "phoneNumbers": ["909-9909-3322"]
  }
]
```

### Data Output Example - for sale

```json
[
  {
    "id": "7528462760",
    "url": "https://newyork.craigslist.org/lgi/bik/7528462760.html",
    "title": "21 Speed CANNONDALE QUICK 6 Road Bicycle 18 inch frame",
    "datetime": "2022-09-26T16:07:53-0400",
    "location": "Commack/Western Suffolk",
    "category": "for sale",
    "price": "$300",
    "label": "post",
    "longitude": "-73.279900",
    "latitude": "40.843000",
    "mapAccuracy": "22",
    "post": "QR Code Link to This Post\n            \n        \n*****************************************************************************\n21 Speed CANNONDALE QUICK 6 Road Bicycle. 700 x 38C tires, 18 inch frame, Trigger Shifters, water bottle holder\n*******************************************************************************\nInclude your PHONE NUMBER WITH AREA CODE. PHONE NUMBER MUST BE INCLUDED IN YOUR E-MAIL IF YOU WANT A RESPONSE. Responses that do not have a phone # are immediately deleted\n\nBicycles are clean, tuned up and ready to ride\n\nCash only.\n\nI have many other bicycles available. To locate them, in the top search box enter \"COMMACK\" and search.\n\nTo Manhattan/Queens/Brooklyn/Bronx residents..... I will also meet NYC LIRR Train riders at the Long Island Huntington train station with bicycle or bicycles that you are interested in.",
    "notices": ["do NOT contact me with unsolicited services or offers"],
    "pics": [
      "https://images.craigslist.org/00K0K_lArdvZdjVWHz_0w00o0_600x450.jpg",
      "https://images.craigslist.org/00606_cnhxK9PzTwrz_0w00o0_600x450.jpg",
      "https://images.craigslist.org/01616_7sIDUPncJgWz_0w00o0_600x450.jpg"
    ],
    "manufacturer": "",
    "condition": "",
    "attirbutes": [
      "bicycle frame material: other/unknown",
      "bicycle type: other",
      "frame size: other",
      "wheel size: other/unknown"
    ],
    "model": "",
    "phoneNumbers": ["909-9909-3322"]
  }
]
```

### Data Output Example - community

```json
[
  {
    "id": "7538938958",
    "url": "https://newyork.craigslist.org/que/mis/7538938958.html",
    "title": "Walking your poodle last night on 30th avenue in Astoria",
    "datetime": "2022-09-27T11:57:01-0400",
    "location": "Astoria",
    "category": "community",
    "label": "post",
    "longitude": "-73.909391",
    "latitude": "40.761264",
    "mapAccuracy": "15",
    "post": "White blouse, tan pants, brown poodle (I think), walking east on 30th avenue. I was the military-looking guy walking west and passed you outside Dillingers pub just before midnight. Just looking to say hi.",
    "notices": ["do NOT contact me with unsolicited services or offers"],
    "pics": [],
    "attirbutes": [],
    "phoneNumbers": ["909-9909-3322"]
  }
]
```

### Data Output Example - resumes

```json
[
  {
    "id": "7533132582",
    "url": "https://newyork.craigslist.org/que/res/7533132582.html",
    "title": "DRIVER AVAILABLE CLEAN LICENSE LOCAL OR LONG DISTANCE I WILL DRIVE",
    "datetime": "2022-09-27T11:14:27-0400",
    "location": "Queens Brooklyn and Long Island",
    "category": "resumes",
    "label": "post",
    "post": "HI , I PRESENTLY DRIVE FOR UBEREATS BUT IT'S NOT CUTTING IT FOR ME WITH THE BILLS , SO I AM LOOKING TO SEE WHATS OUT THERE . I HAVE A CLEAN DRIVING RECORD AND AVAILABLE ANYTIME TO DO SO FLEXIBLE FOR ONE TIME GIG FULL TIME OR PART TIME OPPORTUNITIES , THANK YOU",
    "notices": [
      "it's ok to contact this poster if you are a potential employer or other principal.\n                Principals only. Recruiters, please don't contact this job poster.",
      "do NOT contact me with unsolicited services or offers"
    ],
    "attirbutes": [
      "available afternoons",
      "available evenings",
      "available mornings",
      "available overnight",
      "available weekdays",
      "available weekends"
    ],
    "education": "some college",
    "phoneNumbers": ["909-9909-3322"]
  }
]
```

### Data Output Example - services

```json
[
  {
    "id": "7538942850",
    "url": "https://newyork.craigslist.org/que/lbs/7538942850.html",
    "title": "GARBAGE REMOVAL /JUNK/TREE CUTTING /YARD CLEANING (516-688-4452)",
    "datetime": "2022-09-27T12:04:20-0400",
    "location": "QUEENS/ BROOKLYN/LONGISLAND/ MANHATTAN /NJ/S.I",
    "category": "services",
    "label": "post",
    "longitude": "-73.787700",
    "latitude": "40.696900",
    "mapAccuracy": "22",
    "post": "HI EVERYONE WE R OFFER SERVICES HAS FOLLOWS GARBAGE  \\YARD CLEANING /TREE CUTTING\\OFFICE CLEANOUT\\  CONTRUCTION DEBRI /DIRT ROCKS/WAREHOUSE\\GARAGE,STOREFRONT  CLEAN OUT /PROPERTY CLEAR OUT RESDENTIAL & COMMERCIAL /NO JOBS 2 BIG OR 2 SMALL WE DO THEN ALL THANKS FOR READING THIS AD WE LOOKING FORWARD DOING BUSINESS WITH U SOON CONTACT INFO (516-688-4452)",
    "notices": ["do NOT contact me with unsolicited services or offers"],
    "pics": [
      "https://images.craigslist.org/00d0d_gHYworwd0Qbz_0CI0s9_600x450.jpg",
      "https://images.craigslist.org/00d0d_iT4IRyEVs8Y_600x450.jpg",
      "https://images.craigslist.org/00c0c_cGOR3ltegwU_600x450.jpg",
      "https://images.craigslist.org/00d0d_4jjcYbymtrm_600x450.jpg",
      "https://images.craigslist.org/00b0b_35TZdi70rOvz_0lM0t2_600x450.jpg",
      "https://images.craigslist.org/00N0N_fiJ32nA5P9cz_0lM0t2_600x450.jpg",
      "https://images.craigslist.org/00V0V_URIYpD9YmAz_0lM0t2_600x450.jpg",
      "https://images.craigslist.org/00x0x_gO2j6p4crVrz_0lM0t2_600x450.jpg",
      "https://images.craigslist.org/00x0x_gO2j6p4crVrz_0lM0t2_600x450.jpg",
      "https://images.craigslist.org/00O0O_kSordbCDdQhz_0wg0oc_600x450.jpg",
      "https://images.craigslist.org/00Q0Q_6JgftAVmHUsz_0co0gw_600x450.jpg",
      "https://images.craigslist.org/00e0e_lhcCdQfaERz_0lM0t2_600x450.jpg"
    ],
    "attirbutes": [],
    "phoneNumbers": ["909-9909-3322"]
  }
]
```

### Data Output Example - events

```json
[
  {
    "id": "7538891154",
    "url": "https://newyork.craigslist.org/mnh/eve/7538891154.html",
    "title": "Monday Afternoon bash with Lindsay",
    "dates": "10/3",
    "location": "West Babylon",
    "category": "events",
    "label": "post",
    "longitude": "-73.380220",
    "latitude": "40.737545",
    "mapAccuracy": "10",
    "post": "Check out my event flyer for a great time. I am Lindsay and I am hosting an event every Monday at World 2.  It's from noon till 4pm and will be a blast. I am a transgender female dominatrix but am hosting an event every Monday at World 2 at 92 dean st in west Babylon.  come check it out.",
    "notices": ["do NOT contact me with unsolicited services or offers"],
    "datetime": "2022-09-27T10:14:38-0400",
    "pics": [
      "https://images.craigslist.org/00505_edqtQISi2s9z_0da0h2_600x450.jpg",
      "https://images.craigslist.org/00404_liRbL5qFKBgz_0da0h2_600x450.jpg",
      "https://images.craigslist.org/00w0w_2PWqgTHxvvDz_0c60lw_600x450.jpg",
      "https://images.craigslist.org/00b0b_8pCEx7ouFkFz_0c60lw_600x450.jpg",
      "https://images.craigslist.org/01111_bO43SMmCuJsz_0t20CI_600x450.jpg",
      "https://images.craigslist.org/00s0s_bM1qiF4qLJcz_0t20CI_600x450.jpg",
      "https://images.craigslist.org/00f0f_6KAWptAU1kbz_05N0bU_600x450.jpg"
    ],
    "attirbutes": ["singles"],
    "phoneNumbers": ["909-9909-3322"]
  }
]
```

### Craigslist Scraper data output

The output from Craigslist Scraper is stored in the dataset. After the run is finished, you can download the dataset in various data formats (JSON, CSV, XML, RSS, HTML Table).

### Support

For more custom/simplify outputs or Bug report please contact the developer (support (at) getmediumdata.com) or report an issue.

# Actor input Schema

## `urls` (type: `array`):

List of URLs on craigslist.org that needs to be scraped. Can be search page or post page

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

Use Apify Proxy or your custom Proxy.

## `maxAge` (type: `integer`):

Maximum number of days since ad is published. If ad is published earlier it will not be scraped. If not supplied, all ads will be scraped

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

Defines how many pages can be processed by the scraper in parallel. The scraper automatically increases and decreases concurrency based on available system resources. Use this option to set a hard limit.

## Actor input object example

```json
{
  "urls": [
    {
      "url": "https://yuma.craigslist.org/search/ggg#search=1~list~0"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxAge": 15,
  "maxConcurrency": 4
}
```

# 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 = {
    "urls": [
        {
            "url": "https://yuma.craigslist.org/search/ggg#search=1~list~0"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "maxAge": 15,
    "maxConcurrency": 4
};

// Run the Actor and wait for it to finish
const run = await client.actor("ivanvs/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 = {
    "urls": [{ "url": "https://yuma.craigslist.org/search/ggg#search=1~list~0" }],
    "proxyConfiguration": { "useApifyProxy": True },
    "maxAge": 15,
    "maxConcurrency": 4,
}

# Run the Actor and wait for it to finish
run = client.actor("ivanvs/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 '{
  "urls": [
    {
      "url": "https://yuma.craigslist.org/search/ggg#search=1~list~0"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxAge": 15,
  "maxConcurrency": 4
}' |
apify call ivanvs/craigslist-scraper --silent --output-dataset

```

## MCP server setup

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