Craigslist Scraper — Listings, Photos & Prices avatar

Craigslist Scraper — Listings, Photos & Prices

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Craigslist Scraper — Listings, Photos & Prices

Craigslist Scraper — Listings, Photos & Prices

Scrape Craigslist listings (apartments, jobs, for sale, etc.) for any US city. Returns title, price, beds, sqft, location, and listing URL.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Maged

Maged

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

19 days ago

Last modified

Share

Extract complete, structured Craigslist listing data for any US city and category. Apartments, jobs, cars, electronics, furniture, free stuff, and more — with verified working links, all photos, full descriptions, exact timestamps, and neighborhood context. Ready for analysis, lead generation, price monitoring, or automation in seconds.


Why this scraper beats the rest

Most Craigslist scrapers share the same problems: broken links, missing data, slow page-by-page fetching, and thumbnail-only images. Here's how we solve every one of them.

⚡ Fast bulk extraction — not one page at a time

Other scrapers load Craigslist search pages one by one. This scraper collects listings in large batches, making bulk extraction 10–30× faster — thousands of listings in the time others take for a few pages.

🔗 Every URL actually works

Craigslist uses a regional routing system that most scrapers get wrong. Listings don't just live at city.craigslist.org/category — they require a subarea path like /eby/, /sfc/, /brk/ that's specific to each listing. We decode this from the listing data itself, so every URL we return resolves to the real listing page. No dead links, no 404s.

🖼️ All photos — not just the thumbnail

We extract every image in the listing (up to 24 photos per post), not just the search result thumbnail. Critical for real estate analysis, vehicle inspection, or inventory tracking where you need to see the full picture.

🕐 Exact posted timestamps

Every listing includes the precise UTC datetime it was posted, accurate to the second. No vague "3 hours ago" — a real ISO 8601 timestamp you can sort, filter, and compare programmatically.

📍 Neighborhood-level context

Beyond GPS coordinates, each result includes the neighborhood or district name as listed by the poster — useful for market segmentation, heatmaps, and local trend analysis.

📄 Full descriptions and attributes (optional)

Enable scrapeDetails to get the complete listing description, structured attribute list (parking type, pet policy, laundry, A/C, car specs, availability date), and street address when shown. This is the data you normally only see when you click through to the listing itself.

🎛️ Real filter controls

Price range, photo requirement, posted-today filter, and sort order (newest / cheapest / most expensive / most relevant) — all applied server-side so you only retrieve the results you need.


Use cases

  • Real estate market research — track rental prices, inventory, and availability by neighborhood
  • Lead generation — catch new job posts, service listings, or for-sale items the moment they appear
  • Price intelligence — monitor vehicle, electronics, or furniture prices across cities over time
  • Competitive analysis — track listing volume, pricing trends, and time-to-removal
  • Deal hunting — sort by price ascending with a keyword filter to surface the best deals first
  • Academic and journalistic research — large-scale classified data without manual effort

How to use

  1. Open the Actor in Apify Console
  2. Enter your City (e.g. newyork, chicago, losangeles, sfbay)
  3. Select a Category from the dropdown
  4. Add optional filters — price range, sort order, photos only, posted today
  5. Enable Scrape Full Details if you need descriptions and attributes
  6. Click Start — results appear in the Output tab within seconds

Input

FieldTypeDefaultDescription
citystringnewyorkCraigslist city subdomain (e.g. newyork, chicago, losangeles, sfbay, seattle, boston, miami, dallas, denver, phoenix, austin, philadelphia)
categorystringapaCategory code — see table below. You can also type any Craigslist code directly (e.g. mcy for motorcycles, mvs for RVs, mus for musical instruments)
querystring(empty)Keyword search query
maxResultsinteger100Maximum listings to return (0 = unlimited)
sortBystringdatedate (newest), rel (relevant), priceasc, pricedsc
minPriceinteger(none)Minimum price filter
maxPriceinteger(none)Maximum price filter
postedTodaybooleanfalseOnly listings posted in the last 24 hours
hasPicbooleanfalseOnly listings with at least one photo
scrapeDetailsbooleanfalseFetch each listing page for full description, attributes, and address. Adds ~10–20s per 100 listings.

Supported categories

CodeCategoryCodeCategory
apaApartments / Housing for RentmcyMotorcycles
rooRooms & SharesboaBoats
subSublets & TemporarybikBikes
reoReal Estate for SaleeleElectronics
jjjJobsfuaFurniture
gggGigszipFree Stuff
sssFor Sale (General)bbbServices
ctaCars & Trucks

