# Facebook Marketplace Scraper 🛒 Sellers, Vehicles & Rentals (`dz_omar/facebook-marketplace-scraper`) Actor

Scrape Facebook Marketplace listings by keyword, category, city or link — no login or cookies. Title, price, seller, city and photo on every listing; add description, condition, all photos, exact location, listing date, vehicle and rental details. Any city worldwide, every filter.

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

## Pricing

from $0.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.
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?

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 — Listings, Sellers, Vehicles & Rentals

Scrape **Facebook Marketplace** listings by keyword, category, location or link — **no login, no cookies, no Facebook account**. Every listing comes with its title, price, seller, city, photo and link; switch on **full details** to also get the description, condition, every photo, exact coordinates, the listing date, the seller's profile, and clean vehicle and rental fields.

### 🛒 What is Facebook Marketplace Scraper?

Facebook Marketplace Scraper turns Marketplace searches into a clean, flat dataset you can download as JSON, CSV or Excel, or send to Google Sheets, a database or your own app.

- 🔍 **Search by keyword** — `iphone 13`, `sofa`, `honda civic` — exactly as you would on Facebook.
- 📍 **Any city in the world** — type `Austin, TX`, `Toronto`, `Lyon, France` or coordinates. No Facebook location IDs to look up.
- 🗂️ **Browse categories** — vehicles, property rentals, electronics, furniture, free stuff and more.
- 🔗 **Paste Marketplace links** — a search you set up on Facebook keeps all its filters; listing links return the full listing.
- 🎛️ **Every Marketplace filter** — price range, condition, date listed, delivery method, sold listings, exact match, radius, sort order.
- 📏 **Stay inside the radius** — Facebook keeps adding listings from far away when local ones run out; one switch keeps only what is really near you.
- 👤 **Seller on every listing** — name and ID even without details; join date, rating and picture with details.
- 🚗 **Vehicle fields** — year, make, model, trim, mileage, transmission, fuel, colours, owners, title status.
- 🏠 **Rental fields** — bedrooms, bathrooms, unit and building features, availability, postal code, walk/transit/bike scores.
- 📚 **Deep results** — hundreds or thousands of listings per search, not just the first page.

### 📊 What Facebook Marketplace data can I extract?

**Every listing:**

| Field | Description |
|---|---|
| `id`, `url` | Listing ID and link |
| `title` | The listing title |
| `price`, `price_formatted`, `currency` | Price as a number and as shown on Facebook (currency with details) |
| `original_price`, `original_price_formatted` | The struck-through price when the seller lowered it |
| `is_sold`, `is_pending` | Availability |
| `city`, `state`, `location_name` | Where the item is |
| `photo_url`, `has_video` | Main photo; whether the listing has a video |
| `delivery_types` | `IN_PERSON`, `DOOR_PICKUP`, `SHIPPING`, `PUBLIC_MEETUP` |
| `seller_id`, `seller_name` | Who is selling |
| `category_id` | Marketplace category |
| `search`, `search_query`, `search_category`, `search_location`, `position` | Which search found it and at what rank |
| `distance_km` | Approximate distance from your location (with **Stay inside the radius**) |
| `scraped_at`, `source_url` | When the row was collected and the search it came from |

**With "Include full listing details":**

| Field | Description |
|---|---|
| `description` | The seller's full description |
| `condition`, `condition_code`, `attributes` | Condition and every other attribute Facebook shows (size, brand, …) |
| `photos`, `photo_count` | Every photo of the listing in full size |
| `created_at` | When the listing was posted |
| `latitude`, `longitude`, `location_text` | Exact map position of the listing |
| `category_name`, `category_slug` | Category in words |
| `is_shipping_offered`, `shipping_price_formatted`, `listing_inventory_type` | Shipping and stock |
| `seller_joined_at`, `seller_rating`, `seller_rating_count`, `seller_profile_picture`, `is_business_seller` | Seller profile |
| `vehicle_year` … `vehicle_seller_type` | Vehicle facts (vehicle listings) |
| `property_bedrooms` … `property_bike_score` | Rental facts (rental listings) |

### 🎯 Use cases

