Request a tool
All toolsGuidesMCP serverRequest a toolPlatformsCategories
Craigslist Scraper icon

Craigslist Scraper

Scrape Craigslist listings by city, category and keyword at $0.85 per 1,000: id, title, price, neighborhood, date, images and URL. No account or API key.

138 runs on Apify $0.00085 per listing ($0.85 / 1,000)
Run this in the cloudRun on Apify →

Real Estate & Classifieds

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust city, query, category (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00085 per listing = $0.85 per 1,000

You are charged forWhenPrice
Listing returnedCharged once per genuine listing row. Blocked, empty and sample runs are never charged.$0.00085
Actor StartCharged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event).$0.002

Pay-per-event pricing: you are billed per result, not per subscription — a run that returns nothing costs nothing beyond the start fee. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-07, and they are what you are actually charged.

Inputs

FieldWhat it doesType
cityCraigslist city (the subdomain), e.g. "newyork", "sfbay", "losangeles", "london". Plain city names like "new york city" also work. Add several to search several cities in one run. 707 Craigslist sites in 79 countries are recognised.array
queryWhat to search for, e.g. "mountain bike". Leave empty to return everything in the category.string
categoryCraigslist category abbreviation. Groups: sss = all for sale, hhh = housing, jjj = jobs, ggg = gigs, bbb = services, ccc = community, cta = cars & trucks, eee = events. Leaf categories work too: bia bicycles, apa apartments, fuo furniture, zip free stuff, ela electronics.string
searchUrlsOptional. Paste full Craigslist search URLs instead of filling in the fields above, e.g. https://newyork.craigslist.org/search/bia?query=trek. Filters already in the URL are kept.array
maxItemsHow many listings to return in total across all searches (1-50000). Each returned listing is one charged result.integer
fetchDetailsOpen each posting page to add the seller's body text, the attribute table (condition, make, bedrooms, ...), the street address when shown, and the last-updated time. Slower: roughly one extra request per listing.boolean
sortNewest first is the only order that can return more than 360 listings - Craigslist caps relevance-ordered results at 360. Price sorting is not offered by Craigslist's API.string
minPriceOptional lower price bound.integer
maxPriceOptional upper price bound.integer
postalCodeOptional. Search around this postal code instead of the whole city. Use together with the radius below.string
radiusMilesOptional. Only used when a postal code is set.integer
sellerTypeRestrict to owner or dealer postings. Only meaningful in categories that have both.string
hasImageSkip postings that have no images.boolean
titleOnlyMatch the search terms against listing titles instead of the whole posting.boolean
postedTodayRestrict to postings from today.boolean

What you get

A structured dataset — each result includes fields like:

listingIdtitlepricelocationneighborhoodpostedAtcategoryNameimageCounturl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Real Estate & Classifieds

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Airbnb Listings Scraper iconTravel, Hotels & Events

Airbnb Listings Scraper

Scrape Airbnb search results by location, dates and guest count: listing ID, name, room type, price, rating, reviews and host. No account or API key.

Ready to run — no setup

Avito Listings Scraper iconReal Estate & Classifieds

Avito Listings Scraper

Scrape Avito.ru listings: id, title, price, category, city, seller name and type, publish date, photos. Filter by region, price and seller.

Ready to run — no setup

Facebook Marketplace Scraper iconReal Estate & Classifieds

Facebook Marketplace Scraper

Scrape Facebook Marketplace listings by keyword and city: title, price, currency, location, link, photo, posted date, sold status. No login or cookies.

Ready to run — no setup

Zillow Scraper iconReal Estate & Classifieds

Zillow Scraper

Zillow scraper at $0.0008 per property plus a $0.001 run start. Search results and full listing details: price, beds, baths, sqft, photos, price history.

Ready to run — no setup

Realtor.com Scraper iconReal Estate & Classifieds

Realtor.com Scraper

