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

Scrape Facebook Marketplace listings by keyword, vehicle make, link, or listing URL in any city: title, price, location, photos, seller, posting date, plus full description, vehicle specs, and dealership contacts. No login. Export JSON, CSV, Excel.

- **URL**: https://apify.com/parsebird/facebook-marketplace-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.34 / 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

Facebook Marketplace Scraper collects listings from [Facebook Marketplace](https://www.facebook.com/marketplace) in any city: title, price, location, photos, seller, posting date, and sold status. Search by keyword or by vehicle make, or paste Marketplace links. Turn on details to add the full description, condition, exact coordinates, seller profile, dealership phone and address, and vehicle specs such as mileage and VIN.

<table><tr>
<td style="border-left:4px solid #1877F2;padding:12px 16px;font-weight:600">
Type what you want and where, for example "sectional sofa" in Toronto or Honda in Houston, and get up to 1,000 listings per search with price filters, date filters, 11 sort orders, a search area of up to 500 km, and a monitoring mode that saves only new listings. No Facebook login, cookies, or API key needed.
</td>
</tr></table>

<br>

<table>
<tr>
<td colspan="3" style="padding:10px 14px;background:#1877F2;border:none;border-radius:4px 4px 0 0">
<span style="color:#FFFFFF;font-size:14px;font-weight:700;letter-spacing:0.5px">ParseBird Facebook Suite</span>
<span style="color:#D8E6FD;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Pages, posts, groups, reviews, ads &amp; media</span>
</td>
</tr>
<tr>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-user-posts-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook User Posts Scraper</a><br>
<span style="color:#78716C;font-size:11px">Posts from profiles and Pages</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-page-video-downloader" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Page Video Downloader</a><br>
<span style="color:#78716C;font-size:11px">Every video on a Page, MP4 links</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-media-downloader" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Media Downloader</a><br>
<span style="color:#78716C;font-size:11px">HD/SD links for videos, reels, photos</span>
</td>
</tr>
<tr>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-group-posts-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Public Group Posts Scraper</a><br>
<span style="color:#78716C;font-size:11px">Group posts, reactions, photos</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-group-profile-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Group Profile Scraper</a><br>
<span style="color:#78716C;font-size:11px">Group profiles, admins &amp; rules</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-reviews-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Page Reviews Scraper</a><br>
<span style="color:#78716C;font-size:11px">Recommendations, tags, comments</span>
</td>
</tr>
<tr>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-group-posts-comments-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Group Posts &amp; Comments Scraper</a><br>
<span style="color:#78716C;font-size:11px">Group posts with comments &amp; replies</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-ads-library-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Meta | Facebook Ads Library Scraper</a><br>
<span style="color:#78716C;font-size:11px">Ad Library ads, EU reach &amp; payers</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-reels-play-count-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Reels Play Count Scraper</a><br>
<span style="color:#78716C;font-size:11px">Exact plays for reels &amp; videos</span>
</td>
</tr>
<tr>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-radius:0 0 0 4px;border-right:none;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-group-insights-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Group Insights Scraper</a><br>
<span style="color:#78716C;font-size:11px">Group members, growth &amp; activity</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:33%;background:#E7F0FE">
<a href="https://apify.com/parsebird/facebook-marketplace-scraper" style="color:#1877F2;text-decoration:none;font-weight:700;font-size:13px">Facebook Marketplace Scraper</a><br>
<span style="color:#1877F2;font-size:11px;font-weight:600">You are here</span>
</td>
<td style="padding:10px 14px;border:1px solid #E7E5E4;border-radius:0 0 4px 0;border-top:none;vertical-align:top;width:33%;background:#FFFFFF">
<a href="https://apify.com/parsebird/facebook-page-details-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Facebook Page Details Scraper</a><br>
<span style="color:#78716C;font-size:11px">Page contacts, followers &amp; hours</span>
</td>
</tr>
</table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```text
Use Apify Actor parsebird/facebook-marketplace-scraper to scrape Facebook Marketplace listings. Example with ApifyClient (Python): client.actor("parsebird/facebook-marketplace-scraper").call(run_input={"keywordSearches":[{"query":"sectional sofa","location":"Toronto"}],"maxListings":50}). Input (all optional, but give at least one of keywordSearches, vehicleSearches, startUrls, itemUrls): keywordSearches [{query, location}] (location = city name like "Austin, Texas", postal code, "lat,lng", or a Marketplace city slug like "sanfrancisco"; "locationSlug" also accepted); vehicleSearches [{make, location}] (make = "Honda", "Toyota Camry", or "all"); startUrls [{url}] facebook.com/marketplace search, category, or rentals links; itemUrls [{url}] facebook.com/marketplace/item/<id> links (always detailed); searchRadiusKm integer 0-500 default 65; minPrice, maxPrice integers in local currency; conditions array of "new","used_like_new","used_good","used_fair" (keyword searches only); dateListed "all"|"last_24_hours"|"last_7_days"|"last_30_days"; deliveryMethod "all"|"local_pick_up"|"shipping"; availability "available"|"sold"; sortBy "best_match"|"creation_time_descend"|"creation_time_ascend"|"price_ascend"|"price_descend"|"distance_ascend"|"distance_descend"|"vehicle_mileage_ascend"|"vehicle_mileage_descend"|"vehicle_year_descend"|"vehicle_year_ascend"; exactMatch boolean; vehicleMinYear, vehicleMaxYear, vehicleMinMileage, vehicleMaxMileage integers; vehicleTransmission "all"|"automatic"|"manual"; maxListings integer 1-1000 default 10 (per search); fetchDetails boolean; deduplicateListings boolean; monitoringMode boolean (save only listings new since the last run of the same search). Output: one row per listing: id, url, title, price {amount, currency, formatted}, original_price, is_free, location {city, state, full}, images [url], video_id, subtitles, creation_time {timestamp, iso}, delivery_options, seller {name, id}, is_sold, is_pending, is_live, category (ID), detailed (boolean), search (label), sourceUrl, scrapedAt. With details also: description, condition, attributes, accessibility_captions, location.latitude/longitude/postal_code, shipping_offered, shipping_price, is_hidden, category_name, category_path, hashtags, seller {name, id, profile_url, joined, rating_average, rating_count, type "dealership"|"private", dealership_name, phone, phone_international, address {street, city, region, postal_code, country}, website}, and for vehicles vehicle {make, model, trim, odometer {value, unit}, transmission, fuel_type, exterior_color, interior_color, condition, title_status, number_of_owners, is_paid_off, vin, features, mpg_city, mpg_highway, mpg_combined, horse_power, engine_size, safety_rating_overall, seller_type}. API docs: https://docs.apify.com/api/client/python/ and https://docs.apify.com/api/client/js/. Token: https://console.apify.com/account/integrations.
```

### What is Facebook Marketplace Scraper?

**Facebook Marketplace Scraper** is a **Facebook Marketplace data extraction tool** that searches Marketplace the way a logged-out visitor sees it and saves every listing as a clean row. Give it a **keyword and a city**, a **vehicle make and a city**, or a **Marketplace link**, and it returns the **title, price, city, photos, seller name, posting date, and sold or pending status** for each listing.

With **Fetch detailed information** on, each listing also gets the **full description**, **condition**, **all photos**, **exact coordinates**, the **seller's profile, join date, and ratings**, **dealership phone, address, and website**, and **vehicle specs** like mileage, transmission, colors, VIN, title status, and fuel economy. Facebook has no public Marketplace API, so this works as a **Facebook Marketplace API alternative**. To try it, open the Actor, keep the prefilled "sectional sofa in Toronto" search, and click **Start**.

### What can Facebook Marketplace Scraper do?

- 🔎 **Search by keyword in any city**: one row per search, such as "iphone 15" in Chicago or "standing desk" in Austin, Texas. Use a city name, postal code, coordinates, or a Marketplace city slug.
- 🚗 **Search vehicles by make or model**: Honda, Mercedes-Benz, Toyota Camry, or All, with year, mileage, and transmission filters. The Actor knows 901 makes and models from Facebook's vehicle list.
- 🔗 **Scrape any Marketplace link**: paste a search, category, or rentals link from your browser, filters included.
- 📄 **Get full listing details**: descriptions, condition, every photo, coordinates, seller ratings, and dealership contacts.
- 🎯 **Filter like the website**: price range, condition, date listed, local pickup or shipping, available or sold, exact keyword match, and 11 sort orders.
- 🗺️ **Search a wider area**: Facebook shows logged-out visitors listings from about 65 km around one point. Set a radius up to 500 km and the Actor searches several overlapping areas and removes duplicates.
- 🔔 **Monitor for new listings**: with **monitoring mode** on a schedule, each run saves only listings posted since the last run.
- ⏱️ **Automate it**: run on a schedule with [Apify schedules](https://docs.apify.com/platform/schedules), call it through the [Apify API](https://docs.apify.com/api/v2), or send results to Google Sheets, Slack, Make, Zapier, and more with [integrations](https://apify.com/integrations).
- 📁 **Export anywhere**: JSON, CSV, Excel, HTML, or XML.

### What data can you extract from Facebook Marketplace?

| Field | Description |
|-------|-------------|
| `title`, `url`, `id` | Listing title, link, and ID |
| `price` | `amount`, `currency`, and Facebook's `formatted` price, e.g. `CA$1,599` |
| `original_price`, `is_free` | Crossed-out price when the seller lowered it; `true` for free items |
| `location` | City, state, and full place name. Details add latitude, longitude, and postal code |
| `images`, `video_id` | Photo links (the cover photo, or all photos with details) and video ID |
| `creation_time` | When the listing was posted, as a Unix timestamp and ISO date |
| `seller` | Seller name and ID. Details add profile link, join date, rating, dealership name, phone, address, website |
| `is_sold`, `is_pending`, `is_live` | Sold, sale pending, and live status |
| `delivery_options` | `IN_PERSON`, `SHIPPING`, or both |
| `description`, `condition`, `attributes` | Full text, condition (e.g. "Used - like new"), and other item attributes (details) |
| `category_name`, `category_path` | Category such as Furniture, and its path (details) |
| `vehicle` | Make, model, trim, mileage, transmission, fuel, colors, owners, title status, VIN, MPG, horsepower (vehicle details) |
| `search`, `sourceUrl`, `scrapedAt` | Which search found the listing, its Marketplace link, and scrape time |

Each field is filled when Facebook shows it. Private sellers often leave vehicle specs empty, and phone numbers and addresses come from dealership listings.

### How to scrape Facebook Marketplace

1. Open [Facebook Marketplace Scraper](https://apify.com/parsebird/facebook-marketplace-scraper) and click **Try for free**.
2. Under **Search by keyword**, enter what you're looking for and a location, e.g. `sectional sofa` and `Toronto`. Add more rows for more searches.
3. For cars, add rows under **Search vehicles** with a make such as `Honda` and a location.
4. Optionally set a price range, condition, date listed, sort order, or search radius.
5. Set **Maximum listings per search** and turn on **Fetch detailed information** if you need descriptions, seller contacts, or vehicle specs.
6. Click **Start**. Open the **Output** tab to see the **Listings**, **Details**, and **Vehicles** views.
7. Export the data as JSON, CSV, Excel, HTML, or XML, or get it through the API.

#### How does the search area work?

Facebook shows logged-out visitors listings from about 65 km (40 miles) around one point, whatever radius you pick on the website. **Search radius** up to 65 km uses one search. A larger radius covers your area with overlapping 65 km circles: 150 km uses 7, 200 km uses 13. Results come from all circles in turn and each listing is saved once, so a larger radius gives more distinct listings but takes longer.

#### How do vehicle searches work?

The Actor searches Facebook's own page for the make or model, such as Marketplace's Toyota page, and keeps only vehicle listings whose title names the make. Facebook sometimes mixes other makes into filtered or sorted results; those rows are left out and not charged, and the log says how many. If the make isn't in Facebook's list, the Actor searches for the word and keeps vehicle listings.

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

**What is the price per Facebook Marketplace listing?**

The Actor uses pay-per-event pricing with two events. Platform usage, including proxies, is included in the price.

| Event | Free plan | Bronze | Silver | Gold |
|-------|-----------|--------|--------|------|
| `listing-scraped` | $0.00069 (**$0.69 / 1,000**) | $0.00049 (**$0.49 / 1,000**) | $0.00039 (**$0.39 / 1,000**) | $0.00034 (**$0.34 / 1,000**) |
| `listing-detail-scraped` | $0.00199 (**$1.99 / 1,000**) | $0.00169 (**$1.69 / 1,000**) | $0.00149 (**$1.49 / 1,000**) | $0.00129 (**$1.29 / 1,000**) |

Every saved listing is one `listing-scraped` event. A listing saved with full details, from a search with **Fetch detailed information** or from **Listing links**, adds one `listing-detail-scraped` event.

| Example | Free plan | Gold |
|---------|-----------|------|
| Prefilled run: 10 listings | $0.0069 | $0.0034 |
| 1,000 listings | $0.69 | $0.34 |
| 1,000 listings with full details | $2.68 | $1.63 |

Vehicle rows left out because they name another make, duplicates removed by **Remove duplicates across searches**, and listings skipped by **monitoring mode** are not charged. Apify's free plan includes monthly platform credits you can use to try the Actor.

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `keywordSearches` | array of `{query, location}` | — | Keyword searches. `location` is a city, postal code, `lat,lng`, or Marketplace city slug |
| `vehicleSearches` | array of `{make, location}` | — | Vehicle searches by make, make and model, or `all` |
| `startUrls` | array of links | — | Marketplace search, category, or rentals links |
| `itemUrls` | array of links | — | Single listings, always returned with full details |
| `searchRadiusKm` | integer | 65 | Area around each location, 0–500 km |
| `minPrice`, `maxPrice` | integer | — | Price range in the local currency |
| `conditions` | array | — | `new`, `used_like_new`, `used_good`, `used_fair` (keyword searches) |
| `dateListed` | string | `all` | `last_24_hours`, `last_7_days`, `last_30_days` |
| `deliveryMethod` | string | `all` | `local_pick_up` or `shipping` |
| `availability` | string | `available` | `sold` returns sold and sale-pending listings |
| `sortBy` | string | `best_match` | Newest, oldest, price, distance, mileage, or vehicle year |
| `exactMatch` | boolean | false | Match the search words more strictly |
| `vehicleMinYear`, `vehicleMaxYear` | integer | — | Model year range (vehicle searches) |
| `vehicleMinMileage`, `vehicleMaxMileage` | integer | — | Odometer range (vehicle searches) |
| `vehicleTransmission` | string | `all` | `automatic` or `manual` (vehicle searches) |
| `maxListings` | integer | 10 | Limit per search row and per link, up to 1,000 |
| `fetchDetails` | boolean | false | Add descriptions, seller contacts, and vehicle specs |
| `deduplicateListings` | boolean | false | Save each listing once across all searches |
| `monitoringMode` | boolean | false | Save only listings new since the previous run of the same search |

Filters apply to keyword and vehicle searches. Links are scraped with the filters inside the link.

### Input / Output

**Example input**: two keyword searches, a vehicle search over a 150 km area, and one listing link.

```json
{
    "keywordSearches": [
        { "query": "sectional sofa", "location": "Toronto" },
        { "query": "standing desk", "location": "Austin, Texas" }
    ],
    "vehicleSearches": [
        { "make": "Toyota Camry", "location": "Dallas, Texas" }
    ],
    "itemUrls": [
        { "url": "https://www.facebook.com/marketplace/item/2501741430316811/" }
    ],
    "searchRadiusKm": 150,
    "maxPrice": 30000,
    "sortBy": "creation_time_descend",
    "maxListings": 100,
    "deduplicateListings": true
}
```

**Example listing** (a real row; the photo link is shortened)

```json
{
  "id": "1151425430657281",
  "url": "https://www.facebook.com/marketplace/item/1151425430657281/",
  "title": "Modern Tufted Sectional Sofa",
  "price": { "amount": 1599.0, "currency": "CAD", "formatted": "CA$1,599" },
  "original_price": null,
  "is_free": false,
  "location": { "city": "Toronto", "state": "ON", "full": "Toronto, Ontario" },
  "images": ["https://scontent.fkul15-1.fna.fbcdn.net/v/t39.84726-6/856008507_163066..."],
  "video_id": null,
  "subtitles": [],
  "creation_time": { "timestamp": 1792571929, "iso": "2026-10-21T08:38:49Z" },
  "delivery_options": ["IN_PERSON"],
  "seller": { "name": "Mohammad Khalid Seddiqy", "id": "100013030781052" },
  "is_sold": false,
  "is_pending": false,
  "is_live": true,
  "category": "1583634935226685",
  "detailed": false,
  "search": "sectional sofa in Toronto",
  "sourceUrl": "https://www.facebook.com/marketplace/toronto/search/?query=sectional%20sofa",
  "scrapedAt": "2026-10-25T14:36:54Z"
}
```

**Example detailed vehicle listing from a dealership** (real row; description and photos shortened)

```json
{
  "id": "2501741430316811",
  "url": "https://www.facebook.com/marketplace/item/2501741430316811/",
  "title": "2021 Chevrolet Malibu · LS Sedan 4D",
  "price": { "amount": 1000.0, "currency": "USD", "formatted": "$1,000" },
  "location": {
    "city": "Houston", "state": "TX", "full": "Houston, TX",
    "latitude": 29.759216308594, "longitude": -95.366821289062, "postal_code": "77002-1445"
  },
  "images": ["https://scontent.fkul15-1.fna.fbcdn.net/v/t39.30808-6/858737317_376471...", "..."],
  "creation_time": { "timestamp": 1792704001, "iso": "2026-10-22T21:20:01Z" },
  "delivery_options": ["IN_PERSON"],
  "seller": {
    "name": "Carlos Leon",
    "id": "100004139792302",
    "profile_url": "https://www.facebook.com/marketplace/profile/100004139792302/",
    "joined": { "timestamp": 1343266539, "iso": "2012-07-26T01:35:39Z" },
    "rating_average": null,
    "rating_count": null,
    "type": "dealership",
    "dealership_name": "Carlos",
    "phone": "+1 832-951-5199",
    "phone_international": "+18329515199",
    "address": { "street": "901 Bagby St", "city": "Houston", "region": "Texas", "postal_code": "77002-2526", "country": "United States" },
    "website": null
  },
  "is_sold": false,
  "detailed": true,
  "search": "listing link",
  "description": "2021 Chevy Malibu \n\n$1000 Down\n\nBad/No credit? We got you!✅ ...",
  "shipping_offered": false,
  "vehicle": {
    "make": "Chevrolet",
    "model": "Malibu",
    "trim": "LS Sedan 4D",
    "odometer": { "value": 100000, "unit": "miles" },
    "transmission": "AUTOMATIC",
    "exterior_color": "white",
    "vin": null,
    "seller_type": "DIRECT_DEALERSHIP"
  }
}
```

Download results from the **Output** tab in JSON, CSV, Excel, HTML, or XML.

### Python API example

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")

run = client.actor("parsebird/facebook-marketplace-scraper").call(
    run_input={
        "keywordSearches": [{"query": "road bike", "location": "Seattle, Washington"}],
        "maxPrice": 800,
        "dateListed": "last_7_days",
        "maxListings": 100,
    }
)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["price"]["formatted"], item["location"]["city"], item["url"])
```

### JavaScript API example

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });

const run = await client.actor('parsebird/facebook-marketplace-scraper').call({
    vehicleSearches: [{ make: 'Honda', location: 'Houston' }],
    vehicleMinYear: 2018,
    vehicleTransmission: 'automatic',
    maxListings: 50,
    fetchDetails: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((car) => console.log(car.title, car.price.formatted, car.vehicle?.odometer, car.seller.phone));
```

See the [Python client docs](https://docs.apify.com/api/client/python/) and [JavaScript client docs](https://docs.apify.com/api/client/js/) for more options.

### Use cases

- **Reselling and flipping**: find underpriced furniture, electronics, or tools as soon as they're posted, using monitoring mode on a schedule.
- **Used car research**: compare prices by make, year, and mileage across cities, and collect dealership phone numbers and addresses.
- **Price research**: track asking prices and sold listings for a product category over time.
- **Market analysis**: count listings per city or category, and see what sells.
- **Lead generation**: build lists of dealerships and repeat sellers in a region.

### Is it legal to scrape Facebook Marketplace?

**Is scraping Facebook Marketplace data legal?**

The Actor only reads listings that Facebook shows to anyone without logging in. Scraping publicly available data is generally legal in many jurisdictions, but seller names and phone numbers can be personal data protected by laws such as GDPR and CCPA. Have a legitimate reason to collect the data, respect [Facebook's Terms](https://www.facebook.com/terms.php), and check with a lawyer if you're unsure. Read more in Apify's guide: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

### Other Facebook scrapers and related Actors

| Actor | Best for |
|-------|----------|
| [Facebook Group Insights Scraper](https://apify.com/parsebird/facebook-group-insights-scraper) | Member counts, growth, and activity for Facebook groups |
| [Facebook Public Group Posts Scraper](https://apify.com/parsebird/facebook-group-posts-scraper) | Posts from public groups, including buy-and-sell groups |
| [Facebook User Posts Scraper](https://apify.com/parsebird/facebook-user-posts-scraper) | Posts from public Facebook profiles and Pages |
| [Facebook Page Reviews Scraper](https://apify.com/parsebird/facebook-reviews-scraper) | Reviews and recommendations on Facebook Pages |
| [Meta | Facebook Ads Library Scraper](https://apify.com/parsebird/facebook-ads-library-scraper) | Ads from the Meta Ad Library |
| [Facebook Media Downloader](https://apify.com/parsebird/facebook-media-downloader) | HD and SD links for single videos, reels, and photos |
| [Marktplaats Scraper](https://apify.com/parsebird/marktplaats-scraper) | Listings from Marktplaats, the Dutch classifieds site |

### FAQ

**Do I need a Facebook account or cookies?**
No. The Actor reads Marketplace as a logged-out visitor, so there is nothing to log in to and no account to risk.

**How many listings can I get?**
Up to 1,000 per search row or link, and you can add as many rows as you need. In our tests a run with four searches saved 3,078 listings in about three minutes. Facebook sometimes ends a search earlier when it has no more results for that area.

**Which location formats work?**
City names (`Toronto`, `Austin, Texas`), postal codes, coordinates such as `43.65,-79.38`, and the city part of a Marketplace link, such as `sanfrancisco` from `facebook.com/marketplace/sanfrancisco`. Add the state or country if a city name is shared by several places. Locations Facebook doesn't know are skipped with a message in the log.

**Can I scrape rentals and other categories?**
Yes. Open the category on Facebook Marketplace, for example property rentals in your city, copy the link, and paste it into **Marketplace search links**.

**Why do date-filtered searches sorted by price take longer?**
Facebook returns no results when a date filter and a price sort are combined. The Actor runs the date-filtered search, reads up to 1,000 matches, and sorts them by price itself.

**Does the "Sold" option return only sold items?**
It returns what Facebook shows for sold items, which includes listings marked sale pending. Use `is_sold` and `is_pending` to tell them apart.

**How does monitoring mode work?**
The Actor remembers the listings each search found and when it last ran. The next run of the same search, with the same filters, saves only listings that are new and posted since then. The first run saves the current listings. Schedule it with [Apify schedules](https://docs.apify.com/platform/schedules) to get new listings every hour or day.

**Why are some detail fields empty?**
Fields are filled only when Facebook shows them. Private sellers often skip vehicle specs, phone numbers and addresses appear on dealership listings, and seller ratings are empty when the seller keeps them private.

**Can I use it from my app or connect it to other tools?**
Yes. Call it from the [API tab](https://apify.com/parsebird/facebook-marketplace-scraper/api), or connect it to Google Sheets, Slack, Make, or Zapier with [integrations](https://apify.com/integrations).

**Where can I report issues or request a field?**
Open the **Issues** tab on the Actor page with your input and run ID.

# Changelog

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

# Actor input Schema

## `keywordSearches` (type: `array`):

Add one row per search: what you are looking for and where. Location accepts a city name (Toronto, Austin, Texas), a postal code, coordinates such as 43.65,-79.38, or the city part of a Marketplace link (sanfrancisco from facebook.com/marketplace/sanfrancisco).

## `vehicleSearches` (type: `array`):

Add one row per vehicle search: a make or make and model (Honda, Mercedes-Benz, Toyota Camry), or All, and where. Vehicle filters below apply to these rows.

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

Set up any search on Facebook Marketplace (any category, city, and filters), copy the link from the address bar, and paste it here, e.g. https://www.facebook.com/marketplace/toronto/search?query=sofa\&maxPrice=300. Each link is scraped as Facebook shows it to logged-out visitors. The filters below don't apply to links.

## `itemUrls` (type: `array`):

Links to single listings (facebook.com/marketplace/item/...). Each returns the full listing and is billed as a listing plus a listing detail.

## `searchRadiusKm` (type: `integer`):

How far around each location to search. Facebook shows logged-out visitors listings from about 65 km around one point, whatever radius you pick on the site. A larger value here searches several overlapping 65 km areas and removes duplicates.

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

In the local currency. Leave empty for no minimum.

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

In the local currency. Leave empty for no maximum.

## `conditions` (type: `array`):

Keep only these conditions. Leave empty for any. Keyword searches only.

## `dateListed` (type: `string`):

Only listings posted within this time.

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

Local pickup or shipping. Shipping is mostly offered in the US.

## `availability` (type: `string`):

Available listings, or listings already sold.

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

Order of results. Mileage and year sorts apply to vehicle searches.

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

Match the search words more strictly.

## `vehicleMinYear` (type: `integer`):

Earliest model year. Vehicle searches only.

## `vehicleMaxYear` (type: `integer`):

Latest model year. Vehicle searches only.

## `vehicleMinMileage` (type: `integer`):

Odometer, in the units local listings use (miles in the US, km elsewhere).

## `vehicleMaxMileage` (type: `integer`):

Odometer, in the units local listings use (miles in the US, km elsewhere).

## `vehicleTransmission` (type: `string`):

Vehicle searches only.

## `maxListings` (type: `integer`):

Limit for each keyword row, vehicle row, and search link. Total cost grows with this value times the number of searches.

## `fetchDetails` (type: `boolean`):

Add the full description, all photos, condition, exact coordinates, seller profile and ratings, dealership phone and address, and vehicle specs (mileage, VIN, colors, owners, title status). Each detailed listing is billed as a listing plus a listing detail.

## `deduplicateListings` (type: `boolean`):

Save each listing once, even when several searches find it. The first search that finds it sets sourceUrl.

## `monitoringMode` (type: `boolean`):

For scheduled runs: save only listings posted since the previous run of the same search. The first run saves the current listings. Nothing extra is charged.

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

No setup needed. The Actor picks its own network route and changes IP when Facebook limits requests.

## Actor input object example

```json
{
  "keywordSearches": [
    {
      "query": "sectional sofa",
      "location": "Toronto"
    }
  ],
  "searchRadiusKm": 65,
  "dateListed": "all",
  "deliveryMethod": "all",
  "availability": "available",
  "sortBy": "best_match",
  "exactMatch": false,
  "vehicleTransmission": "all",
  "maxListings": 10,
  "fetchDetails": false,
  "deduplicateListings": false,
  "monitoringMode": false
}
```

# Actor output Schema

## `dataset` (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 = {
    "keywordSearches": [
        {
            "query": "sectional sofa",
            "location": "Toronto"
        }
    ],
    "maxListings": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/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 = {
    "keywordSearches": [{
            "query": "sectional sofa",
            "location": "Toronto",
        }],
    "maxListings": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/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 '{
  "keywordSearches": [
    {
      "query": "sectional sofa",
      "location": "Toronto"
    }
  ],
  "maxListings": 10
}' |
apify call parsebird/facebook-marketplace-scraper --silent --output-dataset

```

## MCP server setup

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