Craigslist Scraper

A whole board of listings,
as rows you can sort.

Paste a Craigslist search URL - or a single listing - and get the results back as rows: the title, the asking price and its currency, the condition where the seller stated one, the neighbourhood, a link to the posting, its photo and a description preview. Ranked in the order Craigslist returned them.

one-time 500 free rows$0.002 per row after9 columnsCSV · XLSX · JSON
How it works

A search URL in,
its listings out.

The input is the page you would otherwise scroll. Build the search on Craigslist as usual, then hand us the address.

  1. STEP 1Sign in to the platform.
  2. STEP 2Open the Craigslist Scraper.
  3. STEP 3Paste Craigslist search URLs or single listing URLs, one per line - or upload a CSV, XLSX, TXT or Parquet file.
  4. STEP 4Set a limit per query, or leave it at zero to take everything.
  5. STEP 5Choose your output format.
  6. STEP 6Click Get Data.

One row per listing, tagged with the query it came from and numbered in the order Craigslist returned it - so the ranking survives into the spreadsheet.

Why teams use it

A classifieds board
you can actually query.

Prices you can actually compute on

Asking price and currency arrive as their own columns, so a search becomes a distribution rather than a page you eyeball. Read the note on the -1 sentinel first - it is the one thing that will skew an average if you miss it.

Down to the neighbourhood

Craigslist tags listings with the poster's own area rather than a postcode, and that comes through as written. A single city search spreads across a long tail of neighbourhoods - enough to see where the supply of a thing actually sits.

The ranking comes with it

Rows arrive numbered in the order the board served them, so a repeat run shows what moved. That ordering is the part a manual copy-paste always loses.

What you get back

Nine columns,
one row per listing.

What the board shows about each posting: what it is, what it costs, what condition the seller claims, where it is, and where to go and look at it.

Two of these columns behave in ways worth knowing before you build on them, so they are called out in the table rather than left for you to trip over. price is a string and uses -1 to mean no price was posted, so a naive cast to number pulls every average down. And description is a preview capped at 500 characters, not the full posting; longer bodies stop mid-word at exactly that length.

The column set, the sentinel and the truncation are properties of the export and hold regardless of what you query. How often the optional fields carry a value is a different matter - that moves with the category, the board you point it at and how many rows you take.

Data dictionary

Nine columns in the file,
ten in the JSON.

The export's header row, in order. Where a field is marked optional below, that describes what a Craigslist poster chooses to fill in - not the scrape. How often it carries a value varies with the board, the category and the size of the run.

query
The Craigslist URL you submitted, repeated on every row that came from it.
title
The listing title, as the seller wrote it.
price
The asking price, as a string. A value of -1 means no price was posted - Craigslist allows a listing without one. It is a sentinel, not a number: filter it out before you average or sort.
currency
The currency the board quotes in. Treat it as the currency of whichever Craigslist board you pointed at rather than a constant.
condition
The condition the seller selected: new, like new, excellent, good or fair. Optional on Craigslist, so frequently blank.
location
The neighbourhood or area the seller posted under - Craigslist's own free-text area label, not a postcode.
url
Link to the listing on Craigslist.
image
The listing's photo, on Craigslist's image CDN. Empty on postings with no picture.
description
A preview of the posting body, capped at 500 characters and cut mid-word at the limit. Often blank. Not the full text.
position
1-based rank within the query, in the order Craigslist returned the listing. JSON only - the CSV and XLSX exports stop at nine columns.

Two traps, both easy to avoid once you know. price is a string carrying the sentinel -1 for "no price posted", so casting the column and taking a mean will quietly drag it down; filter first. And description is a 500-character preview, not the posting - longer bodies stop at exactly that length, mid-word. Beyond that, position exists only in the JSON, so a CSV or XLSX export has nine columns rather than ten, and condition is genuinely optional on Craigslist rather than missing from the scrape - it is a field the seller chooses to set.

What it accepts

A whole search,
or a single posting.

Point it at a results page to take the board, or at one listing when you already know which. Both come back in the same nine columns.

craigslist.org/search/… craigslist.org/d/…html Paste one per line CSV upload XLSX upload TXT upload Parquet upload Limit per query One row per listing
Common workflows

Three jobs people
most often run here.

A few examples of what a queryable classifieds board is good for.

Resale

Know the going rate before you buy

Pull every listing for the thing you deal in and read the price column as a distribution rather than a feed. Filter out the no-price rows, and the spread between a good buy and a bad one stops being a hunch.

Resale · Arbitrage
Supply

See where the stock actually is

The neighbourhood column turns one city search into a map of supply. Useful when the difference between a worthwhile pickup and a wasted afternoon is which side of town it sits on.

Operations
Research

Track a category over time

Run the same search on a schedule and each export is a dated snapshot - how many listings, at what prices, in what condition. Secondhand supply and pricing move quickly, and one run cannot show you that.

Research
Pricing

Pay only for the listings
you actually pull.

No subscription, no minimum, no recurring bill. Your first 500 rows are on us - after that, pay-as-you-go at the same flat rate as every other scraper here.

Free tier

500 free rows - $0

Every new account, one-time. No credit card required. Per-query limits, file upload and every export format included.

$0 forever
Pay-as-you-go

