Craigslist API: Search listings
Searches public Craigslist listings in a city or area, newest first. Renewed listings may have older original posting dates.
Unofficial. Not affiliated with or endorsed by Craigslist.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Area, required
area Craigslist city or area, such as San Francisco Bay Area or Chicago.
San Francisco Bay Area
- Query, required
query Words to search for, such as road bike.
road bike
- Category optional
category Listing category, such as for_sale or housing.
for_sale (default)
One of
for_sale,housing,jobs,services,cars_and_trucks,gigs.- Max Price optional
max_price Highest price in local currency, such as 500. Leave empty for no maximum.
Not set
Number 0 or more.
- Min Price optional
min_price Lowest price in local currency, such as 100. Leave empty for no minimum.
Not set
Number 0 or more.
- Max Results optional
max_results Most listings to return, such as 25.
25 (default)
Whole number from 1 to 100.
Input as JSON
{ "area": "San Francisco Bay Area", "query": "road bike"}Output
{ "listings": [ { "price": 395, "title": "Specialized road bike", "photo_link": "https://images.craigslist.org/00u0u_973m0oItohK_0CI0t2_600x450.jpg" , "posting_id": "7974087135", "posted_date": "2026-09-27", "listing_link": "https://www.craigslist.org/view/d/emeryville-specialized-road-bike/gGcjrby4x8iNiWu7ephyBo" , "currency_code": "USD", "neighbourhood": "Oakland" }, { "price": 390, "title": "Specialized road bike", "photo_link": "https://images.craigslist.org/00L0L_9kLQq04wmQ7_0CI0t2_600x450.jpg" , "posting_id": "7966025037", "posted_date": "2026-09-13", "listing_link": "https://www.craigslist.org/view/d/emeryville-specialized-road-bike/dtuVsLD7RNkzraDrjzfJ5w" , "currency_code": "USD", "neighbourhood": "Berkeley" }, { "price": 2600, "title": "talaria mx 4 sting for sale", "photo_link": "https://images.craigslist.org/00b0b_lqrVCOkA7FP_1320MM_600x450.jpg" , "posting_id": "7949673589", "posted_date": "2026-07-26", "listing_link": "https://www.craigslist.org/view/d/rio-vista-talaria-mx-sting-for-sale/jCzJUuAh3bgbdGYqGB9RNx" , "currency_code": "USD", "neighbourhood": "brentwood / oakley" } ], "area_used": "SF bay area"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"craigslist.org/search_listings","input":{"area":"San Francisco Bay Area","query":"road bike"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "craigslist.org/search_listings" , "input": { "area": "San Francisco Bay Area", "query": "road bike" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "craigslist.org/search_listings" , "input": { "area": "San Francisco Bay Area", "query": "road bike" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run craigslist.org/search_listings# with {"area":"San Francisco Bay Area","query":"road bike"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "query", "area" ], "properties": { "area": { "type": "string", "minLength": 1, "description": "Craigslist city or area, such as San Francisco Bay Area or Chicago." }, "query": { "type": "string", "minLength": 1, "description": "Words to search for, such as road bike." }, "category": { "enum": [ "for_sale", "housing", "jobs", "services", "cars_and_trucks", "gigs" ], "type": "string", "default": "for_sale", "description": "Listing category, such as for_sale or housing." }, "max_price": { "type": "number", "minimum": 0, "description": "Highest price in local currency, such as 500. Leave empty for no maximum." }, "min_price": { "type": "number", "minimum": 0, "description": "Lowest price in local currency, such as 100. Leave empty for no minimum." }, "max_results": { "type": "integer", "default": 25, "maximum": 100, "minimum": 1, "description": "Most listings to return, such as 25." } }}Output schema
{ "type": "object", "required": [ "area_used", "listings" ], "properties": { "listings": { "type": "array", "items": { "type": "object", "properties": { "price": { "type": [ "number", "null" ] }, "title": { "type": "string" }, "photo_link": { "type": [ "string", "null" ] }, "posting_id": { "type": [ "string", "null" ] }, "posted_date": { "type": [ "string", "null" ] }, "listing_link": { "type": "string" }, "currency_code": { "type": [ "string", "null" ] }, "neighbourhood": { "type": [ "string", "null" ] } } } }, "area_used": { "type": "string" } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
craigslist.org/search_listings- Returns
- title, price, currency, neighbourhood, posted date, photo, link, posting id
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method craigslist.org/search_listings with the inputs above.
Ask your agent
- Find me 10 listings for used road bikes under 400 dollars in Chicago, newest first
- Show cheap apartments for rent in the San Francisco Bay Area between 1000 and 2000 dollars
- Look up for-sale listings of standing desks in Austin with a 150 dollar cap
- Any craigslist gigs for graphic design work in Seattle posted recently?
- I need up to 50 cars and trucks listings in Denver priced from 3000 to 8000 dollars
See more
All Craigslist methodsGets the public details of a Craigslist listing from its link. Deleted or expired listings are not returned, and hidden contact details are not included.
craigslist.org/get_listingFinds OfferUp items for sale near a US city or ZIP code, with prices, condition, seller names, distance and links. Distances use approximate listing locations.
offerup.com/search_listingsSearches CARFAX used-car listings for a make and model near a US ZIP code, in CARFAX order, with listing details and free vehicle-history highlights. Paid full history reports are not included.
carfax.com/search_carsSearches Cars.com car listings for a make and model around a US ZIP code within a radius, optionally by condition (new, used or certified pre-owned) and maximum price, in Cars.com search order.
cars.com/search_carsSearches new and used cars for sale near a US ZIP code for a make and model, with prices, dealer details and CarGurus deal ratings. Used cars come first, then new cars, each in CarGurus order; market difference is positive below market and negative above.
cargurus.com/search_carsSearches Autotrader car listings near a US ZIP code by make and model, with condition, price, year and distance filters. Returns up to 100 listings in site order.
autotrader.com/search_carsSearches Realtor.com homes for sale, for rent, or recently sold in a city, neighborhood or ZIP code, with optional price, bedroom, bathroom and home type filters and sort order. Rentals with price ranges use the lowest advertised rent; withheld sold prices are blank.
realtor.com/search_homesSearches Zillow homes for sale in a city and state, neighborhood or ZIP code, with optional price, bedroom, bathroom and property type filters and sort order, from Zillow's public search pages (up to 100 listings).
zillow.com/search_homes