Facebook Marketplace Scraper avatar

Facebook Marketplace Scraper

Pricing

from $4.00 / 1,000 marketplace listing scrapeds

Go to Apify Store
Facebook Marketplace Scraper

Facebook Marketplace Scraper

Scrape Facebook Marketplace search results and listing details, with prices, photos, sellers, locations and item status as clean structured data. Works with Apify MCP and the API.

Pricing

from $4.00 / 1,000 marketplace listing scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

8 days ago

Last modified

Share

What is Facebook Marketplace Scraper?

Facebook Marketplace Scraper is an Apify Actor for search queries, direct item URLs, item IDs, and location lookups. It accepts Marketplace input and returns one record per saved result, so a single row can represent a location lookup, a search listing, or an item detail record. The dataset includes fields such as title, listing ID, listing URL, price, photos, seller data, location, delivery types, sold/live/pending status, and scraped timestamp. The outcome is clean structured Marketplace data that is ready for downstream analysis, SEO pipelines, and AI agents, including use through Apify MCP.

Best fit and connected workflows

This Actor fits workflows that start from a Marketplace search term and location, then move into structured records for research or automation. It also fits workflows that already have a specific listing URL or numeric item ID and need a detailed record.

Common routing patterns include:

  • Search by query and location to collect listings for market research or lead discovery.
  • Resolve a location query into coordinates, then search around that area.
  • Enrich search listings with item details when you want description, seller, photo, and status fields in the same workflow.
  • Use direct item URLs or item IDs when your workflow already has a target listing.
  • Read RUN_SUMMARY and OUTPUT from the key-value store when an agent needs run-level telemetry alongside dataset rows.

Practical scenario

A resale analyst starts with searchQueries: ["office chairs"] and locationQuery: "Austin, TX". The actor returns listing rows with fields such as title, listingId, listingUrl, price, location, isSold, and scrapedAt. The analyst reviews price and status patterns, then sends selected listingUrl values back into a follow-up run with includeItemDetails: true to collect richer item records before deciding which listings deserve manual review.

Input

FieldTypePurpose
searchQueriesarray[string]Marketplace search terms such as bikes, sofas, apartments, iPhone, or office chairs.
itemUrlsarray[object]Direct Facebook Marketplace item URLs to scrape in detail.
itemIdsarray[string]Numeric listing IDs when the full URL is unavailable.
locationQuerystringCity or place to resolve into Marketplace coordinates before search.
latitudenumberSearch latitude.
longitudenumberSearch longitude.
radiusKmnumberSearch radius around resolved coordinates.
minPricenumberMinimum listing price filter.
maxPricenumberMaximum listing price filter.
maxListingsintegerMaximum search listing records saved across all queries.
maxPagesintegerMaximum provider result pages requested per query.
countPerPageintegerNumber of listings requested per page.
sortBystringProvider-side ordering, such as suitable match, distance, newest, or price order.
deliveryMethodstringDelivery filter such as all, local pickup, or shipping.
conditionstringItem condition filter.
dateListedstringDate-listed filter.
availabilitystringListing availability filter.
startCursorstringProvider pagination cursor from RUN_SUMMARY.nextCursors.
dataSourcestringData source mode. Auto resolves to provider mode for Marketplace.
providerOrderstringChoose which managed provider API is tried first.
includeItemDetailsbooleanFetch item detail records for each search listing.
includeLocationResultsbooleanSave location lookup results to the dataset when location search is used.
includeRawDatabooleanInclude raw source objects in each dataset row.

Focused JSON example

{
"searchQueries": ["bike"],
"locationQuery": "Austin, TX",
"radiusKm": 40,
"maxListings": 25,
"maxPages": 2,
"countPerPage": 24,
"sortBy": "suggested",
"deliveryMethod": "all",
"condition": "all",
"dateListed": "all",
"availability": "in_stock",
"dataSource": "auto",
"includeItemDetails": false,
"includeLocationResults": true,
"includeRawData": false
}

Output

The dataset can contain three record types:

  • location
  • listing
  • item
FieldTypeMeaning
recordTypestringLocation, listing, or item record.
sourcestringProvider used for the record.
querystringLocation query that produced a location record.
searchQuerystringSearch term that produced a listing.
namestringLocation name.
titlestringListing title.
listingIdstringMarketplace listing ID.
listingUrlstringMarketplace listing URL.
descriptionstringItem or listing description.
createdAtstringCreation time when available.
priceobjectPrice object.
locationobjectLocation object.
primaryPhotoUrlstringMain photo URL.
photoUrlsarray[string]Photo URLs.
sellerobjectSeller object.
deliveryTypesarray[string]Delivery types.
isSoldbooleanSold status.
isLivebooleanLive status.
isPendingbooleanPending status.
scrapedAtstringTimestamp for the saved record.

