Craigslist APIinlandempire.craigslist.org ↗
Search Craigslist for sale listings across any region. Returns titles, prices, coordinates, images, and URLs via a single structured endpoint.
What is the Craigslist API?
The Craigslist API provides one endpoint — search_listings — that returns up to dozens of structured for-sale listings per call, with 10 fields per listing including title, price, GPS coordinates, image arrays, and direct posting URLs. It covers all major Craigslist regions and category codes, making it straightforward to query items across geography or category without manually browsing regional subdomains.
curl -X GET 'https://api.parse.bot/scraper/16e674d4-65b2-457c-b105-c5c214760322/search_listings?sort=rel&limit=10&query=peloton®ion=inlandempire&category=sss&max_price=2000&min_price=50' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace craigslist-org-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Craigslist SDK — search listings with filters, enums, and error handling."""
from parse_apis.craigslist_listings_search_api import Craigslist, Sort, Category, RegionNotFound
client = Craigslist()
# Search for bicycles in SF Bay Area, sorted by price ascending
for listing in client.listings.search(query="bicycle", region="sfbay", sort=Sort.PRICE_ASC, limit=5):
print(listing.title, listing.price, listing.area)
# Filter by price range and category
affordable = client.listings.search(
query="peloton",
region="inlandempire",
category=Category.FOR_SALE,
min_price="100",
max_price="800",
limit=3,
).first()
if affordable:
print(affordable.title, affordable.price, affordable.url)
print(f"Location: {affordable.location} ({affordable.latitude}, {affordable.longitude})")
print(f"Images: {len(affordable.images)}")
# Typed error handling for invalid regions
try:
result = client.listings.search(query="couch", region="fakecity123", limit=1).first()
except RegionNotFound as exc:
print(f"Region not found: {exc.region}")
print("exercised: listings.search with Sort enum, Category enum, price filters, and RegionNotFound error")
Full-text search over a Craigslist region's for-sale listings. query matches listing titles and descriptions; sort controls result ordering. Filtering by price range is supported. Returns up to limit results in a single page with total_results indicating the full result count upstream. Each listing includes posting_id, title, price, location coordinates, thumbnail images, and a direct URL to the posting.
| Param | Type | Description |
|---|---|---|
| sort | string | Sort order for results |
| limit | integer | Maximum number of listings to return |
| query | string | Search keyword(s) |
| region | string | Craigslist region subdomain (e.g. 'sfbay', 'inlandempire', 'newyork', 'chicago') |
| category | string | Craigslist category code |
| max_price | string | Maximum price filter as a numeric string (e.g. '5000') |
| min_price | string | Minimum price filter as a numeric string (e.g. '100') |
{
"type": "object",
"fields": {
"query": "search keyword used",
"region": "Craigslist region searched",
"listings": "array of Listing objects",
"total_results": "total number of results reported by Craigslist",
"results_returned": "number of listings returned in this response"
},
"sample": {
"data": {
"query": "peloton",
"region": "inlandempire",
"listings": [
{
"url": "https://inlandempire.craigslist.org/d/los-angeles-peloton-tread-treadmill/29854352.html",
"area": "inlandempire",
"price": 3200,
"title": "Peloton Tread + Treadmill 2019 Model HD 32\" Touchscreen",
"images": [
"https://images.craigslist.org/00r0r_3AxeTxr0OYx_0aw0gw_600x450.jpg"
],
"latitude": 34.029,
"location": "",
"longitude": -118.4005,
"posting_id": 29854352,
"price_display": "$3,200"
}
],
"total_results": 10,
"results_returned": 3
},
"status": "success"
}
}About the Craigslist API
What the API Returns
The search_listings endpoint accepts a query keyword and a region subdomain (e.g. sfbay, newyork, chicago, inlandempire) and returns a flat array of listing objects. Each listing includes posting_id, title, price (numeric), price_display (formatted string), location, area, latitude, longitude, images (array of image URLs), and a direct url to the Craigslist posting. The response also reports total_results (the count Craigslist attributes to the query) and results_returned (the count actually delivered in this response).
Filtering and Sorting
You can narrow results with min_price and max_price (passed as numeric strings) and control ordering via the sort parameter, which accepts rel (relevance), date (newest first), dateoldest, priceasc, and pricedsc. The limit parameter caps how many listings come back per call. The category parameter lets you target a specific vertical: sss covers all for-sale items, while cta restricts to cars and trucks.
Regional Coverage
Craigslist operates hundreds of regional subdomains. The region input takes the subdomain prefix as a string, so switching between markets is a single parameter change. There is no built-in multi-region aggregation in one call — each request targets exactly one region. Combine calls across regions in your own code if you need cross-market coverage.
The Craigslist API is a managed, monitored endpoint for inlandempire.craigslist.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when inlandempire.craigslist.org changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official inlandempire.craigslist.org API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track price trends for a specific item (e.g. 'Peloton') across multiple Craigslist regions using the
pricefield - Build a used-car search tool filtered by
min_price/max_priceusing thectacategory code - Plot listing density on a map using the
latitudeandlongitudefields returned per listing - Monitor new listings in near real-time by sorting with
sort=dateand comparingposting_idvalues - Aggregate image thumbnails from the
imagesarray to power a visual listing feed - Identify arbitrage opportunities by querying the same keyword across several regional subdomains and comparing
pricevalues
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Craigslist have an official developer API?+
How does pagination work — can I retrieve listings beyond the first page?+
limit parameter controls how many listings are returned per call. The response includes total_results so you can compare it against results_returned to know how many listings Craigslist attributes to the query. Offset-based pagination is not a built-in parameter on this endpoint; if you need deeper pagination, you can fork the API on Parse and revise it to add an offset or page parameter.Does the API return listing descriptions or seller contact information?+
search_listings endpoint returns listing-level fields — title, price, location, coordinates, images, and URL — but not the full posting body text or any seller contact details. You can fork the API on Parse and revise it to add a detail endpoint that fetches the full posting content by URL.Can I search categories other than for-sale items, such as housing or jobs?+
category parameter supports sss (all for sale) and cta (cars and trucks). Housing, jobs, services, and other Craigslist sections are not covered by this endpoint. You can fork the API on Parse and revise it to pass different category codes for those sections.