Craigslist Scraper - (Jobs & Listings etc.)
Pricing
Pay per event + usage
Craigslist Scraper - (Jobs & Listings etc.)
Scrape Craigslist classifieds across 700+ cities and all 8 categories (jobs, housing, for-sale, services, gigs, community, resumes, events). Typed outputs, multi-city fanout, repost dedup, optional contact extraction. MCP-ready. Pay-per-event.
Pricing
Pay per event + usage
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
6 days ago
Last modified
Categories
Share
Craigslist Scraper — Jobs, Housing, For-Sale, Services, Gigs (700+ cities)
Scrape Craigslist classifieds across 700+ city subdomains and all 8 categories — jobs, housing, for-sale, services, gigs, community, resumes, events — with typed per-category outputs (parsed salary, bed/bath/sqft, car make/model/year), multi-city auto-fanout, cross-city repost deduplication, and optional public contact extraction. Designed for AI agents (MCP-ready descriptions) and traditional pipelines alike. Pay-per-event, residential proxies included.
Try it: pick a city subdomain (e.g.
newyork), choose a category (forsale,jobs,housing, …), and run.
What does this Craigslist scraper do?
This Actor extracts public Craigslist classified listings and returns them as a clean, typed JSON dataset:
- One row per listing with stable keys (
postId,title,url,city,priceText,priceNumeric,currency,postedAt,updatedAt,primaryImage,attributes,geo,contact). - Typed per-category attributes parsed out of Craigslist's HTML for you — no regex required:
- Jobs → compensation, employment type, role, telecommute.
- Housing → bedrooms, bathrooms, sqft, housing type, laundry, parking, available, pets-OK flags, furnished, smoking, wheelchair-accessible.
- Cars + trucks → year, make, model, odometer, fuel type, transmission, title status, condition, drive type, cylinders, paint colour, VIN.
- General for-sale → condition, seller type.
- Multi-city auto-fanout — pass
city: "topUSMetros"to scrape the top 25 US metros in one run,topGlobalMetrosfor the top 50 worldwide, or supply your owncitieslist. - Cross-city repost deduplication — when dealers and agencies repost the same listing in five cities, you get one row, not five.
- Optional full post detail (
includeDetails: true) — fetches the full description, complete image gallery, parsed attribute groups, and reply URL. - Optional public contact extraction (
extractContacts: true) — pulls emails and phones that the poster placed in the public body. Never bypasses Craigslist's anonymized reply flow; never logs in.
The Actor is MCP-ready: every input field has a precise four-sentence description, the tool description names the use case and disambiguator, and the output schema is flat and ≤500 tokens per row — built for Claude, GPT, and other AI agents to call directly through the Apify MCP integration.
Why use this Craigslist scraper?
- Resellers and arbitrageurs — track low-priced electronics, cars, tools, and tickets across multiple metros, deduplicated.
- Recruiters — pull fresh gigs and full-time postings in
jobsandgigswith parsed compensation. - Real-estate teams — aggregate
apartments,rooms,sublets, andreal-estate-for-salepostings with parsed bed/bath/sqft. - Service-business operators — monitor competitor activity across
services. - Market researchers — observe supply-side trends in goods, jobs, and rentals across cities.
- AI agents — call this Actor as a tool over MCP for ad-hoc classifieds research, comp pricing, lead generation.
Apify advantages: scheduled runs, dataset export (JSON/CSV/Excel/HTML/RSS), webhook integrations, residential proxy rotation, run history, retry logic, and a managed cloud runtime.
How to use the Craigslist scraper
- Pick your city. Use a single Craigslist subdomain such as
newyork,sfbay,losangeles,london, ortoronto. Or use a preset:topUSMetros(top 25 US metros) ortopGlobalMetros(top 50 worldwide). Or pass acitiesarray of subdomains. - Choose a category.
forsale(default),jobs,housing,services,community,gigs,resumes,events, orall. - (Optional) narrow with a subcategory code.
ctafor cars+trucks,apafor apartments,soffor software jobs, etc. — full list below. - (Optional) add a search query. Free text — for example
macbook pro,studio apartment,remote python. - (Optional) set price/age/picture filters.
minPrice,maxPrice,maxAgeDays,hasPic,ownerOnly. - Choose detail depth. Leave
includeDetails: false(default) for the cheap search-card path ($0.005/listing). SetincludeDetails: trueto also fetch full descriptions, complete galleries, and reply URLs ($0.008/listing). - Save and run. Apify spins up the Actor, rotates residential proxies, paginates Craigslist, deduplicates reposts, and writes a clean dataset.
Input
| Field | Type | Description |
|---|---|---|
city | string | Craigslist city subdomain (e.g. newyork, sfbay). Or preset topUSMetros / topGlobalMetros. |
cities | array of strings | Multiple city subdomains. Overrides city when set. |
category | enum | forsale, jobs, housing, services, community, gigs, resumes, events, all. |
subcategory | string | 3-letter Craigslist subcategory code (e.g. cta, apa, sof). |
searchQuery | string | Free-text search inside the chosen category. |
startUrls | array | Direct Craigslist URLs. Overrides city/category/searchQuery. |
maxResults | int | Max listings per city. Default 50. Hard ceiling 3000 per city. |
includeDetails | bool | Fetch full post details. Default false. |
extractContacts | bool | Extract public emails/phones from post body. Requires includeDetails. Default false. |
minPrice / maxPrice | int | Price filters in the listing's local currency. |
hasPic | bool | Only listings with at least one image. |
ownerOnly | bool | Exclude dealer/agency/recruiter posts. |
maxAgeDays | int | Skip listings older than this many days. |
dedupAcrossCities | bool | Drop second occurrence of the same repost across cities. Default true. |
proxyConfiguration | object | Apify Proxy settings. Residential strongly recommended. |
Example input (top 5 US metros, used MacBooks, with pictures, under $1500):
{"city": "topUSMetros","category": "forsale","subcategory": "ela","searchQuery": "macbook pro","maxPrice": 1500,"hasPic": true,"ownerOnly": true,"maxResults": 100,"includeDetails": true,"dedupAcrossCities": true}
Output
The Actor pushes one row per listing into the default dataset. Sample (truncated):
{"postId": "7708131934","title": "MacBook Pro 14\" M2 Pro 16GB 512GB Space Gray","url": "https://newyork.craigslist.org/mnh/sys/d/new-york-macbook-pro-14-m2-pro-16gb/7708131934.html","city": "newyork","cityLabel": "New York","category": "forsale","subcategory": "sys","neighborhood": "Upper East Side","priceText": "$1,450","priceNumeric": 1450,"currency": "USD","postedAt": "2026-05-13T09:14:00.000Z","updatedAt": "2026-05-13T09:14:00.000Z","primaryImage": "https://images.craigslist.org/00808_xxxxx_600x450.jpg","images": ["https://images.craigslist.org/...", "..."],"description": "Selling my 14-inch MacBook Pro M2 Pro, 16GB unified memory, 512GB SSD…","attributes": {"condition": "excellent","make_/_manufacturer": "Apple","model_name_/_number": "MacBook Pro M2 Pro"},"geo": { "lat": 40.7736, "lng": -73.9566 },"address": null,"contact": {"replyUrl": "https://newyork.craigslist.org/reply/nyc/sys/7708131934"},"isOwnerPost": true,"fingerprint": "9c7a…","scrapedAt": "2026-05-13T09:18:42.103Z"}
You can download the dataset in JSON, CSV, Excel, HTML, or RSS from the Apify Console Storage → Dataset tab.
Data fields
| Field | Type | Description |
|---|---|---|
postId | string | Craigslist post ID (stable across edits). |
title | string | Post title. |
url | string | Canonical URL on the city subdomain. |
city / cityLabel | string | Craigslist subdomain and human label. |
category / subcategory | string | Top-level category + 3-letter subcategory code. |
neighborhood | string | Sub-area shown on the post. |
priceText / priceNumeric / currency | mixed | Raw price + parsed numeric + ISO 4217 code. |
postedAt / updatedAt | ISO 8601 | UTC timestamps. |
primaryImage | string | URL of the search-card thumbnail. |
images | array | All gallery images (detailed mode). |
description | string | Full post body (detailed mode). |
attributes | object | Typed per-category attributes — see below. |
geo | object | { lat, lng } when the post has a map. |
address | string | Approximate address when shown. |
contact | object | { replyUrl, email?, phone? }. Public-only. |
isOwnerPost | bool | True/false when the post explicitly states; otherwise null. |
fingerprint | string | SHA-256 dedup hash. |
scrapedAt | ISO 8601 | When this row was scraped. |
Typed attributes by category
- Jobs:
compensation,employment_type,job_title,telecommute_ok. - Housing:
bedrooms,bathrooms,sqft,housing_type(apartment/house/condo/loft/townhouse),laundry,parking,available,cats_are_ok,dogs_are_ok,furnished,no_smoking,wheelchair_accessible. - Cars + trucks:
year,make,model,odometer,fuel,transmission,title_status,condition,drive,cylinders,paint_color,vin. - General for-sale:
condition,make_/_manufacturer,model_name_/_number,size_/_dimensions.
Subcategory codes (quick reference)
| Category | Codes |
|---|---|
| For-sale | sss (all), cta/cto/ctd (cars+trucks), mca (motorcycles), ela/sys/cmp/pho/vid (electronics + computers + phones + photo + video), fua/hsh/app (furniture + household + appliances), bia/tla/spo/toy (bikes + tools + sport + toys), clo/jwl/bab (clothing + jewelry + baby), art/boo/col/mus (arts/books/collectibles/music), gar (garage sale), mat (materials), tic (tickets), wan (wanted) |
| Jobs | sof (software), web (web/info-design), acc (accounting), med (medical), wri (writing), sad (sales), mar (marketing), csr (customer service), egr (engineering), tch (tech support), lgl (legal), mnu (manufacturing), npo (nonprofit), sci (science), bus (business), edu (education), fbh (food/bev), gov (government), hum (HR), prk (trades) |
| Housing | apa (apartments), roo (rooms), sub (sublets), rea (real-estate-for-sale), pak (parking/storage), off (office), vac (vacation), swp (housing-swap) |
| Services | aos (auto), bts (beauty), cps (computer), crs (creative), cys (cycle), evs (event), fns (financial), hss (household), lbs (labor), lgs (legal), lss (lessons), mas (marine), pas (pet), pes (real-estate-svc), sks (skilled trades), wet (writing), wrs (write/edit) |
| Gigs | cpg, crg, dmg, evg, lbg, tlg, wrg |
Pricing — How much does it cost to scrape Craigslist?
Pay-per-event. Two billable events plus a small actor-start charge:
| Event | Price | When charged |
|---|---|---|
actor-start | $0.00005 | Once per run, per GB of memory. |
listing-scraped | $0.005 / listing | Search-card mode (default). Returns title, price, location, primary image, posted date, URL. |
listing-detailed | $0.008 / listing | Full post mode (includeDetails: true). Returns description, full gallery, typed attributes, reply URL. |
Typical run costs (excluding the negligible start fee):
- 50 listings, search-card → $0.25
- 50 listings, detailed → $0.40
- 500 listings across top 5 US metros, search-card → $2.50
- 500 listings across top 5 US metros, detailed → $4.00
Pay-Per-Usage (compute + proxy passthrough) is also available — pick whichever model your run profile prefers in Apify Console.
Tips and advanced options
- Start narrow, then widen. Set
maxResults: 25for your first run to validate selectors, then scale up. - Use search-card mode for monitoring, detailed mode for enrichment. Card mode is 1.6× cheaper and 4× faster.
- Multi-metro dedup pays for itself. Resellers reposting the same item across 10 metros routinely cut output volume by 60% with
dedupAcrossCities: true. - Respect the age filter.
maxAgeDays: 7stops pagination once a page becomes mostly stale — saves money on long-running monitoring schedules. - Residential proxies are recommended. Craigslist rate-limits datacenter IPs aggressively; the actor defaults to Apify residential proxies.
- Schedule it. Apify Scheduler can run the actor every N minutes/hours with the same input — ideal for "watch this search" use cases.
FAQ, disclaimers, and support
Is scraping Craigslist legal? Public-data scraping is generally lawful in the US (see hiQ Labs v. LinkedIn), but Craigslist has aggressively pursued bulk scrapers and aggregators in past litigation (craigslist v. 3Taps, RadPad, Instamotor). This Actor only retrieves publicly visible classifieds, never logs in, never bypasses Craigslist's anonymized reply form, and respects standard rate limits. You are responsible for ensuring your use complies with Craigslist's Terms of Service and any applicable local law. Do not use this Actor to repost Craigslist content elsewhere, build a Craigslist-clone aggregator, or contact posters at scale.
Why are some posts missing? Craigslist sometimes serves a CAPTCHA when it suspects automation. The actor rotates residential proxies and a session pool, and retries with backoff, but a small percentage of posts may still be skipped. The RUN_SUMMARY key in the Key-Value Store lists all warnings.
Why is priceNumeric null sometimes? When the post says "please contact" or has no price column for that category. The raw priceText is preserved.
Why didn't extractContacts find an email? Craigslist hides contact info behind its anonymized reply form by default. The actor only extracts emails and phones that the poster placed in the public body. The anonymized replyUrl is always available.
Can it scrape behind Craigslist accounts? No. This actor never logs in.
Where do I report bugs or feature requests? Use the Issues tab on the Actor's Apify Store page. We respond to every issue. Custom-output, scheduled-monitor, and Webhook-on-new-post variants are available — contact the publisher.
Related actors
If you're scraping classifieds at scale, you may also want:
- Zillow All-in-One Scraper — Zillow properties + sold history.
- Idealista Scraper — European real-estate listings.
- B2B Lead Finder + Enrichment — Google Maps leads with email enrichment.
- Email Address Validator — clean the contacts you extract.
- LinkedIn Jobs Scraper — jobs from LinkedIn for cross-source coverage.