Facebook Marketplace Scraper avatar

Facebook Marketplace Scraper

Pricing

from $1.70 / 1,000 product scrapeds

Go to Apify Store
Facebook Marketplace Scraper

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

Scraptivo

Maintained by Community

Actor 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?

TeamWorkflow
Resale and sourcing buyersBuilding daily purchase lists from local pickup and shipping listings.
Market researchersComparing asking prices for the same product across a city or radius.
Inventory operatorsWatching keywords and categories for new Marketplace supply.
AgenciesCollecting structured listing data for client reports without opening Facebook by hand.

What data can you collect from Facebook Marketplace?

Data groupExample fieldsHow it helps
Listing identitylistingId, title, Marketplace URL, share URIDeduplicate and reopen the exact item.
PriceFormatted price, priceAmount, currencyCompare asking prices across a search.
LocationLocation text, city, state, optional latitude/longitudeMap inventory and plan pickup routes.
MediaPrimary image, photo galleryReview the item without opening Marketplace.
Status and deliverySold, pending, live, partner, local, shipped flags; delivery typesSkip sold items and filter pickup vs shipping.
Seller and detailsSeller name/ID, description, condition, shipping cost textAppear 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

  1. Open the Facebook Marketplace Scraper on Apify.
  2. Enter a city such as Berlin, Germany, a keyword, a category, or paste Marketplace search/category/item URLs.
  3. Choose a limit and optional filters — price range, condition, delivery method, listing age, sort order, or listing details.
  4. Run the Actor and wait for structured listings to appear in the dataset.
  5. 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

  1. Schedule a daily run with location = "Berlin, Germany", searchQueries = ["bike"], categories = ["sports"], and daysSinceListed = "1".
  2. Keep scrapeListingDetails off for a cheap card-level snapshot, then turn it on only for listings you want to inspect.
  3. Send new records to Google Sheets or Slack through a webhook after each run.
  4. Deduplicate user-side against the stable listingId field.

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 listingId as the stable key when merging datasets.

Input reference

FieldTypeRequiredDefaultWhat it controls
startUrlsArray of URLsNoMarketplace search, category, or item URLs. Filters encoded in the URL are applied.
searchQueriesArray of stringsNoKeyword searches such as "mountain bike". Requires a location (field or URL).
locationStringConditionalCity or place (e.g. "Berlin, Germany"). Required for search/category scrapes without a city in the URL.
latitudeNumberNoOptional coordinate override. When set with longitude, location text is not resolved.
longitudeNumberNoOptional coordinate override. When set with latitude, location text is not resolved.
radiusKmIntegerNo80Search radius in kilometers (1–500).
categoriesArray of stringsNoMarketplace category slugs. Leave empty for all listings near the location (or the category from start URLs).
minPriceIntegerNoMinimum listing price in the local currency.
maxPriceIntegerNoMaximum listing price in the local currency.
conditionStringNoanyany, new, used_like_new, used_good, or used_fair.
deliveryMethodStringNoallall, local_pickup, or shipping.
daysSinceListedStringNo"""" (any time), "1" (24 hours), "7", or "30".
sortByStringNobest_matchbest_match, newest, price_asc, price_desc, or distance.
scrapeListingDetailsBooleanNofalseVisit each listing for description, photos, seller, and extra attributes. Charges listing-details.
maxConcurrencyIntegerNo5Parallel detail requests (1–20).
maxItemsIntegerNo0Maximum listings to collect (0 = unlimited).
proxyConfigurationProxy objectNoApify proxy, RESIDENTIALResidential 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 listing event for every listing saved to the dataset.
  • $2.00 / 1,000 listing details — a listing-details event 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.

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.