Craigslist Listings Scraper avatar

Craigslist Listings Scraper

Pricing

from $6.80 / 1,000 results

Go to Apify Store
Craigslist Listings Scraper

Craigslist Listings Scraper

Scrape craigslist classified listings for sale, housing, jobs, gigs and services. Get title, price, city and region, area, coordinates, posting date, listing URL, images and a description snippet across many cities and categories. Export to JSON, CSV or Excel.

Pricing

from $6.80 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

Craigslist Listings Scraper

Craigslist Listings Scraper

Here is one real result, with every field the actor returns (this record has fetchDescriptions and both AI add-ons enabled; the long description is trimmed with a note, values real):

{
"imageUrl": "https://images.craigslist.org/00p0p_35JrmA3W1HB_0CI0t2_600x450.jpg",
"title": "for sale set of wheels great for 27 or 26 bike fast ready to ride",
"url": "https://www.craigslist.org/view/d/flushing-for-sale-set-of-wheels-great/rCGtNDQ4CWc5Y5fYxR7Kk2",
"postingId": 7944850486,
"price": 50,
"priceText": "$50",
"currency": "USD",
"city": "newyork",
"region": "new york city",
"area": "queens",
"neighborhood": "queens",
"latitude": 40.728,
"longitude": -73.8195,
"category": "sss",
"categoryName": "For sale",
"searchQuery": "bicycle",
"postedAt": "2026-08-14T07:08:16.000Z",
"aiSummary": "For sale is a set of good condition wheels suitable for 26 or 27-inch bike frames, priced at $50. The wheels are ready to ride and located in New York City, near Forest Hills.",
"aiCategory": {
"category": "Electronics",
"subcategory": null,
"itemType": "Bicycle Wheels",
"condition": "good"
},
"description": "for sale set of wheels size 27 .this great st for 27 or 26 bike frame fast wheels ready to ride for $50.00. wheels set near by the Forest hills by all train-e-f-v-n- stop at queens ...",
"attributes": { "condition": "good" },
"mapAddress": null,
"hasReply": true,
"replyUrl": "https://www.craigslist.org/reply/nyc/bop/7944850486/",
"imageCount": 1,
"imageUrls": ["https://images.craigslist.org/00p0p_35JrmA3W1HB_0CI0t2_600x450.jpg"],
"source": "craigslist",
"observedAt": "2026-08-14T07:09:43.945Z",
"error": null
}

The most complete Craigslist listings scraper available. It returns every field a classified listing exposes, including price, coordinates, posting date, images, description snippet, structured item attributes and reply availability, plus two optional AI add-ons, and works across any city, category and keyword combination.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor queries the public craigslist listing feed for every city, category and keyword combination you pass, decodes each listing into a clean record, and writes one item per listing to the run's dataset. Prices, coordinates and posting dates are surfaced as structured fields, and when fetchDescriptions is on the actor opens each listing to add the description snippet, neighborhood, structured item attributes and reply availability. Missing source values are returned as null, never invented.

Data covers any craigslist city, addressed by its subdomain, across every top-level category. Two optional AI add-ons (withAiSummary, withAiCategorize) can enrich each record; they are opt-in, billed only when they produce output, and disabled on free Apify plans.

Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 2 "bicycle" for-sale listings in New York with descriptions.

{
"cities": ["newyork"],
"categories": ["sss"],
"searchQueries": ["bicycle"],
"maxListings": 2,
"fetchDescriptions": true
}

Leave searchQueries empty to browse the whole category. Every input field is optional; with an empty input the actor browses the sss (for sale) category in newyork.

Input reference

FieldTypeRequiredDefaultDescription
citiesarrayno["newyork"]Craigslist city subdomains to search, for example newyork, losangeles, chicago, london.
categoriesarrayno["sss"]Category codes: sss for sale, hhh housing, jjj jobs, ggg gigs, bbb services, ccc community, eee events, rrr resumes.
searchQueriesarrayno(empty)Keywords to search, for example laptop, 2 bedroom, barista. Each keyword runs across every city and category. Empty browses the category.
fetchDescriptionsbooleannotrueEnrich each listing with a description snippet, neighborhood, structured attributes and reply availability.
maxListingsintegerno40Maximum listings to collect across the run. Free Apify plans are capped at 10 per run.
withAiSummarybooleannofalseAdd a plain-English AI summary of each listing. Paid add-on, disabled on free plans.
withAiCategorizebooleannofalseClassify each listing into a normalized category, subcategory, item type and condition via AI. Paid add-on, disabled on free plans.

