# Facebook Marketplace Listing Scraper (`maximedupre/facebook-marketplace-listings`) Actor

Collect public Facebook Marketplace listings from search, browse, location, or listing URLs. Get the ID, URL, title, price, currency, location, availability, main image, and collection time for each saved listing. No Facebook login or API key is required.

- **URL**: https://apify.com/maximedupre/facebook-marketplace-listings.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** E-commerce, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🛒 Find Facebook Marketplace Listings

For resellers, market researchers, and developers, this Actor collects public Facebook Marketplace listings and saves structured rows with listing IDs, source URLs, titles, prices, currencies, locations, availability, primary images, and collection times. Use the rows to compare local offers, build product lists, or review marketplace data without copying it by hand.

Use it to:

- Find **[Items For Sale On Facebook Marketplace](https://apify.com/maximedupre/facebook-marketplace-listings/examples/items-for-sale-on-facebook-marketplace)** from a public search or browse URL.
- Compare **[Marketplace Buy And Sell](https://apify.com/maximedupre/facebook-marketplace-listings/examples/marketplace-buy-and-sell)** listing rows by price and location.
- Collect **[Facebook Marketplace Sell](https://apify.com/maximedupre/facebook-marketplace-listings/examples/facebook-marketplace-sell)** rows for a chosen search area.
- Try **[Facebook Marketplace Guest Search Free](https://apify.com/maximedupre/facebook-marketplace-listings/examples/facebook-marketplace-guest-search-free)** when you need a public guest search.
- Find **[Facebook Marketplace Items For Sale By Owner Near Me](https://apify.com/maximedupre/facebook-marketplace-listings/examples/facebook-marketplace-items-for-sale-by-owner-near-me)** with a location-focused search.

#### 📋 Marketplace Listing Rows

Each saved row represents the first eligible occurrence of one public Marketplace listing. If the same source listing appears again through another submitted value, later matches are ignored. The row keeps the source URL, title, asking price, currency, displayed location, availability, primary image URL, and collection time.

#### ▶️ Run a Facebook Marketplace Search

Choose one way to find listings for each run:

**Marketplace search URLs**

Add one or more public search or browse URLs. Filters in submitted URLs stay active.

**Keyword and location**

Enter product words and a city or other location.

**Coordinates and radius**

Enter a center latitude, longitude, and search radius in kilometers.

**Direct listing lookup**

Add one or more public Marketplace listing URLs when you already know the listings to collect.

Use one mode per run. Fields for other modes are ignored. You do not need a Facebook login or API key. Set **Maximum listings** when you want a cap. Leave it empty to return all available results until the source is exhausted. Facebook may return fewer listings.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
|---|---|---|
| `findBy` | string | Chooses `searchUrls`, `keywordLocation`, `coordinatesRadius`, or `directListingLookup`. Use one mode per run. |
| `searchUrls` | array of objects | Adds one or more public Marketplace search or browse URL objects. Filters in each URL stay active. Required for this mode. |
| `keyword` | string | Sets product words such as `mountain bike`. Required with `keywordLocation`. |
| `location` | string | Sets a city or other place such as `Austin, Texas`. Required with `keywordLocation`. |
| `latitude` | number | Sets the center latitude from -90 to 90. Required with `coordinatesRadius`. |
| `longitude` | number | Sets the center longitude from -180 to 180. Required with `coordinatesRadius`. |
| `radiusKm` | number | Sets a positive search radius in kilometers. Required with `coordinatesRadius`. |
| `listingUrls` | array of objects | Adds public listing URL objects for direct lookup. Required for this mode. |
| `includeRichDetails` | boolean | Requests full descriptions, extra public media, condition and other attributes, public seller details, delivery options, precise coordinates, and category details such as vehicle specifications when available. |
| `maxItems` | integer | Sets the listing cap. Leave it empty to return all available results until the source is exhausted. Facebook may return fewer listings. |

**Example input**

This example is copied from the public input of the successful current-beta default-input run:

```json
{
  "findBy": "searchUrls",
  "searchUrls": [
    {
      "url": "https://www.facebook.com/marketplace/108479165840750/search/?query=bike"
    }
  ],
  "includeRichDetails": false,
  "maxItems": 25
}
```

#### 🧾 Output

**Run output**

| Field | Type | What it does |
|---|---|---|
| `results` | string | Links to the collected listing rows in the default dataset overview. |

**Listing row fields**

The dataset has one listing-row shape for all four input modes. The source may hide or remove listings, so a run can return fewer rows than requested.

| Field | Type | What it does |
|---|---|---|
| `listingId` | string | Gives the public ID of the Marketplace listing. |
| `listingUrl` | string | Links to the public Facebook Marketplace listing. |
| `title` | string | Gives the title shown on the listing. |
| `price` | number | Gives the asking price shown on the listing. |
| `currency` | string | Gives the currency shown for the asking price. |
| `location` | string | Gives the location shown on the listing. |
| `availabilityStatus` | string | Gives the availability state shown on the listing. |
| `primaryImageUrl` | string | Links to the main image shown for the listing. |
| `collectedAt` | string | Gives the time when the Actor collected the listing, in date-time format. |

**Example listing row**

This unshortened row is copied from the successful current-beta search run:

```json
{
  "listingId": "1396178905973417",
  "listingUrl": "https://www.facebook.com/marketplace/item/1396178905973417/",
  "title": "Schwinn Hurricane eBike",
  "price": 500,
  "currency": "USD",
  "location": "South San Francisco, California",
  "availabilityStatus": "Available",
  "primaryImageUrl": "https://scontent.fmvd4-1.fna.fbcdn.net/v/t39.84726-6/787045080_1848438953195675_3029700478648122674_n.jpg?stp=c148.0.260.260a_dst-jpg_p261x260_tt6&_nc_cat=105&_nc_map=urlgen_bucketless&ccb=1-7&_nc_sid=92e707&_nc_ohc=Hm_KiXY4CggQ7kNvwF_d7sf&_nc_oc=Adp0kLvgFNbTVHbU7iUqga42BPBbs-IJw9Nxv2vNdaz9k8cIPtn8bPVgZcaXBBaGR5U&_nc_zt=14&_nc_ht=scontent.fmvd4-1.fna&_nc_gid=rdgJurxo4InuBOzDleu-wA&_nc_ss=73180&oh=00_AQImnRkn5eQ7okXqYCEvUEBCHLwHuSvvZr6XAXqF7Kw4DA&oe=6A995C82",
  "collectedAt": "2026-08-30T00:12:31.000Z"
}
```

#### 💳 Pricing

**How charges work**

This Actor uses pay-per-event pricing. One `Listing` event is charged for each public listing saved to the dataset. The current price and tier details appear in the Store pricing panel.

#### 🔌 Integrations

Use the Apify API to start runs and read the default dataset. You can also schedule runs, export dataset rows, or send finished-run data to webhooks.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Do I need a Facebook login or API key?

No. The Actor collects publicly visible Marketplace listings without a Facebook login or API key.

##### Why did my run return fewer listings than `maxItems`?

`maxItems` is a cap, not a promise. Facebook may hide, remove, or block public listings, so the source may return fewer rows.

##### Can I use a search URL with filters?

Yes. Filters already encoded in submitted public search or browse URLs stay active. You can add multiple URLs for the same kind of search, but keep independent keyword, location, or filter combinations in separate runs.

##### Can I search by a keyword and location?

Yes. Choose **Keyword and location**, then enter both fields.

##### Can I search around coordinates?

Yes. Choose **Coordinates and radius** and enter latitude, longitude, and a positive radius in kilometers.

##### Can I look up known listings?

Yes. Choose **Direct listing lookup** and add public Marketplace listing URLs.

##### What does `includeRichDetails` do?

It requests extra public details such as descriptions, media, attributes, seller details, delivery options, coordinates, and category details when available.

##### Why is the same listing saved only once?

The Actor saves the first eligible occurrence and ignores later matches for the same source listing. The saved row reflects the first match, not a combination of later matches.

##### Is the data guaranteed complete or fresh?

No. Results cover the public listings Facebook exposes during the run, and `collectedAt` tells you when each row was collected. The Actor does not promise a fixed count or future freshness.

### 📝 Changelog

**0.0: Initial release**

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~facebook-marketplace-listings/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [OLX Scraper](https://apify.com/maximedupre/olx-scraper). Collect public marketplace listing prices, locations, seller details, photos, and source URLs from OLX.
- [MercadoLibre Search Scraper](https://apify.com/maximedupre/mercado-libre-search-scraper). Search Mercado Libre products and compare prices, sellers, ratings, images, and positions.
- [Allegro Scraper for Prices, Sellers, and Specs](https://apify.com/maximedupre/allegro-scraper). Collect listing cards and compare prices, sellers, delivery data, and visible product parameters.
- [Carsales.com.au Scraper](https://apify.com/maximedupre/carsales-scraper). Collect public vehicle listing prices, specifications, locations, images, and source URLs.
- [Trendyol Scraper](https://apify.com/maximedupre/trendyol-scraper). Collect public product prices, sellers, ratings, categories, and images from Trendyol.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `findBy` (type: `string`):

Choose one way to find Facebook Marketplace listings for this run.

## `searchUrls` (type: `array`):

Add one or more public Facebook Marketplace search or browse URLs. Filters already in each URL are used. This field is required when Marketplace search URLs is selected.

## `keyword` (type: `string`):

Words for the item you want to find, such as "mountain bike". This field is required when Keyword and location is selected.

## `location` (type: `string`):

A city or other place to search, such as "Austin, Texas". This field is required when Keyword and location is selected.

## `latitude` (type: `number`):

The center latitude in decimal degrees, from -90 to 90. This field is required when Coordinates and radius is selected.

## `longitude` (type: `number`):

The center longitude in decimal degrees, from -180 to 180. This field is required when Coordinates and radius is selected.

## `radiusKm` (type: `number`):

How far from the center to search, in kilometers. Use a positive number. This field is required when Coordinates and radius is selected.

## `listingUrls` (type: `array`):

Add one or more public Facebook Marketplace listing URLs when you already know the listings to collect. This field is required when Direct listing lookup is selected.

## `includeRichDetails` (type: `boolean`):

Turn this on to collect full descriptions, extra public media, condition and other attributes, public seller details, delivery options, precise coordinates, and category details such as vehicle specifications when available.

## `maxItems` (type: `integer`):

Stop after this many listing records. Leave this empty to return all available results until the source is exhausted. Facebook may return fewer listings.

## Actor input object example

```json
{
  "findBy": "searchUrls",
  "searchUrls": [
    {
      "url": "https://www.facebook.com/marketplace/108479165840750/search/?query=bike"
    }
  ],
  "includeRichDetails": false,
  "maxItems": 25
}
```

# Actor output Schema

## `results` (type: `string`):

Open the collected listing rows in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "findBy": "searchUrls",
    "searchUrls": [
        {
            "url": "https://www.facebook.com/marketplace/108479165840750/search/?query=bike"
        }
    ],
    "maxItems": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/facebook-marketplace-listings").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "findBy": "searchUrls",
    "searchUrls": [{ "url": "https://www.facebook.com/marketplace/108479165840750/search/?query=bike" }],
    "maxItems": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/facebook-marketplace-listings").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "findBy": "searchUrls",
  "searchUrls": [
    {
      "url": "https://www.facebook.com/marketplace/108479165840750/search/?query=bike"
    }
  ],
  "maxItems": 25
}' |
apify call maximedupre/facebook-marketplace-listings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/facebook-marketplace-listings"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/HP3hsGxIotAddKziu/builds/u0VhLhzgzueacJ2pD/openapi.json