Scrape Realtor.com listings as JSON: address, price, beds, baths, sqft, lot size, year built, days on market, agent, broker, photos, coordinates.

Ready to run — no setup

See all Real Estate & Classifieds →

Craigslist Scraper

Give it a city and a search term. Get back structured Craigslist listings — id, title, price, location, neighborhood, posted date, category, image URLs and the listing URL. Turn on Fetch full posting text and each row also carries the seller's body text and the attribute table.

No API key. No login. No browser.

Why this one

Craigslist's search pages are an empty shell that fills itself in from Craigslist's own JSON API. Most scrapers drive a headless browser at the shell and pay for the compute. This one talks to the JSON API directly with a real browser TLS fingerprint, so it is plain HTTP the whole way.

That has two effects you can measure:

  • 10,000 listings come back in one request. Roughly 7 seconds, 3.4 MB. There is no page-by-page crawl to wait on.
  • No browser means no bandwidth bill. You pay $0.85 per 1,000 listings and nothing else — there is no compute or proxy charge stacked on top.

Input

FieldWhat it does
cityCraigslist subdomain — newyork, sfbay, losangeles, london. Plain names like new york city also resolve. Pass several to search several cities in one run. 707 Craigslist sites across 79 countries are recognised.
querySearch terms. Leave empty to take the whole category.
categoryCategory abbreviation. sss all for sale, hhh housing, jjj jobs, ggg gigs, bbb services, ccc community, cta cars & trucks, eee events. Leaf codes work too — bia bicycles, apa apartments, fuo furniture, zip free stuff.
searchUrlsOr skip the fields above and paste Craigslist search URLs. Filters already in the URL are kept.
maxItemsTotal listings across all searches. Default 100, ceiling 50,000.
fetchDetailsOpen every posting page for body text, attributes, street address and last-updated time.
sortnewest (default) or relevant.
minPrice / maxPricePrice bounds.
postalCode + radiusMilesSearch around a ZIP instead of the whole city.
sellerTypeowner, dealer or anyone.
hasImage, titleOnly, postedTodayThe same switches Craigslist's own filter bar has.
{
  "city": ["sfbay"],
  "query": "toyota tacoma",
  "category": "cta",
  "maxItems": 500,
  "maxPrice": 25000,
  "fetchDetails": true
}

Output

Every row:

listingId, title, price, priceText, currency, url, postedAt, categoryId, categoryAbbr, categoryName, location, neighborhood, subarea, city, cityName, region, country, latitude, longitude, images, imageCount, searchUrl, scrapedAt

With fetchDetails on, five more: description, attributes, attributeTags, updatedAt, address.

{
  "listingId": "7951229837",
  "title": "21 Speed TREK NAVIGATOR 2.0 Hybrid Bicycle 15 inch frame",
  "price": 220,
  "priceText": "$220",
  "currency": "USD",
  "url": "https://www.craigslist.org/view/d/commack-21-speed-trek-navigator-20/pvSPx2jAvzkhXUUURwoxxd",
  "postedAt": "2026-08-07T18:12:58.000Z",
  "categoryId": 68,
  "categoryAbbr": "bik",
  "categoryName": "bicycles - by owner",
  "location": "Commack/Western Suffolk",
  "neighborhood": null,
  "subarea": "que",
  "city": "newyork",
  "cityName": "new york city",
  "region": "NY",
  "country": "US",
  "latitude": 40.843,
  "longitude": -73.2799,
  "images": ["https://images.craigslist.org/00m0m_kE7opkfWlRt_0jm0ew_600x450.jpg"],
  "imageCount": 3,
  "searchUrl": "https://newyork.craigslist.org/search/bia?query=trek",
  "scrapedAt": "2026-08-07T18:45:21.751Z",
  "description": "Selling 21 Speed TREK NAVIGATOR 2.0 Hybrid Bicycle. 26 inch tires, 15 inch frame...",
  "attributes": { "bicycle type": "hybrid/comfort", "frame size": "15 inches", "wheel size": "26 in" },
  "attributeTags": [],
  "updatedAt": "2026-08-07T18:07:58.000Z",
  "address": null
}

