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

Facebook Marketplace listing dataset from URLs, locations, categories, and price filters, including optional listing details.

Pricing

from $1.70 / 1,000 product scrapeds

Rating

5.0

(1)

Developer

Farhan Ali

Farhan Ali

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Categories

Share

Facebook Marketplace Scraper creates a structured dataset of Marketplace listings collected from Facebook Marketplace. Each dataset item represents one listing and can include identifiers, title, price, images, location, category, delivery types, status flags, and optional description and seller name. Query the source with Marketplace search, category, or item URLs, or with keyword search plus location and filters. Control the result limit with maxItems, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, or other supported formats.

Dataset at a glance

PropertyValue
Sourcefacebook.com/marketplace (public Marketplace listings)
Record unitOne Marketplace listing
Input methodsMarketplace URLs (startUrls) or keyword search (searchQueries) with location, category, price, condition, delivery, and listing-age filters
Main identifierslistingId, url
DeliveryApify Dataset and API
Export formatsJSON, CSV, Excel, XML, HTML (Apify dataset exports)
Update modelFresh records per Actor run
Pricing$2.00 per 1,000 listings; +$2.00 per 1,000 when listing details are collected

Coverage and available records

The Actor collects publicly listed Marketplace records from two entry points:

  • URL-based: Pass Marketplace search, category, or item URLs in startUrls (for example https://www.facebook.com/marketplace/berlin/sports or https://www.facebook.com/marketplace/item/123). Filters encoded in the URL are applied. URLs can be used instead of, or together with, location and category fields.
  • Search-based: Set searchQueries (for example bike) with location or latitude/longitude. searchQueries requires a location from the field, coordinates, or a city in the start URL.

Leave categories empty to collect listings near the location, or to keep the category from start URLs. Accepted slugs are listed in the input reference.

  • Listing-level records include identifiers, title, price, images, location, category, delivery types, status flags, creationTime, detailsScraped, and sourceQuery when Marketplace publishes them.
  • Detail fields are conditional: description and sellerName appear when scrapeListingDetails is enabled and published. latitude, longitude, and extra imageUrls are typically collected on the same pass.
  • Result cap: maxItems limits listings (0 = unlimited, the default; prefill 10). radiusKm defaults to 80 (1–500).

Known exclusions: unpublished listing fields; historical snapshots unless you store them; Marketplace messaging and account dashboards. Full-catalog or worldwide coverage is not claimed.

Data dictionary

Field names match dataset JSON properties exactly. Fields marked conditional appear when scrapeListingDetails is enabled and Marketplace publishes the value. Deduplicate on listingId or url.

FieldTypeNullableDescriptionExample
listingIdstringNoMarketplace listing identifier; recommended dedup key958550220194623
urlstringNoMarketplace item URLhttps://www.facebook.com/marketplace/item/958550220194623/
titlestringYesListing headlineEbike Akku
pricestringYesFormatted asking price as shown€180
priceAmountnumberYesNumeric price in the listing currency180.0
currencystringYesCurrency symbol as shown on the listing
imageUrlstringYesPrimary image URLhttps://scontent.fmex3-1.fna.fbcdn.net/...
imageUrlsstring[]YesImage URLs; additional photos are conditional["https://scontent.fmex3-1.fna.fbcdn.net/..."]
locationstringYesLocation label as shownBerlin, BE
citystringYesCity parsed from the listing locationBerlin
statestringYesState or region code when publishedBE
latitudenumberYesLatitude (conditional)
longitudenumberYesLongitude (conditional)
categorystringYesCategory label as shownSporting goods
categoryIdstringYesMarketplace category identifier1383948661922113
deliveryTypesstring[]YesDelivery options published on the listing["IN_PERSON", "SHIPPING_OFFSITE"]
isSoldbooleanYesWhether the listing is marked soldfalse
isPendingbooleanYesWhether the listing is marked pendingfalse
isLivebooleanYesWhether the listing is livetrue
creationTimestringYesListing creation time (ISO-8601 with offset)2026-03-23T16:56:03+00:00
detailsScrapedbooleanNoWhether listing details were collected for this recordfalse
sourceQuerystringYesKeyword that produced the record, when applicablebike
descriptionstringYesListing body text (conditional)
sellerNamestringYesSeller display name when published (conditional)

priceAmount is numeric in the listing currency; price is the formatted string. creationTime is ISO-8601 with a UTC offset. Values are read from Marketplace, not calculated.

Example dataset record

Real record from the input below (searchQueries: ["bike"], Berlin, sports, details off). Coordinate, description, and seller fields are null because details were not collected.

{
"listingId": "958550220194623",
"url": "https://www.facebook.com/marketplace/item/958550220194623/",
"title": "Ebike Akku",
"price": "€180",
"priceAmount": 180.0,
"currency": "€",
"imageUrl": "https://scontent.fmex3-1.fna.fbcdn.net/v/t39.84726-6/656897439_26373996142232794_8113191025035381410_n.jpg",
"imageUrls": ["https://scontent.fmex3-1.fna.fbcdn.net/v/t39.84726-6/656897439_26373996142232794_8113191025035381410_n.jpg"],
"location": "Berlin, BE",
"city": "Berlin",
"state": "BE",
"latitude": null,
"longitude": null,
"category": "Sporting goods",
"categoryId": "1383948661922113",
"deliveryTypes": ["IN_PERSON", "SHIPPING_OFFSITE", "PUBLIC_MEETUP", "DOOR_PICKUP"],
"isSold": false,
"isPending": false,
"isLive": true,
"creationTime": "2026-03-23T16:56:03+00:00",
"detailsScraped": false,
"sourceQuery": "bike",
"description": null,
"sellerName": null
}

The record above was produced with this input:

{
"location": "Berlin, Germany",
"searchQueries": ["bike"],
"categories": ["sports"],
"maxItems": 10,
"scrapeListingDetails": false,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Query and input reference

InputTypeRequiredDefaultAccepted valuesDescription
startUrlsarray (requestListSources)NoMarketplace search, category, or item URLsURL entry point. Filters encoded in the URL are applied
searchQueriesarray (string)NoFree-text keywords (e.g. bike)Keyword search. Requires a location (field, coordinates, or city in a start URL)
locationstringConditional— (prefill Berlin, Germany)Place text (e.g. Berlin, Germany)Search location. Required for search or category runs without a city in the URL
latitudenumberNoDecimal degreesOptional coordinate override. When set with longitude, location text is not resolved
longitudenumberNoDecimal degreesOptional coordinate override. When set with latitude, location text is not resolved
radiusKmintegerNo801500Search radius in kilometers
categoriesarray (string)Novehicles, propertyrentals, propertyforsale, apparel, classifieds, electronics, entertainment, family, free, garden, hobbies, home, home-improvements, instruments, office-supplies, pets, sports, toysMarketplace category slugs. Empty = all listings near the location, or the category from start URLs
minPriceintegerNo0 or greaterMinimum listing price in the local currency
maxPriceintegerNo0 or greaterMaximum listing price in the local currency
conditionstringNoanyany, new, used_like_new, used_good, used_fairItem condition filter
deliveryMethodstringNoallall, local_pickup, shippingDelivery-method filter
daysSinceListedstringNo"""", 1, 7, 30Listing age: any time, last 24 hours, last 7 days, or last 30 days
sortBystringNobest_matchbest_match, newest, price_asc, price_desc, distanceResult order
scrapeListingDetailsbooleanNofalsetrue / falseCollect description, seller name, coordinates, and additional photos when published (charges listing-details)
maxConcurrencyintegerNo5120Parallel listing-detail requests when details are enabled
maxItemsintegerNo0 (prefill 10)0 or any positive integerMaximum listings; 0 = unlimited
proxyConfigurationobjectNoApify proxy, RESIDENTIAL groupApify proxy groups or custom proxiesResidential proxies are recommended

Provide startUrls and/or a search (searchQueries / categories) with location or coordinates.

Minimal request:

{ "location": "Berlin, Germany", "searchQueries": ["bike"], "maxItems": 10 }

Advanced request (filters with detail enrichment):

{
"location": "Berlin, Germany",
"searchQueries": ["bike"],
"categories": ["sports"],
"minPrice": 50,
"maxPrice": 500,
"condition": "used_good",
"deliveryMethod": "local_pickup",
"daysSinceListed": "7",
"sortBy": "newest",
"scrapeListingDetails": true,
"maxConcurrency": 5,
"maxItems": 10,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Retrieve the data through the API

The Actor is published at https://apify.com/datascrapers/facebook-marketplace.

  1. Start the Actor with a JSON input (console or API).
  2. Wait for the run to finish, or use a synchronous endpoint if you want the response inline.
  3. Retrieve items from the run's default dataset.
  4. Paginate or export the dataset.

Python example:

from apify_client import ApifyClient
client = ApifyClient("YOUR-APIFY-TOKEN")
run_input = {
"location": "Berlin, Germany",
"searchQueries": ["bike"],
"categories": ["sports"],
"maxItems": 10,
"scrapeListingDetails": False,
}
run = client.actor("datascrapers/facebook-marketplace").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["listingId"], item["title"], item["price"])

Apify generates Python, JavaScript, and cURL examples on the Actor's API tab. Do not put a real API token in shared code or URLs.

Data quality and record handling

  • Conditional fields: description, sellerName, coordinates, and extra imageUrls appear when scrapeListingDetails is enabled and published. Listing-only runs set detailsScraped to false.
  • Source changes: unpublished fields are returned as null, not fabricated.
  • Deduplication: each run appends fresh records. Use listingId, or url when listingId is unavailable, across runs.
  • Normalization: identifiers and price are strings; priceAmount is a number; status flags and detailsScraped are booleans; creationTime is ISO-8601 when published; deliveryTypes and imageUrls are string arrays.
  • Residential proxies: recommended for public Marketplace listings.

Export and pipeline examples

DestinationRecommended methodTypical use
PostgreSQL / SupabaseDataset API poll or webhook consumerStore listings alongside price-monitoring tables
Google SheetsApify Google Sheets integrationShare listing shortlists with research teams
CRM (HubSpot, Salesforce)Webhook on run completionPush new listings into outreach pipelines
S3 / cloud storageScheduled export via Apify scheduler + integrationArchival of marketplace snapshots

Pricing and cost examples

Pay-per-event: a listing charge for every dataset record, plus listing-details when scrapeListingDetails is enabled and details are collected. Actor start is $0.00005 once per run.

EventTriggerRate
Actor startOnce per run$0.00005 per run
Listing (listing)Every listing record pushed to the dataset$2.00 per 1,000 listings
Listing details (listing-details)scrapeListingDetails enabled and details collected$2.00 per 1,000 listings
RecordsConfigurationEstimated base cost
1,000Listing only$2.00
10,000Listing only$20.00
1,000Listing + listing details$4.00
10,000Listing + listing details$40.00

Start charges round to $0.00 in the table. Compute units and proxy traffic are billed by your Apify plan. Estimates depend on the verified pricing model and selected options.

Limitations and responsible data use

  • The Actor collects publicly listed Marketplace records only.
  • Field availability depends on what Marketplace renders at run time; values can be null, and site changes can alter fields.
  • The Actor does not provide historical snapshots unless you store them yourself.
  • Residential proxies are recommended.
  • You are responsible for compliance with Facebook's terms of service, applicable privacy law, and any contractual obligations before using the data.

Dataset questions

What does one dataset item represent?

One Facebook Marketplace listing. Enabling scrapeListingDetails adds description, seller name, coordinates, and extra photos to that record when published.

Which field should I use as a unique identifier?

listingId is the recommended deduplication key. Use url when listingId is unavailable.

Are fields nullable or conditional?

Yes. description and sellerName appear when scrapeListingDetails is enabled and published. Coordinates and extra imageUrls are typically collected on the same pass. Unpublished values are null.

Can I retrieve the records as CSV or JSON?

Yes. The dataset can be exported as JSON, CSV, Excel, XML, or HTML from the Apify Console, and queried through the Dataset API.

How do I search by keyword and location?

Set searchQueries and location (for example Berlin, Germany). Optionally pass latitude and longitude instead of location text. Category, price, condition, delivery, listing-age, and sort filters apply during the search.

Does the Actor return historical data?

No. Each run captures listings at run time. To track changes over time, schedule repeated runs and store the outputs yourself.

What counts as a billable result?

A listing charge for every dataset record ($2.00 per 1,000), plus listing-details when details are collected ($2.00 per 1,000). Listing-only runs incur only listing. Actor start is $0.00005 once per run.

  • Gumtree Scraper — UK classified listings with comparable title, price, and location fields.
  • Etsy Scraper — Marketplace product records for price comparison with Marketplace goods.
  • Cars.com Scraper — US vehicle listings alongside Marketplace vehicles.
  • Apartments.com Scraper — US rental listings alongside Marketplace propertyrentals.
  • Realtor.com Scraper — US property listings comparable with Marketplace propertyforsale.

Data Scrapers support

Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, required fields, expected record volume, and preferred delivery format.