Craigslist Listings Scraper
Pricing
from $6.80 / 1,000 results
Craigslist Listings Scraper
Scrape craigslist classified listings for sale, housing, jobs, gigs and services. Get title, price, city and region, area, coordinates, posting date, listing URL, images and a description snippet across many cities and categories. Export to JSON, CSV or Excel.
Pricing
from $6.80 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Craigslist Listings Scraper
Here is one real result, with every field the actor returns (this record has fetchDescriptions and both AI add-ons enabled; the long description is trimmed with a note, values real):
{"imageUrl": "https://images.craigslist.org/00p0p_35JrmA3W1HB_0CI0t2_600x450.jpg","title": "for sale set of wheels great for 27 or 26 bike fast ready to ride","url": "https://www.craigslist.org/view/d/flushing-for-sale-set-of-wheels-great/rCGtNDQ4CWc5Y5fYxR7Kk2","postingId": 7944850486,"price": 50,"priceText": "$50","currency": "USD","city": "newyork","region": "new york city","area": "queens","neighborhood": "queens","latitude": 40.728,"longitude": -73.8195,"category": "sss","categoryName": "For sale","searchQuery": "bicycle","postedAt": "2026-08-14T07:08:16.000Z","aiSummary": "For sale is a set of good condition wheels suitable for 26 or 27-inch bike frames, priced at $50. The wheels are ready to ride and located in New York City, near Forest Hills.","aiCategory": {"category": "Electronics","subcategory": null,"itemType": "Bicycle Wheels","condition": "good"},"description": "for sale set of wheels size 27 .this great st for 27 or 26 bike frame fast wheels ready to ride for $50.00. wheels set near by the Forest hills by all train-e-f-v-n- stop at queens ...","attributes": { "condition": "good" },"mapAddress": null,"hasReply": true,"replyUrl": "https://www.craigslist.org/reply/nyc/bop/7944850486/","imageCount": 1,"imageUrls": ["https://images.craigslist.org/00p0p_35JrmA3W1HB_0CI0t2_600x450.jpg"],"source": "craigslist","observedAt": "2026-08-14T07:09:43.945Z","error": null}
The most complete Craigslist listings scraper available. It returns every field a classified listing exposes, including price, coordinates, posting date, images, description snippet, structured item attributes and reply availability, plus two optional AI add-ons, and works across any city, category and keyword combination.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor queries the public craigslist listing feed for every city, category and keyword combination you pass, decodes each listing into a clean record, and writes one item per listing to the run's dataset. Prices, coordinates and posting dates are surfaced as structured fields, and when fetchDescriptions is on the actor opens each listing to add the description snippet, neighborhood, structured item attributes and reply availability. Missing source values are returned as null, never invented.
Data covers any craigslist city, addressed by its subdomain, across every top-level category. Two optional AI add-ons (withAiSummary, withAiCategorize) can enrich each record; they are opt-in, billed only when they produce output, and disabled on free Apify plans.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 2 "bicycle" for-sale listings in New York with descriptions.
{"cities": ["newyork"],"categories": ["sss"],"searchQueries": ["bicycle"],"maxListings": 2,"fetchDescriptions": true}
Leave searchQueries empty to browse the whole category. Every input field is optional; with an empty input the actor browses the sss (for sale) category in newyork.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
cities | array | no | ["newyork"] | Craigslist city subdomains to search, for example newyork, losangeles, chicago, london. |
categories | array | no | ["sss"] | Category codes: sss for sale, hhh housing, jjj jobs, ggg gigs, bbb services, ccc community, eee events, rrr resumes. |
searchQueries | array | no | (empty) | Keywords to search, for example laptop, 2 bedroom, barista. Each keyword runs across every city and category. Empty browses the category. |
fetchDescriptions | boolean | no | true | Enrich each listing with a description snippet, neighborhood, structured attributes and reply availability. |
maxListings | integer | no | 40 | Maximum listings to collect across the run. Free Apify plans are capped at 10 per run. |
withAiSummary | boolean | no | false | Add a plain-English AI summary of each listing. Paid add-on, disabled on free plans. |
withAiCategorize | boolean | no | false | Classify each listing into a normalized category, subcategory, item type and condition via AI. Paid add-on, disabled on free plans. |
Output reference
One dataset item per listing. Types: string, number, boolean, string[], object, or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
imageUrl | string | First listing image, or null. |
title | string | Listing title. |
url | string | Public listing page URL. |
postingId | number | Craigslist posting ID. |
price | number | Numeric price, or null when none. |
priceText | string | Price as shown, for example $50. |
currency | string | Currency code, for example USD. |
city | string | City subdomain that produced this listing. |
region | string | Human-readable region/city name. |
area | string | Nearest sub-area, for example queens. |
neighborhood | string | Neighborhood from the detail page, or null. |
latitude | number | Latitude, or null. |
longitude | number | Longitude, or null. |
category | string | Category code, for example sss. |
categoryName | string | Human-readable category, for example For sale. |
searchQuery | string | The keyword that produced this listing, or null. |
postedAt | string | Posting date (ISO 8601). |
aiSummary | string | AI plain-English summary. Present only when withAiSummary is enabled. |
aiCategory | object | AI category, subcategory, itemType, condition. Present only when withAiCategorize is enabled. |
description | string | Description snippet. Present with fetchDescriptions. |
attributes | object | Structured item attributes (condition, make/model, VIN, odometer, bedrooms, sqft, etc.), or null. Present with fetchDescriptions. |
mapAddress | string | Approximate street/map address when shared, or null. |
hasReply | boolean | Whether the poster can be contacted through the reply system. Present with fetchDescriptions. |
replyUrl | string | Reply URL when available, or null. |
imageCount | number | Number of images on the listing. |
imageUrls | string[] | All listing image URLs. |
source | string | Constant source tag. Always craigslist. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"cities":["newyork"],"categories":["sss"],"searchQueries":["bicycle"],"maxListings":2,"fetchDescriptions":true}), with the long description trimmed for readability:
{"title": "for sale set of wheels great for 27 or 26 bike fast ready to ride","url": "https://www.craigslist.org/view/d/flushing-for-sale-set-of-wheels-great/rCGtNDQ4CWc5Y5fYxR7Kk2","postingId": 7944850486,"price": 50,"priceText": "$50","currency": "USD","city": "newyork","region": "new york city","area": "queens","neighborhood": "queens","latitude": 40.728,"longitude": -73.8195,"category": "sss","categoryName": "For sale","searchQuery": "bicycle","postedAt": "2026-08-14T07:08:16.000Z","attributes": { "condition": "good" },"hasReply": true,"replyUrl": "https://www.craigslist.org/reply/nyc/bop/7944850486/","imageCount": 1,"source": "craigslist","observedAt": "2026-08-14T07:09:43.945Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~craigslist-listings-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"cities":["newyork"],"categories":["sss"],"searchQueries":["bicycle"],"maxListings":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~craigslist-listings-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"cities":["losangeles","chicago"],"categories":["hhh"],"searchQueries":["2 bedroom"],"maxListings":200}'
Apify CLI:
apify call scrapers_lat/craigslist-listings-scraper \--input '{"cities":["newyork"],"categories":["jjj"],"searchQueries":["barista"],"maxListings":10}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per listing returned (
resultevent). See the pricing tab for the current per-result price. - AI add-ons billed separately.
withAiSummaryandwithAiCategorizeeach charge their own event only when they produce output, and are disabled on free plans. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 records per run. Upgrade for higher
maxListings.
FAQ and troubleshooting
A run returned 0 records. Why? The city subdomain was wrong, or the keyword matched nothing in that category. Confirm the subdomain from the address of that city's local craigslist site, and broaden the keyword. Zero-result runs are not charged.
Which cities are supported?
Any craigslist city. Use the subdomain shown in the address of that city's local site, for example newyork, losangeles, london.
Can I search several cities at once?
Yes. Add each city to cities; every keyword and category is applied to each city.
Why is description or attributes empty?
Those fields come from the listing detail page, collected when fetchDescriptions is on. Some listings do not publish a description or structured attributes; missing values are returned as null.
Do the AI add-ons work on a free plan? No. The AI add-ons require a paid Apify plan and are disabled automatically for free users. The base listing fields are always returned.
Is this an official craigslist tool? No. This actor is independent and has no affiliation with craigslist. It reads only data that is publicly available on the platform.
Related scrapers
- Crexi Commercial Real Estate Listings Scraper: commercial property listings, prices and broker contacts across the US.
- Copart Salvage Car Auction Lots Scraper: salvage and used vehicle auction lots across the US.
- eBay Product Listings Scraper: marketplace listings, prices and seller data.
- BizQuest Businesses For Sale Scraper: businesses and franchises listed for sale in the US.
- MercadoLibre Product Scraper: marketplace listings and prices across Latin America.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with craigslist. Accesses only publicly available listing data.