- **Resellers and flippers** — track underpriced items in your area the moment they're listed (sort by newest, last 24 hours).
- **Car dealers and buyers** — collect private-seller vehicles with year, make, model, mileage and price for a whole metro area.
- **Price research** — build a price history for any product in any city, with condition and date listed.
- **Rental market analysis** — rents with bedrooms, bathrooms, amenities and postal codes, city by city.
- **Lead generation** — find active local sellers in a niche (furniture, appliances, equipment).
- **Market coverage** — compare supply and prices across cities and countries with one dataset.

### 🚀 How do I use Facebook Marketplace Scraper?

1. Type one or more **keywords** and a **location** (or pick **categories**, or paste **Marketplace links**).
2. Set any **filters** and the **max listings per search**.
3. Turn on **Include full listing details** if you need descriptions, all photos and seller profiles.
4. Click **Start** and download your data as JSON, CSV, Excel or HTML.

### ➡️ Input

| Field | What it does | Default |
|---|---|---|
| 🔍 **Keywords** | One search per keyword. | `iphone 13` (example) |
| 📍 **Location** | Any city, written like on a map (`Austin, TX`, `Manchester, UK`) or `lat,lng`. Used for keywords and categories. | — |
| 📏 **Search radius (km)** | How far from the location to look. | Facebook's default (65 km) |
| **Stay inside the radius** | Drop listings from cities beyond the radius and stop when only far-away results are left. | Off |
| 🗂️ **Categories** | With keywords: search inside each category. Without: browse the category near the location. | — |
| 🔗 **Marketplace links** | Search, category or listing links from Facebook. Links keep their own filters and location. | — |
| ↕️ **Sort by** | Best match, newest, price low→high / high→low, distance. | Best match |
| 💲 **Min / max price** | In the location's currency. | — |
| 🕒 **Date listed** | Last 24 hours, 7 days or 30 days. | Any time |
| 🏷️ **Condition** | New, used – like new, good, fair. | Any |
| 🚚 **Delivery method** | Local pickup or shipping. | All |
| **Include sold listings** | Also return listings marked as sold. | Off |
| **Exact keyword match only** | Titles containing the keyword exactly. | Off |
| 🔢 **Max listings per search** | Per keyword, category or link. `0` = everything. | 100 |
| 🔢 **Max listings in total** | Across the whole run. | No limit |
| 📄 **Include full listing details** | Description, condition, all photos, exact location, date, seller profile, vehicle and rental fields. | Off |

Example input:

```json
{
    "searchQueries": ["iphone 13", "macbook"],
    "location": "Chicago, IL",
    "radiusKm": 40,
    "maxPrice": 800,
    "sortBy": "creation_time_descend",
    "daysSinceListed": "7",
    "maxResultsPerSearch": 200,
    "includeDetails": true
}
```

> Facebook does not combine a **price** sort with a **Date listed** filter (it returns nothing). When you set both, the date filter is kept and results come newest first — the run log says so.

### ⬅️ Output

Results appear in the **Listings** and **Listings with details** tables and can be exported in any format.

#### 📘 Example of extracted Facebook Marketplace data

A vehicle listing with full details (seller anonymised):

```json
{
    "id": "1634836218426989",
    "url": "https://www.facebook.com/marketplace/item/1634836218426989/",
    "title": "2012 Infiniti G37 · X",
    "price": 3500,
    "price_formatted": "$3,500",
    "currency": "USD",
    "is_sold": false,
    "city": "Miami",
    "state": "FL",
    "location_name": "Miami, Florida",
    "photo_url": "https://scontent.xx.fbcdn.net/…",
    "has_video": true,
    "delivery_types": ["IN_PERSON"],
    "seller_id": "pfbid02AbCdEf…",
    "seller_name": "Alex M.",
    "search": "Vehicles",
    "search_location": "Miami, Florida, United States",
    "description": "El vehículo no tiene ningún problema mecánico funciona al 100…",
    "created_at": "2026-10-13T15:20:48.000Z",
    "latitude": 25.776672,
    "longitude": -80.194702,
    "photos": ["https://scontent.xx.fbcdn.net/…", "https://scontent.xx.fbcdn.net/…", "…"],
    "photo_count": 9,
    "seller_joined_at": "2025-03-15T20:18:43.000Z",
    "seller_rating": 5,
    "seller_rating_count": 1,
    "vehicle_year": 2012,
    "vehicle_make": "Infiniti",
    "vehicle_model": "g37",
    "vehicle_trim": "X",
    "vehicle_mileage": 129000,
    "vehicle_mileage_unit": "MILES",
    "vehicle_transmission": "AUTOMATIC",
    "vehicle_fuel_type": "GASOLINE",
    "vehicle_exterior_color": "black",
    "vehicle_owners": "TWO",
    "vehicle_is_paid_off": "IS_PAID_OFF",
    "vehicle_seller_type": "PRIVATE_SELLER",
    "details_fetched": true
}
```

