Craigslist Listings Scraper: Every Listing, Counted
Pricing
from $0.70 / 1,000 listings
Craigslist Listings Scraper: Every Listing, Counted
Every listing a Craigslist search shows, up to 10,000, checked against Craigslist's own count. $1 per 1,000 listings. Any city, any category, optional descriptions.
Pricing
from $0.70 / 1,000 listings
Rating
0.0
(0)
Developer
Luzi
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Get every listing a Craigslist search shows, up to 10,000 a search, checked against Craigslist's own count for that search: title, price, place and map point, pictures, date, category, and what the listing type adds (bedrooms and floor area, pay and company, odometer, event dates). Any Craigslist city, with prices in its own currency. Turn on descriptions to add each listing's full text, its attributes, and any phone numbers and emails written in it. One row per listing. No Craigslist account needed.
Tested daily. Latest check: 500 "bike" listings in the SF bay area; 5,123 of 5,123 listings from four whole searches in the US, the UK, Canada and Australia, matching Craigslist's counts.
What does this Actor do?
You give it Craigslist cities and a category, with search words if you want them, or links to Craigslist searches. For each search it reads the whole result list Craigslist shows and saves one row per listing, until it reaches your limit or the end of the list. The run's final status tells you whether every listing was read: "Saved 214 listings from 1 search. That is every listing the site lists for the search (214 of 214)."
Each listing comes with:
- its title, link, the date it was posted, and its position in the search
- the price as a number and as shown ("$1,100", "£280"), and the city's currency
- the category, the city, the sub-area and the place the poster gave, with the neighborhood and a map point
- every picture's link
- for housing: bedrooms and floor area, and open-house dates
- for jobs and gigs: pay, company and job title
- for cars and motorcycles: the odometer reading
- for events: the start and end dates, or every date it runs
- the search it was found in, and how many listings Craigslist counted for it
With Include descriptions and attributes on, each listing also gets:
- the full description, as text
- its attributes: make, model, year, odometer, fuel, transmission, bedrooms, bathrooms, pets, laundry, parking, pay, employment type, condition and the rest, each with the value Craigslist's search filters use
- phone numbers and emails written in the description
- whether Craigslist flags the listing as having contact details
- the street address, when the poster gave one
- when the listing was first created and last updated
- for a car with a VIN: the decoded vehicle details (make, model, year, engine, body and the rest), and the earlier listing it reposts
Why use it?
- Know you have the whole search. For a search of up to 10,000 listings the run checks what it read against Craigslist's own count, so a short read is never silent.
- Fast. Four whole searches, 5,123 listings, in under two and a half minutes without descriptions.
- Any Craigslist city. Give a city by the name in its address, with prices in its own currency. Measured in the US, the UK, Canada and Australia.
- Use the data anywhere. Download as JSON, CSV or Excel, or send it to your own tools through Apify's API and integrations.
How to use it
- Type one or more Cities (the name in the city's Craigslist address:
sfbay,newyork,london), pick a Category, and add Search words if you want them. Or paste Search links, or both. - Optionally, set a Price range, Posted today, Has pictures, Search titles only, Sort by, Max listings per search, and Include descriptions and attributes.
- Click Start. When the run ends, open the Output tab to view the listings or download them.
Run it with no input to see a sample: up to 500 "bike" listings in the SF bay area, charged as usual.
Links that work
A Craigslist search on a city's site, such as
https://sfbay.craigslist.org/search/sss?query=bike or
https://sfbay.craigslist.org/search/sfc/apa?min_price=2000&max_bedrooms=2,
with every filter it carries (price, bedrooms, make and model, odometer,
distance from a postcode, and the rest). The all-cities form
https://www.craigslist.org/search/area/sfbay?cat=apa works too. A single
listing's link, or another site, stops the run before anything is read,
naming the link.
Input
| Field | What it does | Default |
|---|---|---|
Cities (cities) | Craigslist cities by the name in their address, one search each | — |
Category (category) | The section searched in each city | sss |
Search words (searchQueries) | Words to search for, one search per word in each city | — |
Search links (startUrls) | Craigslist search links, with their own filters | — |
Price from / to (minPrice, maxPrice) | Only listings priced in this range, in the city's currency | — |
Posted today (postedToday) | Only listings posted today | off |
Has pictures (hasImages) | Only listings with a picture | off |
Search titles only (searchTitlesOnly) | Match the search words in titles only | off |
Sort by (sortBy) | default, newest, oldest, relevance, priceAsc, priceDesc | default |
Max listings per search (maxListingsPerSearch) | Stop each search after this many listings, 1 to 10,000 | 1000 |
Include descriptions and attributes (includeDetails) | Also read each listing's description, attributes and contact details | off |
Include nearby cities (includeNearby) | Also save the listings Craigslist adds from nearby cities | off |
Give at least one city or one link. A city with no search words gets every listing in the category. Example input:
{"cities": ["sfbay", "losangeles"],"category": "cta","searchQueries": ["tacoma"],"maxPrice": 20000,"sortBy": "newest","maxListingsPerSearch": 2000,"includeDetails": true}
Output
One row per listing. An example, with made-up values:
{"posting_id": "7980000001","uuid": "aB3dE5fG7hJ9kL1mN3pQ5r","url": "https://www.craigslist.org/view/d/san-francisco-road-bike/aB3dE5fG7hJ9kL1mN3pQ5r","title": "Road bike, 56 cm, Shimano 105","posted_at": "2026-10-21T17:04:12.000Z","price": 650,"price_text": "$650","currency": "USD","category": "bik","category_name": "bicycles - by owner","area": "sfbay","area_name": "SF bay area","area_country": "US","subarea": "sfc","subarea_name": "city of san francisco","location": "inner sunset / UCSF","neighborhood": "inner sunset / UCSF","latitude": 37.7551,"longitude": -122.4657,"image_urls": ["https://images.craigslist.org/00a0a_madeUpPicture_600x450.jpg"],"image_count": 1,"position": 1,"details_read": true,"description": "Light road bike, new tires.\nPick up only.","attributes": [{ "key": "condition", "label": "condition", "value": "excellent", "filter_value": "30" },{ "key": "bicycle_frame_size", "label": "frame size", "value": "56 cm", "filter_value": null }],"phone_numbers": [],"emails": [],"has_contact_info": true,"created_at": "2026-09-30T08:12:00.000Z","updated_at": "2026-10-21T17:04:12.000Z","search_url": "https://sfbay.craigslist.org/search/sss?query=road+bike","search_area": "sfbay","search_path": "sss","search_query": "road bike","search_total": 214,"search_listed": 214}
Every field:
| Field | What it holds |
|---|---|
posting_id | Craigslist's id for the listing |
uuid | Craigslist's other id for the listing, used in its link |
url | The listing on Craigslist |
title | The title |
posted_at | When it was posted, or last renewed |
price | The price as a number. Empty when the listing shows none |
price_text | The price as Craigslist shows it ("$1,100") |
currency | The city's currency (USD, GBP, CAD...) |
monthly_payment | The monthly payment, when a dealer shows one |
category | Craigslist's code for the listing's category (bik, apa, cto) |
category_id | Its id |
category_name | Its name ("bicycles - by owner") |
section | The section ("for sale", "housing", "jobs"), with descriptions on |
area | The city's Craigslist site (sfbay) |
area_id | Craigslist's id for the city |
area_name | The city's name ("SF bay area") |
area_country | The city's country code |
subarea | The sub-area's code (sfc), in cities that have them |
subarea_name | The sub-area's name ("city of san francisco"), with descriptions on |
location | The place the poster gave |
neighborhood | The neighborhood, when Craigslist knows it |
latitude | The map point's latitude |
longitude | The map point's longitude |
image_urls | Every picture's link |
image_count | How many pictures |
bedrooms | Bedrooms, for housing |
floor_area | Floor area, for housing |
floor_area_unit | ft (square feet) or m (square metres) |
salary | Pay, for jobs and gigs |
company | The hiring company, for jobs |
job_title | The job title, for jobs |
odometer | The odometer, for cars and motorcycles |
odometer_unit | mi or km |
event_start_date | The first day, for events |
event_end_date | The last day, for events |
event_dates | Every day it runs, for events with separate dates |
open_house_dates | Open-house days, for housing |
duplicate_group | The same number on listings Craigslist sees as repeats of one another |
position | Where the listing stood in the search's list |
is_nearby | true for a listing Craigslist added from a nearby city (only with Include nearby cities on) |
details_read | With descriptions on: false when the listing was taken down while the run read it. Empty with them off |
description | The full description, as text (descriptions on) |
attributes | The listing's attributes: key, label, value and the value the search filters use (descriptions on) |
notices | Craigslist's notices on the listing (descriptions on) |
phone_numbers | Phone numbers written in the description (descriptions on) |
emails | Emails written in the description (descriptions on) |
has_contact_info | Craigslist's own flag that the listing has contact details (descriptions on) |
street_address | The street address, when the poster gave one (descriptions on) |
display_address | The address as Craigslist shows it, when given (descriptions on) |
location_type | How exact the map point is, as Craigslist marks it (descriptions on) |
created_at | When the listing was first created (descriptions on) |
updated_at | When it was last updated (descriptions on) |
see_my_other | true when the poster links their other listings (descriptions on) |
repost_of | The id of the earlier listing this one reposts, when Craigslist links them (descriptions on) |
vin_data | For a car with a VIN: the decoded vehicle details (section, name, value) (descriptions on) |
search_url | The search on Craigslist |
search_area | The city searched |
search_path | The category searched, with its sub-area |
search_query | The search words |
search_total | How many listings Craigslist counts for the search |
search_listed | How many of them Craigslist lists (at most 10,000), not counting nearby cities |
Not included: the poster's reply email and phone behind Craigslist's reply button (Craigslist shows them only through its reply form), and listings Craigslist lists past the first 10,000 of a search.
How much does it cost?
No surcharges and no paid options; an item that fails is not charged.
You pay for what you get:
- $1 per 1,000 listings ($0.001 a listing), with or without descriptions. Each listing is charged once per run, even when two of your searches list it.
- No start fee, and nothing per search.
So a search that lists 400 listings costs $0.40. If you set a maximum cost for a run, the Actor stops when it reaches it and keeps every listing saved so far.
How long does a run take?
About 500 listings in 20 to 40 seconds, and 5,123 listings from four searches in about two and a half minutes. With descriptions on, each listing takes longer: about 1,200 listings in under five minutes.
Good to know
- At most 10,000 listings per search. That is what Craigslist lists for one search. For more, split it: sub-areas, categories, price ranges, or "Posted today" every day. A search of more than 10,000 listings is read to Craigslist's limit and is not checked against the count.
- Craigslist decides what matches. The Actor returns what Craigslist lists for the search, in Craigslist's order.
- Nearby cities. When a search has few listings, Craigslist adds listings from nearby cities below them. They are left out unless you turn on Include nearby cities; the count check covers the city's own listings either way.
- Counts move. A busy search gains and loses listings while it is read, so a search can come back a listing or two short of its count. The final status says so, by search.
- One listing, one row. A listing found again in the same run, under another search, is saved and charged once.
- Map points are approximate. Craigslist places a listing near, not at, the address.
- A search that cannot be read, such as a city Craigslist does not have, is reported in the run's status; the other searches carry on.
- Running it daily? Remove repeats by
posting_id.
More Actors from us
- AliExpress Product Scraper: Search Results & Prices: Every product of an AliExpress search to its last page, with exact sold counts and ratings.
- Amazon Product Scraper: Search Results & Prices: Every product on Amazon's search pages to the last page, sponsored marked, with monthly sales.
- App Store Reviews Scraper: All Reviews, Not 500: Every written App Store review of an app, not just the newest 500.
- Career Site Jobs Scraper: Workday, Greenhouse, Lever: Every job on Greenhouse, Lever, Ashby, SmartRecruiters and Workday boards, checked against each board's count.
- Facebook Ads Library Scraper: Meta Ads by Keyword or Page: Meta Ad Library ads by keyword, Page or Ad Library link, with text, images, videos and dates.
- Facebook Comments Scraper: With Replies: Comments and replies from public Facebook posts, reels and videos, with reactions by type.
Use it from an AI agent or the API
One call starts a run and returns its items (Apify waits up to 300 seconds; for a
longer run, start it with POST /v2/acts/…/runs and read its dataset):
POST https://api.apify.com/v2/acts/luzivanlt~craigslist-listings-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>
With the sample input as its JSON body:
{"cities": ["sfbay"],"category": "sss","searchQueries": ["bike"],"postedToday": false,"hasImages": false,"searchTitlesOnly": false,"sortBy": "default","maxListingsPerSearch": 500,"includeDetails": false,"includeNearby": false}
Its inputs, in the order of the input form:
| Input | What it takes | Default |
|---|---|---|
cities (Cities) | Craigslist cities to search, by the name in their address: "sfbay" for sfbay.craigslist.org, "newyork", "london", "toronto". | — |
category (Category) | Which Craigslist section the cities are searched in. | "sss" |
searchQueries (Search words) | Words to search for, one search per word in every city above (e.g. "road bike"). | — |
startUrls (Search links) | Links to Craigslist searches, copied from your browser, e.g. https://sfbay.craigslist.org/search/sfc/apa?min_price=2000&max_bedrooms=2. | — |
minPrice (Price from) | Only listings priced at least this, in each city's own currency (dollars, pounds, euros...), for the cities above. | — |
maxPrice (Price to) | Only listings priced at most this, in each city's own currency (dollars, pounds, euros...), for the cities above. | — |
postedToday (Posted today) | Only listings posted today, for the cities above. | false |
hasImages (Has pictures) | Only listings with at least one picture, for the cities above. | false |
searchTitlesOnly (Search titles only) | Match the search words in listing titles only, not in their descriptions, for fewer and closer matches. | false |
sortBy (Sort by) | The order Craigslist lists the listings in. | "default" |
maxListingsPerSearch (Max listings per search) | Stop each search after this many listings, from 1 to 10,000. | 1000 |
includeDetails (Include descriptions and attributes) | Also read each listing's own page: the full description, its attributes (make, model, year, odometer, bedrooms, bathrooms, pay, condition and the rest), phone numbers and emails written in the description, its address when given, and when it was created and updated. | false |
includeNearby (Include nearby cities) | Also save the listings Craigslist adds from nearby cities when a search has few of its own (shown on Craigslist under "more from nearby areas"). | false |
Apify's MCP server, https://mcp.apify.com, lists it as luzivanlt/craigslist-listings-scraper. To give an
AI agent this Actor as a tool, add the server to the agent's MCP config:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=luzivanlt/craigslist-listings-scraper"}}}
The client signs in with OAuth, or add "headers": { "Authorization": "Bearer <APIFY_TOKEN>" }.
Charged per listing delivered; the sample input above costs at most $1.00.
FAQ
Do I need a Craigslist account? No. The Actor reads what anyone can see on Craigslist without signing in.
Which cities work?
Craigslist city sites, by the name in the site's address: sfbay for
sfbay.craigslist.org, newyork, london, toronto, sydney. Measured in
the US, the UK, Canada and Australia.
Can I run it from my own code, on a schedule, or with other apps? Yes. Like any Apify Actor, you can start it through the Apify API, run it on a schedule, and connect it to other apps with Apify's integrations and webhooks.
Is it legal to scrape Craigslist?
This Actor reads only public listings. A listing can carry a person's name, phone number or email; treat those as personal data. Check Craigslist's terms and the laws that apply to you (such as the GDPR or the CCPA) before you use the data. If you are unsure, ask a lawyer.
Support
Found a problem or missing a feature? Open an issue on the Issues tab and include the run's link.
This Actor is not affiliated with, endorsed by or sponsored by Craigslist.