Craigslist Scraper Premium
Pricing
$29.00/month + usage
Craigslist Scraper Premium
Scrape Craigslist listings by city, category, and keyword. Export titles, prices, dates, URLs, images, descriptions, locations, IDs, attributes, salary, and housing details.
Pricing
$29.00/month + usage
Rating
0.0
(0)
Developer
Newbs
Maintained by CommunityActor stats
1
Bookmarked
7
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape Craigslist listings by city, category, and keyword. Full listing details are enabled by default. The Actor uses Craigslist’s lightweight JSON endpoints, with an HTML fallback, and fetches up to 12 listing details concurrently. It supports bulk exports of up to 10,000 listings.
Input
{"category": "for sale","city": "New York","searchKeyword": "iPhone","numberOfResults": 30}
| Field | Default | Description |
|---|---|---|
category | for sale | community, housing, jobs, services, for sale, gigs, or resumes. |
city | New York | City name, site slug, city URL, or https://www.craigslist.org/area/newyork. |
searchKeyword | empty | Optional search text. |
numberOfResults | 10 | Maximum listings to return, 1–10,000. Availability, runtime and spending limits may reduce the total. |
includeDetails | true | Fetch descriptions, dates, numeric post IDs, gallery images, addresses, and attributes. Set to false for search-only exports. |
maxConcurrency | 12 | Concurrent detail requests, 1–32. Lower this when rate-limited. |
requestTimeoutSecs | 15 | Timeout for each HTTP attempt, 5–60 seconds. |
maxRetries | 1 | Retries for temporary failures, 0–2. Removed listings are not retried. |
proxy | direct connection | Optional automatic Apify datacenter proxy (useApifyProxy: true). Residential proxies, selected groups, custom URLs and credential overrides are rejected before scraping. |
Fast search-only export
{"category": "housing","city": "sfbay","numberOfResults": 1000,"includeDetails": false}
This mode saves titles, URLs, prices, locations, and any images available in search metadata. Descriptions and addresses require full details; IDs, dates, salary and other metadata are included when available in search data. listingKey identifies both older numeric URLs and newer opaque Craigslist URLs.
Output
Existing fields are preserved: title, priceInfo, postedDate, updatedDate, postLink, imageSrc, description, location, id, postAdress, postAddress, attribute, companyName, salary, housingSize, category, city, searchKeyword, and scrapedAt.
Both postAdress (the original spelling) and postAddress contain the same address. Missing source fields remain empty strings or empty arrays. id remains the numeric Craigslist post ID when available; listingKey can also represent a modern opaque URL identifier.
Every exported listing has detailStatus: "complete" when details were fetched or "not_requested" for a search-only export. Optional fields can still be empty when Craigslist does not provide them.
Removed or failed detail listings are excluded from the result dataset. The Actor tries additional search candidates to reach your requested count. A sample of up to 100 failed listing URLs and error codes is saved separately in the key-value store’s DIAGNOSTICS record. Empty searches and errors never create billable diagnostic rows.
The key-value store’s OUTPUT record reports result counts, failures, search pages, HTTP requests, retries, downloaded bytes, timing, API/fallback usage, billing counters, and the reason the run stopped. Status is complete, partial, empty, or failed. A run can finish below the requested count when the source is exhausted or the spending limit is reached. A partial run may contain useful, successfully completed listings.
Pricing and result billing
When pay-per-result pricing is active, one result means one successfully saved listing in the default dataset. Search-only listings also count as results. The Actor checks the remaining spending allowance before fetching details and before saving each batch. It uses Apify’s automatic dataset-item event; failed listings and diagnostics are never written to the billable dataset.
The new pricing is $0.50 per 1,000 successfully saved results ($0.0005 each), with Apify platform usage included and no additional start fee. Search-only results have the same per-result price. During the scheduled transition from rental pricing, the current rental terms remain active until the effective date shown in Apify Store. No price is hard-coded in the scraper.
Reliability and performance
- Uses Craigslist’s current canonical search URLs, avoiding two legacy redirects.
- Reuses HTTP connections and bounds concurrency; results retain search order.
- Streams listing rows to Apify in batches of up to 64 full listings or 1,000 search-only listings, keeping memory bounded and making results available during the run.
- Fetches bulk search metadata in one request; stops detail requests at the result or spending limit. The HTML fallback follows only explicit next-page links and stops on repeated pages.
- Deduplicates URLs and resolved numeric post IDs.
- Retries transient errors with backoff, respects
Retry-After, and stops within a scraping budget of at most 240 seconds (less for shorter platform timeouts). - Extracts all static gallery links and removes duplicate image sizes.
- Defaults to 256 MB of memory, with a 512 MB maximum to limit resource costs.
- Uses a Node.js 22 runtime, a locked dependency tree, and a small browser-free container.
Craigslist results change continuously. Network latency, server load, proxy location, removed posts, and blocking affect runtime and completeness. The supported datacenter proxy usage is included in the new result price. The Actor does not use residential, Unblocker, SERP or custom proxies.
Local development
Requires Node.js 22 or newer.
npm cinpm testnpm run checknpx apify-cli validate-schemanpx apify-cli run --input-file example-input.json
For a manual local run, put input in storage/key_value_stores/default/INPUT.json, then run npm start. Use CRAWLEE_STORAGE_DIR to select a separate local storage directory.