Tony Wang6 min readHow to Scrape Facebook Marketplace in 2026 (API & Python)
Facebook Marketplace has no public API, and Meta's terms require its permission before automated access — the DIY, no-code, and API options anyway.
Facebook Marketplace is one of the stricter platforms in this series for automated access. Meta has never shipped a public API for Marketplace listing data — the Graph API that covers Pages, Groups, and Ads conspicuously excludes it — and Meta's own Automated Data Collection Terms require express written permission before any automated collection, a more explicit gate than most platforms' general "please don't scrape us" clause. This guide covers the DIY, no-code, and structured-API paths anyway, what each actually returns, and the legal posture you're operating under.
Why scrape Facebook Marketplace data?
- Local classifieds price research — see how used goods, vehicles, furniture, or electronics price in a specific city.
- Resale and arbitrage research — spot underpriced listings in a category worth flipping.
- Reseller and competitor monitoring — track how a search term or category moves over time in one location.
- Local market sizing — gauge secondhand demand and supply for a category and city.
- AI pipelines and agents that need structured local-marketplace data instead of parsing rendered HTML.
Is it legal to scrape Facebook Marketplace?
Option 1: DIY in Python (and why it breaks)
The naive approach fetches a Marketplace search page and parses listing cards:
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://www.facebook.com/marketplace/austin/search/?query=bike",
headers={"User-Agent": "Mozilla/5.0"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Listings render from an embedded relay/GraphQL JSON blob, not
# static markup — and an anonymous, datacenter-IP request is
# frequently redirected to a login wall before any data loads
It demos once and then the problems start:
- Login walls. Marketplace often forces a login redirect for anonymous or datacenter-IP requests, even though the same listing is publicly visible to a normal logged-out browser session.
- Anti-bot defenses are unusually strong. Rate limiting, device and browser fingerprinting, and checkpoint challenges shut down scripted requests fast — Meta's defenses here are among the toughest covered in this guide series.
- No stable markup. Listing data ships inside an embedded relay/GraphQL state blob that shifts shape with app deploys, not selectable HTML.
- The Automated Data Collection Terms apply regardless of technique. Even a scraper that technically works is still operating against Meta's express-permission requirement, not a vague "please don't" clause.
Option 2: No-code and ready-made tools
Browser extensions and one-off marketplace-scraper actors exist for manual exports, but they inherit the same login-wall friction and enforcement exposure as DIY — and Meta has previously sued at least one browser-extension vendor (BrandTotal) over exactly this data-harvesting pattern. A manual export also doesn't solve ongoing monitoring: resale and price-tracking work means re-running the same search on a schedule, which is a pipeline problem, not a point-tool problem.
Option 3: A structured Facebook Marketplace API
Crawlora's Facebook API wraps request handling, headers, and normalization behind a documented Marketplace search endpoint.
curl "https://api.crawlora.net/api/v1/facebook/marketplace/search?location=austin&query=bike" \
-H "x-api-key: $CRAWLORA_API_KEY"
import requests
resp = requests.get(
"https://api.crawlora.net/api/v1/facebook/marketplace/search",
headers={"x-api-key": "YOUR_API_KEY"},
params={"location": "austin", "query": "bike"},
)
for item in resp.json()["data"]["listings"]:
print(item["title"], item["price"]["formatted"], item["url"])
A response is normalized JSON (real example — check the request parameters and schema in the docs):
{
"code": 200,
"msg": "OK",
"data": {
"location": "austin",
"query": "bike",
"category": "vehicles",
"listings": [
{
"id": "1548909030206114",
"title": "Electric bike",
"price": { "formatted": "$350", "amount": "350.00", "isFree": false },
"city": "Austin",
"state": "TX",
"image": "https://scontent.fsgn12-1.fna.fbcdn.net/v/t39.84726-6/...",
"url": "https://www.facebook.com/marketplace/item/1548909030206114/"
}
],
"hasMore": true,
"sourceUrl": "https://www.facebook.com/marketplace/austin/search/?query=bike"
}
}
location is required (a city vanity slug like austin), and query, category, min_price, max_price, sort_by, days_since_listed, and condition are optional filters — pass whichever narrows your search.
Facebook's public reach goes beyond Marketplace, too. A separate, related endpoint, /facebook/{page}, looks up a public Facebook Page's name, follower count, category, hours, and any public contact details from its About tab — useful if a Marketplace category you're tracking also has sellers running their own Facebook Pages:
page = requests.get(
"https://api.crawlora.net/api/v1/facebook/woodlandwindows1",
headers={"x-api-key": "YOUR_API_KEY"},
).json()["data"]
print(page["title"], page["stats"]["likes"], page.get("email"))
What you can collect
- Marketplace search results — listing id, title, formatted and raw price, free-item flag, city/state, thumbnail image, and listing URL, filtered by location plus optional query, category, price range, sort order, listing age, and condition.
- No seller identity. Crawlora's Marketplace search endpoint returns listing details only — there is no seller name or profile field.
- Public Facebook Page data (separate endpoint) — name, follower/like counts, intro, category, hours or price range, review count, and any public email, phone, or address a business Page exposes.
Limitations
- A narrow, two-endpoint surface. Search only — no dedicated item-detail endpoint for a single listing, no image gallery beyond the search thumbnail, and no seller information.
- No official baseline to compare against. Unlike eBay or Etsy, there's no public Marketplace API at all, so there's no "official vs. scraped" convenience gap — this endpoint is the only structured route to this data.
- Stricter enforcement environment. Meta's explicit permission requirement and litigation history make Marketplace a higher-risk category than most platforms in this series; keep volume and frequency reasonable and stick to public, logged-out data.
- Location-scoped search. Results are keyed to a location vanity slug (e.g.
austin), not a global or radius-based search. - Prices and stock move fast. Marketplace listings sell or get pulled quickly — treat any pull as a snapshot and re-run on a schedule rather than trusting one result set.
Where this gets used
- Resale and arbitrage research — scan a category and city for underpriced listings.
- Local secondhand market sizing — gauge supply and demand for a product category by location.
- Reseller and competitor monitoring — track how a search term's listings and pricing shift over time.
- Business enrichment — pair Marketplace category tracking with the Page-lookup endpoint when a seller also runs a Facebook Page.
Sources
Start collecting
Try it first, free: run any public URL through the Free Web Scraper, or check whether a site blocks bots with the Anti-Bot Checker — no signup.
Test the Marketplace search endpoint in the Playground, read the request and response schema in the API docs, and review credit costs on the pricing page. Facebook Marketplace sits alongside other peer-to-peer and resale marketplaces in this series — see how to scrape eBay for auction and fixed-price resale, and how to scrape Etsy for the handmade and vintage side — plus is web scraping legal for the broader legal picture across platforms.
Part of our how-to-scrape guide series — every platform we cover, in one index.
Frequently asked questions
Does Facebook have an official Marketplace API?
No. Meta has never published a public API for Marketplace listing data — the Graph API covers Pages, Groups, and Ads but conspicuously excludes Marketplace. The closest official surface is a limited Commerce Partner API in alpha for approved sellers managing their own inventory, not third-party market research or listing search.
Is it legal to scrape Facebook Marketplace?
Not legal advice. Marketplace listings are publicly viewable without logging in, and hiQ Labs v. LinkedIn established that scraping public data isn't automatically a CFAA violation. But Meta's Automated Data Collection Terms require 'express written permission' before any automated collection, and Meta has actively litigated scraping — losing a breach-of-contract claim against Bright Data over logged-out public scraping, but winning against BrandTotal over a browser extension using logged-in sessions. Collect only public, logged-out data and respect rate limits.
How is Meta's enforcement posture different from other platforms in this series?
Most platforms in this series discourage scraping through a general terms-of-service clause. Meta's Automated Data Collection Terms are more explicit: they require Meta's express written permission before any automated collection, and Facebook's robots.txt points directly to those terms. Meta has also sued scrapers and browser-extension vendors, making enforcement risk higher here than on most other platforms covered in this guide series.
How do I scrape Facebook Marketplace with Crawlora?
Send a location (required) plus optional query, category, price range, sort order, listing age, and condition filters to Crawlora's Facebook Marketplace search endpoint and get normalized JSON back — listing id, title, price, city/state, thumbnail, and listing URL — without parsing rendered HTML or handling login walls.
Does the Marketplace search endpoint return seller information?
No. Crawlora's Facebook Marketplace search endpoint returns listing details only — title, price, location, thumbnail, and URL — with no seller name or profile field.
Can I look up a Facebook Page's contact details too?
Yes, through a separate endpoint. /facebook/{page} looks up a public Facebook Page by ID, vanity name, or URL and returns its name, follower/like count, category, hours, and any public contact info (email, phone, address) it exposes — a distinct feature from Marketplace search.
What are the main limitations of this API?
Coverage is narrow: a Marketplace search endpoint (no item-detail endpoint, no seller identity) and a separate public Page-lookup endpoint. There's no official Marketplace API to compare against, results are scoped to a location slug rather than global search, and prices/availability change quickly, so treat any pull as a snapshot.