Facebook Marketplace Scraper — Prices, Emails & Phones
Pricing
from $3.50 / 1,000 listings
Facebook Marketplace Scraper — Prices, Emails & Phones
Collect accessible Marketplace listings with source-returned prices, sellers and public contact signals. Bulk export: JSON, CSV, Excel and API. PPE: from $2.5/1K listings. Optional webhook delivery.
Pricing
from $3.50 / 1,000 listings
Rating
0.0
(0)
Developer
Apivault Labs
Maintained by CommunityActor stats
1
Bookmarked
36
Total users
4
Monthly active users
7 hours ago
Last modified
Categories
Share
Facebook Marketplace Scraper — Listings, Prices & Public Contacts
Collect publicly visible Marketplace listings by keyword, category or URL through HTTP requests. Export one listing per dataset row, with observed title, price, photos, location, seller fields and contacts when Facebook exposes them.
Facebook can restrict logged-out access or return nearby/recommended results. No external scraping API key or Facebook login is required, but residential proxy access is recommended and costs resources. Complete geographic coverage, seller contacts and complete listing details are not guaranteed.
Small first run
{"mode":"search","searchTerms":["mountain bike"],"location":"nyc","maxItems":5,"expandCoverage":false,"enrichDetails":false,"maxRetries":1}
Use mode: category with categories: ["vehicles"], or mode: urls with listingUrls containing real Facebook Marketplace item/search/category URLs. Numeric item IDs are accepted. Inputs in multiple lists are combined for compatibility. Invalid URLs or reversed price limits fail with diagnostics. The default result cap is 25.
Results and limitations
Dataset rows contain listings only. SUMMARY and ERRORS are key-value-store records; optional PROBES contains token-free counts. A source failure with no readable listings returns FAILED. Partial results remain available with PARTIAL diagnostics. NO_MATCHES is a readable empty feed or filtered output; NO_NEW_LISTINGS is a monitoring run without unseen records.
status: unknown means availability was not exposed. source: og_meta and metadataOnly: true identify limited public metadata, which can lack seller/details/current status. Direct item parsing matches the requested ID, rather than returning a recommendation. Missing fields are null or absent; they are never filled with examples.
Contacts come only from listing title/description. They are not guaranteed seller identities or verified mailboxes. enrichDetails attempts each listing page; detailEnrichmentStatus records incomplete access. Prices, coordinates and seller information are only exposed when sourced. Numeric min/max price filters are also enforced locally; rows without a comparable price are excluded when a price filter is supplied. Freshness/sort parameters are requests to Facebook, not independently verified guarantees.
expandCoverage requests additional sort variants and deduplicates initial feeds. It is not cursor pagination. It cannot guarantee any multiplier or complete market depth. coverageComplete is false. Split searches into narrower locations/categories for additional coverage. Each job gets a proxy session; retries within that job reuse the session with desktop/mobile variants.
Persistent new-listing monitoring
Set onlyNew: true and optionally stateStoreName. The default named store is marketplace-monitor, owned by the account executing the Actor. IDs are scoped to the query URLs and price filters. Repeat identical parameters to reuse a baseline; changing the search starts a separate scope. Only IDs successfully delivered to the dataset are saved, so source errors, spending limits and unseen over-limit records do not consume the baseline. Keep result caps and sort expansion consistent across runs. State is not a price-change tracker.
notifyWebhookUrl sends delivered listings to your endpoint and reports delivery failures. Use an endpoint you control. Webhook delivery is an additional attempt, not a guarantee of exactly-once delivery.
Pricing and budgets
Current result prices per 1,000 listings: Free $5, Bronze $4.50, Silver $4, Gold/Platinum/Diamond $3.50. No start event. Separate user-paid platform usage is active since 18 October 2026. Confirm the effective Pricing tab before a large run.
SDK pay-per-event handling binds result charges to delivered listing rows and stops writes at maxTotalChargeUsd. Set a spending cap alongside maxItems. Diagnostic records are not charged result events. Failed HTTP/proxy requests can still consume resources; event charges and resource consumption are separate quantities.
MCP for Claude, Codex and other agents
Endpoint: https://mcp.apify.com?tools=apivault_labs/facebook-marketplace-scraper. Tool: apivault_labs--facebook-marketplace-scraper. Authenticate to Apify; no external scraping service token is needed. Call with a small input, poll get-actor-run until completion, then read get-dataset-items and get-key-value-store-record for SUMMARY/ERRORS. A run ID alone is not a successful result.
Codex configuration:
[mcp_servers.marketplace]url = "https://mcp.apify.com?tools=apivault_labs/facebook-marketplace-scraper"bearer_token_env_var = "APIFY_TOKEN"
Claude Code .mcp.json:
{"mcpServers":{"marketplace":{"type":"http","url":"https://mcp.apify.com?tools=apivault_labs/facebook-marketplace-scraper","headers":{"Authorization":"Bearer ${APIFY_TOKEN}"}}}}
Keep tokens outside committed files. Registering this tool makes it available; automatic agent selection depends on client configuration and the user's request. Tell agents to inspect PARTIAL errors and missing fields before presenting price/contact conclusions.
REST and exports
POST input to https://api.apify.com/v2/acts/apivault_labs~facebook-marketplace-scraper/runs with your Apify bearer token. Poll the run, retrieve its dataset and diagnostic store, and export JSON/CSV/Excel through Apify. Use real listing URLs; placeholder IDs are not working examples.
Facebook Marketplace listing research for a reviewed shortlist
Use this Facebook Marketplace scraper to collect a bounded set of publicly accessible listings for an item category or keyword, then review titles, prices, location context and source links. It can support used-goods price research, vehicle or furniture shortlists and periodic new-listing checks. It does not complete purchases, message sellers, authenticate sellers, verify inventory or expose private Facebook information.
| Use case | Starting mode | What to verify |
|---|---|---|
| Compare asking prices | search with one keyword | Currency, item relevance and source location |
| Research a public category | category with a supported category | Returned category and nearby/recommended results |
| Inspect known listings | urls with real item URLs | Current source identity and detail completeness |
| Watch for new listings | onlyNew and a caller-owned state store | Stable search scope and a successful initial baseline |
| Build a spreadsheet shortlist | Small cap, detail enrichment optional | Missing contacts and source diagnostics |
Asking price is not a completed sale price. A listing can be negotiable, stale, duplicated, promoted, located nearby or already unavailable. Facebook's public responses can vary by IP, region and time. Treat the requested location as a search context, not proof that all returned sellers are within a precise radius. Review the source page before making a purchasing or outreach decision.
Small used-bike price sample
{"mode": "search","searchTerms": ["mountain bike"],"location": "nyc","maxItems": 3,"expandCoverage": false,"enrichDetails": false,"maxRetries": 0}
Start with three listing rows. expansion=false avoids extra sort variants; it does not force Facebook to return exact keyword or geographic matches.
Bound a vehicle-category shortlist
{"mode": "category","categories": ["vehicles"],"location": "nyc","maxItems": 3,"expandCoverage": false,"enrichDetails": false,"maxRetries": 0}
Review returned titles and location fields. Category selection does not establish vehicle history, ownership, roadworthiness or completeness of available listings.
Apply an asking-price range
{"mode": "search","searchTerms": ["desk"],"location": "nyc","minPrice": 50,"maxPrice": 200,"maxItems": 3,"expandCoverage": false,"maxRetries": 0}
Currency and source price semantics matter. This is a source-constrained asking-price filter, not a valuation model or a list of actual transactions.
Request a recent-listing context
{"mode": "search","searchTerms": ["sofa"],"location": "nyc","daysSinceListed": 7,"sortBy": "creation_time_descend","maxItems": 3,"expandCoverage": false,"maxRetries": 0}
Source-side dates and sorting may be incomplete or unavailable. Inspect the delivered record and errors; do not claim a verified seven-day census from this request.
Listing details, public contacts and missing values
Basic search can provide a useful shortlist without full details. enrichDetails requests additional source content, but a complete description, seller profile or contact field is not guaranteed. enrichContacts can only collect information actually exposed publicly; it does not reveal private inboxes, private phone numbers or logged-in seller data. Never manufacture an email from a seller name or treat a missing contact as evidence of no contact method.
Use the canonical listing identity to join repeated observations, while retaining input context and collection time. A different search order does not prove a listing is new. expandCoverage uses additional sort/query variations; it is not cursor pagination and does not establish exhaustive market coverage. A result cap bounds delivered rows, not the whole Marketplace population.
SUMMARY and ERRORS belong to the run's key-value store, not the billable listing Dataset. Read PARTIAL diagnostics before using a batch. A source failure can leave no useful rows; a mixed result can retain verified listings. optional PROBES is diagnostic metadata, not more listings. Spending limits can stop further delivery while source requests already made still consume resources.
Monitoring and budget questions
Does onlyNew track price changes? No. It suppresses already delivered listing IDs within the stored query/filter scope. Use your own history if you want to compare price changes. Changing query URLs or price filters changes the scope; preserve your original settings when repeating a baseline.
Should I enable monitoring in my first test? Prefer a normal small run first. A persistent baseline affects later observations. Use a state store owned by the caller, and do not share a baseline unintentionally across unrelated research projects.
What does a run cost? The active rates are Free $5, Bronze $4.50, Silver $4, and Gold/Platinum/Diamond $3.50 per 1,000 delivered listings. There is no start event in this schedule. Three Free-plan rows mean $0.015 in primary events, plus caller-paid platform and optional proxy usage. The 18 October resource change is already active; earlier cheaper Platinum/Diamond figures are historical.
Will the Actor notify sellers? No. An optional webhook sends delivered data to an endpoint configured by the caller; it does not message Facebook users. Webhook delivery is not a guarantee of exactly-once processing. Use an endpoint you control and validate deduplication downstream.
What should an agent report? Return a bounded source-linked shortlist, its requested location/filters, missing fields and source errors. A successful tool call, export or n8n node execution does not validate seller identity, item condition or current availability.
n8n and developer integrations
Use this Actor in your automation or application with the existing community integrations below. An Apify account and API token are required; Actor and platform charges follow the current pricing.
- n8n community node: n8n-nodes-apivault-facebook-marketplace. Install package name
n8n-nodes-apivault-facebook-marketplacein a self-hosted n8n instance that permits community packages. - Python client and examples: GitHub.
- n8n source and usage: GitHub.
These are community packages. Publication on npm does not establish n8n verification or availability in n8n Cloud. Review the linked package README for supported inputs and setup.