Craigslist Scraper [$5/1k💰] | Jobs | Housing | Cars avatar

Craigslist Scraper [$5/1k💰] | Jobs | Housing | Cars

Pricing

from $4.97 / 1,000 results

Go to Apify Store
Craigslist Scraper [$5/1k💰] | Jobs | Housing | Cars

Craigslist Scraper [$5/1k💰] | Jobs | Housing | Cars

Scrape Craigslist listings for jobs, housing, used cars, and for-sale items. Extract title, price, location, images, contact info, and posting dates as structured JSON or CSV data for lead generation, rental price monitoring, and market research.

Pricing

from $4.97 / 1,000 results

Rating

0.0

(0)

Developer

Ahmed Jasarevic

Ahmed Jasarevic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Craigslist Scraper & API Alternative — Jobs, Housing, Used Cars & For-Sale Data

Extract structured Craigslist listings data — title, price, location, posting date, images, full description, and published contact info — from any US city, then export to JSON, CSV, or Excel for rental price monitoring, used-car market research, job market analysis, and lead generation. Craigslist has no official API, so this actor is the fastest way to get clean Craigslist data programmatically.

Main Use Cases

  • Rental price monitoring & housing market research — track asking rents, bedrooms, bathrooms, pet policy, and geo-coordinates for apartments in any city, and spot rent trends over time.
  • Used car price tracking & vehicle market data — collect cars & trucks listings with price, images, location, and mileage attributes to benchmark used-vehicle values.
  • Craigslist lead generation — extract gig and services postings with published contact info (email / phone from the print section) for local lead-gen outreach.
  • Job market research & recruiting intelligence — pull job postings with employer name, employment type, compensation, valid-through dates, and location in bulk.
  • Deal sourcing & flipping — monitor for-sale listings with price, photos, and seller location to find underpriced items; combine with &sort=priceasc or &postedToday=1 URL filters.
  • Market-wide dataset building — run multiple search URLs (different cities/categories) in one crawl and download a structured, deduplicated Craigslist dataset for analysis or ML.

How It Works

  1. You provide one or more Craigslist search URLs or direct posting URLs — any city, any category, any filter. All URL parameters (price range, pet-friendly, posted-today, sort order) pass through as-is.
  2. The actor parses each static search page for listing titles, prices, locations, and detail-page URLs.
  3. For every listing it fetches the detail page and extracts Craigslist's embedded ld_posting_data JSON-LD structured data (jobs: JobPosting; housing: apartment/house schema; for-sale: Product), falling back to HTML selectors when JSON-LD is unavailable.
  4. Results are normalized — images to 600x450 and deduplicated, prices as display strings, dates as ISO timestamps — and pushed to your dataset, ready for API access or CSV/Excel export.

No browser, no login, no CAPTCHA solving. Plain HTTP via CheerioCrawler — fast, cheap, and reliable.

Monitor Craigslist Rental Prices for Housing Market Research

Housing listings return category-specific structured fields that generic scrapers miss:

FieldTypeNotes
numberOfBathroomsTotalnumberFrom JSON-LD
petsAllowedbooleanPet policy from JSON-LD
attributesobjectBedrooms, sqft, laundry, parking, etc. from the HTML attrgroup
latitude / longitudestringGeo-coordinates for mapping

Example: https://www.craigslist.org/search/area/sfbay?cat=apa — append &min_bedrooms=2, &pets_dog=1&pets_cat=1, or &postedToday=1 for custom monitoring feeds. Rental-housing researchers routinely use Craigslist as their primary listing source (e.g. the 2017 Boeing & Waddell study of 11 million US Craigslist rental listings) — this actor makes that data collection repeatable.

Track Used Car Prices and Vehicle Listings

Cars & trucks listings include Product JSON-LD with offers.price and priceCurrency, plus images, location, and full descriptions — the raw material for used-car price comparison and value-tracking datasets. Example: https://www.craigslist.org/search/area/sfbay?cat=cta.

Scrape Craigslist Job Postings With Employer and Employment Type

Job postings include fields most generic scrapers don't extract:

FieldSourceNotes
hiringOrganizationJSON-LD JobPostingEmployer name
employmentTypeJSON-LD JobPostingFULL_TIME, PART_TIME, etc.
validThroughJSON-LD JobPostingPosting expiry date
priceHTML / JSON-LDCompensation (often "$0" for jobs)

Example: https://www.craigslist.org/search/area/sfbay?cat=jjj.