$0.002 per row, after the free tier

Roughly $2 per 1,000 listings. The pre-flight estimator shows the row count and credit cost before a run starts - no surprise bills, no compute units to translate.

Most popular
Volume

Custom · high volume

Volume pricing, dedicated workers and an SLA for tracking many searches across many boards on a schedule. Tell us your numbers and we will quote.

Talk to us
10% off your first paid run.Use code LIVESCRAPER10 at checkout.
Sign up
Pairs well with

The same item,
on the other boards.

Secondhand prices only mean something next to another number. These two supply it.

The legal bit

Is it legal to scrape
Craigslist?

Short answer: the listings are public - but Craigslist is more protective of its postings than most sites, and you should know that before you scale.

Everything collected here is shown on a public Craigslist page to any visitor, signed in or not: the title, the asking price, the condition the seller picked, the area they posted under, the photo and the description. No login, no paywall, nothing behind an account. There is no seller name, phone number or email anywhere in the export, and no column for one.

We would rather flag this than let you find out later: Craigslist has historically enforced against automated collection of its listings more actively than comparable sites, and its terms restrict it. That does not make public data secret, but it does make this a terms question with real history behind it - if you are planning volume, or building a product on top of the output, take advice on your specific use rather than relying on a general rule.

We run no third-party trackers on the data layer, and your exports auto-delete after 30 days.

livescraper.app · principles
Public listing pages only
No logins, no accounts touched
No seller names or contact details
GDPR-aligned by default
Craigslist enforces its terms - read them!
Take advice before building a product on this one.
Common questions

Things people
ask before signing up.

The questions we hear most. Anything else? Talk to us - humans, not bots, write the answers.

How do I scrape Craigslist?+
Using the Craigslist Scraper:
  1. Sign in to the platform.
  2. Open the Craigslist Scraper.
  3. Paste Craigslist search URLs or single listing URLs, one per line - or upload a CSV, XLSX, TXT or Parquet file.
  4. Set a limit per query, or leave it at zero to take everything.
  5. Choose your output format.
  6. Click Get Data.
Why do some rows have a price of -1?+
Because the seller posted no price. Craigslist allows a listing without one, and the export uses -1 as the sentinel for that rather than leaving the cell blank. It is the single most important thing to know about this dataset: price is a string, and if you cast the whole column to a number and take an average, those rows drag it down silently. Filter them out first.
Do I get the full listing description?+
No - the description column is a preview capped at 500 characters, and it cuts mid-word when a posting runs longer. It is enough to tell listings apart and to search for keywords, but it is not the full text of the posting. Follow the url column when you need everything.
What can I use as input?+
Either a Craigslist search URL, which looks like a results page with your query on the end, or a single listing URL ending in .html. Paste them one per line or upload a CSV, XLSX, TXT or Parquet file. A search URL produces many rows; a listing URL produces one.
Why is the condition column empty on so many rows?+
Because condition is optional for the seller on Craigslist. When they do set it, it comes back as one of new, like new, excellent, good or fair. An empty cell means the seller skipped the field, not that the scrape missed it - how often that happens varies with the category and the board.
Does it return the seller's contact details?+
No. Craigslist routes contact through its own relay rather than publishing a phone number or email on the listing, so there is nothing of that kind to collect and no column for it. The export describes the item and where it is, not who is selling it.
Which Craigslist regions work?+
The input is a URL, so whichever board that URL belongs to is the one you get. We would rather not publish a list of supported regions we have not tested - every export we hold came from one city, so take a small free-tier run against the board you care about as the answer.
How much does it cost?+
The first 500 rows are free and one-time, with no credit card. After that it is $0.002 per row - about $2 per 1,000 listings - which is the same flat rate as every other scraper on the platform. The estimator shows the cost of a run before it starts.

Your first 500 listings,
on the house.

500 one-time free rows on every new account - no expiry. After that it is $0.002 per row, pay-as-you-go - no card on file until you say so.

Activates instantly · no card required

Scrape Craigslist listings into a spreadsheet

Livescraper's Craigslist Scraper turns a classifieds search into a dataset. You submit a Craigslist search URL or a single listing URL - typed one per line, or uploaded as a CSV, XLSX, TXT or Parquet file - set a limit per query if you want one, and download the results as a clean CSV, Excel or JSON file. One row per listing, numbered in the order the board returned it.

Each row carries the listing title as the seller wrote it, the asking price and its currency, the condition they selected where they set one, the neighbourhood they posted under, a link to the posting, its photo, and a preview of the description. Nine columns in the file, with a tenth in the JSON carrying the result rank.

Resellers pull every listing for the thing they deal in and read the prices as a distribution rather than a feed. Operations teams use the neighbourhood column to turn one city search into a map of where supply actually sits. Researchers run the same search on a schedule, because secondhand pricing moves quickly and a single snapshot cannot show a trend.

Two properties of this export are worth knowing before you write code against it. The price column is a string and uses -1 to mean no price was posted, so cast it naively and every average you compute drifts downward - filter those rows first. And the description is a preview capped at 500 characters, cut mid-word at the limit, rather than the full posting. Start free: your first 500 rows cost nothing and need no credit card, and after that it is $0.002 per row, flat.