Craigslist Listings Scraper - Search, Prices & Details
Pricing
from $1.06 / 1,000 listing searches
Craigslist Listings Scraper - Search, Prices & Details
Search Craigslist across many cities in one run. Every listing as a clean row: title, price, photos, neighbourhood, GPS and post date, plus the full description on demand.
Pricing
from $1.06 / 1,000 listing searches
Rating
0.0
(0)
Developer
SIÁN OÜ
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Craigslist Listings Scraper — Search, Prices, Photos & GPS 📋
🏙️ Search TEN cities in one run — the thing craigslist.org cannot do
For sale, housing, jobs and gigs from any Craigslist city on earth, as clean rows
Craigslist has no national search. One search on craigslist.org covers one city and stops at about 2,880 results, which is why buyers, agents and resellers end up opening twenty tabs. This Craigslist scraper takes a list of cities and returns every matching listing as structured data: title, price, photos, neighbourhood, GPS coordinates and post date, plus the full description and the seller's attribute table when you ask for it.
Built for lead generation, price research, dealer monitoring and resale sourcing. Test it with 25 listings free. No credit card, no API key, no login.
🔎 What is the Craigslist Listings Scraper — and when should you use it?
The Craigslist Listings Scraper turns public Craigslist listings from any city in the world into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.
Use it when you need: listings from one or many Craigslist cities at once: title, asking price, photos, neighbourhood, GPS coordinates, post date and the direct posting URL. Section-specific columns come with them — bedrooms and square footage on housing, the odometer reading on vehicles, the pay line on jobs and gigs. Switch on full descriptions and each row also carries the complete posting body and the seller's attribute table.
Use something else when: the listing is not on Craigslist. Use eBay Data Scraper for national resale listings with sold prices and shipping, where Craigslist is local and cash-in-hand. Use Apartments.com Property Scraper for managed rentals with floor plans and amenity data, where Craigslist carries private landlords. Use ZipRecruiter Jobs Scraper for job postings with salary and company across a whole metro, where Craigslist carries the small local hiring the big boards never index. This actor covers the public listing sections. Craigslist forums, personals and anything behind a login are out of scope, and reply addresses are anonymised relays rather than real seller contacts.
🤖 Use with AI agents
Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/craigslist-scraper
Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.
Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want listings and prices from Craigslist using the Apify Actor `sian.agency/craigslist-scraper`.Use it when I need: listings from one or many Craigslist cities at once: title, asking price, photos, neighbourhood, GPS coordinates, post date and the direct posting URL. Section-specific columns come with them — bedrooms and square footage on housing, the odometer reading on vehicles, the pay line on jobs and gigs. Switch on full descriptions and each row also carries the complete posting body and the seller's attribute table.Don't use it when: the listing is not on Craigslist — use ebay-data-scraper or apartments-com-property-scraper or ziprecruiter-jobs-scraper instead.How to call it: give `cities` a list of Craigslist subdomains (`newyork`, `losangeles`, `sfbay`) plus a `category` and an optional `query`. Narrow with `minPrice`, `maxPrice`, `sellerType` (`owner` or `dealer`), `hasImage`, `postedToday` or a `postalCode` and `searchDistance`. `includeDetails` adds the full posting body and attribute table for an extra charge per listing. To expand postings you already have, set `operation` to `detail` and pass `listingUrls`; to reuse a search you built on craigslist.org, paste it into `searchUrls`.Start with this input:{"cities": ["newyork"],"category": "apa","sellerType": "owner","maxResults": 100}Ask me which Craigslist cities and which section to search, and whether they want private sellers, dealers or both, then run the Actor and summarise the results as a table.
Things you can ask your agent for:
- Pull every owner-listed apartment posted today in New York, Chicago and Austin and rank them by price per bedroom.
- Find used Tacomas under $20,000 across five West Coast cities and show me the odometer against the asking price.
- Give me today's free-stuff listings with photos within 10 miles of ZIP 78704.
Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/craigslist-scraper.md.
📋 Overview
Paste a city, pick a section, press Run. This Craigslist listings scraper turns any Craigslist search into a spreadsheet, in about ten seconds.
Why professionals choose this Craigslist scraper:
- ✅ Every city worldwide: newyork, losangeles, sfbay, toronto, london, berlin. Pass the subdomain and it works
- 🏙️ Multi-city in one run: the ~2,880-result ceiling is per city, so more cities is how you get more data
- ⚡ 360 listings per request: a 100-row run finishes in about 10 seconds
- 🎯 Section-aware rows: cars carry the odometer, apartments carry bedrooms and square footage, jobs carry the pay line
- 💰 From $1.20 per 1,000 listings: pay per row delivered, never for a failed one
- 📸 Photos and GPS on every row: 600x450 photo URLs and exact coordinates, where a listing normally gives you an address string
- 🆕 Posted-today filter: schedule it daily and pay only for listings that are new since yesterday
✨ Features
- 🔍 Keyword search: the same words you would type into Craigslist's own search box, across one city or twenty
- 🗂️ 13 sections: for sale, cars and trucks, apartments, real estate, housing, jobs, gigs, services, community, furniture, electronics, computers, free stuff
- 🧑 Owner or dealer filter: private sellers for lead generation, dealers for competitive intelligence
- 💵 Price bands: min and max price, applied at the source so you are not billed for rows you filtered out
- 📮 Postal-code radius: centre a metro search on the neighbourhood you actually work in
- 📄 Full descriptions on demand: complete posting body, attribute table and every photo
- 🔗 Paste-a-URL mode: drop in any Craigslist search URL and every filter in it is honoured
- ♻️ Duplicate collapsing: reposts of the same car or apartment folded into one row
- 🆕 Posted-today mode: the cheap way to run this on a schedule
- 📊 Export anywhere: JSON, CSV, Excel, or straight into your own code via the API
🎬 Quick Start
Give it a city, a section and a keyword. No account, no API key, no proxy configuration. Press Run and the rows arrive.
curl -X POST https://api.apify.com/v2/acts/sian.agency~craigslist-scraper/runs?token=[YOUR_TOKEN] \-d '{"cities": ["newyork"], "category": "sss", "query": "bike"}'
🚀 Getting Started (3 Simple Steps)
Step 1: Name your cities
Type the Craigslist subdomains you want, one per line: newyork, losangeles, sfbay. It is the part before .craigslist.org in the address bar.
Step 2: Pick a section and a keyword
Choose the category (for sale, cars, apartments, jobs…), type a keyword or leave it empty to take the whole section, then set your price band or filters.
Step 3: Press Run
The first rows land in seconds. Download as CSV or JSON, or pull them straight from the API.
That's it! In about ten seconds, you'll have:
- Every matching listing with price, photos, neighbourhood and GPS
- Direct posting URLs that still work tomorrow
- A run report telling you what you got and exactly what it cost
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
| operation | string | No | search (listings by city) or detail (full data for posting URLs) |
| cities | array | No | Craigslist site subdomains, e.g. newyork, losangeles |
| category | string | No | Section to search: sss, cta, apa, rea, hhh, jjj, ggg, bbb, ccc, fua, ela, sya, zip |
| query | string | No | Search keyword. Empty takes the whole section |
| maxResults | integer | No | Stop after this many listings across all cities (default 100) |
| includeDetails | boolean | No | Fetch each posting page for the full description and attributes (extra charge per listing) |
| listingUrls | array | No | Posting URLs to expand, for Listing Detail mode |
| searchUrls | array | No | Craigslist search URLs; every filter in the URL is honoured |
| minPrice | integer | No | Cheapest listing to include. 0 means no lower bound |
| maxPrice | integer | No | Most expensive listing to include. 0 means no upper bound |
| sellerType | string | No | all, owner or dealer |
| hasImage | boolean | No | Skip listings with no photo |
| postedToday | boolean | No | Only listings posted today |
| hideDuplicates | boolean | No | Collapse reposts of the same item |
| postalCode | string | No | Centre the search on a postal code (needs a radius) |
| searchDistance | integer | No | Radius around the postal code, in miles. 0 searches the whole city |
| sort | string | No | date, dateoldest, rel, priceasc or pricedsc |
Example:
{"cities": ["newyork"],"category": "sss","query": "bike","maxResults": 100}
Multi-city sweep:
{"cities": ["newyork", "losangeles", "chicago", "sfbay", "seattle"],"category": "cta","query": "tacoma","minPrice": 5000,"sellerType": "owner","maxResults": 1000}
Owner-only rentals with full descriptions:
{"cities": ["austin"],"category": "apa","sellerType": "owner","postedToday": true,"includeDetails": true}
Paste a Craigslist search URL:
{"searchUrls": ["https://newyork.craigslist.org/search/apa?query=loft&min_price=2000&max_bedrooms=2"]}
Expand specific postings:
{"operation": "detail","listingUrls": ["https://www.craigslist.org/view/d/brooklyn-great-road-bike/jmHKs1noTrL3hjZfwNX7WA"]}
📤 Output
Every listing is one flat row, ready for Excel, a database or an AI agent. Results are saved to the Apify dataset with 28 fields including:
| Field | Type | Description |
|---|---|---|
| postingId | number | Craigslist posting ID |
| listingTitle | string | Listing title |
| price | number | Asking price as a number |
| priceText | string | Price as Craigslist displays it |
| url | string | Direct posting URL |
| postedAt | string | When it was posted (ISO 8601) |
| city | string | Craigslist site the listing belongs to |
| location | string | Neighbourhood or town the seller typed |
| latitude | number | Latitude |
| longitude | number | Longitude |
| imageUrl | string | First photo |
| imageUrls | array | Every photo on the posting (600x450) |
| imageCount | number | Number of photos |
| bedrooms | number | Bedrooms (housing sections) |
| areaSqft | number | Square footage (housing sections) |
| odometer | number | Odometer reading (vehicle sections) |
| compensationText | string | Pay line (jobs and gigs) |
| secondaryTitle | string | Role or employer line (jobs and gigs) |
| postingBody | string | Full description (with Fetch full descriptions on) |
| attributes | object | The seller's attribute table (with Fetch full descriptions on) |
| updatedAt | string | Last time the seller updated it (with Fetch full descriptions on) |
| categoryId | number | Craigslist's numeric sub-category id |
| countryCode | string | Two-letter country code of the site |
| sourceCategory | string | The category this run searched |
| sourceQuery | string | The keyword this run searched |
| status | string | success, or error for an input that could not be read |
Example:
{"postingId": 7955962521,"listingTitle": "Bubble Gum Beach Cruiser Bike","price": 75,"priceText": "$75","url": "https://www.craigslist.org/view/d/staten-island-bubble-gum-beach-cruiser/pZ7djFRXKej7WC6m5AKwG6","postedAt": "2026-08-28T15:36:27.000Z","city": "newyork","location": "Staten Island","latitude": 40.5682,"longitude": -74.1184,"categoryId": 68,"imageUrl": "https://images.craigslist.org/01515_2m3i8u6zIkI_0CI0t2_600x450.jpg","imageUrls": ["https://images.craigslist.org/01515_2m3i8u6zIkI_0CI0t2_600x450.jpg","https://images.craigslist.org/00k0k_1R3qROZiIrS_0CI0t2_600x450.jpg","... 5 more"],"imageCount": 7,"countryCode": "US","sourceCategory": "sss","sourceQuery": "bike","status": "success"}
💼 Use Cases & Examples
1. FSBO and Rental Lead Generation
Real-estate agents and investors find owners who are selling or renting without an agent.
Input: housing or real-estate section, sellerType: owner, postedToday: true, your metro's cities
Output: rent or asking price, bedrooms, square footage, neighbourhood, GPS and the full posting body
Use: work the list the morning it goes up, weeks before those owners appear on the portals
2. Local Price Research
Resellers and analysts see what things actually sell for, city by city.
Input: a keyword plus a list of cities, sorted by newest Output: every asking price with photo count, post date and location Use: price your own listing against the local market, or spot the city where the same item is $300 cheaper
3. Dealer and Inventory Monitoring
Dealers watch competitor stock without opening a single browser tab.
Input: cars and trucks, sellerType: dealer, postedToday: true, on a daily schedule
Output: new inventory with price, odometer, photos and posting URL
Use: track how fast rivals reprice and what is moving, paying only for the rows that are new
4. Resale Sourcing
Flippers find underpriced stock before anyone else does.
Input: furniture, electronics or free stuff, hasImage: true, sorted cheapest first
Output: price, photos, location and the seller's description
Use: a daily feed of buyable items inside a radius you set, ranked by price
5. Jobs and Gigs Aggregation
Recruiters and job boards capture local hiring the big boards never index.
Input: jobs or gigs across a metro cluster Output: title, pay line, location and post date Use: build a local jobs feed, or measure hiring demand in a market before you enter it
6. Market and Academic Research
Researchers measure supply, pricing and language across regions.
Input: the whole section for a set of cities, no keyword Output: thousands of rows with prices, coordinates and timestamps Use: study rent dispersion, used-car depreciation or informal labour markets with real, current data
🔗 Integration Examples
JavaScript/Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/craigslist-scraper').call({cities: ['newyork', 'losangeles'],category: 'apa',sellerType: 'owner',maxResults: 500});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].listingTitle, items[0].price);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('sian.agency/craigslist-scraper').call(run_input={'cities': ['newyork', 'losangeles'],'category': 'cta','query': 'tacoma','minPrice': 5000})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item['listingTitle'], item['price'], item['url'])
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~craigslist-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"cities": ["newyork"], "category": "sss", "query": "bike", "maxResults": 100}'
Automation Workflows (N8N / Zapier / Make)
- Trigger: Schedule it daily with
postedToday: true - HTTP Request: Call the actor API
- Process: Handle the JSON rows
- Action: Push new listings to your CRM, a Google Sheet or a Slack alert
📊 Performance & Pricing
FREE Tier (Try It Now)
- 25 listings per run: every field, every filter, same quality
- No credit card required
- Enough to check the data before you commit
PAID Tier (Production Ready)
- Unlimited listings per run, across as many cities as you list
- 360 listings per request, so a 1,000-row sweep takes about a minute
- Pay per result: $0.0012 per listing delivered, never for a failed row
- One Actor Start event per run ($0.005), whatever the run returns
| Metric | Value |
|---|---|
| Speed | 360 listings per request, ~10 s for 100 rows |
| Coverage | Every Craigslist site worldwide |
| Ceiling | ~2,880 listings per city per search (Craigslist's own limit) |
| Free tier | 25 listings per run |
| Paid tier | Unlimited |
💰 From $1.20 per 1,000 listings, with volume tiers down to $0.94 per 1,000. You pay per listing delivered.
❓ Frequently Asked Questions
Q: Which cities are supported?
A: Every Craigslist site in the world. Pass the subdomain: newyork, sfbay, toronto, london, berlin. Nothing is hard-coded, so a site Craigslist adds tomorrow works tomorrow.
Q: How many listings can I get from one search? A: About 2,880 per city per search. That is Craigslist's own ceiling, not ours. To go wider, add cities, split by section, or sweep one price band at a time.
Q: Does it return seller emails or phone numbers? A: Only when the seller typed one into the posting body, which the full-description option captures. Craigslist's reply button is an anonymised relay address, so a "seller email" column would be a relay, not a contact. We do not pretend otherwise.
Q: What does the full-description option cost? A: It fetches each posting page, so it bills one Listing Detail event ($0.0025 per listing, $2.50 per 1,000) on top of the search row. Leave it off and you pay for search rows only.
Q: Can I paste a Craigslist search URL instead of filling the form? A: Yes. Put it in Search URLs and every filter in that URL is honoured: keyword, price band, radius, sort, plus section-specific ones like bedrooms, make and model or employment type.
Q: What output formats are available? A: JSON, CSV and Excel, straight from the Apify dataset, or over the API in your own code.
Q: How do I only get new listings? A: Switch on Posted today and schedule the run daily. You are billed for the new rows only, instead of re-buying the whole market every morning.
Q: What does a run cost? A: One Actor Start event ($0.005) plus $0.0012 per listing delivered, about $1.21 for a 1,000-listing run. Failed rows are never charged. No API key and no proxy to configure.
Q: Is this legal? A: It only reads listings that are already public on Craigslist. See the legal note below before you collect anything that could count as personal data.
🐛 Troubleshooting
"…is not a Craigslist site"
- Use the subdomain only:
newyork, not "New York City" and not a full URL - Check it in your browser: the part before
.craigslist.org
Fewer listings than expected
- Craigslist caps a single city search at ~2,880 results; add cities or split by price band
- A narrow keyword plus a price band can genuinely match very little; try the section with no keyword
- Free accounts are capped at 25 rows per run
A posting URL returns "expired or removed"
- Craigslist deletes postings after 30-45 days
- Re-run the search to get live ones
Empty descriptions
- The full description only comes back with Fetch full descriptions switched on, or in Listing Detail mode
⚖️ Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
🤝 Support
Join our active support community
- 🐛 Found a bug? File an issue in the Apify Console Issues tab
- ⭐ Loving the tool? Leave a 5-star review — it helps us build more
- 🛠️ More automation tools in the SIÁN Agency Store
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools
Craigslist is a trademark of Craigslist, Inc. This actor is not affiliated with, endorsed by, or sponsored by Craigslist.