Facebook Marketplace Scraper – Listings, Prices & Sellers avatar

Facebook Marketplace Scraper – Listings, Prices & Sellers

Pricing

from $0.70 / 1,000 search listings

Go to Apify Store
Facebook Marketplace Scraper – Listings, Prices & Sellers

Facebook Marketplace Scraper – Listings, Prices & Sellers

Scrape Facebook Marketplace by keyword, location, category, or URL. Extract prices, descriptions, photos, seller data, vehicles, status, and changes.

Pricing

from $0.70 / 1,000 search listings

Rating

0.0

(0)

Developer

ScrapingMonkey

ScrapingMonkey

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Facebook Marketplace Scraper - Search, Listing Details and Price Monitoring

Collect public Facebook Marketplace listings by keyword, location, category, or URL, enrich them with item details, and monitor price or availability changes in a clean Apify dataset.

  • Search multiple products and Marketplace locations in one run
  • Follow public cursor pagination instead of stopping at the first page
  • Extract prices, descriptions, status flags, photos, public seller fields, attributes, and vehicle data when exposed
  • Accept search, category, location, and individual item URLs
  • Recheck listing availability and emit only new or changed records on scheduled runs
  • Continue past individual unavailable or blocked targets and report them in RUN_SUMMARY
  • Use Apify Residential Proxy automatically; no Facebook account, cookies, browser, or proxy setup is required
  • Export results to JSON, CSV, Excel, XML, or access them through the Apify API

What can you do with this Actor?

ModeInputOutputBest for
searchKeywords and a Marketplace locationPaginated listing rowsProduct research and lead discovery
browseSearch, category, or location URLsListings from the supplied pagesReusing URLs prepared on Facebook Marketplace
detailsListing IDs or item URLsRich public listing detailsCatalog enrichment and one-off lookups
statusListing IDs or item URLsCurrent public price and availabilityInventory and sold-status checks
monitorSearches, item IDs, or URLsOnly new or changed rowsScheduled price and availability monitoring
autoMixed Marketplace URLs and IDsAutomatically routed resultsBatch processing heterogeneous inputs

One run uses one selected mode. You can batch multiple keywords, URLs, or IDs inside that mode. Set includeDetails in search or browse mode to merge detail enrichment into each discovered listing row.

Quick start

  1. Open the Actor and click Try for free.
  2. Keep search mode and enter one or more product keywords.
  3. Set the Marketplace location and result limit.
  4. Click Start.
  5. Preview the single Results table or download it in your preferred format.

The default input searches for bicycles in New York and returns a small useful dataset without additional setup.

Input examples

Search public listings

{
"mode": "search",
"searchTerms": ["used bicycle", "mountain bike"],
"location": "newyork",
"maxItems": 50,
"maxPages": 5,
"includeDetails": false
}

maxItems applies to each search input. One dataset row represents one unique Marketplace listing.

Browse copied Marketplace URLs

{
"mode": "browse",
"startUrls": [
{"url": "https://www.facebook.com/marketplace/newyork/vehicles/"},
{"url": "https://www.facebook.com/marketplace/newyork/search?query=camera"}
],
"maxItems": 100,
"maxPages": 10
}

Extract listing details

{
"mode": "details",
"listingIds": [
"2239956220131017",
"https://www.facebook.com/marketplace/item/967043349730698/"
],
"includeMedia": true,
"includeSeller": true,
"includeVehicleDetails": true
}

Check listing status

{
"mode": "status",
"listingIds": ["2239956220131017", "967043349730698"]
}

Monitor new listings and changes

{
"mode": "monitor",
"searchTerms": ["road bike"],
"location": "newyork",
"maxItems": 100,
"monitorMode": "newAndChanged",
"monitorKey": "nyc-road-bikes"
}

Auto-detect mixed URLs

{
"mode": "auto",
"startUrls": [
{"url": "https://www.facebook.com/marketplace/newyork/search?query=laptop"},
{"url": "https://www.facebook.com/marketplace/item/2239956220131017/"}
],
"maxItems": 25
}

Search with filters

{
"mode": "search",
"searchTerms": ["camera"],
"location": "newyork",
"radiusKm": 40,
"minPrice": 100,
"maxPrice": 900,
"sortBy": "price_ascend",
"conditions": ["used_like_new", "used_good"],
"deliveryMethods": ["local_pick_up"],
"availability": "in_stock",
"dateListed": "7",
"exactMatch": false,
"maxItems": 100
}

Complete output example

