$200 a month below usual
Marketplace data,
ready for your AI.
Vehicles, homes and rentals from Facebook Marketplace, one record per item, priced against similar ones. By API, signed webhooks, daily files or MCP, straight into your training, retrieval and pricing pipelines.
Free · 30 minutes · Video call
Free · JSON, CSV or Parquet
import os, requestsKEY = os.environ["CB_KEY"] r = requests.get( "https://api.crawlbench.com/v1/data/listings", headers={"Authorization": f"Bearer {KEY}"}, params={"category": "vehicles", "country": "US"},)for x in r.json()["data"]: print(x["title"], x["vs_market"]["rating_label"])curl -G https://api.crawlbench.com/v1/data/listings \ -H "Authorization: Bearer $CB_KEY" \ -d category=vehicles \ -d country=US \ -d updated_since=2026-10-03T00:00:00Zconst KEY = process.env.CB_KEY;const base = "https://api.crawlbench.com/v1";const res = await fetch( `${base}/data/listings?category=vehicles&country=US`, { headers: { Authorization: `Bearer ${KEY}` } },);const { data, pagination } = await res.json();for (const row of data) { console.log(row.title, row.vs_market.rating_label);}{ "data": [ { "id": "1129384756102938", "title": "2019 Toyota Camry SE", "price": { "amount": 15400, "currency": "USD" }, "vs_market": { "rating": "super_price", "rating_label": "Great price", "expected": 17900, "low": 15800, "high": 19900, "delta_pct": -14.0, "sample_size": 1579, "segment": "toyota|camry|2019", "days_to_go_p50": 6.0 }, "url": "https://www.facebook.com/marketplace/item/1129384756102938", "category": "vehicles", "source": "facebook_marketplace", "description": "One owner, clean title, new tires. Service records.", "location": { "city": "Dallas", "region": "TX", "country": "US", "latitude": 32.78, "longitude": -96.8 }, "facts": { "year": 2019, "make": "Toyota", "model": "Camry", "trim": "se", "mileage_mi": 58200, "transmission": "automatic", "fuel_type": "gasoline", "title_status": "clean", "owners": 1, "vehicle_kind": "car_truck" }, "seller": { "id": "s_4f9c2e71", "type": "individual", "listings_30d": 1 }, "flags": { "finance_language": false, "parts_or_accessory": false, "implausible_ask": false }, "status": "available", "relist_of": null, "posted_at": "2026-10-01T09:05:00Z", "first_seen_at": "2026-10-01T09:12:00Z", "last_seen_at": "2026-10-03T21:40:00Z", "updated_at": "2026-10-03T21:40:00Z" } ], "pagination": { "has_more": true, "after": "c_8KfQ2wTz" }}import os, requestsKEY = os.environ["CB_KEY"] r = requests.get( "https://api.crawlbench.com/v1/data/listings", headers={"Authorization": f"Bearer {KEY}"}, params={"category": "homes", "country": "US", "city": "austin"},)for x in r.json()["data"]: print(x["title"], x["vs_market"]["rating_label"])curl -G https://api.crawlbench.com/v1/data/listings \ -H "Authorization: Bearer $CB_KEY" \ -d category=homes \ -d country=US \ -d city=austin \ -d updated_since=2026-10-03T00:00:00Zconst KEY = process.env.CB_KEY;const base = "https://api.crawlbench.com/v1";const res = await fetch( `${base}/data/listings?category=homes&country=US&city=austin`, { headers: { Authorization: `Bearer ${KEY}` } },);const { data, pagination } = await res.json();for (const row of data) { console.log(row.title, row.vs_market.rating_label);}{ "data": [ { "id": "1130492817364520", "title": "3 bed, 2 bath house, sold by owner", "price": { "amount": 289000, "currency": "USD" }, "vs_market": { "rating": "super_price", "rating_label": "Great price", "expected": 340000, "low": 318000, "high": 365000, "delta_pct": -15.0, "sample_size": 214, "segment": "austin|sale|house|3bd", "days_to_go_p50": 21.0 }, "url": "https://www.facebook.com/marketplace/item/1130492817364520", "category": "homes", "source": "facebook_marketplace", "description": "Owner selling. New roof in 2023, big backyard, close to schools.", "location": { "city": "Austin", "region": "TX", "country": "US", "latitude": 30.27, "longitude": -97.74 }, "facts": { "listing_type": "sale", "property_type": "house", "beds": 3, "baths": 2, "sqft": 1540 }, "seller": { "id": "s_7b21d0c3", "type": "individual", "listings_30d": 1 }, "flags": { "finance_language": false, "implausible_ask": false }, "status": "available", "relist_of": null, "posted_at": "2026-10-02T15:20:00Z", "first_seen_at": "2026-10-02T15:31:00Z", "last_seen_at": "2026-10-03T21:40:00Z", "updated_at": "2026-10-03T21:40:00Z" } ], "pagination": { "has_more": true, "after": "c_3RpL9vQe" }}Measured on 17 Oct 2026
- Listing results read every hour
- 377K
- 377,434 in one hour, all countries
- Marketplace pages read a day
- 765K
- 765,250 in 24 hours
- Places watched
- 22,690
- City and area searches, around the clock
- Countries supported
- 42
- 2,798 cities set up for searches
From our own logs on 17 Oct 2026, and the city catalog in the app on 18 Oct 2026. Listing results count what our searches return, so a listing that shows up in two searches counts twice; records count it once. Pages include every search we read. The 2,798 cities are in North America, Europe, the Gulf, Oceania, Brazil, Nigeria and Zimbabwe.
Homes and rentals,
the day they are listed.
Every home for sale and every rental in your areas, priced against similar homes the day it is listed, including the ones owners list themselves.
Most 2 bed rentals in East Austin are listed between $1,700 and $2,300 a month
Built from the asking rents of similar rentals, updated every day.
- Homes for sale, many by their owners For investors, brokerages and buyers of homes: each asking price against the usual price for the same area, type and beds.
- The usual rent, by size and area For property managers and rent models: the middle range of rents a month and how long similar rentals stay up.
- Price cuts and days to go Every asking price change from the last 120 days, and daily market numbers by segment and area.
- The same record and delivery Beds, baths, size and sale or rent in every record, by API, webhooks, daily files and MCP.
From a new listing
to your model.
Every record goes through the same four steps before it reaches you.
No price check yet
{ "id": "1127730045518832", "category": "vehicles", "title": "2016 camry SE!! clean title MUST GO", "price": { "amount": 11900, "currency": "USD" }, "location": { "city": "Austin", "region": "TX", "country": "US" }, "facts": { "year": 2016, "make": "Toyota", "model": "Camry", "trim": "se", "mileage_mi": 98400, "title_status": "clean" }, "seller": { "type": "individual" }, "flags": { "finance_language": false, "parts_or_accessory": false }, "first_seen_at": "2026-10-03T06:22:00Z"}{ "id": "1127730045518832", "category": "vehicles", "title": "2016 camry SE!! clean title MUST GO", "price": { "amount": 11900, "currency": "USD" }, "vs_market": { "segment": "toyota|camry|2016", "expected": 14500, "low": 13200, "high": 15800, "sample_size": 23, "delta_pct": -17.9, "rating": "super_price", "rating_label": "Great price", "days_to_go_p50": 9.0 }, "location": { "city": "Austin", "region": "TX", "country": "US" }, "facts": { "year": 2016, "make": "Toyota", "model": "Camry" }, "seller": { "type": "individual" }, "first_seen_at": "2026-10-03T06:22:00Z"}| API | GET /v1/data/listings | On your next call |
| Webhook | listing.created | As soon as it is checked |
| Daily file | 2026-10-03/listings.parquet | By 07:00 UTC |
| AI agent | search_listings | When your agent asks |
Clean enough to train on.
One record per item, one schema for every category, and these four things in every record.
vehicleshomesrentalselectronicsfurniturecamerastoolscollectiblesOne schema, every category
Every category shares the same fields, plus a facts object: year, make, model and mileage for vehicles, beds and baths for homes.
Price context on every record
The usual price, the range most similar listings ask, the sample size and a verdict: labels your models can learn from.
3 Sep: listed at $12,900
18 Sep: cut to $12,400
3 Oct: cut to $11,900
History and changes
Every asking price from the last 120 days, relists, and the status: available, pending, sold or gone, each with a time in UTC.
seller.id: s_4f9c2e71seller.type: individualSellers, handled with care
Private sellers as a stable ID for your contract, businesses by name. Phone numbers, emails and street addresses stay out.
Where your pipeline already reads.
Use one or all four. Every option carries the same fields.
- APIListings that changed since your last call, by category, country, city, segment and status.
- WebhooksA signed message for each new listing, price cut and status change.
- Daily filesParquet, CSV or JSONL in your S3, GCS or Azure bucket, or by SFTP.
- AI agentsLet your agent search fresh listings and read market, sold price and demand numbers through our MCP server.
import os, requests url = "https://api.crawlbench.com/v1/data/listings"headers = {"Authorization": f"Bearer {os.environ['CB_KEY']}"}params = {"country": "US", "updated_since": "2026-10-03T00:00:00Z", "limit": 500}rows = []while True: page = requests.get(url, headers=headers, params=params).json() rows += page["data"] if not page["pagination"]["has_more"]: break params["after"] = page["pagination"]["after"]POST https://api.crawlbench.com/v1/webhooks HTTP/1.1Authorization: Bearer cb_data_8YkQ...Content-Type: application/jsonIdempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7 { "url": "https://your-app.example/hooks/crawlbench", "events": [ "listing.created", "listing.price_cut", "listing.status_change" ]}-- Yesterday's file, read straight from your bucket (DuckDB)select facts.model as model, count(*) as listings, median(price.amount) as usual_ask, round(avg(vs_market.delta_pct), 1) as vs_market_pctfrom read_parquet('s3://your-bucket/crawlbench/2026-10-03/listings.parquet')where category = 'vehicles' and location.country = 'US'group by modelorder by listings desclimit 10;{ "mcpServers": { "crawlbench": { "url": "https://api.crawlbench.com/v1/data/mcp", "headers": { "Authorization": "Bearer YOUR_DATA_KEY" } } }}Every field, in plain words.
Asking prices, places, facts and times, plus our check against similar listings and the daily market numbers. Outcomes and Demand are sold apart and have a group each. Times are in UTC.
| Field | Type | Example | What it means |
|---|---|---|---|
| idalways | string | 1129384756102938 | The Marketplace item ID. One record per item, however many searches find it. |
| urlalways | string | facebook.com/marketplace/item/… | The listing on Marketplace. |
| categoryalways | string | vehicles | vehicles, homes, rentals, electronics, furniture, cameras, tools or collectibles. |
| titlealways | string | 2019 Toyota Camry SE | The title as the seller wrote it. |
| description | string | One owner, clean title… | The seller’s text as plain text, up to 5,000 characters, with phone numbers and emails masked. |
| sourcealways | string | facebook_marketplace | The marketplace the listing is on. Only live marketplaces appear. |
| seller.id | string | s_4f9c2e71 | A stable ID for the seller within your contract, the same across their listings. |
| seller.type | string | individual | individual, dealership, page or commercial. |
| seller.name | string | Lone Star Auto | Businesses only: the name their page shows. |
| seller.listings_30d | number | 3 | Listings we saw from this seller in the last 30 days. |
| media.photos, media.video | number, boolean | 8, false | How many photos the listing has, and whether it has a video. |
| delivery | array | pickup, shipping | How the seller hands it over: pickup, door pickup, public meetup, delivery or shipping. |
| Field | Type | Example | What it means |
|---|---|---|---|
| price.amountalways | number | 15400 | The asking price, in the listing’s own currency. Never converted. |
| price.currencyalways | string | USD | Three-letter currency code. |
| price.previous | number | 16200 | The asking price before the last cut. |
| price.was | number | 16900 | The crossed-out price the seller shows on the listing, when there is one. |
| price.changed_at | timestamp | 2026-10-02T14:05:00Z | When the asking price last changed. |
| price_events | array | 2 changes | Every asking price we saw in the last 120 days, with its time. On GET /data/listings/{id}. |
| Field | Type | Example | What it means |
|---|---|---|---|
| location.city | string | Dallas | The city Marketplace shows on the listing. |
| location.region | string | TX | State, province or region. |
| location.countryalways | string | US | Two-letter country code. |
| location.latitude | number | 32.78 | Rounded to 2 decimals, about 1 km, so no home address shows. |
| location.longitude | number | -96.8 | Rounded the same way. |
| Field | Type | Example | What it means |
|---|---|---|---|
| facts.year | number | 2019 | Vehicles: the model year. |
| facts.make, facts.model, facts.trim | string | Toyota, Camry, se | Vehicles: from Marketplace’s vehicle fields, or read from the title. |
| facts.mileage_mi, facts.mileage_km | number | 58200 | Vehicles: the odometer, in the unit the seller used, converted to both. |
| facts.transmission, facts.fuel_type | string | automatic, gasoline | Vehicles: as Marketplace lists them. |
| facts.title_status, facts.owners | string, number | clean, 1 | Vehicles: when the seller gives them. |
| facts.vehicle_kind | string | car_truck | Vehicles: car_truck, rv_camper, boat or trailer. |
| facts.listing_type, facts.property_type | string | rent, apartment | Homes and rentals: sale or rent, and house, apartment, condo, townhouse or land. |
| facts.beds, facts.baths, facts.sqft | number | 2, 1, 850 | Homes and rentals: when the seller gives them. |
| facts.condition, facts.brand | string | used_good, Sony | Every other category. |
| Field | Type | Example | What it means |
|---|---|---|---|
| vs_market.segment | string | toyota|camry|2019 | The group of similar listings: make, model and year for vehicles; city, sale or rent, type and beds for homes. |
| vs_market.expected | number | 17900 | The usual asking price of similar listings, adjusted for miles where we can. |
| vs_market.low, vs_market.high | number | 15800, 19900 | Most similar listings ask between these two prices. |
| vs_market.sample_size | number | 1579 | How many similar listings the check used, from the last 90 days. |
| vs_market.delta_pct | number | -14.0 | This asking price against the usual price, in percent. |
| vs_market.rating | string | super_price | super_price, good_price, fair_price, a_bit_pricey, expensive, held_back, thin_market or none. |
| vs_market.rating_label | string | Great price | Great price, Good price, Fair price, High price, Held back or Few similar listings. |
| vs_market.days_to_go_p50 | number | 6.0 | How many days similar listings usually stay up. |
| Field | Type | Example | What it means |
|---|---|---|---|
| statusalways | string | available | available, pending, sold (marked by the seller) or gone (no longer on Marketplace). |
| updated_atalways | timestamp | 2026-10-03T21:40:00Z | The last time anything in the record changed. Pass it back as updated_since. |
| posted_at | timestamp | 2026-10-01T09:05:00Z | When the seller posted it, when Marketplace shows it. |
| first_seen_atalways | timestamp | 2026-10-01T09:12:00Z | When our searches first returned it. |
| last_seen_atalways | timestamp | 2026-10-03T21:40:00Z | The last time our searches returned it. |
| relist_of | string | 1128000004519273 | The item ID of the first listing of the chain this one reposts, when the same seller posts it again. Null on a first listing, on one never relisted, and when the first listing is outside your data contract. |
| flags | object | finance_language: false | finance_language (a down payment as the price), parts_or_accessory and implausible_ask, so you can keep or drop them. |
| Field | Type | Example | What it means |
|---|---|---|---|
| dayalways | date | 2026-10-03 | A day in UTC. From GET /data/markets. |
| segment, cityalways | string | toyota|camry|2019, dallas | The segment, and the city, or null for the whole country. |
| active, new, gone | number | 88, 9, 7 | Listings up that day, new that day, and gone that day. |
| median, p25, p75 | number | 17900, 15900, 19800 | The usual asking price and the middle half of asking prices, without down payments or parts. |
| price_cuts | number | 11 | Listings that lowered their price that day. |
| days_to_go_p50 | number | 6.0 | How many days listings that went that day stayed up. |
| Field | Type | Example | What it means |
|---|---|---|---|
| dayalways | date | 2026-10-03 | A day in UTC. From GET /data/outcomes. |
| segmentalways | object | toyota|camry|2019 | The group of similar listings, with its key, label and category. The key is the same as in Daily markets. |
| areaalways | object | Dallas, US | The place: type (city or country), city, name and country. The city is null for a whole country. |
| currencyalways | string | USD | Three-letter currency code of every amount in the record. |
| salesalways | number | 14 | Sales we confirmed in the 90 days ending that day. |
| gradesalways | object | buyer 5, seller 4, estimated 5 | Where the sold-for prices come from: prices buyers recorded (buyer), prices sellers recorded (seller), and sales priced from their last ask (estimated). |
| sold_for | object | p25 15600, p50 16900, p75 18300 | What similar ones sold for: the middle half (p25 to p75) and the median (p50). Empty until 5 recorded prices from 3 teams stand behind them. |
| sale_to_ask | number | 0.93 | The median of the price agreed over the last ask. |
| offer_to_ask | number | 0.88 | The median of the first offer over the ask when it was made, from buyers. |
| room_to_negotiate | number | 0.05 | The median of the agreed price minus the offer, over the ask, from buyers with both. |
| ask_cuts | object | cuts_p50 1, fall_p50 0.06 | The median number of price cuts before a sale (cuts_p50) and the median fall from the first ask to the last (fall_p50). Empty below 5 confirmed sales. |
| days_to_sell | number | 9.0 | The median days from post to a confirmed sale. |
| sell_through | object | d7 0.31, d14 0.52, d30 0.71 | The share of a week’s new listings that sold within 7, 14 and 30 days. |
| fast_price | array | 16000, 16400, 7 | For each price band with at least 5 sales within a week of their start: the band (price_band), the median ask that sold that fast (ask) and the sales behind it (sales). Three lists of the same length in the daily file. |
| error | object | usual_price, grade_c, wide_range | How far the usual price (usual_price) and the estimated sold-for price (grade_c) were from the price paid, in the latest monthly check of the group. wide_range is true when a median gap is past 15%. Empty when no check passed its floors. |
| Field | Type | Example | What it means |
|---|---|---|---|
| dayalways | date | 2026-10-03 | A day in UTC. From GET /data/demand. |
| segmentalways | object | toyota|camry|2019 | The group of similar listings, with its key, label and category. The key is the same as in Daily markets. |
| areaalways | object | Dallas, US | The place: type (city or country), city, name and country. The city is null for a whole country. |
| currencyalways | string | USD | Three-letter currency code of the prices in by_price. |
| people_looking | number | 38 | The distinct teams with a search on that covers the group and the place. Empty below 5 teams. |
| by_price | array | 18000, 38 | For each price step with at least 5 teams: the price (price) and the teams whose search holds it (people_looking). Two lists of the same length in the daily file. |
| saves | number | 21 | Distinct teams that saved a listing there that day. Empty below 5 teams. |
| handled | number | 9 | Distinct teams that marked a listing handled there that day. Empty below 5 teams. |
| opened_on_marketplace | number | 12 | Distinct teams that opened a listing on Marketplace from there that day. Empty below 5 teams. |
| new_interest_7d | number | 14 | Distinct teams that turned on a search covering the group and the place in the 7 days ending that day. Compare it with the same number 7 days earlier for the 7 before. Empty below 5 teams. |
| lookups | number | 31 | Distinct teams that ran a price check for the group in the place that day, on the site signed in, by API or by MCP. Empty below 5 teams. |
| first_look_minutes_p50 | number | 95 | The median minutes from post to the first save or Handled by any team, for the listings first looked at that day. Only listings with a known post time count. Empty below 5 teams, or when one team gave more than half of the listings. |
| heat | number | 0.8 | People looking for each active listing in the group and the place that day. Empty when people_looking is empty. |
| months_of_supply | number | 2.4 | Active listings divided by the confirmed sales of the 30 days before the day. City rows only, with at least 5 sales and the sold feed walked on most of those days. Empty otherwise. |
42 countries, 2,798 cities.
Every country where a search can run today. Volumes are largest in the United States.
- Listing results an hour in the United States
- 358K
- 357,934 in one hour
- Cities in the United States
- 209
- Of the 2,798 cities
Measured on 17 Oct 2026; cities counted on 18 Oct 2026. Ask for a sample to see the numbers for your countries.
- North America2 countries
- United States, Canada
- Middle East2 countries
- United Arab Emirates, Saudi Arabia
- Oceania2 countries
- Australia, New Zealand
- South America1 country
- Brazil
- Africa2 countries
- Nigeria, Zimbabwe
- Europe33 countries
- Austria, Belgium, Bulgaria, Croatia, Cyprus, Czechia, Denmark, Estonia, Finland, France, Germany, Greece, Hungary, Iceland, Ireland, Italy, Latvia, Lithuania, Luxembourg, Malta, Netherlands, Norway, Poland, Portugal, Romania, Serbia, Slovakia, Slovenia, Spain, Sweden, Switzerland, Ukraine, United Kingdom
Questions about the data.
Something else on your mind? Write to [email protected] and a real person will answer.
New and changed listings reach the API and webhooks as soon as our searches return them and the price check has run. Daily files arrive by 07:00 UTC with the day before.
Yes. Homes for sale and rentals, many of them listed by their owners, with beds, baths, size and listing type in every record. Each one is checked against similar homes in the same area, type and size, and rentals carry the usual rent a month.
42 countries and 2,798 cities, counted on 17 Oct 2026: the United States and Canada, 33 countries in Europe, Australia and New Zealand, the UAE and Saudi Arabia, Brazil, Nigeria and Zimbabwe. Vehicles, homes, rentals, electronics, furniture, cameras, tools and collectibles. Volumes are largest in the United States today.
Private sellers appear only as a stable ID for your contract, so you can count their listings without knowing who they are. Businesses appear by the name their page shows. Phone numbers and emails in descriptions are masked, places are rounded to about 1 km, street addresses are left out, and there are no photos of people.
By volume, countries and delivery. Tell us what you need and we send a quote with your sample.
See the data that fits.
Want a file first?
Free · JSON, CSV or Parquet