Facebook Marketplace Scraper – Listings, Prices & Sellers
Pricing
from $0.70 / 1,000 search listings
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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?
| Mode | Input | Output | Best for |
|---|---|---|---|
search | Keywords and a Marketplace location | Paginated listing rows | Product research and lead discovery |
browse | Search, category, or location URLs | Listings from the supplied pages | Reusing URLs prepared on Facebook Marketplace |
details | Listing IDs or item URLs | Rich public listing details | Catalog enrichment and one-off lookups |
status | Listing IDs or item URLs | Current public price and availability | Inventory and sold-status checks |
monitor | Searches, item IDs, or URLs | Only new or changed rows | Scheduled price and availability monitoring |
auto | Mixed Marketplace URLs and IDs | Automatically routed results | Batch 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
- Open the Actor and click Try for free.
- Keep
searchmode and enter one or more product keywords. - Set the Marketplace location and result limit.
- Click Start.
- 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?
| Category | Fields |
|---|---|
| Record and provenance | recordType, sourceMode, sourceTarget, sourceUrl, sourceEndpoints, capturedAt |
| Identity and content | id, url, title, description |
| Price | price, priceAmount, priceCurrency, priceText, strikethroughPrice |
| Location and time | location, locationText, latitude, longitude, createdAtUnix, createdAt |
| Classification | categoryId, categoryName, condition, attributes, vehicle |
| Inventory and delivery | inventoryCount, deliveryTypes, shipping, isLive, isPending, isSold, isHidden, availability |
| Media | primaryPhotoUrl, photoUrls, videoUrls |
| Public seller subset | seller, sellerName, sellerId |
| Enrichment and monitoring | detailWarning, monitorStatus, changedFields, previousCapturedAt |
| Optional source data | raw |
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
mode | string | Yes | search | search, browse, details, status, monitor, or auto |
searchTerms | string[] | In search/monitor mode | ['bicycle'] when no URL is supplied | Product keywords; each becomes a separate search input |
startUrls | request[] | In browse/auto mode | - | Marketplace search, category, location, or item URLs |
listingIds | string[] | In details/status mode | - | Numeric listing IDs or item URLs |
location | string | No | newyork | Marketplace location slug used to build searches |
radiusKm | integer | No | 65 | Search radius from 1 to 500 km |
minPrice | number | No | - | Minimum displayed price |
maxPrice | number | No | - | Maximum displayed price |
sortBy | string | No | best_match | best_match, creation_time_descend, price_ascend, price_descend, or distance_ascend |
conditions | string[] | No | [] | Marketplace condition values such as new, used_like_new, used_good, or used_fair |
deliveryMethods | string[] | No | [] | Delivery method values accepted by Marketplace |
categoryIds | string[] | No | [] | Marketplace category IDs |
availability | string | No | all | all, in_stock, or out_of_stock |
dateListed | string | No | all | all, 1, 7, or 30 days |
exactMatch | boolean | No | false | Request exact keyword matching |
maxItems | integer | No | 20 | Maximum listings per input, from 1 to 10,000 |
maxPages | integer | No | 20 | Maximum cursor pages per input, from 1 to 500 |
includeDetails | boolean | No | false | Fetch a detail page for every discovered listing |
includeMedia | boolean | No | true | Populate public photo and video URL arrays |
includeSeller | boolean | No | true | Include the public seller subset when exposed |
includeVehicleDetails | boolean | No | true | Include the public vehicle object when exposed |
monitorMode | string | No | off | off, onlyNew, or newAndChanged |
monitorKey | string | No | default | Namespace for persistent comparison state |
maxConcurrency | integer | No | 3 | Concurrent inputs, from 1 to 10 |
includeRaw | boolean | No | false | Include 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.
maxItemsandmaxPagesapply 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
nullor 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.