L logiover
ecommerce · May 31, 2026 · 9 min read

How to Scrape Craigslist Listings and Prices in 2026

Learn how to scrape Craigslist listings, prices, images and GPS coordinates across any city and category — no login, no API key — and build market-wide datasets at scale.

If you want to track resale prices, monitor a local market, or build a labelled dataset of real-world classifieds, the fastest way to scrape Craigslist is to point a structured scraper at any search-results URL and let it paginate. Craigslist has no public API worth using, its UI is built for one-listing-at-a-time browsing, and it blocks datacenter IPs outright — so bulk collection means knowing exactly which URLs to feed and which fields come back. This guide covers what Craigslist data is worth across categories and cities, the two input modes, how pagination works, the exact output fields, and the real use cases that justify the run.

Why Craigslist data is valuable

Craigslist is one of the largest pools of unstructured, hyper-local commerce data on the open web. Unlike a polished marketplace with a clean API, it is messy, regional, and constantly churning — which is exactly what makes it valuable. The prices are what real people in a real city are actually asking, today, with no algorithmic repricing in between.

The value changes by category:

  • For-sale (sss, ele, fua, mob) — resale and arbitrage signal. What does a used iPhone, a couch, or a power tool actually fetch in Phoenix versus Seattle? Craigslist answers in raw asking prices, not list-price fiction.
  • Cars & trucks (cta) — private-party vehicle pricing by make, model and city, often below dealer book value. Auto analysts use it to track depreciation curves and regional spreads.
  • Apartments & housing (apa) — rental supply and asking rents at neighborhood granularity, complete with approximate GPS coordinates. A leading indicator for local rent trends before the aggregators catch up.
  • Jobs, gigs & services (jjj, ggg, bbb) — lead generation. Every services post is a small business or contractor advertising that they want work, with a contact path attached.

Because the data is regional, the real product is rarely one city. It is the same query run across ten cities, stitched into a market-wide picture. That is where structured scraping beats manual browsing by orders of magnitude.

How scraping Craigslist actually works

A few engineering realities shape how you scrape Craigslist:

  • No login, no cookies, no API key. Craigslist search results are public. You read them as an anonymous visitor, so there is no account to risk and nothing to expire.
  • Datacenter IPs are blocked. This is the one hard requirement. Craigslist returns blocks or empty pages to datacenter ranges, so requests must go through US residential proxies. The actor defaults to Apify Proxy’s US RESIDENTIAL group — leave it as-is and it just works.
  • No headless browser needed. Search-results listings are in the server-rendered HTML. That keeps runs fast and cheap because there is no Chromium to spin up per page.

The combination matters: residential proxy for access, plain HTTP for speed. You get high throughput without paying for a browser on every request.

Run the Craigslist Scraper — paste any city + category search URL and pull every listing with price, location, images and GPS coordinates. No login, no API key. $5 per 1,000 listings.

Input mode 1: paste search URLs

The simplest way to drive the scraper is to do exactly what you’d do as a human — go to Craigslist, pick a city subdomain, choose a category, apply any filters or a search query, and copy the URL out of the address bar. Paste one or many into searchUrls.

{
  "searchUrls": [
    "https://newyork.craigslist.org/search/sss?query=iphone",
    "https://losangeles.craigslist.org/search/cta?query=toyota&max_price=15000"
  ],
  "maxResults": 2000,
  "includeDetails": false
}

Each URL can target a different city, a different category, or a different query — mix them freely. Filters you apply in the browser (price ceiling, search term, condition) are carried in the URL, so the scraper respects them automatically. This is the mode to use when you already know exactly what slices of the market you want.

Input mode 2: the builder object

If you’d rather not hand-craft URLs, the builder input assembles one for you from named fields:

{
  "builder": { "city": "chicago", "category": "apa", "query": "loft", "maxPrice": 2500 },
  "maxResults": 500
}

The builder accepts { city, category, query, minPrice, maxPrice, filters }. The category field takes Craigslist’s short codes. The most common ones:

CodeCategory
sssfor-sale (all)
ctacars & trucks
apaapartments / housing
jjjjobs
bbbservices
ggggigs
mobcell phones
eleelectronics
fuafurniture

The builder is ideal when you’re generating queries programmatically — loop over a list of cities for a fixed category and you’ve templated a national sweep without ever opening a browser.

Pagination and result limits

A single Craigslist search page shows only a slice of the inventory. The scraper handles deep pagination — it walks the result pages rather than stopping at the first one, so a busy query yields hundreds to thousands of listings.

Two controls govern depth:

  • maxResults caps the total listings collected across all your search URLs. The default is 1000; set it to 0 for unlimited. This is your primary cost and time lever.
  • Splitting across URLs is how you maximize coverage. Rather than relying on one query to surface everything, feed several narrower searches (by city, by price band, by sub-category) and let the scraper dedupe. Results are tagged with their source city domain and de-duplicated across the run, so overlapping queries won’t pollute your dataset.

For most projects, a focused set of search URLs with a sensible maxResults beats one giant unbounded run — you get the coverage you need without scraping the long tail of stale posts.

Output fields

Every listing becomes one clean, structured record. Here is a real example of what comes back per listing:

