Facebook Marketplace Scraper
Pricing
from $1.70 / 1,000 product scrapeds
Facebook Marketplace Scraper
Collects Facebook Marketplace listings from search URLs, locations, categories, and keyword queries. Returns titles, prices, locations, photos, and optional listing details.
Pricing
from $1.70 / 1,000 product scrapeds
Rating
0.0
(0)
Developer
Scraptivo
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
Share
Facebook Marketplace Scraper collects Marketplace listings from Facebook and turns them into structured data for price research, resale sourcing, and inventory monitoring. Provide a city, keyword, category, or Marketplace URL, run the Actor, and export titles, prices, locations, photos, and listing IDs to JSON, CSV, Excel, or your preferred integration. Use it to compare local asking prices, watch new supply, and automate recurring Marketplace collection. Pricing starts at $2.00 per 1,000 listings, with optional listing details at $2.00 per 1,000.
What can you automate with Facebook Marketplace Scraper?
- Build local buying lists — Search a city and keyword such as "bike" or "iPhone 15" and export matching listings with price, location, and Marketplace URL.
- Monitor new supply — Schedule a run for the last 24 hours or last 7 days and catch fresh listings as they appear.
- Filter before you export — Narrow results by category, min/max price, condition, delivery method, listing age, and sort order.
- Reuse Marketplace URLs — Paste a search, category, or item URL and keep the location and filters already encoded in the link.
- Enrich selected listings — Turn on listing details to add descriptions, photo galleries, coordinates, condition, and shipping text.
- Feed a sourcing workflow — Push structured records into Google Sheets, a CRM, or your own pipeline after each run.
Who is this scraper for?
| Team | Workflow |
|---|---|
| Resale and sourcing buyers | Building daily purchase lists from local pickup and shipping listings. |
| Market researchers | Comparing asking prices for the same product across a city or radius. |
| Inventory operators | Watching keywords and categories for new Marketplace supply. |
| Agencies | Collecting structured listing data for client reports without opening Facebook by hand. |
What data can you collect from Facebook Marketplace?
| Data group | Example fields | How it helps |
|---|---|---|
| Listing identity | listingId, title, Marketplace URL, share URI | Deduplicate and reopen the exact item. |
| Price | Formatted price, priceAmount, currency | Compare asking prices across a search. |
| Location | Location text, city, state, optional latitude/longitude | Map inventory and plan pickup routes. |
| Media | Primary image, photo gallery | Review the item without opening Marketplace. |
| Status and delivery | Sold, pending, live, partner, local, shipped flags; delivery types | Skip sold items and filter pickup vs shipping. |
| Seller and details | Seller name/ID, description, condition, shipping cost text | Appear when listing details are enabled. |
Description, photo galleries, coordinates, condition, seller fields, and shipping text appear when Scrape listing details is enabled. Search-card fields such as title, price, location, image, category, and listingId are returned on every listing.
How to use Facebook Marketplace Scraper
- Open the Facebook Marketplace Scraper on Apify.
- Enter a city such as
Berlin, Germany, a keyword, a category, or paste Marketplace search/category/item URLs. - Choose a limit and optional filters — price range, condition, delivery method, listing age, sort order, or listing details.
- Run the Actor and wait for structured listings to appear in the dataset.
- Export JSON, CSV, or Excel, or connect the dataset to your workflow.
{"location": "Berlin, Germany","searchQueries": ["bike"],"categories": ["sports"],"maxItems": 8,"scrapeListingDetails": false,"maxConcurrency": 3,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Example workflow
Watch Berlin sporting-goods bikes every morning
- Schedule a daily run with
location= "Berlin, Germany",searchQueries=["bike"],categories=["sports"], anddaysSinceListed="1". - Keep
scrapeListingDetailsoff for a cheap card-level snapshot, then turn it on only for listings you want to inspect. - Send new records to Google Sheets or Slack through a webhook after each run.
- Deduplicate user-side against the stable
listingIdfield.
Automate and integrate your results
- Schedules — Marketplace inventory turns over quickly. Run daily for sourcing and hourly only when you need the newest listings in a tight keyword. Create separate scheduled tasks per city and query.
- Webhooks — Fire a webhook on run completion to push fresh listings into Sheets, a CRM, or Slack.
- Exports and API — Download JSON, CSV, Excel, or HTML from the Apify Console, or start a run from the API:
curl "https://api.apify.com/v2/acts/scraptivo~facebook-marketplace/runs?token=YOUR-APIFY-TOKEN" \-H "Content-Type: application/json" \-d '{"location": "Berlin, Germany","searchQueries": ["bike"],"maxItems": 10,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}'
- Deduplication — The Actor appends results on every run and does not deduplicate across runs. Use
listingIdas the stable key when merging datasets.
Input reference
| Field | Type | Required | Default | What it controls |
|---|---|---|---|---|
startUrls | Array of URLs | No | — | Marketplace search, category, or item URLs. Filters encoded in the URL are applied. |
searchQueries | Array of strings | No | — | Keyword searches such as "mountain bike". Requires a location (field or URL). |
location | String | Conditional | — | City or place (e.g. "Berlin, Germany"). Required for search/category scrapes without a city in the URL. |
latitude | Number | No | — | Optional coordinate override. When set with longitude, location text is not resolved. |
longitude | Number | No | — | Optional coordinate override. When set with latitude, location text is not resolved. |
radiusKm | Integer | No | 80 | Search radius in kilometers (1–500). |
categories | Array of strings | No | — | Marketplace category slugs. Leave empty for all listings near the location (or the category from start URLs). |
minPrice | Integer | No | — | Minimum listing price in the local currency. |
maxPrice | Integer | No | — | Maximum listing price in the local currency. |
condition | String | No | any | any, new, used_like_new, used_good, or used_fair. |
deliveryMethod | String | No | all | all, local_pickup, or shipping. |
daysSinceListed | String | No | "" | "" (any time), "1" (24 hours), "7", or "30". |
sortBy | String | No | best_match | best_match, newest, price_asc, price_desc, or distance. |
scrapeListingDetails | Boolean | No | false | Visit each listing for description, photos, seller, and extra attributes. Charges listing-details. |
maxConcurrency | Integer | No | 5 | Parallel detail requests (1–20). |
maxItems | Integer | No | 0 | Maximum listings to collect (0 = unlimited). |
proxyConfiguration | Proxy object | No | Apify proxy, RESIDENTIAL | Residential proxies are required. |
Category slugs: vehicles, propertyrentals, propertyforsale, apparel, classifieds, electronics, entertainment, family, free, garden, hobbies, home, home-improvements, instruments, office-supplies, pets, sports, toys.
Do I need a location if I paste Marketplace URLs?
No. A start URL such as https://www.facebook.com/marketplace/berlin/sports already carries location and category. Provide location when you use searchQueries or categories without a city in the URL.
Output example
Each dataset item is one listing. A search-card record looks like this:
{"listingId": "958550220194623","url": "https://www.facebook.com/marketplace/item/958550220194623/","title": "Ebike Akku","price": "€180","priceAmount": 180.0,"currency": "€","imageUrl": "https://example.com/listing.jpg","location": "Berlin, BE","city": "Berlin","state": "BE","category": "Sporting goods","categoryId": "1383948661922113","deliveryTypes": ["IN_PERSON", "SHIPPING_OFFSITE"],"isSold": false,"isPending": false,"isLive": true,"creationTime": "2026-03-23T16:56:03+00:00","sellerName": null,"description": null,"detailsScraped": false,"source": "search / bike / sports / Berlin, Germany","sourceQuery": "bike"}
How much does it cost to scrape Facebook Marketplace?
The Actor uses pay-per-event pricing plus a small Actor-start event ($0.00005 per start, scaled by memory):
- $2.00 / 1,000 listings — a
listingevent for every listing saved to the dataset. - $2.00 / 1,000 listing details — a
listing-detailsevent only when Scrape listing details is enabled and details are collected.
A search-only run of 1,000 listings costs $2.00. Enriching the same 1,000 listings with details costs $4.00. Volume discounts on Apify paid plans reduce the per-1,000 rate (for example $1.70 per 1,000 at the Gold plan). Compute units consumed are deducted from your Apify plan.
Reliability and responsible use
- Proxy requirement — Residential proxies are required. The default input uses the Apify RESIDENTIAL group.
- Conditional fields — Description, photos, seller, condition, coordinates, and shipping text appear only when listing details are enabled. Marketplace also leaves some guest-visible fields empty.
- Public listings — The Actor collects publicly visible Marketplace listing data.
- Responsible use — Only use the data in ways that comply with Facebook's terms and applicable law.
Frequently asked questions
Can I scrape Facebook Marketplace by city and keyword?
Yes. Set location to a city such as "Austin, TX" and add searchQueries such as ["iPhone 15"]. You can also restrict the run with categories, price range, condition, and delivery method.
Can I schedule Facebook Marketplace Scraper to run automatically?
Yes. Open the Scheduler tab in Apify Console and set a recurring schedule. Daily suits sourcing; use daysSinceListed = "1" if you only want listings from the last 24 hours.
What counts as one result?
Each listing saved to the dataset is one listing event ($2.00 per 1,000). If listing details are enabled, each enriched listing also counts as a listing-details event at the same rate.
Why are some fields empty?
Seller name, description, condition, coordinates, and extra photos are collected only when Scrape listing details is enabled. Marketplace also omits some fields on guest-visible cards, so a null value usually means the platform did not show that data.
How do I avoid duplicate records?
The Actor does not deduplicate across runs. Use listingId as the stable key when merging a fresh dataset into existing data. maxItems caps the size of a single run.
Do I need a proxy?
Yes. The Actor expects residential proxies. The default configuration uses Apify residential proxies.
Related Scraptivo automations
- Kleinanzeigen Scraper — classified listings from Kleinanzeigen.
- Gumtree Scraper — classified listings from Gumtree.
- Cars.com Scraper — vehicle listings for automotive inventory research.
- Etsy Scraper — product listings from Etsy shops and search.
Support and custom workflows
Need a different field, source, or delivery workflow? Contact Scraptivo at scraptivo@gmail.com. Include the Actor name, sample URL, required fields, and expected volume so we can assess the request.