Find Craigslist For-Sale Deals for Flipping and Resale Arbitrage

For-sale listings give you price, images, location, and full body text. Mix URL filters to find undervalued items: &sort=priceasc, &max_price=500, &min_price=100, &hasPic=1. Example: https://www.craigslist.org/search/area/sfbay?cat=sss.

Generate Local Leads From Craigslist Gigs and Services

Gigs and services listings include title, description, and location. When posters publish their contact info in the print section, the actor extracts it (contactInfo field).

CategoryURL segment
Gigs (labor, computer, creative, domestic, etc.)?cat=ggg
Services (automotive, beauty, computer, etc.)?cat=bbb
Free stuff?cat=zip

Input

FieldTypeRequiredDefaultNotes
startUrlsarray<{url}>YesCraigslist search URLs or direct posting URLs. Any city, category, or filter.
maxItemsintegerNo50Max detail pages to scrape (1–500). Free accounts are capped at 10.
maxConcurrencyintegerNo3Concurrent requests (1–10). Keep at 2–5 to avoid rate-limiting.
maxRequestsPerCrawlintegerNo100Hard cap on total HTTP requests incl. search pages (1–1000).
proxyConfigurationobjectNo{ "useApifyProxy": true }Apify proxy settings. US residential recommended for large runs.

Output

Each dataset item is one Craigslist posting with these fields:

FieldTypeDescription
titlestringPosting title
pricestringPrice or compensation (e.g. "$350.00", "$0" for jobs)
locationstringCity, state, postal code (e.g. "Emeryville, CA, 94662")
postingDatestringISO timestamp of when the posting was published
urlstringDirect link to the listing
categorystringCraigslist category (jobs, housing, for sale, gigs, services)
imagesstring[]Array of image URLs (normalized to 600x450, deduplicated)
bodyTextstringFull posting description text
contactInfostringEmail/phone from the print section (often null — see FAQ)
postingIdstringCraigslist post ID
searchTitlestringTitle as shown on the search results page
latitude / longitudestringGeo-coordinates when available in JSON-LD
hiringOrganizationstringEmployer name (jobs only)
employmentTypestringFULL_TIME, PART_TIME, etc. (jobs only)
validThroughstringPosting expiry date (jobs only)
numberOfBathroomsTotalnumberBathrooms (housing only)
petsAllowedbooleanPet policy (housing only)
attributesobjectCategory-specific attributes: bedrooms, sqft, laundry, parking, etc.
priceCurrencystringCurrency code (for-sale Product listings)
ldTypestringJSON-LD @type: JobPosting, Product, Apartment, etc.
ldDataobjectFull JSON-LD structured-data blob as returned by Craigslist

Example Input

{
"startUrls": [
{ "url": "https://www.craigslist.org/search/area/sfbay?cat=apa&min_bedrooms=2" },
{ "url": "https://www.craigslist.org/search/area/sfbay?cat=cta&max_price=15000" }
],
"maxItems": 50,
"maxConcurrency": 3,
"maxRequestsPerCrawl": 100
}

Example Output

{
"title": "vintage fiberglass Eames chair, Gray and Parchment,1950s",
"price": "$350.00",
"location": "Emeryville, CA, 94662",
"postingDate": "2026-08-08T12:59:09-0700",
"url": "https://www.craigslist.org/view/d/emeryville-vintage-fiberglass-eames/tCUrwRGUps5yCBfVhYRc3f",
"category": "for sale",
"images": [
"https://images.craigslist.org/00e0e_fOPQDEQBI7j_0lO0t2_600x450.jpg",
"https://images.craigslist.org/00M0M_Jqu4UmLmVF_0t20t2_600x450.jpg"
],
"bodyText": "One remaining from the pair previously listed. Mid-1950s c.1955-57 Herman Miller DAX-1 chair...",
"contactInfo": null,
"postingId": "7952375424",
"latitude": "37.836500",
"longitude": "-122.280400",
"hiringOrganization": null,
"employmentType": null,
"attributes": {},
"ldType": "Product",
"ldData": {
"@type": "Product",
"name": "vintage fiberglass Eames chair, Gray and Parchment,1950s",
"offers": { "price": "350.00", "priceCurrency": "USD" }
},
"searchTitle": null
}