Output reference

One dataset item per listing. Types: string, number, boolean, string[], object, or null when the source value is absent.

FieldTypeDescription
imageUrlstringFirst listing image, or null.
titlestringListing title.
urlstringPublic listing page URL.
postingIdnumberCraigslist posting ID.
pricenumberNumeric price, or null when none.
priceTextstringPrice as shown, for example $50.
currencystringCurrency code, for example USD.
citystringCity subdomain that produced this listing.
regionstringHuman-readable region/city name.
areastringNearest sub-area, for example queens.
neighborhoodstringNeighborhood from the detail page, or null.
latitudenumberLatitude, or null.
longitudenumberLongitude, or null.
categorystringCategory code, for example sss.
categoryNamestringHuman-readable category, for example For sale.
searchQuerystringThe keyword that produced this listing, or null.
postedAtstringPosting date (ISO 8601).
aiSummarystringAI plain-English summary. Present only when withAiSummary is enabled.
aiCategoryobjectAI category, subcategory, itemType, condition. Present only when withAiCategorize is enabled.
descriptionstringDescription snippet. Present with fetchDescriptions.
attributesobjectStructured item attributes (condition, make/model, VIN, odometer, bedrooms, sqft, etc.), or null. Present with fetchDescriptions.
mapAddressstringApproximate street/map address when shared, or null.
hasReplybooleanWhether the poster can be contacted through the reply system. Present with fetchDescriptions.
replyUrlstringReply URL when available, or null.
imageCountnumberNumber of images on the listing.
imageUrlsstring[]All listing image URLs.
sourcestringConstant source tag. Always craigslist.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

Real record from a live run (input {"cities":["newyork"],"categories":["sss"],"searchQueries":["bicycle"],"maxListings":2,"fetchDescriptions":true}), with the long description trimmed for readability:

{
"title": "for sale set of wheels great for 27 or 26 bike fast ready to ride",
"url": "https://www.craigslist.org/view/d/flushing-for-sale-set-of-wheels-great/rCGtNDQ4CWc5Y5fYxR7Kk2",
"postingId": 7944850486,
"price": 50,
"priceText": "$50",
"currency": "USD",
"city": "newyork",
"region": "new york city",
"area": "queens",
"neighborhood": "queens",
"latitude": 40.728,
"longitude": -73.8195,
"category": "sss",
"categoryName": "For sale",
"searchQuery": "bicycle",
"postedAt": "2026-08-14T07:08:16.000Z",
"attributes": { "condition": "good" },
"hasReply": true,
"replyUrl": "https://www.craigslist.org/reply/nyc/bop/7944850486/",
"imageCount": 1,
"source": "craigslist",
"observedAt": "2026-08-14T07:09:43.945Z",
"error": null
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~craigslist-listings-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"cities":["newyork"],"categories":["sss"],"searchQueries":["bicycle"],"maxListings":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~craigslist-listings-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"cities":["losangeles","chicago"],"categories":["hhh"],"searchQueries":["2 bedroom"],"maxListings":200}'

Apify CLI:

apify call scrapers_lat/craigslist-listings-scraper \
--input '{"cities":["newyork"],"categories":["jjj"],"searchQueries":["barista"],"maxListings":10}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per listing returned (result event). See the pricing tab for the current per-result price.
  • AI add-ons billed separately. withAiSummary and withAiCategorize each charge their own event only when they produce output, and are disabled on free plans.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run. Upgrade for higher maxListings.

FAQ and troubleshooting

A run returned 0 records. Why? The city subdomain was wrong, or the keyword matched nothing in that category. Confirm the subdomain from the address of that city's local craigslist site, and broaden the keyword. Zero-result runs are not charged.

Which cities are supported? Any craigslist city. Use the subdomain shown in the address of that city's local site, for example newyork, losangeles, london.

Can I search several cities at once? Yes. Add each city to cities; every keyword and category is applied to each city.

Why is description or attributes empty? Those fields come from the listing detail page, collected when fetchDescriptions is on. Some listings do not publish a description or structured attributes; missing values are returned as null.

Do the AI add-ons work on a free plan? No. The AI add-ons require a paid Apify plan and are disabled automatically for free users. The base listing fields are always returned.

Is this an official craigslist tool? No. This actor is independent and has no affiliation with craigslist. It reads only data that is publicly available on the platform.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with craigslist. Accesses only publicly available listing data.