attributes is whatever Craigslist labelled for that category — condition, odometer, VIN, transmission, title status on cars; rent period, pets cat, pets dog on housing; bicycle type, frame size on bikes. attributeTags holds the unlabelled chips: 1BR / 1Ba, 547ft2, available oct 1.

Pricing

$0.85 per 1,000 listings ($0.00085 each), plus $0.002 each time a run starts. Flat rate — no volume tiers, no plan gates — and you are charged only for listings actually returned.

Listings in the runListing feesAll-in, with the start fee
100$0.085$0.087
1,000$0.85$0.852
10,000$8.50$8.502
100,000$85.00$85.002

Because the start fee is charged once per run rather than per city or per search, batching several cities into one run is cheaper than running them separately. A run that returns no listings costs only the $0.002 start fee. Blocks, bad input and empty searches write a labelled diagnostic row instead of a listing, and diagnostic rows are never charged. fetchDetails adds description, attributes, attributeTags, updatedAt and address to the same row at no extra charge — there is no second event for the detail fetch.

Limits

Read this part before you build on it.

  • Relevance sorting stops at 360 results. That is Craigslist's cap, not ours. sort: "newest" has no such limit and is the default.
  • Craigslist does not sort by price. Its API dropped the option. Sort the dataset yourself.
  • neighborhood is usually null. Craigslist only assigns neighborhoods inside a handful of dense metros — about 7% of New York rows have one. location is populated on effectively every row.
  • One city per search. Craigslist has no nationwide index. Pass a list of cities to cover more ground; each is a separate search.
  • price is null on postings with no price — jobs, gigs, most community posts, and for-sale posts where the seller left it blank.
  • Cross-posts come back as separate rows. A seller who posts the same couch to three subareas creates three postings with three ids, and Craigslist reports them separately. listingId is deduplicated within a run; identical text under different ids is not.
  • fetchDetails costs about one extra second per 6 listings. Six detail pages run at a time. On 10,000 rows that is a long run — set maxItems deliberately.
  • Expired postings. A posting deleted between the search and the detail fetch returns detailError on that row rather than failing the run.
  • The RSS feed is dead. Craigslist answers ?format=rss with HTTP 403 from every address. If you have old tooling built on it, that is why it stopped.

FAQ

Do I need a Craigslist account or API key? No. Everything it reads is public.

Can it scrape all of Craigslist at once? No. Craigslist is organised as ~707 independent city sites with no combined index. You give it cities; it searches each one.

How many listings can I get from one city? One request returns up to 10,000. Past that the scraper walks backwards through posting dates, so a large maxItems keeps going until the search is exhausted. New York's "all for sale" section had 118,618 live postings when this was written.

Does it get the seller's phone number or email? No. Craigslist hides contact details behind a reply relay that requires solving a challenge. This scraper returns what the public posting shows. If a seller typed their number into the description, it will be in description — that is the seller's own doing, not an extraction.

Does it work outside the US? Yes. 79 countries. Non-US sites are much thinner than US ones — London's for-sale section had 2 matches for "bike" while New York had 3,711.

What do I get without fetchDetails? Everything except description, attributes, attributeTags, updatedAt and address. Titles, prices, images, coordinates, dates and URLs all come from the search response, so the cheap mode is not a stub.

Why is imageCount sometimes higher than what I see on the page? It is the count Craigslist reports for the gallery. Sellers occasionally upload duplicates.

Is this affiliated with Craigslist? No. It reads public pages. Check Craigslist's terms and your own local rules before you use the output commercially.

Notes

Built as plain HTTP with impit for a Chrome TLS fingerprint. No Playwright, no residential proxy, no per-GB bandwidth bill.