Craigslist Scraper — Price, Location & Geo-Coordinates avatar

Craigslist Scraper — Price, Location & Geo-Coordinates

Pricing

from $1.01 / 1,000 results

Go to Apify Store
Craigslist Scraper — Price, Location & Geo-Coordinates

Craigslist Scraper — Price, Location & Geo-Coordinates

Scrape Craigslist listings by city, category and keyword: title, price, location, images and geo-coordinates. No login, no API key.

Pricing

from $1.01 / 1,000 results

Rating

0.0

(0)

Developer

Axery

Axery

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Craigslist Search Scraper

Scrapes Craigslist listings by city, category and keyword — title, price, location, images and geo-coordinates. No login, no API key.

Useful for local market research, price monitoring on specific item categories, and building a search alert across one or many cities.

What makes this different

Images and precise geo-coordinates, which the listing cards alone don't carry. Craigslist's search page splits its data across two places: the visible listing cards (title, price, neighborhood, URL) and a separate structured ItemList block (images, exact latitude/longitude) with no shared ID linking the two. This Actor merges them by title match into one row, so you get both the clickable listing and its images/coordinates together — something neither source alone provides.

The real depth limit is stated honestly, not hidden. This search page has a fixed ceiling around 350–400 results with no working pagination — the s= offset parameter Craigslist's full site uses for "next page" is silently ignored here, and the RSS export that used to be a workaround is blocked outright. Rather than pretending to page past that (and quietly returning the same listings over and over), this Actor reports what it actually found and documents the limit so you can narrow with query, category, or price filters when a search is broader than that.

Price filters that actually filter, verified against live results rather than assumed from the URL parameter names.

Input

FieldTypeNotes
citystringCraigslist city subdomain, e.g. sfbay, newyork.
categorystringCategory code, e.g. sss (for sale - all), bik (bicycles), zip (free). Defaults to sss.
querystringOptional keyword, same as the site's own search box.
minPrice / maxPriceintegerOptional price range.
maxItemsinteger0 = everything this search returns (up to the endpoint's own ~350-400 ceiling).
incrementalbooleanOnly listings not seen in previous runs.
proxyConfigurationobjectNot normally needed.

Finding city and category codes

City: the subdomain from that city's Craigslist URL (sfbay.craigslist.orgsfbay). The full list is at craigslist.org/about/sites. Category: the short code visible in the search URL when browsing the category on the site itself.

Output

{
"listing_id": "craigslist.org:jNAsa3GTtJA3uJWjxeh7fs",
"title": "Purple lowrider bicycle 20\"",
"price": 50,
"currency": "USD",
"location": "sunnyvale",
"neighborhood": "Sunnyvale",
"latitude": 37.3764004252778,
"longitude": -122.023795650699,
"images": ["https://images.craigslist.org/..."],
"url": "https://www.craigslist.org/view/d/sunnyvale-purple-lowrider-bicycle-20/jNAsa3GTtJA3uJWjxeh7fs"
}

neighborhood, coordinates and images are only present when the structured data block matched that listing by title — most listings match, but not all. Each run also writes a RUN_COVERAGE record to the key-value store with what was requested, what came back, and any failure.

Local development

pip install -r requirements.txt
python test_local.py sfbay --query bike --max 30 --out sample_output.json
python test_local.py sfbay --category bik --min-price 50 --max-price 300

sample_output.json is real output from a live search.