OfferUp API: Search listings
Finds OfferUp items for sale near a US city or ZIP code, with prices, condition, seller names, distance and links. Distances use approximate listing locations.
Unofficial. Not affiliated with or endorsed by OfferUp.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Sort optional
sort Listing order, such as newest.
newest
One of
best_match,newest,closest,price_low_to_high,price_high_to_low. Defaultbest_match.- Query, required
query What to search for, such as couch.
table
- Location, required
location US ZIP code or city and state, such as Seattle, WA or 98101.
Portland, OR
- Condition optional
condition Item condition, such as used.
any (default)
One of
any,new,open_box,reconditioned,used.- Max Price optional
max_price Maximum price in USD, such as 500.
Not set
Number 0 or more.
- Min Price optional
min_price Minimum price in USD, such as 100.
Not set
Number 0 or more.
- Max Results optional
max_results Maximum listings to return, such as 30.
55
Whole number from 1 to 100. Default
30.- Max Distance (miles) optional
max_distance_miles Maximum distance from the place in miles, such as 20.
100
Whole number. One of
5,10,20,30,50,100. Default30.
Input as JSON
{ "sort": "newest", "query": "table", "location": "Portland, OR", "max_results": 55, "max_distance_miles": 100}Output
{ "listings": [ { "city": "Aloha", "price": 50, "state": "OR", "title": "White IKEA console", "currency": "USD", "condition": "Used", "image_link": "https://images.offerup.com/iNlIzS9_YiV20lOVMKb3H7RJCQw=/333x250/3181/318164b209264c1a84beac0445affaf9.jpg" , "listing_id": "f45fd813-0f41-3505-881c-dc7a4e5813b4", "seller_name": "John & Liz", "listing_link": "https://offerup.com/item/detail/f45fd813-0f41-3505-881c-dc7a4e5813b4" , "distance_miles": 9.5, "shipping_available": false }, { "city": "Portland", "price": 550, "state": "OR", "title": "Chiropractic Table", "currency": "USD", "condition": "Used", "image_link": "https://images.offerup.com/7oVi01ezd4ZMBLj2U8hvn_vm2po=/250x333/78b8/78b8536c7b9845b590551fa3d25012f5.jpg" , "listing_id": "7b5f2242-8271-3afd-8d2e-5f810ff05210", "seller_name": "Kai Herman", "listing_link": "https://offerup.com/item/detail/7b5f2242-8271-3afd-8d2e-5f810ff05210" , "distance_miles": 3.4, "shipping_available": false }, { "city": "Aloha", "price": 50, "state": "OR", "title": "Dining set", "currency": "USD", "condition": "Used", "image_link": "https://images.offerup.com/Ma5uvtMK0mmaIClRE1-IqR9Z26Y=/333x250/9693/96938d4feecc45aabe069fd3a5f97685.jpg" , "listing_id": "a2e2c112-1362-313c-8053-e4ec7ea246b6", "seller_name": "John & Liz", "listing_link": "https://offerup.com/item/detail/a2e2c112-1362-313c-8053-e4ec7ea246b6" , "distance_miles": 9.5, "shipping_available": false } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"offerup.com/search_listings","input":{"sort":"newest","query":"table","location":"Portland, OR","max_results":55,"max_distance_miles":100}}' # 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": "offerup.com/search_listings" , "input": { "sort": "newest", "query": "table", "location": "Portland, OR", "max_results": 55, "max_distance_miles": 100 }})# 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": "offerup.com/search_listings" , "input": { "sort": "newest", "query": "table", "location": "Portland, OR", "max_results": 55, "max_distance_miles": 100 } }), 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 offerup.com/search_listings# with {"sort":"newest","query":"table","location":"Portland, OR","max_results":55,"max_distance_miles":100}"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", "location" ], "properties": { "sort": { "enum": [ "best_match", "newest", "closest", "price_low_to_high", "price_high_to_low" ], "type": "string", "default": "best_match", "description": "Listing order, such as newest." }, "query": { "type": "string", "minLength": 1, "description": "What to search for, such as couch." }, "location": { "type": "string", "minLength": 1, "description": "US ZIP code or city and state, such as Seattle, WA or 98101." }, "condition": { "enum": [ "any", "new", "open_box", "reconditioned", "used" ], "type": "string", "default": "any", "description": "Item condition, such as used." }, "max_price": { "type": "number", "minimum": 0, "description": "Maximum price in USD, such as 500." }, "min_price": { "type": "number", "minimum": 0, "description": "Minimum price in USD, such as 100." }, "max_results": { "type": "integer", "default": 30, "maximum": 100, "minimum": 1, "description": "Maximum listings to return, such as 30." }, "max_distance_miles": { "enum": [ 5, 10, 20, 30, 50, 100 ], "type": "integer", "default": 30, "description": "Maximum distance from the place in miles, such as 20." } }}Output schema
{ "type": "object", "required": [ "listings" ], "properties": { "listings": { "type": "array", "items": { "type": "object", "required": [ "title", "price", "currency", "condition", "city", "state", "distance_miles", "shipping_available", "seller_name", "image_link", "listing_link", "listing_id" ], "properties": { "city": { "type": [ "string", "null" ] }, "price": { "type": [ "number", "null" ], "description": "Price in USD." }, "state": { "type": [ "string", "null" ] }, "title": { "type": [ "string", "null" ] }, "currency": { "type": "string", "description": "Price currency code." }, "condition": { "type": [ "string", "null" ] }, "image_link": { "type": [ "string", "null" ] }, "listing_id": { "type": "string" }, "seller_name": { "type": [ "string", "null" ] }, "listing_link": { "type": "string" }, "distance_miles": { "type": [ "number", "null" ] }, "shipping_available": { "type": "boolean" } }, "additionalProperties": false } } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
offerup.com/search_listings- Returns
- title, price, condition, city, state, distance, shipping, seller, image, link
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 offerup.com/search_listings with the inputs above.
Ask your agent
- Find used mountain bikes under $300 within 20 miles of Denver, CO, cheapest first
- Check OfferUp for a PS5 near ZIP 77002, new or open box only, and show me the seller and distance for each
- What sectional couches are for sale near Portland, OR between $150 and $600? Show the newest listings first
- Search OfferUp around 30318 for a Weber grill, closest ones within 10 miles
- Looking for a reconditioned iPhone 14 near Chicago, IL, max $450, top 15 results with links and whether shipping is available
See more
Searches public Craigslist listings in a city or area, newest first. Renewed listings may have older original posting dates.
craigslist.org/search_listingsSearches 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_homesSearches Mercari US listings for items for sale or sold, with condition, price and sorting filters, and adds seller, size and shipping details from each item page. Sold prices are displayed listing prices.
mercari.com/search_listingsSearches 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 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 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 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 CarMax used cars by make and model with optional ZIP, distance, year, price and mileage filters, keeping CarMax's order. Pages expose only the first 48 cars; distance is CarMax's distance from the selected local store, and larger limits or narrow distance filters may return fewer matches.
carmax.com/search_cars