Craigslist Classifieds Scraper
Pricing
from $0.03 / 1,000 item extracteds
Craigslist Classifieds Scraper
Scrape public Craigslist listings by city, category, keyword, price, and date. Export titles, prices, locations, images, descriptions, and attributes.
Pricing
from $0.03 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
Collect public Craigslist listings from city search pages, category pages, and keyword searches. Use it to monitor local prices, discover leads, compare housing or job supply, and export structured listing data to JSON, CSV, Excel, or your own workflow.
The actor accepts either ready-made Craigslist search URLs or simple city/category/query inputs. It can save lightweight search results only, or open each public listing page to add descriptions, attributes, images, timestamps, and map data when Craigslist exposes them.
What does Craigslist Classifieds Scraper do?
Craigslist Classifieds Scraper turns public Craigslist pages into clean dataset rows. Instead of manually refreshing local search pages, copying titles, and pasting prices into spreadsheets, you can run an automated extraction with a repeatable input.
Typical outputs include listing title, URL, posting ID, price, currency, location, city/site, category, scrape timestamp, and optional detail-mode fields such as description, attributes, images, posted date, updated date, and map coordinates.
Who is it for?
- ๐๏ธ Real estate researchers tracking apartment availability, rent ranges, and neighborhood supply.
- ๐ Resellers and marketplace teams monitoring local prices for furniture, electronics, vehicles, and collectibles.
- ๐ผ Lead generation teams collecting public service, gig, and jobs listings for outreach workflows.
- ๐ Market analysts comparing classified activity across Craigslist cities and categories.
- ๐งฐ Data operations teams feeding local listings into dashboards, databases, alerts, and enrichment pipelines.
Why use it?
Craigslist is local, fragmented, and constantly changing. A saved dataset lets you compare cities, watch price movement, and trigger downstream automations without manually checking dozens of tabs.
This actor is useful when you need:
- recurring local-market monitoring,
- structured exports for spreadsheets or BI tools,
- repeatable query inputs,
- optional listing details,
- dataset-ready records with stable field names.
What data can you extract?
| Field | Description |
|---|---|
title | Listing headline from search or detail page |
url | Public Craigslist listing URL |
id | Numeric Craigslist posting ID parsed from the URL |
price | Numeric price when visible |
currency | Currency code when detected, such as USD |
location | Location text shown on the result card |
cityOrSite | Craigslist city/site subdomain, such as sfbay |
category | Category code inferred from the search URL |
postedAt | Listing posted timestamp when detail mode finds it |
updatedAt | Listing updated timestamp when available |
description | Public listing body in detail mode |
attributes | Listing attributes such as condition, make, size, bedrooms, or compensation when present |
imageUrls | Public Craigslist image URLs when present |
latitude | Latitude when Craigslist exposes map data |
longitude | Longitude when Craigslist exposes map data |
sellerContactAvailable | Whether a public reply control is present |
scrapedAt | Timestamp when the item was saved |
How much does it cost to scrape Craigslist classifieds?
This actor uses pay-per-event pricing. You pay a small run-start event plus one result event for every dataset item saved. The exact live price is shown on the Apify Store actor page before you run it.
For a first test, use the prefilled input with maxItems set to 10. Increase the limit once the output matches your workflow.
Quick start
- Open the actor on Apify.
- Keep the prefilled Craigslist search URL or enter your own.
- Set
maxItemsto a small number for the first run. - Enable
includeDetailsif you need descriptions, attributes, images, and timestamps. - Click Start.
- Download results from the default dataset as JSON, CSV, Excel, XML, or RSS.
Input options
You can provide source pages in two ways.
Option 1: Craigslist search URLs
Use startUrls when you already have Craigslist URLs from your browser.
{"startUrls": [{ "url": "https://sfbay.craigslist.org/search/sss?query=desk" }],"maxItems": 25,"includeDetails": true}
Option 2: City, category, and query
Use the guided fields to generate a URL.
{"cityOrSite": "sfbay","category": "sss","query": "desk","maxItems": 25,"includeDetails": false}
Common Craigslist category codes
| Code | Meaning |
|---|---|
sss | all for sale |
fuo | furniture |
apa | apartments / housing |
jjj | jobs |
ggg | gigs |
bbb | services |
gms | garage sales |
ccc | community |
You can use any public Craigslist category code that works in a normal Craigslist search URL.
Filtering tips
- Set
minPriceandmaxPricefor categories where Craigslist supports price filters. - Set
hasImageto keep searches focused on listings with photos. - Use
postedWithinto focus on today's posts when freshness matters. - Use
sortto switch between newest, relevance, and price order where Craigslist supports it. - Keep
maxItemslow for exploratory runs. - Use separate runs for different cities if you want clean city-by-city exports.
Output example
{"title": "Standup desk","url": "https://sfbay.craigslist.org/sfc/fuo/d/example/1234567890.html","id": "1234567890","price": 150,"currency": "USD","location": "san francisco","cityOrSite": "sfbay","category": "sss","postedAt": "2026-06-14T08:12:00-0700","updatedAt": "2026-06-14T09:00:00-0700","description": "Adjustable standing desk in good condition.","attributes": { "condition": "good" },"imageUrls": ["https://images.craigslist.org/example.jpg"],"latitude": 37.77,"longitude": -122.42,"sellerContactAvailable": true,"scrapedAt": "2026-06-14T12:00:00.000Z"}
Search-only mode vs detail mode
Search-only mode is faster and cheaper because it reads the listing cards already visible on search pages. It is best for title, URL, price, and location monitoring.
Detail mode opens each listing page. Use it when you need descriptions, attributes, images, posted timestamps, updated timestamps, or map information. Detail mode makes more requests, so keep limits reasonable.
Integrations
Use this actor with:
- ๐ Google Sheets or Excel exports for price monitoring.
- ๐งฑ Databases such as Postgres, BigQuery, or Airtable.
- ๐ Alert workflows that notify you when matching listings appear.
- ๐งช Enrichment workflows that classify listings by product type, neighborhood, or lead quality.
- ๐งฐ Apify API, webhooks, and integrations for scheduled pipelines.
API usage
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('<ANNA_APIFY_USERNAME>/craigslist-classifieds-scraper').call({startUrls: [{ url: 'https://sfbay.craigslist.org/search/sss?query=desk' }],maxItems: 25,includeDetails: true,});console.log(run.defaultDatasetId);
Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('<ANNA_APIFY_USERNAME>/craigslist-classifieds-scraper').call(run_input={'cityOrSite': 'sfbay','category': 'sss','query': 'desk','maxItems': 25,})print(run['defaultDatasetId'])
cURL
curl -X POST "https://api.apify.com/v2/acts/<ANNA_APIFY_USERNAME>~craigslist-classifieds-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"cityOrSite":"sfbay","category":"sss","query":"desk","maxItems":25}'
MCP usage
Connect this actor to Apify MCP at:
https://mcp.apify.com/?tools=<ANNA_APIFY_USERNAME>/craigslist-classifieds-scraper
Claude Code setup:
$claude mcp add apify-craigslist --url "https://mcp.apify.com/?tools=<ANNA_APIFY_USERNAME>/craigslist-classifieds-scraper"
Claude Desktop JSON setup:
{"mcpServers": {"apify-craigslist": {"url": "https://mcp.apify.com/?tools=<ANNA_APIFY_USERNAME>/craigslist-classifieds-scraper"}}}
Example prompts:
- "Run Craigslist Classifieds Scraper for desks in sfbay and summarize price ranges."
- "Find apartment listings in a Craigslist city and export the dataset URL."
- "Monitor furniture listings and tell me which ones mention excellent condition."
Best practices
- Start with one city and one category.
- Use
maxItems: 10for the first run. - Enable detail mode only when you need full descriptions or images.
- Schedule recurring runs at a respectful cadence.
- Save source URLs that encode your exact Craigslist filters.
FAQ
Can I use any Craigslist city?
Yes. Use the city/site subdomain from the public Craigslist URL, such as sfbay, newyork, losangeles, chicago, seattle, or austin.
Does the actor open every listing page?
Only when includeDetails is enabled. Search-only mode is faster; detail mode returns richer descriptions, images, attributes, and timestamps.
Troubleshooting
Why did I get fewer items than requested?
The source page may have fewer public listings for your query, or Craigslist may hide some cards for the selected city/category/filter combination. Broaden the query or remove filters.
Why are some detail fields empty?
Not every listing includes every public field. For example, some posts have no price, no map, no images, or no updated timestamp.
Can I scrape private contact details?
This actor is designed for public listing information. Respect Craigslist terms, privacy expectations, and applicable laws. Do not use scraped data for spam or prohibited outreach.
Legality and responsible use
Craigslist pages can contain user-generated content. You are responsible for using this actor lawfully, respecting the website's terms, and complying with privacy, anti-spam, and data-protection rules. Only collect data you have a legitimate reason to process.
Related scrapers
Explore other Apify Store actors by <ANNA_APIFY_USERNAME> for complementary local-market, lead-generation, and monitoring workflows.
Changelog
- Initial version: search result extraction, optional detail extraction, filters, proxy support, and structured dataset schema.
Support
If a run fails, include the run URL, input, and a short description of what you expected to receive. For best results, include one public Craigslist URL that reproduces the issue.