{
  "id": "35724329",
  "title": "iPhone 17 pro Max (Never used) 512gb Unlocked",
  "price": "$1,360",
  "priceValue": 1360,
  "category": "sss",
  "location": "bronx",
  "latitude": 40.8737,
  "longitude": -73.8712,
  "postedDate": "2026-06-04T11:51:55.000Z",
  "slug": "bronx-iphone-17-pro-max-never-used",
  "images": [
    "https://images.craigslist.org/00M0M_4RlzwaQw03v_0t20CI_600x450.jpg",
    "https://images.craigslist.org/00H0H_kF1asOcIYBa_0t20CI_600x450.jpg"
  ],
  "imageCount": 8,
  "url": "https://newyork.craigslist.org/brx/mob/d/bronx-iphone-17-pro-max-never-used/7938688572.html",
  "source": "newyork.craigslist.org",
  "scrapedAt": "2026-06-04T13:14:45.288Z"
}

The fields, and why each one earns its place:

FieldDescription
idCraigslist listing identifier — your stable join key across runs
titleListing title
price / priceValueFormatted price string ("$1,360") and numeric value (1360)
locationNeighborhood / sub-area
latitude / longitudeApproximate GPS coordinates
postedDateWhen the listing was posted (ISO 8601)
images / imageCountPhoto gallery URLs and the total count
urlDirect, working link to the Craigslist post
category / sourceCategory code and the source city domain
scrapedAtCapture timestamp — essential because listings expire

The most useful design decision Craigslist data forces on you is the two price fields. price keeps the human-formatted string for display; priceValue gives you a clean integer to run averages, medians and filters on without parsing currency symbols. Build your analytics on priceValue and your reports on price.

Pulling descriptions and attributes

By default the scraper reads the search-results pages only — fast and cheap. Flip includeDetails to true and it also opens each listing’s detail page, adding description, attributes (the key-value spec table), detailLatitude, detailLongitude and fullImages (full-size photos) to every record.

This is slower because it’s an extra request per listing, so leave it off for bulk price sweeps and turn it on only when the listing body actually matters — for example, when you need vehicle attributes (mileage, title status) or the full apartment description for NLP.

Use cases

Resale and arbitrage

Run the same for-sale query across multiple cities, compare priceValue distributions, and the deals surface themselves. A console worth $400 in San Francisco listed at $200 in a cheaper metro is an arbitrage opportunity — and with postedDate you can prioritize fresh posts before someone else grabs them. Resellers and flippers use this to track prices and spot deals across cities and categories continuously.

Market and price research

Aggregate priceValue, location and postedDate and you have a live read on supply, asking prices and demand for any product. Because Craigslist prices are raw asking prices with no marketplace repricing layer, they’re a cleaner signal of local sentiment than algorithm-driven platforms. Run it weekly and you build a time series no aggregator sells.

Real-estate and auto analysis

The apa and cta categories carry GPS coordinates, so you can map rental supply by neighborhood or plot vehicle prices by metro. Analysts pull apartment or vehicle listings at scale to model regional spreads and depreciation curves directly from primary-source asking prices.

Lead generation

The services, gigs and jobs categories are full of small businesses and contractors actively advertising for work. Each post is a warm signal — someone who wants business right now — with a contact path attached. Scrape your target city + service category and you’ve got a prospect list of motivated local sellers.

Data science and ML

Title + price + category + images + coordinates is an excellent feature set for pricing models and trend forecasting. Build labelled marketplace datasets for training, with image URLs ready to ingest into a vision pipeline and priceValue as a clean regression target.

Run the Craigslist Scraper — build a market-wide Craigslist dataset across cities and categories in a single run, deduped and export-ready. JSON, CSV, Excel or API. $5 per 1,000 listings.

FAQ

Do I need a Craigslist login or API key to scrape it?

No. The scraper reads only public Craigslist search data over US residential proxies. There are no cookies, no developer API key and no account involved — so there is zero account-ban risk.

Hundreds to thousands. The scraper paginates through the result pages rather than stopping at page one. Control the volume with maxResults (default 1000, 0 for unlimited), and split a market across several search URLs for maximum coverage.

Why are residential proxies required?

Craigslist blocks datacenter IP ranges, returning blocks or empty results. The actor defaults to Apify Proxy’s US RESIDENTIAL group, which Craigslist serves reliably — just leave the default in place and it works.

Can I scrape several cities at once?

Yes. Add multiple URLs to searchUrls — any mix of cities, categories and search queries. Each record is tagged with its source city domain and the whole run is de-duplicated, so overlapping queries won’t create duplicate rows.

How do I get descriptions, attributes and full-size images?

Set includeDetails to true. The scraper then opens each listing’s detail page and adds description, attributes, detailLatitude, detailLongitude and fullImages to every record. It’s slower because of the extra request per listing, so leave it off for fast bulk price scraping.

What’s the difference between price and priceValue?

price is the human-readable formatted string (for example "$1,360"), while priceValue is the numeric value (1360). Use priceValue for math — averages, medians, filtering — and price for display.

Wrapping up

Craigslist is a deep, hyper-local, no-API dataset that rewards anyone willing to feed it the right search URLs. With no login and no ban risk, the only real requirement is residential-proxy access — which the actor handles by default. Paste a few city + category searches, set maxResults, and you can scrape Craigslist listings and prices into a clean, deduped, export-ready dataset across an entire market in a single run.

Open the Craigslist Scraper on Apify — title, price, location, images, GPS coordinates and post date from any city and category. $5 per 1,000 listings.

Guide: how-to-scrape-craigslist-listings-prices.mdx — your complete reference to scrape Craigslist listings and prices at scale.

Related guides