# Facebook Marketplace Scraper (`piotrv1001/facebook-marketplace-scraper`) Actor

Scrape Facebook Marketplace listings by keyword and city or from any Marketplace search URL, no login: title, price, location, photo, listing date and status, plus optional description, condition, seller and all photos. Export to CSV or Excel.

- **URL**: https://apify.com/piotrv1001/facebook-marketplace-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** E-commerce, Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🚀 Facebook Marketplace Scraper

Scrape **Facebook Marketplace listings** by keyword and city, or from any Marketplace search URL you paste, with no login and no cookies. The **Facebook Marketplace Scraper** returns each listing's title, price, location, main photo, listing date and sold or pending status, and on request its description, condition, seller, every photo and exact coordinates. Use it as a Facebook Marketplace API for price tracking, deal hunting, Marketplace monitoring and alerts, reseller research and market data in CSV, Excel or JSON.

### ✨ Features

- 🔎 **Facebook Marketplace search**: Any keyword in any Marketplace city (`iphone` in `New York`, `sofa` in `London`), many searches per run.
- 🔗 **Paste a search URL**: Copy a Marketplace search or category page from your browser; its location, category, sort and price filters are kept.
- 📈 **Deeper than one page**: The scraper splits each search into price ranges, so one search returns hundreds of listings, not just the first screen.
- 🏷️ **Listing data**: Title, price and old price, city, main photo, listing date, sold and pending flags, delivery options, vehicle mileage lines.
- 📝 **Listing details (optional)**: Description, condition, seller name and profile, all photos, exact coordinates, category and currency.
- 🔁 **No duplicates**: A listing found by two searches is saved and charged once.

### 🛠️ How It Works

1. **Enter searches**: keywords such as `iphone`, or Facebook Marketplace search URLs, one per line.
2. **Pick a location**: a city name (`Los Angeles`, `London`), the city part of a Marketplace URL (`nyc`, `la`) or a location ID. Pasted URLs keep their own location.
3. **Run the scraper**: download the listings as JSON, CSV or Excel, or get them through the API.

### ⚙️ Input

| Field | What it does |
| --- | --- |
| **Searches** | Keywords or Facebook Marketplace search URLs, one per line. |
| **Location** | City for the keyword searches. Default `New York`. |
| **Max listings per search** | Stop after this many listings from each search. Default 50. |
| **Include listing details** | Open each listing for description, condition, seller, all photos and coordinates. Off by default. |

```json
{
    "searches": ["iphone", "https://www.facebook.com/marketplace/chicago/search/?query=bike&minPrice=100&maxPrice=300"],
    "location": "Los Angeles",
    "maxItems": 200,
    "includeDetails": false
}
```

### 💰 Pricing

You pay per listing saved, with no monthly rental.

| Event | Price | What you get |
| --- | --- | --- |
| **Listing** | $0.0015 per listing ($1.50 per 1,000) | One listing with title, price, location, photo, date and status |
| **Listing details** | $0.005 per listing ($5 per 1,000), on top of Listing | Description, condition, seller, all photos, coordinates and currency |
| **Actor start** | $0.00005 per run | Charged once when the run starts |

Examples: 1,000 listings cost $1.50. 1,000 listings with details cost $6.50 ($1.50 + $5). Details are charged only for listings whose page loaded with its details; searches with no results are listed in the run's status message and are not charged.

### 📊 Sample Output Data

```json
{
    "id": "1113338597722713",
    "url": "https://www.facebook.com/marketplace/item/1113338597722713/",
    "title": "3 Seater Recliner Sofa with USB sockets + Matching Footrest",
    "price": 150,
    "priceText": "£150",
    "oldPrice": null,
    "currency": "GBP",
    "subtitles": [],
    "city": "London",
    "state": "",
    "location": "London, United Kingdom",
    "imageUrl": "https://scontent-hou1-1.xx.fbcdn.net/v/t39.84726-6/855427177_157793680?…",
    "isSold": false,
    "isPending": false,
    "deliveryTypes": ["IN_PERSON"],
    "categoryId": "1583634935226685",
    "listedAt": "2026-10-19T11:44:33.000Z",
    "query": "sofa",
    "inputSearch": "london:sofa",
    "description": "Beige/taupe suede sofa with two electric reclining seats and a matching footrest. …",
    "condition": "Used - Good",
    "attributes": [{ "name": "Condition", "value": "Used - Good" }],
    "category": "Furniture",
    "photos": [
        "https://scontent-lax7-1.xx.fbcdn.net/v/t39.84726-6/855427177_157793680?…",
        "https://scontent-lax3-1.xx.fbcdn.net/v/t45.5328-4/850907418_1786598752?…"
    ],
    "seller": {
        "name": "Ramon Frassetto",
        "id": "pfbid02cD6wDkxjqGsgU63K2TkzBnLnzCb6Z6XvNf1SoUqVVA7QZDJ42sgU3oeeCbG9xr7bl",
        "url": "https://www.facebook.com/marketplace/profile/pfbid02cD6wDkxjqGsgU63K2TkzBnLnzCb6Z6XvNf1SoUqVVA7QZDJ42sgU3oeeCbG9xr7bl/"
    },
    "latitude": 51.506652832031,
    "longitude": 0.0164794921875,
    "locationText": "London, United Kingdom",
    "shippingOffered": false,
    "status": "AVAILABLE",
    "scrapedAt": "2026-10-22T09:13:46.754Z"
}
```