Every emitted listing and status record has the same fixed set of 45 top-level fields. Fields that do not apply to a listing are returned as null or an empty array; keys are not hidden in a separate “All fields” view. Objects such as location, seller, attributes, vehicle, and optional raw preserve source-controlled public subfields, so their internal keys can vary by listing category and Facebook's current response.

Complete listing/status row - 45 top-level fields

{
"recordType": "listing",
"sourceMode": "search",
"sourceTarget": "https://www.facebook.com/marketplace/newyork/search?query=bicycle",
"sourceUrl": "https://www.facebook.com/marketplace/newyork/search?query=bicycle",
"sourceEndpoints": [
"https://www.facebook.com/marketplace/newyork/search?query=bicycle",
"https://www.facebook.com/api/graphql/"
],
"id": "2239956220131017",
"url": "https://www.facebook.com/marketplace/item/2239956220131017/",
"title": "Road bicycle",
"description": "Public listing description.",
"price": {
"amount": "350.00",
"currency": "USD",
"formatted_amount": "$350"
},
"priceAmount": 350.0,
"priceCurrency": "USD",
"priceText": "$350",
"strikethroughPrice": null,
"location": {
"latitude": 40.7128,
"longitude": -74.006,
"reverse_geocode": {
"city": "New York",
"state": "New York"
}
},
"locationText": "New York, New York",
"latitude": 40.7128,
"longitude": -74.006,
"createdAtUnix": 1786406400,
"createdAt": "2026-08-11T00:00:00+00:00",
"categoryId": "807311116002614",
"categoryName": "Bicycles",
"condition": "used_good",
"inventoryCount": 1,
"deliveryTypes": ["IN_PERSON"],
"isLive": true,
"isPending": false,
"isSold": false,
"isHidden": false,
"availability": "live",
"primaryPhotoUrl": "https://scontent.example/public-primary.jpg",
"photoUrls": [
"https://scontent.example/public-primary.jpg",
"https://scontent.example/public-secondary.jpg"
],
"videoUrls": [],
"seller": {
"id": "100012345678901",
"name": "Public seller name"
},
"sellerName": "Public seller name",
"sellerId": "100012345678901",
"attributes": [
{
"attribute_name": "Condition",
"value": "Used - good"
}
],
"vehicle": null,
"shipping": {
"offered": false,
"profile": null,
"deliveryData": null,
"formattedPrice": null,
"estimatedWindow": null
},
"detailWarning": null,
"monitorStatus": null,
"changedFields": null,
"previousCapturedAt": null,
"capturedAt": "2026-08-13T10:15:30.000000+00:00",
"raw": null
}

In status mode, recordType is listingStatus. When monitoring is enabled, monitorStatus is new or changed, changedFields lists changed top-level keys, and previousCapturedAt contains the prior observation time. raw is null unless includeRaw is enabled. Unavailable inputs and request failures do not create error rows and are not charged; their categories appear in RUN_SUMMARY.

What data can you extract?

CategoryFields
Record and provenancerecordType, sourceMode, sourceTarget, sourceUrl, sourceEndpoints, capturedAt
Identity and contentid, url, title, description
Priceprice, priceAmount, priceCurrency, priceText, strikethroughPrice
Location and timelocation, locationText, latitude, longitude, createdAtUnix, createdAt
ClassificationcategoryId, categoryName, condition, attributes, vehicle
Inventory and deliveryinventoryCount, deliveryTypes, shipping, isLive, isPending, isSold, isHidden, availability
MediaprimaryPhotoUrl, photoUrls, videoUrls
Public seller subsetseller, sellerName, sellerId
Enrichment and monitoringdetailWarning, monitorStatus, changedFields, previousCapturedAt
Optional source dataraw

Input parameters

ParameterTypeRequiredDefaultDescription
modestringYessearchsearch, browse, details, status, monitor, or auto
searchTermsstring[]In search/monitor mode['bicycle'] when no URL is suppliedProduct keywords; each becomes a separate search input
startUrlsrequest[]In browse/auto mode-Marketplace search, category, location, or item URLs
listingIdsstring[]In details/status mode-Numeric listing IDs or item URLs
locationstringNonewyorkMarketplace location slug used to build searches
radiusKmintegerNo65Search radius from 1 to 500 km
minPricenumberNo-Minimum displayed price
maxPricenumberNo-Maximum displayed price
sortBystringNobest_matchbest_match, creation_time_descend, price_ascend, price_descend, or distance_ascend
conditionsstring[]No[]Marketplace condition values such as new, used_like_new, used_good, or used_fair
deliveryMethodsstring[]No[]Delivery method values accepted by Marketplace
categoryIdsstring[]No[]Marketplace category IDs
availabilitystringNoallall, in_stock, or out_of_stock
dateListedstringNoallall, 1, 7, or 30 days
exactMatchbooleanNofalseRequest exact keyword matching
maxItemsintegerNo20Maximum listings per input, from 1 to 10,000
maxPagesintegerNo20Maximum cursor pages per input, from 1 to 500
includeDetailsbooleanNofalseFetch a detail page for every discovered listing
includeMediabooleanNotruePopulate public photo and video URL arrays
includeSellerbooleanNotrueInclude the public seller subset when exposed
includeVehicleDetailsbooleanNotrueInclude the public vehicle object when exposed
monitorModestringNooffoff, onlyNew, or newAndChanged
monitorKeystringNodefaultNamespace for persistent comparison state
maxConcurrencyintegerNo3Concurrent inputs, from 1 to 10
includeRawbooleanNofalseInclude a sanitized source listing object

