Scrape public Facebook Marketplace listings from search, city, and category URLs. Export listing IDs, URLs, titles, prices, locations, and images to CSV, JSON, Excel, datasets, API workflows, and AI agents.
Use this Actor to monitor local resale inventory, compare asking prices, collect marketplace leads, or feed internal deal-tracking workflows without managing browser automation yourself.
At a glance
- Primary job: Extract public Facebook Marketplace listing rows from Marketplace URLs.
- Input: Paste one or more public Marketplace search, city, category, or listing URLs and set a listing limit.
- Output: One dataset row per listing with URL, ID, title, price, location, image, source URL, and scrape timestamp.
- Best for: Local inventory monitoring, resale research, competitive pricing, rental/property checks, and automation.
Who is it for?
- Resellers and buyers tracking local asking prices and newly listed items.
- Market researchers collecting inventory samples across cities or categories.
- Real estate and rental teams monitoring public Marketplace property listings.
- Automation teams feeding public listing rows into alerts, CRMs, spreadsheets, or dashboards.
Input recipes
Before public Apify example tasks exist, use these input recipes directly.
Used guitars in San Francisco
{
"startUrls": [
{ "url": "https://www.facebook.com/marketplace/sanfrancisco/search/?query=guitar" }
],
"maxItems": 25,
"proxyConfiguration": { "useApifyProxy": true, "groups": ["RESIDENTIAL"] }
}
Laptops in New York City
{
"startUrls": [
{ "url": "https://www.facebook.com/marketplace/nyc/search/?query=laptop" }
],
"maxItems": 25,
"proxyConfiguration": { "useApifyProxy": true, "groups": ["RESIDENTIAL"] }
}
What data can you extract?
| Field | Description |
|---|---|
id |
Facebook Marketplace listing ID. |
listingUrl |
Canonical Marketplace listing URL. |
sourceUrl |
Input URL where the listing was found. |
title |
Listing title when visible. |
priceText |
Displayed price text. |
priceAmount |
Parsed numeric price when possible. |
currency |
Parsed currency when possible. |
locationText |
Displayed listing location. |
city, state |
Parsed city and state/region when present. |
primaryImageUrl, imageUrls |
Public listing image URLs when available. |
sellerName, sellerId |
Public seller fields only when exposed in logged-out data. |
description, attributes, createdAt |
Detail fields reserved for public detail extraction. |
detailStatus |
Status of optional detail extraction. |
scrapedAt |
ISO timestamp when the row was saved. |
Example input
{
"startUrls": [
{ "url": "https://www.facebook.com/marketplace/sanfrancisco/search/?query=guitar" }
],
"maxItems": 25,
"proxyConfiguration": { "useApifyProxy": true, "groups": ["RESIDENTIAL"] }
}
Example output
{
"id": "1382249123799344",
"listingUrl": "https://www.facebook.com/marketplace/item/1382249123799344/",
"sourceUrl": "https://www.facebook.com/marketplace/sanfrancisco/search/?query=guitar",
"title": "Guitar San Francisco, CA",
"priceText": "$80",
"priceAmount": 80,
"currency": "USD",
"locationText": null,
"city": null,
"state": null,
"primaryImageUrl": "https://scontent.example/listing.jpg",
"imageUrls": ["https://scontent.example/listing.jpg"],
"deliveryTypes": [],
"isLive": null,
"isPending": null,
"isSold": null,
"sellerName": null,
"sellerId": null,
"description": null,
"attributes": {},
"createdAt": null,
"detailStatus": "not_requested",
"scrapedAt": "2026-07-16T09:12:17.832Z"
}
Tips for best results
- Start small: Use
maxItems: 25until the route and output match your use case. - Use public Marketplace URLs: The Actor does not use cookies, accounts, private messages, saved listings, or seller contact channels.
- Choose focused searches: Specific city and query URLs produce cleaner monitoring datasets than broad Marketplace home pages.
- Schedule repeat runs: Compare datasets over time to track price changes and new local inventory.
API usage
Node.js:
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("fetch_cat/facebook-marketplace-scraper").call({
startUrls: [{ url: "https://www.facebook.com/marketplace/sanfrancisco/search/?query=guitar" }],
maxItems: 25
});
console.log(run.defaultDatasetId);
Python:
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("fetch_cat/facebook-marketplace-scraper").call(run_input={
"startUrls": [{ "url": "https://www.facebook.com/marketplace/nyc/search/?query=laptop" }],
"maxItems": 25,
})
print(run["defaultDatasetId"])
cURL:
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~facebook-marketplace-scraper/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"startUrls":[{"url":"https://www.facebook.com/marketplace/sanfrancisco/search/?query=guitar"}],"maxItems":25}'
MCP and AI agents
Use this Actor from MCP-compatible tools through the official Apify MCP Server.
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/facebook-marketplace-scraper"
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=fetch_cat/facebook-marketplace-scraper"
}
}
}
Example prompt: "Run Facebook Marketplace Scraper for used guitars in San Francisco and summarize the listing prices."
Limits and caveats
- Public data only: This Actor does not log in and does not collect private seller contact data or messages.
- Availability varies: Facebook can hide, remove, or change listing data at any time.
- Anti-bot sensitivity: Residential proxy is recommended. Very large or frequent runs may be throttled.
- Optional fields: Seller, status, and detail fields remain empty when not publicly exposed.
Legality and responsible use
Process only data that you are allowed to access. Follow website terms, Apify's terms, and applicable laws.
Support
Open an issue from the Actor page if a run fails or output looks wrong. Include the run ID or run URL, input JSON, expected output, actual output, and one reproducible public URL.