Craigslist APIlosangeles.craigslist.org ↗
Search and retrieve Craigslist LA listings by keyword, price, category, and ZIP code. Access full listing details including description, geo, images, and attributes.
What is the Craigslist API?
This API exposes 4 endpoints for querying Craigslist Los Angeles across every major section — for sale, housing, jobs, gigs, services, and community. The search_listings endpoint returns paginated summaries including title, price, posting date, image URLs, and category. The get_listing_detail endpoint fetches full descriptions, structured attributes, geolocation coordinates, and address fields for any individual listing URL.
curl -X GET 'https://api.parse.bot/scraper/45a8c020-22bf-42e8-8b66-2b14e04077d8/search_listings?sort=date&limit=360&query=bike&offset=0&category=bik' \ -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 losangeles-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 LA SDK — search, filter, drill into details, browse categories."""
from parse_apis.Craigslist_Los_Angeles_API import CraigslistLA, Category, Sort, ListingNotFound
client = CraigslistLA()
# Browse available categories
cats = client.category_maps.get()
print(cats.housing, cats.jobs)
# Search bikes sorted by price, capped at 5 results
for listing in client.listing_summaries.search(query="mountain bike", category=Category.BIKES, sort=Sort.PRICE_ASC, limit=5):
print(listing.title, listing.price, listing.subarea)
# Drill into the first result's full details
item = client.listing_summaries.search(query="road bike", category=Category.BIKES, limit=1).first()
if item:
detail = item.details()
print(detail.title, detail.price)
print(detail.description[:100])
print(detail.location.address_locality, detail.location.postal_code)
print(detail.geo.latitude, detail.geo.longitude)
# Search nearby a ZIP code
for nearby in client.listing_summaries.search_nearby(query="couch", category=Category.FURNITURE, zip_code="90210", radius=5, limit=3):
print(nearby.title, nearby.price, nearby.url)
# Handle a not-found listing gracefully
try:
bad = client.listing_summaries.search(query="nonexistent_xyz_item_12345", limit=1).first()
if bad:
bad.details()
except ListingNotFound as exc:
print(f"Listing gone: {exc.url}")
print("exercised: category_maps.get / listing_summaries.search / search_nearby / details / ListingNotFound")
Search for listings across all categories on Craigslist Los Angeles. Returns paginated results with listing summaries including title, price, posting date, and images. Pagination is offset-based with a configurable batch size. Results are sorted by date by default. Supports price range filtering and keyword search.
| Param | Type | Description |
|---|---|---|
| sort | string | Sort order for results. |
| limit | integer | Maximum number of results to return per request. |
| query | string | Search keyword to filter listings. |
| offset | integer | Result offset for pagination. |
| category | string | Category code for filtering listings. |
| max_price | integer | Maximum price filter. |
| min_price | integer | Minimum price filter. |
{
"type": "object",
"fields": {
"limit": "integer max results returned",
"offset": "integer current pagination offset",
"listings": "array of listing objects with id, title, price, posted_date, url, image_urls, subarea, category",
"total_count": "integer total number of matching results"
},
"sample": {
"data": {
"limit": 5,
"offset": 0,
"listings": [
{
"id": "7926227173",
"url": "https://losangeles.craigslist.org/ant/bik/d/santa-clarita-cannondale-bad-boy-belt/7926227173.html",
"price": 950,
"title": "Cannondale Bad Boy 1 Belt Drive",
"subarea": "ant",
"category": "bik",
"image_urls": [
"https://images.craigslist.org/00U0U_4gj9WCukHc6_600x450.jpg"
],
"posted_date": "2026-06-09 17:47:27"
}
],
"total_count": 4413
},
"status": "success"
}
}About the Craigslist API
Search and Filter Listings
The search_listings endpoint accepts keyword queries, price range filters (min_price, max_price), category codes, and sort orders (date, rel, priceasc, pricedsc). Results are paginated via limit and offset parameters, and each listing object in the response includes id, title, price, posted_date, url, image_urls, subarea, and category. The total_count field tells you how many results match so you can implement full pagination.
Category codes follow Craigslist's own scheme: sss for all for-sale items, cta for cars and trucks, hhh for housing, apa for apartments, jjj for jobs, boa for boats, ele for electronics, and others returned by get_categories. Use get_categories to retrieve the full mapping of codes to human-readable names, organized into six top-level sections: community, services, housing, for sale, jobs, and gigs.
Location-Based Search
The search_with_location endpoint extends keyword and category filtering with a ZIP code and radius in miles. Pass any 5-digit US ZIP code alongside a radius value to narrow results to listings posted near a specific geographic area. The response shape mirrors search_listings — an array of listing objects with id, title, price, posted_date, url, image_urls, subarea, and category, plus pagination fields.
Full Listing Details
Call get_listing_detail with a complete Craigslist listing URL to retrieve the full record. The response includes a description string, a structured attributes object of key-value pairs (condition, make, model, etc., depending on category), an array of image_urls, a geo object with latitude and longitude, a location object with addressLocality, postalCode, and addressRegion fields, and the ISO-formatted posted_date.
The Craigslist API is a managed, monitored endpoint for losangeles.craigslist.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when losangeles.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 losangeles.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?+
- Aggregate apartment and housing listings filtered by price range and subarea for a rental search tool.
- Monitor used car inventory on Craigslist LA by polling
search_listingswith categoryctaand sorting bydate. - Build a price-comparison feed for electronics by querying category
elewithmin_priceandmax_pricebounds. - Geocode listing locations using the
geolatitude/longitude fields returned byget_listing_detailfor map-based display. - Pull job postings by category
jjjand index them into a local search engine with full description text. - Send alerts when new listings matching a keyword appear within a set mile radius of a ZIP code using
search_with_location. - Enumerate all available subcategories programmatically via
get_categoriesbefore building category-specific scrapers or filters.
| 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?+
What does `get_listing_detail` return beyond what search results include?+
description text, a structured attributes object (key-value pairs like condition, make, model, or size depending on category), a geo object with latitude and longitude, and a location object with address components including addressLocality, postalCode, and addressRegion. Search result objects only include summary fields: title, price, posting date, image URLs, subarea, and category.Does the API cover Craigslist regions outside Los Angeles?+
Are listing contact details such as phone numbers or email addresses returned?+
How does pagination work in `search_listings`?+
total_count integer representing the full number of matching results. Use offset to move through pages and limit to control how many results are returned per request. Increment offset by limit on each subsequent call to walk through the full result set.