Craigslist Scraper avatar

Craigslist Scraper

Pricing

from $1.40 / 1,000 results

Go to Apify Store
Craigslist Scraper

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

SolidCode

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

2

Monthly active users

5 days ago

Last modified

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 attributes object (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 startUrls and 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[] and emails[] parsed from the posting body, plus a contactObfuscated boolean that flips to false whenever a real phone or email is published. Filter contactObfuscated == false for outbound-ready leads, or sort by len(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
}

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

ParameterTypeDefaultDescription
startUrlsstring[][]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.
regionselectNew York City, NYCraigslist 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.
categoryselectFor 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.
searchTermstringnullOptional 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.

ParameterTypeDefaultDescription
priceMinintegernullOnly include postings priced at or above this amount. Ignored on categories without prices (Jobs, Community, Resumes).
priceMaxintegernullOnly include postings priced at or below this amount.
conditionselectAny conditionRestrict to a specific condition (For Sale categories only): New, Like new, Excellent, Good, Fair, or Salvage.
hasImagebooleanfalseWhen on, only return postings that have at least one photo.
postedTodaybooleanfalseWhen on, only return postings published in the last 24 hours.
sortselectNewest firstHow Craigslist orders the search results: Newest first, Relevance, Lowest price first, or Highest price first.

Output Options

ParameterTypeDefaultDescription
includeDetailsbooleantrueWhen 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.
maxResultsinteger200Hard 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

FieldTypeDescription
urlstringCanonical posting URL
postIdstringCraigslist's numeric post identifier
titlestringPosting headline
priceUsdnumber | nullNumeric price (named priceUsd for legacy reasons; populated for every region in the local currency)
currencystringISO currency code โ€” USD for US regions, CAD for the six Canadian markets
regionstringCity subdomain (e.g. sfbay, newyork, toronto)
scrapedAtstringISO 8601 timestamp of when this row was captured

Category & Location

FieldTypeDescription
categorySlugstringCraigslist category code (sss, cta, apa, etc.)
categoryLabelstringHuman-readable category name
subcategorySlugstring | nullDetail-level subcategory (bik, cto, mca, etc.) when known
subcategoryLabelstring | nullHuman-readable subcategory name
locationstring | nullFree-text neighbourhood as Craigslist displays it (e.g. "(Upper East Side)")
latitudenumber | nullPosting latitude โ€” note Craigslist jitters by ~0.05 degrees for privacy
longitudenumber | nullPosting longitude โ€” same neighbourhood-level precision caveat

Description & Attributes

Populated when includeDetails is on.

FieldTypeDescription
descriptionstringFull posting body, with QR-code and reply-button noise stripped
attributesobjectFlexible per-category attribute map โ€” typical keys include condition, make, model, year, odometer, paint, fuel, transmission, bedrooms, sqft, employment_type, compensation
postedAtstringISO 8601 timestamp when the posting was first published
updatedAtstring | nullISO 8601 timestamp of last update โ€” null when never updated

Media & Status

FieldTypeDescription
imageUrlsstring[]Full-resolution image URLs from the posting gallery
hasImagesbooleanTrue when at least one image is attached
phoneNumbersstring[]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.
emailsstring[]Email addresses parsed from the posting body. Excludes Craigslist's own @reply.craigslist.org relay addresses. Populated when includeDetails is on.
contactObfuscatedbooleanfalse when at least one direct phone or email was extracted; true when the poster only publishes Craigslist's relay link
replyTokenstring | nullPath component from the reply CTA โ€” <region>/<cat>/<postId> โ€” useful for de-duplicating across crawls
isDeletedbooleanTrue 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, not sf; washingtondc, not dc; losangeles, not la. 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 includeDetails for 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/longitude as 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-new with priceMin when 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 the currency field rather than the region.
  • Use isDeleted for catalogue freshness. Re-running the same query will return isDeleted: true rows for postings that disappeared between runs. Sync this flag into your downstream system so your inventory matches reality.
  • Filter contactObfuscated == false (or non-empty phoneNumbers/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. Pair condition: like-new with non-empty phoneNumbers for 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.

ResultsEstimated 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

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.