A rental listing adds fields like these:

```json
{
    "title": "5 Beds 4 Baths - House",
    "price_formatted": "$4,500",
    "property_bedrooms": 5,
    "property_bathrooms": 4,
    "property_unit_details": ["House", "5 beds · 4 baths", "Central heating", "Laundry available", "Parking available", "1 Year Lease", "Dishwasher"],
    "property_building_details": ["Pet park", "Roof deck"],
    "property_availability": "Listed 4 hours ago · Available 2026/10/14",
    "property_postal_code": "98001-1203",
    "property_walk_score": 5,
    "property_transit_score": 11,
    "property_bike_score": 9
}
```

### 💰 How much does it cost to scrape Facebook Marketplace?

You pay only for what you get, per listing delivered. The lower your Apify plan, the more each listing costs:

| Apify plan | Free | Bronze | Silver | Gold | Platinum | Diamond |
|---|---|---|---|---|---|---|
| Per 1,000 listings | $0.80 | $0.70 | $0.60 | $0.50 | $0.50 | $0.50 |
| + full details, per 1,000 | $1.00 | $0.90 | $0.80 | $0.70 | $0.70 | $0.70 |

Plus **$0.001 per search** (keyword, category or link) that returns at least one listing. Example: 1,000 listings with full details on the Free plan ≈ **$1.80**.

Set **Max cost per run** in the run options and the run stops exactly at your budget — you are never charged for listings you don't receive.

### 🧰 More Facebook tools

