Facebook Marketplace API: Scrape Listings, Prices & Seller Data
TL;DR: As of May 2026, Facebook has no official Marketplace API — but SociaVault fills that gap with three production-ready endpoints covering location search, listing search, and item detail extraction. This guide covers every endpoint, real response shapes, and working code examples in JavaScript and Python for price tracking, product research, and lead generation.
Facebook Marketplace processes millions of listings daily across categories from furniture to vehicles to real estate. That data is enormously valuable — for resellers, researchers, real estate investors, and developers building price intelligence tools. The problem: Facebook provides zero official API access to Marketplace data.
SociaVault solves this with a maintained, structured API that returns clean JSON from three core endpoints. Here's everything you need to know.
The Three Facebook Marketplace Endpoints
| Endpoint | URL | Purpose |
|---|---|---|
| Location Search | /v1/scrape/facebook-marketplace/location-search | Resolve city names to coordinates |
| Search | /v1/scrape/facebook-marketplace/search | Search listings by keyword + location |
| Item | /v1/scrape/facebook-marketplace/item | Get full details for a single listing |
All endpoints require your API key in the x-api-key header.
Endpoint 1: Location Search
Before you can search listings, you need geographic coordinates. The location search endpoint resolves a city name or zip code into a structured location object with the page_id, latitude, longitude, and city name that the search endpoint expects.
JavaScript
const response = await fetch(
"https://api.sociavault.com/v1/scrape/facebook-marketplace/location-search?query=Austin%2C+TX",
{
headers: { "x-api-key": "YOUR_API_KEY" },
},
);
const data = await response.json();
console.log(data.locations[0]);
Python
import requests
resp = requests.get(
'https://api.sociavault.com/v1/scrape/facebook-marketplace/location-search',
params={'query': 'Austin, TX'},
headers={'x-api-key': 'YOUR_API_KEY'}
)
location = resp.json()['locations'][0]
print(location)
Response Shape
{
"locations": [
{
"page_id": "110774405606108",
"name": "Austin, Texas",
"city": "Austin",
"state": "Texas",
"country": "US",
"latitude": 30.2672,
"longitude": -97.7431,
"radius_km": 40
}
]
}
The page_id, latitude, and longitude fields are what you pass into the search endpoint.
Endpoint 2: Search Listings
With coordinates in hand, you can search for any keyword across Marketplace listings in that area. The search endpoint supports filtering by price range, category, and radius.
JavaScript
const params = new URLSearchParams({
query: "standing desk",
latitude: "30.2672",
longitude: "-97.7431",
radius_km: "40",
price_min: "50",
price_max: "500",
});
const response = await fetch(
`https://api.sociavault.com/v1/scrape/facebook-marketplace/search?${params}`,
{
headers: { "x-api-key": "YOUR_API_KEY" },
},
);
const { listings, cursor } = await response.json();
Python
import requests
resp = requests.get(
'https://api.sociavault.com/v1/scrape/facebook-marketplace/search',
params={
'query': 'standing desk',
'latitude': 30.2672,
'longitude': -97.7431,
'radius_km': 40,
'price_min': 50,
'price_max': 500
},
headers={'x-api-key': 'YOUR_API_KEY'}
)
data = resp.json()
listings = data['listings']
cursor = data.get('cursor') # use for pagination
Response Shape
{
"listings": [
{
"id": "1234567890123456",
"title": "Uplift V2 Standing Desk - 60x30",
"price": {
"amount": 350,
"currency": "USD",
"formatted_amount": "$350"
},
"primary_photo": {
"url": "https://scontent.xx.fbcdn.net/v/...",
"width": 720,
"height": 720
},
"location": {
"city": "Austin",
"state": "TX",
"latitude": 30.2891,
"longitude": -97.7341
},
"delivery_types": ["local_pickup", "shipping"],
"seller_id": "987654321",
"listed_at": "2026-05-15T14:22:00Z"
}
],
"cursor": "eyJhZnRlciI6IjEyMzQ1Njc4OTAxMjM0NTYifQ==",
"total_count": 47
}
Pagination
Pass the cursor value back as a query parameter to fetch the next page:
// Fetch all pages
async function getAllListings(query, lat, lng) {
const results = [];
let cursor = null;
do {
const params = new URLSearchParams({
query,
latitude: lat,
longitude: lng,
});
if (cursor) params.set("cursor", cursor);
const res = await fetch(
`https://api.sociavault.com/v1/scrape/facebook-marketplace/search?${params}`,
{ headers: { "x-api-key": "YOUR_API_KEY" } },
);
const data = await res.json();
results.push(...data.listings);
cursor = data.cursor || null;
// Respect rate limits
await new Promise((r) => setTimeout(r, 500));
} while (cursor);
return results;
}
Endpoint 3: Item Details
Once you have a listing id from the search results, you can fetch the full item detail — including description, all photos, seller info, and product attributes.
JavaScript
const response = await fetch(
"https://api.sociavault.com/v1/scrape/facebook-marketplace/item?id=1234567890123456",
{
headers: { "x-api-key": "YOUR_API_KEY" },
},
);
const item = await response.json();
Python
resp = requests.get(
'https://api.sociavault.com/v1/scrape/facebook-marketplace/item',
params={'id': '1234567890123456'},
headers={'x-api-key': 'YOUR_API_KEY'}
)
item = resp.json()
Response Shape
{
"id": "1234567890123456",
"title": "Uplift V2 Standing Desk - 60x30",
"description": "Selling my Uplift V2 standing desk. Used for 18 months, excellent condition. Includes memory controller, anti-fatigue mat, and cable management tray. Reason for selling: moving to smaller apartment.",
"price": {
"amount": 350,
"currency": "USD",
"formatted_amount": "$350"
},
"attributes": [
{ "label": "Condition", "value": "Used - Good" },
{ "label": "Category", "value": "Furniture" },
{ "label": "Brand", "value": "Uplift" }
],
"photos": [
{
"url": "https://scontent.xx.fbcdn.net/v/photo1.jpg",
"width": 1080,
"height": 1080
},
{
"url": "https://scontent.xx.fbcdn.net/v/photo2.jpg",
"width": 1080,
"height": 1080
}
],
"seller": {
"id": "987654321",
"name": "Sarah M.",
"profile_url": "https://www.facebook.com/marketplace/profile/987654321",
"member_since": "2019",
"rating": 4.8,
"reviews_count": 23,
"response_rate": "95%"
},
"location": {
"city": "Austin",
"state": "TX",
"zip": "78701"
},
"delivery_types": ["local_pickup"],
"listed_at": "2026-05-15T14:22:00Z",
"category": "furniture"
}
Use Cases
1. Price Tracking
Monitor price changes for specific product categories over time. Store listing IDs and prices in a database, re-fetch weekly, and alert when prices drop below a threshold.
import sqlite3, requests, time
def track_prices(query, lat, lng, api_key):
conn = sqlite3.connect('marketplace.db')
conn.execute('''CREATE TABLE IF NOT EXISTS listings
(id TEXT PRIMARY KEY, title TEXT, price INTEGER,
city TEXT, fetched_at TEXT)''')
resp = requests.get(
'https://api.sociavault.com/v1/scrape/facebook-marketplace/search',
params={'query': query, 'latitude': lat, 'longitude': lng},
headers={'x-api-key': api_key}
)
for listing in resp.json()['listings']:
conn.execute(
'INSERT OR REPLACE INTO listings VALUES (?,?,?,?,datetime("now"))',
(listing['id'], listing['title'],
listing['price']['amount'], listing['location']['city'])
)
conn.commit()
2. Product Research
Compare prices for the same item across multiple cities to identify arbitrage opportunities. See the full guide at /blog/facebook-marketplace-product-research.
3. Lead Generation
Real estate agents and service businesses use Marketplace data to identify motivated buyers and sellers. People listing furniture and appliances are often moving — a strong signal for real estate leads. Full walkthrough at /blog/facebook-marketplace-lead-generation.
Comparison: DIY Scraping vs SociaVault API
| Factor | DIY Scraping | Browser Automation | SociaVault API |
|---|---|---|---|
| Setup time | Days–weeks | Hours–days | Minutes |
| Maintenance | High (breaks often) | Medium | None |
| Reliability | Low | Medium | High |
| Structured data | Manual parsing | Manual parsing | Clean JSON |
| Rate limit handling | Manual | Manual | Built-in |
| Cost | Infrastructure + time | Infrastructure + time | Pay-per-request |
Frequently Asked Questions
Is scraping Facebook Marketplace legal?
Accessing publicly visible data is generally permissible under the Computer Fraud and Abuse Act (CFAA) as clarified by the hiQ v. LinkedIn ruling. SociaVault only accesses data that any unauthenticated user can see. Always use data responsibly and comply with applicable laws in your jurisdiction.
What are the rate limits?
Rate limits depend on your plan. Free tier: 100 requests/day. Starter: 1,000/day. Pro: 10,000/day. Enterprise: custom. The search endpoint returns up to 24 listings per page; use the cursor for pagination.
How do I paginate through all results?
Use the cursor field returned in each search response. Pass it as a cursor query parameter in your next request. When cursor is null or absent, you've reached the last page.
Which countries and regions are supported?
As of May 2026, the API supports Marketplace listings in the US, Canada, UK, Australia, and most of Western Europe. Coverage is expanding — check the docs for the current list.
How fresh is the data?
Listings are fetched in real time when you make a request. There is no caching layer — you always get the current state of Marketplace.
Can I get seller contact information?
The API returns publicly visible seller profile data including name, profile URL, rating, and response rate. Direct contact details (phone, email) are not exposed by Marketplace and are not available.
Found this helpful?
Share it with others who might benefit
Ready to Try SociaVault?
Start extracting social media data with our powerful API. No credit card required.