Facebook Marketplace Scraper — Prices, Emails & Phones avatar

Facebook Marketplace Scraper — Prices, Emails & Phones

Pricing

from $3.50 / 1,000 listings

Go to Apify Store
Facebook Marketplace Scraper — Prices, Emails & Phones

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

Apivault Labs

Maintained by Community

Actor stats

1

Bookmarked

36

Total users

4

Monthly active users

7 hours ago

Last modified

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 caseStarting modeWhat to verify
Compare asking pricessearch with one keywordCurrency, item relevance and source location
Research a public categorycategory with a supported categoryReturned category and nearby/recommended results
Inspect known listingsurls with real item URLsCurrent source identity and detail completeness
Watch for new listingsonlyNew and a caller-owned state storeStable search scope and a successful initial baseline
Build a spreadsheet shortlistSmall cap, detail enrichment optionalMissing 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.

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.