Craigslist Scraper — Listing Titles, Prices & Locations
Pricing
from $2.40 / 1,000 results
Craigslist Scraper — Listing Titles, Prices & Locations
Scrape Craigslist search results in 26 US metros by category and keyword: listing title, asking price, neighborhood and photo URL. About USD 3 per 1,000.
Pricing
from $2.40 / 1,000 results
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
Craigslist Scraper reads Craigslist search results for 26 large US metros and returns each listing's title, asking price, neighborhood or town, main photo URL, listing link, posting date and full description, tagged with the city, category and keyword you searched. It is built for resellers, car dealers, rental-market researchers and analysts who track local asking prices, and it costs about USD 3 per 1,000 listings on the FREE tier (USD 2.40 per 1,000 on GOLD).
What data does the Craigslist scraper return?
Each listing is one dataset row:
| Field | What it contains |
|---|---|
title | Listing title as shown in search results |
price | Asking price formatted as text, for example $19,900, or null when none is given |
location | Neighborhood or town from the listing, for example Oakland |
imageUrl | URL of the first listing photo, or null |
category | The Craigslist category code you searched, for example cta |
city | The Craigslist site searched, for example sfbay |
searchKeyword | Your keyword, or (all) when you searched without one |
scrapedAt | Collection time (ISO 8601) |
url | Link to the listing on Craigslist |
datePosted | When the listing was posted (ISO 8601, UTC) |
description | Full listing text, with line breaks kept |
In a cloud run on 2026-10-27 (San Francisco Bay Area, cars and trucks, 20 listings), all 20 rows had every field above filled.
How do I scrape Craigslist listings by city, category and keyword?
Pick a city, list one or more category codes, optionally add keywords, and set the total limit.
| Input | Example | Notes |
|---|---|---|
city | sfbay | One of 26 sites: sfbay, losangeles, newyork, chicago, dallas, houston, miami, seattle, boston, washingtondc, philadelphia, atlanta, phoenix, denver, sandiego, portland, detroit, minneapolis, tampa, sacramento, lasvegas, austin, orlando, nashville, charlotte, sanantonio |
categories | ["cta"] | Craigslist category codes, such as sss (all for sale), cta (cars and trucks), apa (apartments), jjj (jobs), bbb (services) or ggg (gigs) |
searchKeywords | ["toyota", "honda"] | Optional; each keyword is searched in every category |
maxResults | 100 | 1 to 500 listings in total (default 20) |
maxRequestRetries | 3 | Retries per page, 0 to 10 |
Toyota and Honda listings in Dallas cars and trucks:
{"city": "dallas","categories": ["cta"],"searchKeywords": ["toyota", "honda"],"maxResults": 100}
Furniture and appliance listings across all for-sale items in Seattle:
{"city": "seattle","categories": ["sss"],"searchKeywords": ["sofa", "refrigerator"],"maxResults": 60}
The Actor reads the first search results page for every category and keyword pair (Craigslist lists up to about 350 listings there; deeper result pages are not read), opens each listing for its link, date and description, and stops at maxResults. A listing found under two keywords is saved and charged once. To collect more listings, add categories or keywords.
Does it return listing URLs, posting dates or seller contacts?
It returns the listing link, the posting date and the full description: the Actor opens every listing it saves. It never returns seller phone numbers or emails, and it does not click the contact button. Listings that were deleted or expired before they could be opened are skipped without a charge and counted in OUTPUT.
When should I use it, and when not?
Use it when you want a quick snapshot of asking prices and titles for a product, vehicle or rental type in one of the 26 supported metros, for price research or deal spotting.
Use another Actor when:
- You need US marketplace listings from another site: OfferUp Scraper.
- Your market is the UK, Australia, New Zealand or South Africa: Gumtree Scraper. For Canada: Kijiji.ca Scraper.
- You need UK job listings with salary text: CV-Library Jobs Scraper.
How do I run it from code?
JavaScript with apify-client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('muhammadafzal/craigslist-scraper').call({city: 'chicago',categories: ['cta'],searchKeywords: ['tacoma'],maxResults: 40,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const item of items) console.log(item.title, item.price, item.location);
Python with apify-client:
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("muhammadafzal/craigslist-scraper").call(run_input={"city": "austin","categories": ["apa"],"maxResults": 50,})for item in client.dataset(run.default_dataset_id).iterate_items():print(item["title"], item["price"], item["location"])
Use it from an AI assistant
Craigslist Scraper works from Claude, ChatGPT, Cursor or any MCP client through Apify's MCP server. Add the single-tool URL https://mcp.apify.com/?tools=muhammadafzal/craigslist-scraper and ask, for example: "Pull 40 Toyota Tacoma listings from Craigslist Chicago and give me the median asking price." Each listing is charged, so include a limit.
What does the output look like?
Two rows from the 2026-10-27 cloud run (descriptions shortened):
[{"title": "2022 Ram 2500 Crew Cab Tradesmen Truck***4x4 Hemi 6.4 liter***","price": "$19,800","location": "Pleasant Hill","datePosted": "2026-10-27T09:30:25.000Z","url": "https://www.craigslist.org/view/d/pleasant-hill-2022-ram-2500-crew-cab/opARBnGFdwZb6D61ALQ6my","imageUrl": "https://images.craigslist.org/00A0A_bQRfG8pxVzG_0CI0t2_600x450.jpg","description": "2022 Ram 2500 Crew cab 4x4 V8 Hemi 6.4 liter in excellent condition inside out. 139k miles, Back up Camera, ...","category": "cta","city": "sfbay","searchKeyword": "(all)","scrapedAt": "2026-10-27T12:03:53.005Z"},{"title": "Audi A4 S-Line Quattro 3.0L V6, Clean Title, Well-Maintained","price": "$5,000","location": "San Jose","datePosted": "2026-10-27T09:24:01.000Z","url": "https://www.craigslist.org/view/d/san-jose-audi-a4-line-quattro-30l-v6/6DBHv98okkqkxZ6CsSsai4","description": "Audi A4 Quattro 3.0L V6 S-Line (B6)\n* Milltek Exhaust\n* H&R Sport Springs\n...","category": "cta","city": "sfbay","searchKeyword": "(all)"}]
Pricing: how much does it cost to scrape Craigslist?
The Actor uses pay-per-event pricing, and platform usage is included in the event prices. Each row saved to the default dataset is charged automatically.
| Event | FREE | BRONZE | SILVER | GOLD | PLATINUM / DIAMOND |
|---|---|---|---|---|---|
| Listing (one dataset row) | USD 0.003001 | USD 0.002925 | USD 0.00285 | USD 0.0024 | USD 0.0024 |
| Actor start (per started GB of allocated memory) | USD 0.006251 | USD 0.006094 | USD 0.005938 | USD 0.005 | USD 0.005 |
Worked totals on the FREE tier at the default 512 MB memory (one start event):
- 20 listings: 20 × USD 0.003001 + USD 0.006251 = USD 0.0663
- 500 listings: 500 × USD 0.003001 + USD 0.006251 = USD 1.5068
A search with no results charges only the start event, and deleted or expired listings are never charged.
Limits and reliability
- Speed: 20 listings took about 50 seconds on 2026-10-27, including opening each listing.
- Scope: first results page per category and keyword pair, up to about 350 listings each; deeper result pages, price filters and date filters are not supported.
- Cities: the 26 sites listed above only.
- Failed pages are retried up to
maxRequestRetriestimes with a fresh connection. A run where no page loads ends as failed with no listing charges; the run summary inOUTPUTlists every search with its listing count, plus skipped and failed pages.
FAQ
Is there a Craigslist API for listings?
Craigslist offers no public API for reading search results. This Actor reads the public search pages and returns them as JSON, CSV or Excel through Apify.
Can I scrape a city that is not in the list?
No. The city field accepts only the 26 sites shown.
Why did I get fewer listings than maxResults?
Each category and keyword pair covers only Craigslist's first results page, listings found under two keywords are saved once, and deleted or expired listings are skipped. Add categories or keywords to reach a higher limit.
Does it get seller phone numbers or emails?
No. Contact details are not part of Craigslist search results.
How many listings can one run return?
Up to 500 in total, limited to the first results page (about 350 listings) of each category and keyword pair you list.
Can I filter by price?
Not directly. Add specific keywords, then filter the price column after export.
Related Actors
- CV-Library Jobs Scraper: UK job listings with salary text and posting dates
- Contractor Leads Scraper: local trade businesses from Google Maps
- OfferUp Scraper, Gumtree Scraper and Kijiji.ca Scraper: other classifieds marketplaces
Legal and compliance
The Actor reads public Craigslist search pages without logging in. Craigslist's terms of use restrict automated collection of its content, so review them and make sure your use is lawful. Listings can contain personal information; do not use the data to contact or profile individuals without a lawful basis. This tool is not affiliated with Craigslist, and this is not legal advice.
Last verified: 2026-10-27