Example — newest cheap cars with photos:

{
"city": "chicago",
"category": "cta",
"query": "honda civic",
"minPrice": 3000,
"maxPrice": 12000,
"hasPic": true,
"sortBy": "priceasc",
"maxResults": 200
}

Example — today's apartments with full details:

{
"city": "losangeles",
"category": "apa",
"maxPrice": 2500,
"postedToday": true,
"scrapeDetails": true,
"maxResults": 100
}

Output

Each listing returns a rich JSON object. Standard fields are always present. Detail fields (description, attributes, address) require scrapeDetails: true.

{
"postingId": 7937348715,
"title": "Spacious 2BR in Williamsburg – laundry in unit, no broker fee",
"price": "$2,800",
"priceValue": 2800,
"beds": 2,
"sqft": 950,
"neighborhood": "williamsburg",
"latitude": 40.7128,
"longitude": -73.9441,
"postedAt": "2026-05-29T14:22:10Z",
"url": "https://newyork.craigslist.org/brk/apa/d/brooklyn-spacious-2br-williamsburg/7937348715.html",
"imageUrl": "https://images.craigslist.org/00f0f_abc123_0t20CI_600x450.jpg",
"imageUrls": [
"https://images.craigslist.org/00f0f_abc123_0t20CI_600x450.jpg",
"https://images.craigslist.org/00K0K_xyz456_0CI0t2_600x450.jpg"
],
"imageCount": 2,
"description": "Beautifully renovated 2BR with hardwood floors, exposed brick, and in-unit W/D. Steps from the L train. No broker fee. Available June 1st.",
"attributes": ["2BR / 1Ba", "950ft²", "available Jun 1", "cats are OK - purrr", "w/d in unit", "no smoking", "street parking"],
"address": "123 Bedford Ave",
"city": "newyork",
"category": "apa"
}

Download results as JSON, CSV, Excel, or XML from the Output tab.

Data fields

FieldDescription
postingIdUnique Craigslist listing ID
titleListing title
priceFormatted price string (e.g. $2,800)
priceValueNumeric price in dollars
bedsNumber of bedrooms (housing)
sqftSquare footage (housing)
neighborhoodNeighborhood or district name
latitude / longitudeGPS coordinates
postedAtExact UTC timestamp the listing was posted
urlDirect verified link to the listing page
imageUrlFirst listing photo
imageUrlsAll listing photos (up to 24)
imageCountTotal number of photos
descriptionFull listing description text (scrapeDetails only)
attributesStructured list of amenities/specs (scrapeDetails only)
addressStreet address from listing map (scrapeDetails only)
cityCity input used
categoryCategory code used

How many results will I get?

You're charged per result, so the cost follows the number of rows below. Your plan's rates are on the Pricing tab.

InputResults
1 city, 1 category, Max = 100Up to 100 rows
5 cities × 2 categories, Max = 500Up to 5,000 rows

Each listing is one row. Use the max-listings setting and filters (price, bedrooms, posted date) to keep runs focused.

Tips

  • Monitor new listings: combine postedToday: true + hasPic: true + a keyword to catch fresh posts the moment they appear
  • Price floor analysis: use sortBy: priceasc to find the cheapest listings first
  • Multiple cities: run the Actor separately per city or use Apify Schedules to automate across markets
  • Unlimited extraction: set maxResults: 0 to retrieve all available listings (often 10,000–25,000)
  • Any category: the dropdown covers the most common categories but you can type any Craigslist code directly — mcy (motorcycles), mvs (RVs), mus (musical instruments), pho (photography gear), atq (antiques), clt (clothing), and hundreds more
  • Deal hunting: sortBy: priceasc + hasPic: true + keyword is the fastest way to surface real deals

FAQ

Why are some fields null? Price, beds, sqft, and neighborhood are optional on Craigslist. Listings that don't include them return null for those fields.

How fresh is the data? Each run fetches live data directly. Results reflect what's on Craigslist at the moment you run the Actor.

Can I run multiple cities? Not in a single run — set up separate runs per city, or use the Apify API/Schedules to run them in parallel.

Is this legal? This Actor accesses publicly available Craigslist listings the same way a browser does. Users are responsible for ensuring compliance with Craigslist's Terms of Use and applicable laws. Do not use scraped data for spam, fraud, or harassment.

Need help or found a bug? Open an issue in the ../../issues or reach out through Apify Console.


⭐ Found this Actor useful? A quick review on the Store helps other users find it and keeps it maintained.