Integrations & Automation

  • API access: call this actor programmatically via the Apify API from any script or backend — it acts as an unofficial Craigslist API.
  • Scheduling: set a daily or weekly schedule to monitor rental prices, used-car prices, or new listings automatically. Recurring runs also let you build time-series price datasets that stay fresh.
  • Webhooks: get notified whenever a run finishes and a new dataset is ready.
  • Zapier / Make: connect Craigslist data to your CRM, spreadsheet, or alert system via no-code integrations.
  • Dataset export: download JSON, CSV, Excel, HTML, or XML — or stream via the API into a data warehouse.

Recurring-use tip: run daily for price/listing monitoring in your target cities — CheerioCrawler keeps runs cheap, and the dataset records new entries over time.

ActorWhy it's relatedLink
Facebook Marketplace ScraperLargest social marketplace — the main Craigslist alternative for local listings dataapify.com/apify/facebook-marketplace-scraper
Indeed ScraperWidely used job listings scraper (28K+ users) — complements Craigslist job dataapify.com/misceres/indeed-scraper
Airbnb Scraper & Market MonitorRental/accommodation price monitoring in the same housing-data clusterapify.com/ahmed_jasarevic/airbnb-scraper-listings-prices-hosts
eBay ScraperSold-price tracking for resale/arbitrage research on the same audienceapify.com/ahmed_jasarevic/ebay-scraper
Vinted Arbitrage ScraperCross-country price comparison — adjacent deal-sourcing workflowapify.com/ahmed_jasarevic/vinted-cross-country-arbitrage-scraper

Frequently Asked Questions

Does Craigslist have an official API?

No. Craigslist does not provide a public API. This actor acts as an unofficial Craigslist API: you provide any Craigslist search URL and get structured JSON back. No Craigslist account, API key, or login is needed on the Craigslist side.

Why use this actor instead of the official API?

Because there is no official Craigslist API, and no official data export for third parties. Using this actor saves you from maintaining your own scraper (selector maintenance, pagination, rate limiting) and gives you category-specific fields — employer and employment type for jobs, bedrooms/bathrooms/pets for housing, price currency for for-sale — that most generic tools don't extract.

How do I scrape Craigslist without getting blocked?

Keep maxConcurrency at 2–5, use the Apify proxy (US residential for large runs — Craigslist is known to block datacenter IPs), and don't hammer the site with frequent large crawls. This actor uses CheerioCrawler (plain HTTP, no browser), which is lighter on Craigslist's servers than browser-based scrapers.

This is your responsibility to evaluate. Craigslist's Terms of Use expressly prohibit collection of content via "robots, spiders, scripts, scrapers, crawlers, or any automated or manual equivalent," and Craigslist has enforced this in litigation. This actor only accesses publicly available pages (no login bypass, no CAPTCHA solving) and is intended for research and business use — but you should review Craigslist's ToS and applicable law before running it. See the Legal & Compliance Defense below.

What is the best way to extract Craigslist data to CSV/Excel?

Run this actor with your search URLs, then download the finished dataset as CSV, Excel, or JSON from the Apify Console — or pull it via the Apify API into your own pipeline. There are also ready integrations for Zapier and Make.

How much does it cost to scrape Craigslist?

Pay-per-event pricing:

  • $0.0005 per actor start
  • $0.005 per result (dataset item) — about $5 per 1,000 listings, full detail fields included

A 100-listing run costs roughly $0.50. Free Apify accounts get a capped preview (10 items per run). Pricing is slightly lower on higher Apify plans.

Why does contactInfo come back as null most of the time?

Craigslist hides most contact details behind a reply button. Email/phone is only visible in the print section when the poster chooses to publish it directly. This is a Craigslist design limitation, not a bug. When present, the actor returns it as email: ... / phone: ....

Can I pass Craigslist filters like price range, pet-friendly, or sort order?

Yes — any Craigslist URL filter works. Just include it in your search URL: &min_price=500&max_price=2000, &pets_dog=1, &postedToday=1, &sort=priceasc, &hasPic=1. The actor passes all URL parameters through unchanged.

How does this compare to other Craigslist scrapers?

See the capability table in Competitive Positioning below — the short version: this actor extracts detail-page fields (category-specific JSON-LD, contact info when published, geo coordinates) that many Craigslist tools skip, and it accepts any search URL instead of fixed dropdowns.

What are the alternatives to this actor / to Craigslist data sources?

For listing data: the Facebook Marketplace Scraper covers the largest Craigslist alternative, and the Indeed Scraper is the popular choice for structured job data. For housing data specifically, Airbnb/rental-portal scrapers (see Related Actors) complement Craigslist, which remains the most-used US rental listing source. For buying-and-selling platforms in general, OfferUp, eBay, and Nextdoor are the usual Craigslist alternatives.