Use cases

Marketplace lead discovery

Run several location and product searches, export unique listings, and route promising results to a CRM or spreadsheet.

Price research

Collect comparable listings with normalized amount, currency, condition, and location fields, then calculate price ranges outside the Actor.

Inventory and availability monitoring

Schedule monitor or status mode and send new, changed, pending, or sold results to a webhook, Slack workflow, or database.

Vehicle catalog collection

Use category URLs with detail enrichment to retain category-specific attributes and the public vehicle object when Facebook exposes it.

Performance and cost

The Actor uses pay-per-event billing when configured on Apify. Search rows, enriched detail rows, and explicit status checks use separate event names so they can be priced according to upstream work and buyer value. Consult the Actor's Pricing tab for the currently configured rates.

Search-only runs are the lightest. includeDetails: true adds one public item workflow per listing and substantially increases requests and transfer. Large media URLs are returned as text; binary media files are not downloaded. Runtime also depends on source latency, selected limits, retries, and Marketplace availability.

API usage

Replace YOUR_USERNAME with the published Actor owner name.

curl -X POST \
"https://api.apify.com/v2/acts/YOUR_USERNAME~facebook-marketplace-public-scraper/runs?token=APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "search",
"searchTerms": ["bicycle"],
"location": "newyork",
"maxItems": 20
}'

The resulting dataset works with Apify API clients, schedules, webhooks, Google Sheets, Make, Zapier, n8n, Airbyte, and data warehouses.

Best for / not for

Best for: public Marketplace search, public listing enrichment, price research, availability checks, scheduled discovery, and category-specific catalog collection.

Not for: Facebook login automation, private seller information, messaging, checkout, buyer/seller account activity, or private Marketplace content.

Limits and good to know

  • One mode is selected per run, but each mode accepts batches of inputs.
  • maxItems and maxPages apply per search or browse input before cross-input deduplication.
  • Facebook controls public availability, localization, filters, and the fields present on each listing.
  • Detail pages do not always expose every search-card image or seller field to anonymous visitors.
  • Every successful row contains all 45 top-level keys; missing values use null or empty arrays.
  • Retries use fresh residential sessions. One failed target does not cancel successful targets.
  • Failed, blocked, duplicate, and unavailable inputs do not create a paid error row.
  • The Actor uses Apify Residential Proxy automatically and does not expose proxy configuration in the input.

Frequently asked questions

What input should I provide?

For discovery, provide searchTerms and a Marketplace location slug such as newyork. For exact lookups, provide numeric IDs or copied item URLs in listingIds.

How many results can I extract?

You can set up to 10,000 items and 500 cursor pages per input. Actual availability is controlled by Facebook, the selected location and filters, and public cursor depth.

Why are some fields empty?

Marketplace categories use different public schemas. Seller, vehicle, shipping, media, and coordinates may not be exposed for every listing. Missing scalar/object values are null; list values are usually empty arrays.

Can I process multiple searches or IDs?

Yes. Add multiple values to searchTerms, startUrls, or listingIds. Results are deduplicated by listing ID.

Can I schedule recurring runs?

Yes. Use Apify schedules with monitor mode and a stable monitorKey, then connect a webhook to receive new or changed rows.

Do I need a Facebook account, API key, or proxy?

No Facebook account or API key is required. Apify Residential Proxy is configured internally and used automatically.

Responsible use

This Actor extracts publicly available Marketplace information. Users are responsible for complying with applicable laws, privacy regulations, contractual obligations, and Facebook's terms. Facebook and Marketplace are trademarks of Meta Platforms, Inc.; this Actor is not affiliated with or endorsed by Meta.

Support

If you encounter a problem, create an issue in the Actor's Issues tab. Include the run ID, mode, and a non-sensitive reproducible keyword, URL, or listing ID. Do not include account cookies or credentials.