Craigslist Scraper — Jobs, Housing & For-Sale Listings
Pricing
from $5.00 / 1,000 craigslist listing scraped (search card)s
Craigslist Scraper — Jobs, Housing & For-Sale Listings
Scrape Craigslist classifieds across 700+ cities and all 8 categories: jobs, housing, for-sale, services, gigs, community, resumes and events. Multi-city fanout, repost dedup and optional contact extraction are built in.
Pricing
from $5.00 / 1,000 craigslist listing scraped (search card)s
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
1
Bookmarked
27
Total users
3
Monthly active users
a day ago
Last modified
Categories
Share
What is Craigslist Scraper - Jobs, Housing, Cars, Services API?
This Apify Actor is for users who need public Craigslist classifieds data from one city, a list of cities, or a metro preset. It accepts a Craigslist city subdomain, category, optional subcategory, search query, or direct Craigslist start URLs. Each dataset record represents one listing. The returned fields are centered on title, price text, city, neighborhood, posting time, URL, and, in detailed mode, parsed attributes, price numeric value, currency, images, updated time, and attributes. The outcome is a clean dataset of classifieds listings ready for analysis, monitoring, or downstream automation.
Best fit and connected workflows
This Actor fits workflows that need structured Craigslist listings across many cities and categories in one Apify run:
- City-level monitoring with a single subdomain such as
newyork,sfbay, orlondon - Multi-city fanout using
citiesfor independent searches in each marketplace - Search-driven collection with
searchQueryinside a chosen category - Saved-search replays using
startUrls - Enrichment runs with
includeDetails: truefor full listing detail, gallery images, and typed attributes - Public contact extraction with
extractContacts: truewhen the post body or visible reply URL contains contact data - Deduped multi-metro runs with
dedupAcrossCities: true
focused workflow
Craigslist Scraper - Jobs, Housing, Cars, Services API is designed as a focused workflow.
Practical scenario
A rental analyst, Maya, starts with the sfbay city subdomain, the housing category, subcategory: apa, and searchQuery: studio. She receives records with title, priceText, city, neighborhood, postedAt, and url, and in detailed mode also sees priceNumeric, currency, attributes, and primaryImage. Maya uses those fields to shortlist listings that match a budget and neighborhood target, then opens the source URLs to review the live postings and decide which ones to track in a follow-up run.
Input fields
| Field | Type | Purpose |
|---|---|---|
city | string | Single Craigslist city subdomain, such as newyork or sfbay. |
cities | array of strings | Multiple city subdomains for multi-city fanout. |
category | string | Top-level category: forsale, jobs, housing, services, gigs, community, resumes, events, or all. |
subcategory | string | Craigslist subcategory code such as cta, apa, sof, or mis. |
searchQuery | string | Free-text query run inside the chosen category. |
startUrls | array | Direct Craigslist search-result or post URLs. |
maxResults | integer | Maximum listings to return per city. |
includeDetails | boolean | Fetch full post details, gallery images, attributes, and reply URL. |
extractContacts | boolean | Extract public emails and phone numbers from the post body or visible reply URL. |
minPrice | integer | Minimum listing price in the local marketplace currency. |
maxPrice | integer | Maximum listing price in the local marketplace currency. |
hasPic | boolean | Return only listings with at least one image. |
ownerOnly | boolean | Return owner posts and skip dealer, agency, or recruiter posts. |
maxAgeDays | integer | Skip listings older than the specified age in days. |
dedupAcrossCities | boolean | Deduplicate reposts across cities within a run. |
proxyConfiguration | object | Apify Proxy settings, with residential proxy defaults provided in the contract. |
Focused input example
{"city": "sfbay","category": "housing","subcategory": "apa","searchQuery": "studio","maxResults": 25,"includeDetails": true,"hasPic": true,"ownerOnly": true,"dedupAcrossCities": true}
Output fields
| Field | Type | Purpose |
|---|---|---|
title | string | Listing title. |
priceText | string | Raw price text as shown on Craigslist. |
priceNumeric | number | Parsed numeric price in detailed output. |
currency | string | Currency code for the listing marketplace. |
city | string | Craigslist city subdomain. |
neighborhood | string | Neighborhood or area label when present. |
category | string | Top-level category. |
subcategory | string | Subcategory code. |
postedAt | string | Posting time. |
updatedAt | string | Update time in detailed mode. |
primaryImage | string | Main listing image in detailed mode. |
attributes | object | Parsed typed attributes for the category. |
url | string | Canonical listing URL. |
Illustrative output record
{"title": "Studio apartment near transit","priceText": "$1,850","priceNumeric": 1850,"currency": "USD","city": "sfbay","neighborhood": "San Francisco","category": "housing","subcategory": "apa","postedAt": "2026-01-15T10:30:00.000Z","updatedAt": "2026-01-15T10:30:00.000Z","primaryImage": "https://images.craigslist.org/....jpg","attributes": {"bedrooms": 0,"bathrooms": 1,"sqft": 420},"url": "https://sfbay.craigslist.org/..."}
How it works
The Actor accepts either a single city, multiple cities, a preset such as topUSMetros or topGlobalMetros, or direct Craigslist URLs. It pages through Craigslist search results in 120-item pages until it reaches maxResults or the search runs out. In search-card mode it returns the listing card fields covered by the charging contract. In detailed mode it opens each listing and returns the richer record fields described in the dataset schema. When dedupAcrossCities is enabled, the run keeps one row per matched repost fingerprint across the selected cities.
Pricing
Craigslist Scraper - Jobs, Housing, Cars, Services API uses Pay per event with Apify platform usage included. The contract defines an actor-start event and two listing events: listing-scraped for search-card output and listing-detailed for full post output. Open the live Pricing tab in Apify Console for the current rates and platform usage details.
For example, a run that returns fifty search-card listings charges fifty listing-scraped events, plus the run start event and Apify platform usage. A detailed run with the same number of listings charges fifty listing-detailed events instead.
Use with AI agents (MCP)
This Actor is an Apify Actor usable through Apify MCP. It is suited for agent workflows that need structured Craigslist listings as tool output rather than manual browsing.
Tool identity: khadinakbar/craigslist-all-in-one-scraper
Tool behavior: collect Craigslist classifieds by city, category, query, or saved search URL, then return dataset rows that can be interpreted by downstream agents.
Find current housing listings in sfbay for studios under 2000, return detailed records with images and parsed attributes, and summarize the city, neighborhood, price, and posting time for each row.
Output interpretation:
datasetpoints to the full scraped listings datasetrunSummarypoints to the run summary record with counts and warnings- Detailed records include typed attributes, images, and the canonical listing URL
- Search-card records are lighter and align with the cheaper
listing-scrapedevent
Provenance and scope:
- Listings come from public Craigslist pages
- The actor uses Craigslist city subdomains and categories defined in the input schema
extractContactsonly applies to public contact information present in the body or visible reply URLstartUrlscan replay exact Craigslist search-result or post URLs
Pagination and cost guidance:
- Craigslist pagination is 120 items per page
maxResultsbounds collection per city- Detailed mode uses the higher per-listing event
- Multi-city fanout can increase output volume, so
dedupAcrossCitieshelps keep reposts from repeating across cities
Apify API example
const { ApifyClient } = require("apify-client");const client = new ApifyClient({token: process.env.APIFY_TOKEN,});async function main() {const run = await client.actor("khadinakbar/craigslist-all-in-one-scraper").call({city: "sfbay",category: "jobs",searchQuery: "remote python",maxResults: 10,includeDetails: true,});const dataset = client.dataset(run.defaultDatasetId);const { items } = await dataset.listItems();console.log("First items:", items);}main().catch(console.error);
Best results and outcome guidance
Start with one city and a small maxResults value, then widen the run once the query shape is confirmed. Use subcategory to narrow broad categories such as forsale, jobs, or housing. Use includeDetails: true when you need parsed attributes, image galleries, or reply URLs, and use search-card mode when title, price, city, neighborhood, and URL are enough. Use dedupAcrossCities: true for metro fanout when the same listing can appear in more than one city. For price-filtered work, combine minPrice, maxPrice, and hasPic for a cleaner shortlist.
Continue the workflow
- Then use Depop Scraper to extend Craigslist Scraper - Jobs, Housing, Cars, Services API with a neighboring commerce research source when the brief calls for Depop data.
- Then use Coupang Product Scraper - Prices & Listings to extend Craigslist Scraper - Jobs, Housing, Cars, Services API with a neighboring commerce research source when the brief calls for Coupang data.
Design note
I found that the live output contract exposes exactly two top-level output entries: dataset and runSummary. That made it clear the README should frame the run around the dataset plus the separate summary record rather than implying any additional top-level outputs.
FAQ
Can I run one search across many cities?
Yes. Use cities for an explicit list, or use the city preset values described in the input schema for metro fanout.
When should I use includeDetails?
Use it when you need the full listing body, typed attributes, full gallery images, or reply URL. Use search-card mode when the listing card fields are enough.
How does deduplication work across cities?
When dedupAcrossCities is enabled, the Actor keeps a per-execution fingerprint and drops repeated reposts across the selected cities.
Can I replay a saved Craigslist search?
Yes. Put the Craigslist search-result URL or listing URL into startUrls.
How do I get public contact details?
Set extractContacts: true together with includeDetails: true. The Actor extracts contact data that appears publicly in the post body or visible reply URL.
Which categories are available?
The input schema supports forsale, jobs, housing, services, gigs, community, resumes, events, and all.
Responsible use
This Actor retrieves public Craigslist classifieds and respects the source pages described in the contract. Use it in ways that align with Craigslist's terms and applicable law. Use the returned URLs, prices, and attributes as source-linked records for review, analysis, or automation, and verify any sensitive decision directly on the Craigslist listing before acting on it.