Without "Include listing details" a row ends at `inputSearch`, and `currency` is empty (`priceText` keeps the currency symbol). `inputSearch` names the search a listing came from, so rows from several searches are easy to group.

### 🎯 Use Cases

- **Facebook Marketplace price tracker**: run a search on a schedule and follow asking prices for a model, a car or a sofa over time.
- **Facebook Marketplace monitor and alerts**: sort by newest and compare runs to catch new listings and deals before anyone else.
- **Reseller and flipping research**: see what sells in which city, at what price, and how fast listings disappear.
- **Facebook Marketplace cars and vehicles**: paste a vehicles search URL to get prices, mileage lines and locations.
- **Market data for apps and AI**: feed clean listing data into dashboards, pricing models or LLM pipelines.

### ❓ FAQ

**Do I need a Facebook account or cookies?** No. The scraper reads Marketplace the way a logged-out visitor sees it.

**How many listings does one search return?** Facebook shows about 24 listings per screen. The scraper splits each search into price ranges and goes deeper, which gave **681 unique listings for one search** in our test (`iphone` in New York, the most a search goes in one run). The run's status message says how many a search gave. For more, run the same keyword in nearby cities or split it by price in pasted URLs.

**Which locations work?** Any Marketplace city: a name such as `Los Angeles` or `Manchester`, the city part of a Marketplace URL (`nyc`, `la`, `sanfrancisco`) or a numeric location ID. An unknown location is reported in the status message, not guessed.

**Can I scrape a Facebook Marketplace category or vehicles page?** Yes. Paste the page URL (for example `https://www.facebook.com/marketplace/la/vehicles/`) into Searches.

**Why is `currency` empty?** Search results show only the formatted price (`$150`). Turn on "Include listing details" to get the ISO currency code.

**Can I export Facebook Marketplace listings to Excel or CSV?** Yes. Every run's dataset downloads as CSV, Excel, JSON or XML, or through the Apify API.

**How long do the photo links work?** Facebook's image links expire after a few days, so download the photos you need soon after the run.

### 🔗 More Facebook Actors

- [Facebook Posts Scraper](https://apify.com/piotrv1001/facebook-posts-scraper): posts of any public page with engagement counts.
- [Facebook Pages Scraper](https://apify.com/piotrv1001/facebook-pages-scraper): page profile, followers, contact details and rating.
- [Facebook Ads Library Scraper](https://apify.com/piotrv1001/facebook-ads-library-scraper): ads from Meta's Ad Library by keyword.

# Actor input Schema

## `searches` (type: `array`):

What to search for, one per line: a keyword (searched in the location below) or a Facebook Marketplace search URL copied from your browser. A pasted URL keeps its own location, category, sort and filters, e.g. `https://www.facebook.com/marketplace/la/search/?query=bike&minPrice=100&maxPrice=500`.

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

City for the keyword searches: a city name (`Los Angeles`, `London`), the city part of a Marketplace URL (`nyc`, `la`, `sanfrancisco`) or a Marketplace location ID. Pasted URLs ignore it.

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

Stop after this many listings from each search.

## `includeDetails` (type: `boolean`):

Open each listing for its description, condition, seller, all photos, exact coordinates and currency. Slower, and charged as an extra event per listing.

## `proxyConfiguration` (type: `object`):

Connection settings. Keep the default.

## Actor input object example

```json
{
  "searches": [
    "iphone",
    "https://www.facebook.com/marketplace/chicago/search/?query=sofa&sortBy=price_ascend"
  ],
  "location": "Chicago",
  "maxItems": 50,
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "searches": [
        "iphone"
    ],
    "location": "New York",
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/facebook-marketplace-scraper").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 = {
    "searches": ["iphone"],
    "location": "New York",
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/facebook-marketplace-scraper").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 '{
  "searches": [
    "iphone"
  ],
  "location": "New York",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call piotrv1001/facebook-marketplace-scraper --silent --output-dataset

```

## MCP server setup

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

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/XjGvTmAXmJqx8lHX2/builds/ZDh2ZpWyDuLgKFIcg/openapi.json