| Actor | What it does |
|---|---|
| 📝 [Facebook Posts Scraper](https://apify.com/dz_omar/facebook-posts-scraper?fpr=smcx63) | Posts from public pages, profiles and groups — no login |
| 💬 [Facebook Comment Scraper](https://apify.com/dz_omar/facebook-comment-scraper?fpr=smcx63) | Comments and replies from posts, reels, photos and videos |
| 📢 [Facebook Ads Scraper Pro](https://apify.com/dz_omar/facebook-ads-scraper-pro?fpr=smcx63) | Ads from the Meta Ad Library: creatives, copy, dates and advertisers |

### ❓ FAQ

**Do I need a Facebook account or cookies?**
No. The Actor reads public Marketplace listings exactly as a visitor who isn't logged in sees them. Nothing to export, no account at risk.

**Which countries and cities work?**
Any place where Facebook Marketplace is available. Prices come in the local currency (USD, GBP, EUR, AUD, …).

**How many listings can I get per search?**
As many as Facebook returns for that search — often thousands for broad searches in big cities. Set **Max listings per search** to `0` for everything.

**Why do some results come from far outside my city?**
When local listings run out, Facebook keeps going with listings from further away. Turn on **Stay inside the radius** to keep only nearby ones.

**Why is a field empty?**
Sellers fill in different things: not every listing has a description, condition or video, and vehicle and rental fields only exist on those listings. Fields marked "with details" need **Include full listing details**.

**Can I get listings that are already sold?**
Yes — tick **Include sold listings**.

**Can I scrape one specific listing?**
Paste its link (`https://www.facebook.com/marketplace/item/…`) into **Marketplace links**; it is always returned with full details.

### 🔗 Integrations

Connect the results to Google Sheets, Slack, Zapier, Make, n8n, webhooks or your own code through the [Apify API](https://docs.apify.com/api/v2). Schedule runs to monitor new listings every hour or every day.

### Support

- 🌐 **Website:** [flowextractapi.com](https://flowextractapi.com)
- 📧 **Email:** <flowextractapi@outlook.com>
- 💬 **GitHub:** [FlowExtractAPI](https://github.com/FlowExtractAPI)
- 💼 **LinkedIn:** [flowextract-api](https://www.linkedin.com/in/flowextract-api/)
- 🐦 **X (Twitter):** [@FlowExtractAPI](https://x.com/FlowExtractAPI)
- 📱 **Facebook:** [flowextractapi](https://www.facebook.com/flowextractapi)
- 🎵 **TikTok:** [@flowextractapi](https://www.tiktok.com/@flowextractapi)

### Legal & compliance

- **Public data only** — processes publicly available data.
- **Rate limiting** — respects source-service limits and terms of use.
- **Data protection** — no storage of personal information or unauthorized data collection.
- **Commercial use** — suitable for business intelligence and research.
- No affiliation with or endorsement by Facebook or Meta is implied.

***

*Facebook Marketplace Scraper — by FlowExtract API. Turn any website into structured data.*

# Changelog

This Actor's version history is a separate document: https://apify.com/dz_omar/facebook-marketplace-scraper/changelog.md

# Actor input Schema

## `searchQueries` (type: `array`):

What to search for, one keyword per line — exactly as you would type it in Marketplace's search box (e.g. <code>iphone 13</code>, <code>sofa</code>, <code>honda civic</code>).

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

City to search around — any city worldwide. Write it the way you would on a map: <code>Austin, TX</code>, <code>Toronto</code>, <code>Lyon, France</code>, <code>Manchester, UK</code>. Coordinates also work: <code>40.7128,-74.0060</code>. Not used for Marketplace links (they keep their own location).

## `radiusKm` (type: `integer`):

How far from the location to look. Leave empty for Facebook's default (65 km). Facebook offers 1, 2, 5, 10, 20, 40, 60, 80, 100, 250 and 500 km.

## `strictRadius` (type: `boolean`):

When local results run out, Facebook keeps going with listings from further away (e.g. a Boise search drifting to Portland and Reno). Turn this on to drop listings whose city is outside the radius and stop once results are only from outside. Each kept listing gets an approximate <code>distance_km</code>.

## `categories` (type: `array`):

With keywords: each keyword is searched inside each chosen category. Without keywords: the newest listings of each category near the location are collected.

## `startUrls` (type: `array`):

Links copied from Facebook Marketplace, one per line:<br>• a search — <code>https://www.facebook.com/marketplace/nyc/search?query=bike\&maxPrice=300</code><br>• a category — <code>https://www.facebook.com/marketplace/seattle/vehicles</code><br>• a listing — <code>https://www.facebook.com/marketplace/item/1234567890/</code> (always returned with full details)

## `sortBy` (type: `string`):

Order in which Facebook returns the listings.

## `minPrice` (type: `integer`):

In the local currency of the location.

## `maxPrice` (type: `integer`):

In the local currency of the location.

## `daysSinceListed` (type: `string`):

Only listings posted within this period.

## `itemCondition` (type: `array`):

Leave empty for any condition.

## `deliveryMethod` (type: `string`):

Local pickup only, shipping only, or both.

## `includeSold` (type: `boolean`):

Also return listings marked as sold (Facebook's "Availability: sold" filter).

## `exactMatch` (type: `boolean`):

Only listings whose title contains the keyword exactly.

## `maxResultsPerSearch` (type: `integer`):

For each keyword, category or link. <code>0</code> = everything Facebook returns for that search.

## `maxResultsTotal` (type: `integer`):

Stop the whole run after this many listings, across all searches. Empty = no overall limit. The run's cost limit is also respected.

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

Adds the description, condition and other attributes (mileage, bedrooms…), every photo, exact coordinates, listing date and the seller's profile (join date, rating, picture). Slower, and charged as an add-on per listing.

## Actor input object example

```json
{
  "searchQueries": [
    "iphone 13"
  ],
  "location": "New York, NY",
  "strictRadius": false,
  "sortBy": "best_match",
  "daysSinceListed": "any",
  "deliveryMethod": "all",
  "includeSold": false,
  "exactMatch": false,
  "maxResultsPerSearch": 100,
  "includeDetails": false
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `details` (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 = {
    "searchQueries": [
        "iphone 13"
    ],
    "location": "New York, NY",
    "maxResultsPerSearch": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("dz_omar/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 = {
    "searchQueries": ["iphone 13"],
    "location": "New York, NY",
    "maxResultsPerSearch": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("dz_omar/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 '{
  "searchQueries": [
    "iphone 13"
  ],
  "location": "New York, NY",
  "maxResultsPerSearch": 100
}' |
apify call dz_omar/facebook-marketplace-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dz_omar/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/UaYG3w44Y1WN4jAuI/builds/dHey4fnvBpriubtuF/openapi.json
