Craigslist Scraper
Pricing
from $1.40 / 1,000 results
Craigslist Scraper
[๐ฐ $1.4 / 1K] Extract Craigslist listings across cars, housing, jobs, electronics, furniture, services, gigs, and events. Filter by keyword, price, condition, or sort โ or paste URLs directly. Each row includes title, price, location, description, images, post ID, and category-specific attributes.
Pricing
from $1.40 / 1,000 results
Rating
0.0
(0)
Developer
SolidCode
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
Pull classified listings from Craigslist at scale โ titles, prices, descriptions, images, post IDs, GPS coordinates, posted timestamps, and category-specific attributes (year, make, model, odometer, bedrooms, sqft, salary) across cars, housing, jobs, electronics, furniture, services, gigs, community, and events. Built for lead-gen sales teams, used-car dealers, real-estate investors, classifieds aggregators, journalists, and ML researchers who need a clean, structured Craigslist feed without paying $8 per 1,000 rows or wrestling with hundreds of city subdomains by hand.
Why This Scraper?
- Coverage of 50 major Craigslist regions โ New York, Los Angeles, San Francisco Bay Area, Chicago, Seattle, Boston, Toronto, Vancouver, Montreal and 41 more in a single dropdown. Need a smaller city? Paste the subdomain URL (raleigh, halifax, anything
*.craigslist.org) and the actor figures out the rest. - 13 category presets โ For Sale (all), Cars & Trucks, Electronics, Furniture, Apartments / Houses, Rooms & Shares, Sublets & Temporary, Jobs, Gigs, Services, Community, Resumes, and Events. No memorising Craigslist's three-letter abbreviations.
- Six condition tiers plus four sort orders โ filter to New, Like New, Excellent, Good, Fair, or Salvage and choose Newest, Relevance, Lowest Price, or Highest Price ordering. Layer on min/max price, has-image, and posted-today toggles for tightly scoped pulls.
- Per-listing detail enrichment โ every row carries the full body text, the complete
attributesobject (year, make, model, odometer, paint, fuel, transmission, bedrooms, sqft, employment type, compensation), the full image gallery, post ID, latitude/longitude, and posted/updated timestamps. - Paste search URLs OR detail URLs directly โ drop any Craigslist link into
startUrlsand the actor auto-detects whether it's a search results page (paginates and pulls cards) or an individual posting (fetches the detail page). Mix and match in a single run. - Bilingual + multi-currency aware โ handles English and French regions (Montreal, Quebec) and emits
currency: "CAD"on the six Canadian markets (Toronto, Vancouver, Calgary, Ottawa, Edmonton, Montreal) versus"USD"everywhere else. No silent price-comparison bugs. - Surfaces deleted postings as
isDeleted: trueโ instead of crashing or silently dropping a row, removed listings are tagged so downstream catalogues can deactivate them and stay in sync. - Direct-contact extraction for lead-gen โ every detail-enriched row carries
phoneNumbers[]andemails[]parsed from the posting body, plus acontactObfuscatedboolean that flips tofalsewhenever a real phone or email is published. FiltercontactObfuscated == falsefor outbound-ready leads, or sort bylen(phoneNumbers) + len(emails)to prioritise the most reachable posters. - Up to 24 image URLs per posting โ full-resolution gallery, not thumbnails, sourced from the JSON-LD product blob with embedded JS fallback.
Use Cases
Lead Generation
- Build live used-car-buyer lead lists with prices, mileage, and seller location
- Surface FSBO real-estate sellers in target ZIP codes for outbound campaigns
- Capture small-business equipment posters across services and gigs categories
- Filter postings where contact info is published versus relayed for higher-conversion outreach
Market Research & Pricing
- Track median prices for used cars by make/model/year across 50 metros
- Compare apartment rental asking prices week over week in growth markets
- Monitor inventory turnover by counting daily new postings against deletions
- Benchmark electronics resale prices against retail for arbitrage signals
Competitive Intelligence
- Power classifieds aggregator portals with normalised cross-region data
- Feed dropshipping and resale platforms with daily Craigslist deal candidates
- Monitor competitor dealer postings across cars-by-dealer and furniture-by-dealer categories
- Index local services pricing for service-marketplace startups
Academic & ML Research
- Train language models on millions of unstructured classifieds descriptions
- Study regional housing affordability through scraped rent and sublet listings
- Analyse labour market demand using Craigslist Jobs and Gigs categories
- Build geographic price-distribution datasets keyed on the lat/lng fields
Journalism & Civic Analysis
- Track gig economy labour conditions through Gigs category postings
- Document informal housing markets from Rooms & Shares and Sublets categories
- Surface community events and notices for local-news beat coverage
- Investigate scam patterns by sampling repeated obfuscated-contact postings
Getting Started
Quick start โ city + keyword
The simplest run: pick a city, type a search term, set a row cap.
{"region": "sfbay","searchTerm": "honda civic","maxResults": 100}
Filtered cars search
Cars & Trucks in New York, like-new condition, $5kโ$20k, photos required, newest first.
{"region": "newyork","category": "cta","priceMin": 5000,"priceMax": 20000,"condition": "like-new","hasImage": true,"sort": "date","maxResults": 200}
Mix search URLs and detail URLs
Paste any combination of search-page URLs and individual posting URLs in one run. The actor auto-detects each.
{"startUrls": ["https://sfbay.craigslist.org/search/apa?max_price=3500&hasPic=1","https://losangeles.craigslist.org/search/cta?query=tacoma&condition=30","https://newyork.craigslist.org/mnh/clo/d/example-listing/7903726578.html"],"sort": "priceasc","maxResults": 500}
Input Reference
Where to Search
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | string[] | [] | Paste one or more Craigslist URLs. Accepts search pages, category pages, and individual posting URLs. When provided, these override the City + Category + Keyword fields. Plain URLs only. |
region | select | New York City, NY | Craigslist city to search. Covers the most popular US and Canadian regions. If your city isn't listed, paste a Craigslist URL above instead โ any subdomain works. |
category | select | For sale (all) | What kind of listings to collect. Choose For Sale (all), Cars & Trucks, Electronics, Furniture, Apartments / Houses, Rooms & Shares, Sublets & Temporary, Jobs, Gigs, Services, Community, Resumes, or Events. |
searchTerm | string | null | Optional keyword. Matches against the title and body of postings. Leave empty to return every listing in the selected category. |
Filters
Optional filters applied at the Craigslist server side, so you only collect rows that already match.
| Parameter | Type | Default | Description |
|---|---|---|---|
priceMin | integer | null | Only include postings priced at or above this amount. Ignored on categories without prices (Jobs, Community, Resumes). |
priceMax | integer | null | Only include postings priced at or below this amount. |
condition | select | Any condition | Restrict to a specific condition (For Sale categories only): New, Like new, Excellent, Good, Fair, or Salvage. |
hasImage | boolean | false | When on, only return postings that have at least one photo. |
postedToday | boolean | false | When on, only return postings published in the last 24 hours. |
sort | select | Newest first | How Craigslist orders the search results: Newest first, Relevance, Lowest price first, or Highest price first. |
Output Options
| Parameter | Type | Default | Description |
|---|---|---|---|
includeDetails | boolean | true | When on (default), every search result is followed with a second request to fetch the full description, attributes, complete image gallery, post ID, and posted timestamp. Turn off for faster runs that return only the search-card fields. |
maxResults | integer | 200 | Hard cap on total postings across all sources. Set to 0 for no cap (an internal upper limit of 100,000 still applies). The actor stops requesting new pages once this number is reached but keeps the full final page even if it slightly overshoots. |
Output
One flat row per listing. Here's a representative result with full details enabled:
{"url": "https://newyork.craigslist.org/mnh/clo/d/new-york-1860s-fan/7903726578.html","postId": "7903726578","title": "1860s fan","priceUsd": 9,"currency": "USD","region": "newyork","categorySlug": "sss","categoryLabel": "For Sale","subcategorySlug": "clo","subcategoryLabel": null,"postedAt": "2025-12-20T17:30:19-0500","updatedAt": null,"location": "(Upper East Side)","latitude": 40.7651,"longitude": -73.9624,"attributes": {"condition": "good","size_/_dimensions": "12 inch"},"description": "Antique hand fan from the 1860s. Carved bone sticks, hand-painted silk leaf with floral motif. Some wear consistent with age. From an estate collection โ pickup in Manhattan.","imageUrls": ["https://images.craigslist.org/00b0b_example1_600x450.jpg","https://images.craigslist.org/00f0f_example2_600x450.jpg"],"hasImages": true,"contactObfuscated": false,"phoneNumbers": ["(917) 325-5214"],"emails": ["seller@example.com"],"replyToken": "nyc/clo/7903726578","isDeleted": false,"scrapedAt": "2026-05-10T14:30:00Z"}
(Description and image arrays are truncated above for readability โ the live row carries the full posting body and every gallery image.)
Core Fields
| Field | Type | Description |
|---|---|---|
url | string | Canonical posting URL |
postId | string | Craigslist's numeric post identifier |
title | string | Posting headline |
priceUsd | number | null | Numeric price (named priceUsd for legacy reasons; populated for every region in the local currency) |
currency | string | ISO currency code โ USD for US regions, CAD for the six Canadian markets |
region | string | City subdomain (e.g. sfbay, newyork, toronto) |
scrapedAt | string | ISO 8601 timestamp of when this row was captured |
Category & Location
| Field | Type | Description |
|---|---|---|
categorySlug | string | Craigslist category code (sss, cta, apa, etc.) |
categoryLabel | string | Human-readable category name |
subcategorySlug | string | null | Detail-level subcategory (bik, cto, mca, etc.) when known |
subcategoryLabel | string | null | Human-readable subcategory name |
location | string | null | Free-text neighbourhood as Craigslist displays it (e.g. "(Upper East Side)") |
latitude | number | null | Posting latitude โ note Craigslist jitters by ~0.05 degrees for privacy |
longitude | number | null | Posting longitude โ same neighbourhood-level precision caveat |
Description & Attributes
Populated when includeDetails is on.
| Field | Type | Description |
|---|---|---|
description | string | Full posting body, with QR-code and reply-button noise stripped |
attributes | object | Flexible per-category attribute map โ typical keys include condition, make, model, year, odometer, paint, fuel, transmission, bedrooms, sqft, employment_type, compensation |
postedAt | string | ISO 8601 timestamp when the posting was first published |
updatedAt | string | null | ISO 8601 timestamp of last update โ null when never updated |
Media & Status
| Field | Type | Description |
|---|---|---|
imageUrls | string[] | Full-resolution image URLs from the posting gallery |
hasImages | boolean | True when at least one image is attached |
phoneNumbers | string[] | Phone numbers parsed from the posting body, formatted as (NNN) NNN-NNNN. Empty when the poster only exposes Craigslist's reply relay. Populated when includeDetails is on. |
emails | string[] | Email addresses parsed from the posting body. Excludes Craigslist's own @reply.craigslist.org relay addresses. Populated when includeDetails is on. |
contactObfuscated | boolean | false when at least one direct phone or email was extracted; true when the poster only publishes Craigslist's relay link |
replyToken | string | null | Path component from the reply CTA โ <region>/<cat>/<postId> โ useful for de-duplicating across crawls |
isDeleted | boolean | True when the posting returns "this post has been deleted" or 404s on the detail fetch |
Tips for Best Results
- Use the canonical city subdomain.
sfbay, notsf;washingtondc, notdc;losangeles, notla. The dropdown handles this for you, but if you paste a URL, double-check the host. Common aliases (sf,la,nyc,dc) are auto-corrected โ anything else is sent as-is. - Disable
includeDetailsfor high-volume monitoring jobs. Detail fetches roughly double run time and pricing because each posting becomes two requests. For daily inventory sweeps where you'll re-fetch detail later, turn it off and you'll get title, price, link, location, and post ID at full speed. - Treat
latitude/longitudeas neighbourhood-level. Craigslist intentionally jitters geo coordinates by roughly 0.05 degrees (~5 km) for poster privacy. They're great for clustering and metro-area heatmaps, useless for pinpointing an address. - Pair
condition: like-newwithpriceMinwhen hunting deals on cars or electronics โ this catches motivated sellers while filtering out flippers who under-grade gear to drive negotiation. - Mix search URLs and detail URLs in one run. Maintain a watchlist of specific postings (passed as detail URLs) alongside fresh discovery searches (passed as search URLs) โ they all land in the same dataset.
- For Canadian markets, expect
currency: "CAD". Toronto, Vancouver, Calgary, Ottawa, Edmonton, and Montreal return Canadian-dollar prices automatically. If your downstream pipeline assumes USD, branch on thecurrencyfield rather than theregion. - Use
isDeletedfor catalogue freshness. Re-running the same query will returnisDeleted: truerows for postings that disappeared between runs. Sync this flag into your downstream system so your inventory matches reality. - Filter
contactObfuscated == false(or non-emptyphoneNumbers/emails) for ready-to-reach leads. Most Craigslist postings hide contact behind the reply relay; the ones that publish a phone or email are the ones who want a direct call. Paircondition: like-newwith non-emptyphoneNumbersfor direct-contact lead lists in resale categories.
Pricing
$1.40 per 1,000 results โ flat pay-per-result. No compute charges โ you only pay per result returned.
| Results | Estimated Cost |
|---|---|
| 100 | $0.14 |
| 1,000 | $1.40 |
| 10,000 | $14.00 |
| 100,000 | $140.00 |
A "result" is any row in the output dataset โ one posting equals one result, whether or not detail enrichment is on.
Integrations
Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:
- Zapier / Make / n8n โ Workflow automation
- Google Sheets โ Direct spreadsheet export
- Slack / Email โ Notifications on new results
- Webhooks โ Trigger custom APIs on run completion
- Apify API โ Full programmatic access
Legal & Ethical Use
This actor is designed for legitimate market research, lead generation, journalism, and academic analysis of public Craigslist postings. Users are responsible for complying with applicable laws, Craigslist's Terms of Use, and local data-protection regulations. Do not use the extracted data for spam, harassment, mass-unsolicited contact, fraud, or any other unlawful purpose. Be especially mindful of fair-housing and equal-employment regulations when working with housing and jobs data.