Craigslist Scraper — Jobs, Housing & For-Sale Listings avatar

Craigslist Scraper — Jobs, Housing & For-Sale Listings

Pricing

from $5.00 / 1,000 craigslist listing scraped (search card)s

Go to Apify Store
Craigslist Scraper — Jobs, Housing & For-Sale Listings

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

Khadin Akbar

Maintained by Community

Actor stats

1

Bookmarked

27

Total users

3

Monthly active users

a day ago

Last modified

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, or london
  • Multi-city fanout using cities for independent searches in each marketplace
  • Search-driven collection with searchQuery inside a chosen category
  • Saved-search replays using startUrls
  • Enrichment runs with includeDetails: true for full listing detail, gallery images, and typed attributes
  • Public contact extraction with extractContacts: true when 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

FieldTypePurpose
citystringSingle Craigslist city subdomain, such as newyork or sfbay.
citiesarray of stringsMultiple city subdomains for multi-city fanout.
categorystringTop-level category: forsale, jobs, housing, services, gigs, community, resumes, events, or all.
subcategorystringCraigslist subcategory code such as cta, apa, sof, or mis.
searchQuerystringFree-text query run inside the chosen category.
startUrlsarrayDirect Craigslist search-result or post URLs.
maxResultsintegerMaximum listings to return per city.
includeDetailsbooleanFetch full post details, gallery images, attributes, and reply URL.
extractContactsbooleanExtract public emails and phone numbers from the post body or visible reply URL.
minPriceintegerMinimum listing price in the local marketplace currency.
maxPriceintegerMaximum listing price in the local marketplace currency.
hasPicbooleanReturn only listings with at least one image.
ownerOnlybooleanReturn owner posts and skip dealer, agency, or recruiter posts.
maxAgeDaysintegerSkip listings older than the specified age in days.
dedupAcrossCitiesbooleanDeduplicate reposts across cities within a run.
proxyConfigurationobjectApify 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

FieldTypePurpose
titlestringListing title.
priceTextstringRaw price text as shown on Craigslist.
priceNumericnumberParsed numeric price in detailed output.
currencystringCurrency code for the listing marketplace.
citystringCraigslist city subdomain.
neighborhoodstringNeighborhood or area label when present.
categorystringTop-level category.
subcategorystringSubcategory code.
postedAtstringPosting time.
updatedAtstringUpdate time in detailed mode.
primaryImagestringMain listing image in detailed mode.
attributesobjectParsed typed attributes for the category.
urlstringCanonical 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:

  • dataset points to the full scraped listings dataset
  • runSummary points 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-scraped event

Provenance and scope:

  • Listings come from public Craigslist pages
  • The actor uses Craigslist city subdomains and categories defined in the input schema
  • extractContacts only applies to public contact information present in the body or visible reply URL
  • startUrls can replay exact Craigslist search-result or post URLs

Pagination and cost guidance:

  • Craigslist pagination is 120 items per page
  • maxResults bounds collection per city
  • Detailed mode uses the higher per-listing event
  • Multi-city fanout can increase output volume, so dedupAcrossCities helps 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.

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.