How do I monitor new Craigslist listings automatically?

Use the Apify Schedule feature: run the actor every 15–30 minutes (jobs/gigs, high turnover) or daily (housing/cars), and use webhooks or Zapier/Make to alert on new items. Each run's dataset records the posting date, so you can diff runs for "new since last time".

Competitive Positioning

Verified against live competitor pages and this actor's source (see keyword-research.md for method):

CapabilityTypical Craigslist scrapersThis actor
InputFixed city/category/query dropdownsAny Craigslist search URL, all filters preserved
Price extractionDisplay string onlyDisplay string + currency code from Product JSON-LD
Job fieldsTitle/price/location onlyhiringOrganization, employmentType, validThrough
Housing fieldsRarelyBeds/baths/pets via attrgroup + JSON-LD bathroom/pet fields
Geo-coordinatesOften only on search cardsLatitude/longitude from detail-page JSON-LD
Contact infoRareEmail/phone from print section when posted publicly
Extraction robustnessHTML selectors onlyJSON-LD ld_posting_data + HTML fallback
ImagesRaw URLsNormalized 600x450, deduplicated

For AI Agents & LLM Apps

Purpose: Extract structured Craigslist listing data (title, price, location, images, description, contact info) from any Craigslist search URL or direct posting URL. Returns JSON dataset items — one per listing — via the Apify API.

Minimal input:

{
"startUrls": [
{ "url": "https://www.craigslist.org/search/area/sfbay?cat=sss" }
],
"maxItems": 50
}

Variant — direct posting URL (no search page, extracts that single listing):

{
"startUrls": [
{ "url": "https://sfbay.craigslist.org/eby/for/d/emeryville-vintage-fiberglass-eames/7952375424.html" }
],
"maxItems": 5
}

Output fields: title, price, location, postingDate, url, category, images, bodyText, contactInfo, postingId, searchTitle, latitude, longitude, hiringOrganization, employmentType, validThrough, numberOfBathroomsTotal, petsAllowed, attributes, priceCurrency, ldType, ldData.

Behaviors an agent should know:

  • A URL containing /search/ is auto-treated as a search page; any other URL is treated as a direct posting detail page. Both work in startUrls.
  • Free accounts are capped at 10 results regardless of maxItems. Paid accounts get the full cap.
  • maxRequestsPerCrawl caps total HTTP requests (search pages + detail pages). If it's too low relative to maxItems, the run may stop before reaching the item cap — raise it for large runs.
  • contactInfo is usually null — Craigslist hides contact behind a reply button; only posters who publish info in the print section are captured.
  • price is always a string (e.g. "$350.00"), never a number.
  • Images are normalized to 600x450 and deduplicated.
  • maxConcurrency is used as-is: keep 2–5 to avoid rate limiting. Enable the proxy / US residential for large runs.

Billing: PAY_PER_EVENT — $0.0005 per start + $0.005 per result (≈ $5 per 1,000 results).

This actor is independent and is not affiliated with, endorsed by, or sponsored by Craigslist, Inc.

This actor accesses only publicly available Craigslist pages — it performs no login, no CAPTCHA solving, and no authenticated sessions. It makes standard HTTP requests to pages that are openly accessible without a Craigslist account.

Craigslist's Terms of Use prohibit automated access to its site. Users are responsible for their own compliance with Craigslist's Terms of Service and applicable law, and for any data they collect or republish. Where personal contact data is captured (when posters publish it), users should not use it for unsolicited commercial outreach in violation of applicable law (e.g. CAN-SPAM, GDPR, CCPA, TCPA). This section is not legal advice.

SEO Keywords

craigslist scraper, scrape craigslist listings, craigslist api, craigslist api alternative, how to scrape craigslist, craigslist rental price monitoring, craigslist housing market data, craigslist used car price data, craigslist job postings data, craigslist lead generation, craigslist email and phone extraction, craigslist for sale scraper, craigslist gigs and services scraper, craigslist to csv, craigslist data export, craigslist mcp, scrape craigslist without getting blocked, does craigslist have an api, craigslist new york scraper, craigslist san francisco bay area scraper, craigslist los angeles scraper, craigslist chicago scraper, craigslist seattle scraper, facebook marketplace scraper vs craigslist, craigslist alternatives