Facebook Marketplace Scraper
Pricing
from $3.99 / 1,000 results
Facebook Marketplace Scraper
Facebook Marketplace Scraper extracts product listings, prices, titles, descriptions, seller details, locations, categories, and other available marketplace data. Automate product research, price tracking, competitor analysis, local market analysis, and e-commerce lead generation.
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
ScraperForge
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
Facebook Marketplace Scraper — Listings, Prices, Photos, Location & Sold Status
Turn any Facebook Marketplace search into structured data. Paste search URLs and get every listing with its title, description, price and currency, condition, photos, seller location with coordinates, delivery options, category, listing attributes — and the status flags that tell you whether an item is still live, pending or already sold.
Two output depths, bulk URL input, and no Facebook account required.
What is Facebook Marketplace Scraper?
Facebook Marketplace is one of the largest secondhand marketplaces in the world, and it has no public API at all. Everything is behind an infinite-scroll interface with no export.
This Actor drives Marketplace search programmatically. You supply the search URLs — built in your browser with whatever city, category and price filters you want — and it collects the listings behind them, optionally opening each listing page for the full description and attribute set.
Every row includes Facebook's own is_sold, is_pending, is_live and is_hidden flags, which is what makes rescanning the same search over time genuinely useful: you can see what actually moved, not just what was listed.
What data can you extract?
| Group | Fields |
|---|---|
| 🛒 Listing | Title, description, custom title, subtitle chips, item URL, listing ID |
| 💰 Price | Amount, currency, formatted amount, offset amount, strikethrough (was) price, comparable price, min/max price |
| 📦 Status | isSold / is_sold, isPending / is_pending, isLive / is_live, isHidden / is_hidden |
| 🏷️ Attributes | Condition (New, Used – like new, Used – good, Used – fair, Used), listing attributes (attribute_name, label, value), category ID |
| 📍 Location | Latitude/longitude, human-readable location text |
| 🚚 Delivery | Delivery types (shipping / local pickup) |
| 🖼️ Media | All listing photos with uri, width, height, id and accessibility caption; primary photo; listing video |
| 👤 Seller | Marketplace seller reference, origin group, parent listing |
| ⏱️ Timing | Listing timestamp (ISO) |
Why teams scrape Facebook Marketplace
For resellers and flippers
Marketplace is where mispriced items appear first. Scraping a saved search on a schedule means you see new listings as data — filterable by price, condition and distance — instead of refreshing an app. The strikethroughPrice field surfaces sellers who have already dropped their price and are motivated.
For price and demand research
Rescanning the same search over days turns Marketplace into a demand dataset. Items that flip to isSold tell you what a category actually clears at locally, which is different from what people ask for it.
For dealers and local retailers
Category-level sweeps show how much competing supply exists in your area, at what price and in what condition — useful before buying inventory.
For market and academic researchers
Secondhand markets are poorly documented because they have no API. Listing price, condition, location and status over time make a genuinely novel local-economy dataset.
For lead generation
Sellers listing multiple items in a category are often small businesses. Location plus category is enough to build a targeted local prospect list.
How to scrape Facebook Marketplace step by step
- Open Facebook Marketplace in your browser, search for what you want, and apply your filters — city, category, price range, condition, distance.
- Copy the URL from the address bar (it looks like
https://www.facebook.com/marketplace/108479165840750/search/?query=iphone). - Paste it into Your Marketplace search links. Add more lines for more cities or queries.
- Set How many listings per URL — or
0for everything the feed returns. - Choose Quick view vs. full detail (see the output-shape note below — this matters).
- Click Start, then export the Output tab as JSON or CSV.
⬇️ Input
Example input
{"urls": ["https://www.facebook.com/marketplace/108479165840750/search/?query=iphone"],"count": 50,"deepScrape": true}
Input reference
| Field | Type | Default | Description |
|---|---|---|---|
urls | array | — (required) | Facebook Marketplace search URLs. Mix queries, cities and categories freely — one per line. |
count | integer | 20 | Maximum listings per URL. Use 0 to collect everything the feed returns. |
deepScrape | boolean | true | On: opens each listing page for description, attributes and full photo sets. Off: faster pass using only what search results expose. |
proxyConfiguration | object | — | Optional Apify Proxy preferences, useful when you need a specific region. |
⬆️ Output
⚠️ Two output shapes — read this first
The deepScrape toggle changes both the depth and the field naming:
deepScrape: true | deepScrape: false | |
|---|---|---|
| Naming | camelCase (listingTitle, listingPrice, isSold) | snake_case (marketplace_listing_title, listing_price, is_sold) |
| Link field | itemUrl | listingUrl |
| Description | ✅ included | ❌ not available |
| Listing attributes | ✅ included | ❌ not available |
| Condition label | ✅ included | ❌ not available |
| Full photo set | ✅ listingPhotos | primary photo only |
| Extra price fields | strikethrough | strikethrough, comparable price, min/max price |
| Seller reference | — | marketplace_listing_seller, origin_group, parent_listing |
If you are writing code against the output, pick one mode and stay in it — do not assume field names carry over between the two.
Example output — deep mode
{"facebookUrl": "https://www.facebook.com/marketplace/108479165840750/search/?query=iphone","id": "1234567890123456","itemUrl": "https://www.facebook.com/marketplace/item/1234567890123456/","listingTitle": "iPhone 14 Pro 256GB — Deep Purple","description": "Excellent condition, battery health 91%, boxed with charger. Collection only.","condition": "Used - like new","listingPrice": {"amount": "540","currency": "GBP","formatted_amount_zeros_stripped": "£540"},"strikethroughPrice": { "formatted_amount": "£599" },"listingAttributes": [{ "attribute_name": "storage", "label": "Storage", "value": "256 GB" }],"listingPhotos": [{"__typename": "Photo","image": { "uri": "https://scontent.xx.fbcdn.net/…", "width": 1440, "height": 1440 },"id": "998877","accessibility_caption": "May be an image of phone"}],"location": { "latitude": 53.4808, "longitude": -2.2426 },"locationText": "Manchester, UK","deliveryTypes": ["LOCAL_PICK_UP"],"listingCategoryId": "807311116002614","timestamp": "2026-08-02T10:12:00Z","isLive": true,"isSold": false,"isPending": false,"isHidden": false}
Illustrative values — a live run returns current Marketplace data.
Usage recipes
Watch one city for a product
{"urls": ["https://www.facebook.com/marketplace/108479165840750/search/?query=road%20bike"],"count": 0,"deepScrape": true}
Compare the same item across cities
{"urls": ["https://www.facebook.com/marketplace/108479165840750/search/?query=macbook%20pro","https://www.facebook.com/marketplace/111111111111111/search/?query=macbook%20pro","https://www.facebook.com/marketplace/222222222222222/search/?query=macbook%20pro"],"count": 100,"deepScrape": false}
Every row carries facebookUrl, so one pivot compares price distribution by city.
Fast, cheap price sweep
{"urls": ["https://www.facebook.com/marketplace/108479165840750/search/?query=lawn%20mower"],"count": 500,"deepScrape": false}
Skipping detail pages removes one page load per listing — much faster when you only need price, status and location.
Track what actually sells
Run the same search on a Schedule, then join runs on id and watch which listings flip to isSold. That is a real local sell-through rate, and listingPrice tells you the clearing price.
Find motivated sellers
Filter for rows where strikethroughPrice is present — the seller has already reduced the price once.
How does this compare to Facebook's official API?
There is no official Facebook Marketplace API. Meta does not publish one for reading listings, and the Commerce/Catalog APIs are for managing your own shop inventory on Facebook and Instagram — not for browsing other people's Marketplace listings.
That means scraping the public interface is the only route to Marketplace data at all. This Actor reads the same public search surface a visitor sees, without logging in.
Integrate and automate
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("scraperforge/facebook-marketplace-scraper").call(run_input={"urls": ["https://www.facebook.com/marketplace/108479165840750/search/?query=iphone"],"count": 50,"deepScrape": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():price = (item.get("listingPrice") or {}).get("formatted_amount_zeros_stripped")print(item.get("listingTitle"), "|", price, "| sold:", item.get("isSold"))
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });const run = await client.actor('scraperforge/facebook-marketplace-scraper').call({urls: ['https://www.facebook.com/marketplace/108479165840750/search/?query=iphone'],count: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
REST API
curl -X POST "https://api.apify.com/v2/acts/scraperforge~facebook-marketplace-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"urls":["https://www.facebook.com/marketplace/108479165840750/search/?query=iphone"],"count":50}'
n8n, Make, Zapier and AI agents
Call the Actor from n8n, Make, Zapier or an MCP-capable agent — a natural fit for "alert me when a listing under £X appears in my city" automations.
Schedules and webhooks
Attach a Schedule to rescan saved searches, and use webhooks to push each finished run into your own system, or send results to Google Sheets, Airtable, Slack or Google Drive.
Pricing and what you are charged for
Pay-per-event: a small Actor-start charge plus a charge per listing row delivered.
Two levers control cost:
countcaps listings per URL (0means unlimited — check the estimate first).deepScrape: falseis dramatically faster and lighter when you only need price, status and location.
Current rates are on the Pricing tab of this Actor's page, and Apify shows an estimate before and during every run.
Limits, reliability and blocking
- Search URLs only. Grab them from your browser after applying city, category and price filters — that is how filtering is expressed.
countis per URL, so five URLs at 100 each can return up to 500 rows.- Marketplace is location-scoped. The numeric ID in the URL is the city; use a proxy in a matching region for the most consistent results.
- Field names differ between modes. See the output-shape table above before writing code against the dataset.
- Status flags come from Facebook. A listing can also simply vanish from the feed rather than being marked sold.
- Photo URIs expire — they point at Facebook's CDN, so download assets promptly if you need them.
- Deep mode is slower: one extra page load per listing.
- Default run options are 4 GB memory and a 1-hour timeout; raise the timeout for full sweeps.
Is it legal to scrape Facebook Marketplace?
This Actor collects publicly visible Marketplace listings — the same content any visitor can browse without logging in. It does not log in, message sellers, or access private data.
Listings are created by individuals and frequently contain personal data: names, approximate locations, photographs of homes and possessions. If you store or process this data, ensure you have a lawful basis under GDPR and comparable regimes, minimise what you keep, and do not use seller details for unsolicited marketing. Listing photos remain the property of the people who took them. You are responsible for ensuring your use complies with Facebook's terms and applicable law.
❓ Frequently asked questions
Do I need a Facebook account or cookies?
No. The Actor reads public Marketplace search results without authentication.
Why do the field names change between runs?
Because you changed deepScrape. Deep mode returns camelCase fields plus description and attributes; quick mode returns snake_case search fields. Pick one mode per pipeline.
How do I filter by price, condition or distance?
Apply the filters on Marketplace itself and copy the resulting URL. All filtering is expressed through the search URL.
Can I scrape a whole city or category?
Yes — build the broadest search you want and set count to 0 for a full sweep.
How do I know whether something sold?
isSold / is_sold, alongside isPending and isLive. Rescanning the same search over time is what makes those flags valuable.
Do I get seller contact details?
No. Marketplace does not publish seller phone numbers or e-mail addresses. You get the listing, its location and the seller reference Facebook exposes.
Does it return item descriptions?
Only in deep mode (deepScrape: true). Quick mode uses search-result data, which does not include the description.
Can I download the photos?
The Actor returns image URIs with dimensions and captions. Fetching the files is up to you, and they expire.
Which export format should I use?
JSON keeps listingPrice, listingPhotos, listingAttributes and location nested. CSV works well for price-and-status analysis.
Can I run it on a schedule?
Yes — and that is where this Actor is most useful. Comparing status flags across runs is what turns a listing scraper into a market dataset.
🔗 Related scrapers
- Facebook Groups Search Scraper — find local buy/sell groups, the other half of Facebook's secondhand market.
- Facebook Groups Scraper — includes a
CHRONOLOGICAL_LISTINGSsort built for buy/sell groups. - Shein Search Products Scraper — new-goods pricing to compare against secondhand.
- Apartments.com Scraper — local rental market data.
Browse the full collection on the ScraperForge profile.
💬 Feedback
Need a unified output shape, seller-level aggregation, or a custom Marketplace monitoring pipeline? Open an issue on the Issues tab of this Actor.