Illustrative JSON record

{
"recordType": "listing",
"source": "provider",
"searchQuery": "bike",
"title": "Used mountain bike",
"listingId": "1880804689276480",
"listingUrl": "https://www.facebook.com/marketplace/item/1880804689276480/",
"price": {},
"location": {},
"isSold": false,
"scrapedAt": "2026-06-11T00:00:00.000Z"
}

How it works

This Actor uses provider-backed Marketplace access. The manifest indicates configured provider APIs are used in provider mode, with the routing options listed in the input schema available as owner secrets. The live contract also shows:

  • auto resolves to provider mode because Facebook Marketplace is login-heavy.
  • providerOrder controls which managed provider API is tried first.
  • includeItemDetails adds a per-listing item detail request.
  • startCursor accepts the pagination cursor from RUN_SUMMARY.nextCursors.
  • Dataset rows and execution telemetry are saved separately, with RUN_SUMMARY and OUTPUT in the default key-value store.

Pricing

Facebook Marketplace Scraper uses Pay per event with Apify platform usage included. Charged events include marketplace listing rows, item detail rows, location lookup rows, and the actor start event. Each event type is billed separately, and Apify platform usage is included. For current rates and the exact pricing mix, open the live Pricing tab in the Apify Console.

For example, if a run saves twenty-five listing rows and five item detail rows, the total charge is based on those event counts with Apify platform usage included for the run.

Use with AI agents (MCP)

This Actor is usable through Apify MCP as a structured Marketplace data source. It returns dataset rows that an agent can read, summarize, filter, or pass into follow-up actions. The Actor identity for tool routing is khadinakbar/facebook-marketplace-scraper.

A practical MCP prompt might look like this:

Search Facebook Marketplace for office chairs around Austin, TX, return the listings with price, location, and sold status, then read the dataset rows and summarize which ones are available.

Output interpretation for agents:

  • Use recordType to separate location lookups from listings and item details.
  • Use listingId and listingUrl as stable record references.
  • Use isSold, isLive, and isPending to infer current item state from the saved row.
  • Use RUN_SUMMARY for counts, provider status codes, cursors, and stop reason.
  • Use OUTPUT for a compact run summary.

Provenance and scope guidance:

  • Rows come from configured provider APIs, as reflected in the live contract.
  • Pagination can continue with startCursor when the run summary provides a next cursor.
  • Cost grows with saved events and with item detail enrichment, so agents should request item details only when they need the fuller record.

Apify API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor('khadinakbar/facebook-marketplace-scraper').call({
searchQueries: ['bike'],
locationQuery: 'Austin, TX',
radiusKm: 40,
maxListings: 10,
includeItemDetails: false,
});
const dataset = client.dataset(run.defaultDatasetId);
const { items } = await dataset.listItems({ clean: true });
console.log(items);

Best results and outcome guidance

Start with one search query and one location so the returned rows stay easy to review. Use locationQuery for city-based workflows, or latitude and longitude when your system already has coordinates. Keep maxListings, maxPages, and countPerPage aligned with the amount of data you need. Turn on includeItemDetails when your workflow needs the expanded item record fields such as description, photos, seller data, and status. Use startCursor for a continuation run when you want to resume from the next provider page.

Continue the workflow

  • Then use Facebook Page Scraper to extend Facebook Marketplace Scraper research with a complementary content contract.
  • Then use Facebook Post Search Scraper to extend Facebook Marketplace Scraper research with a complementary discovery contract.

Design note

I found that the dataset contract uses recordType as the main discriminator, and the required fields are only recordType, source, and scrapedAt. That makes the output flexible while still giving every row a consistent provenance timestamp.

FAQ

When should I use search queries versus item URLs?

Use searchQueries when you want Marketplace results for a topic and location. Use itemUrls or itemIds when your workflow already has a specific listing and needs a detailed row.

How does location handling work?

You can provide a locationQuery such as a city name, or set latitude and longitude directly. The live contract also allows saving the location lookup row with includeLocationResults.

Use startCursor with the next cursor from RUN_SUMMARY.nextCursors to continue pagination from a later point in the provider results.

How do I connect this Actor to an AI workflow?

Use the Actor through Apify MCP, read the dataset rows, and combine them with RUN_SUMMARY or OUTPUT for agent logic. The structured fields support downstream filtering, ranking, and record matching.

How can I reduce output volume?

Lower maxListings, reduce maxPages, or keep includeItemDetails off unless the workflow specifically needs item-level fields.

Responsible use

Use this Actor in ways that respect applicable platform terms, privacy expectations, and your own data-handling policies. Treat seller and listing data as sourced records, preserve provenance through source and scrapedAt, and request only the fields your workflow needs.