# Facebook Marketplace Vehicle Scraper + Real Time Notifications (`raidr-api/facebook-marketplace-vehicle-scraper`) Actor

Scrape Facebook Marketplace vehicles by make, model, year, price, and mileage. Features exact listing dates, real-time Discord notifications, smart age filtering, and deduplication. Optimized for lowest cost per run using advanced extraction techniques. Export to JSON, CSV, or Excel.

- **URL**: https://apify.com/raidr-api/facebook-marketplace-vehicle-scraper.md
- **Developed by:** [Raidr API](https://apify.com/raidr-api) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 146 total users, 16 monthly users, 98.5% runs succeeded, 9 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$20.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

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

## 🚗 Facebook Marketplace Vehicle Scraper

Scrape cars, trucks, motorcycles, and other vehicles from [Facebook Marketplace](https://www.facebook.com/marketplace/category/vehicles) with advanced filtering by make, model, year, mileage, price, and colors. Get real-time Discord alerts when new listings match your criteria.

### 🔍 What does Facebook Marketplace Vehicle Scraper do?

Facebook Marketplace Vehicle Scraper extracts **vehicle listings** from Facebook Marketplace, giving you access to comprehensive automotive data that goes beyond what manual searching allows.

- **Find deals faster**: Monitor listings across multiple locations and get notified instantly when new vehicles match your criteria
- **Filter precisely**: Search by make, model, year range, mileage, price, transmission, body style, and even exterior/interior colors
- **Track inventory**: Perfect for dealers, resellers, and buyers looking to monitor the market
- **Export anywhere**: Download data as JSON, CSV, Excel, or HTML - or integrate directly with your tools

### 💡 Why scrape Facebook Marketplace for vehicles?

Facebook Marketplace has become one of the largest platforms for buying and selling used vehicles. Here's why scraping it matters:

- **Lead generation**: Dealers can identify motivated sellers and reach out before competitors
- **Market research**: Analyze pricing trends, popular models, and regional availability
- **Inventory sourcing**: Find underpriced vehicles to flip or add to your dealership inventory
- **Price monitoring**: Track how prices change over time for specific makes and models
- **Competition analysis**: See what other sellers are listing and at what prices

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

Every listing includes the following data by default:

| Data Point | Always Included | With Detailed Fetch |
|------------|:-:|:-:|
| 📸 **Photos** | Primary image | All photos |
| 🚗 **Title** | ✅ | ✅ |
| 💰 **Price** | ✅ (current + strikethrough) | ✅ |
| 📍 **Location** | ✅ (city, state) | ✅ (+ coordinates, postal code) |
| 📅 **Listing Date** | ✅ (exact creation time) | ✅ (exact creation time) |
| 🏭 **Make & Model** | — | ✅ |
| 🛣️ **Mileage** | — | ✅ (odometer + unit) |
| ⚙️ **Transmission** | — | ✅ |
| ⛽ **Fuel Type** | — | ✅ |
| 🎨 **Colors** | — | ✅ (exterior + interior) |
| 📝 **Description** | — | ✅ (full seller description) |
| 👤 **Seller Info** | — | ✅ (name, type) |
| 🏷️ **Status** | ✅ (sold/pending/live) | ✅ |
| 🔗 **URL** | ✅ | ✅ |

### 🚀 How to scrape vehicles from Facebook Marketplace

1. **Create a free Apify account** using your email
2. **Open [Facebook Marketplace Vehicle Scraper](https://apify.com/your-username/facebook-marketplace-vehicle-scraper)**
3. **Set your location** — Enter a city, address, or postal code (e.g., "Toronto, Ontario")
4. **Configure filters** — Set price range, make, year, mileage, colors, etc.
5. **Click Start** and wait for the data to be extracted
6. **Download your data** in JSON, CSV, Excel, or HTML format

### ⬇️ Input example

The scraper interface lets you configure everything visually, or you can use JSON input directly:

**Basic search — fast, low cost:**

```json
{
  "location": "Toronto, Ontario",
  "radius": "65000",
  "makes": "367577657422824",
  "priceMax": 20000,
  "maxResults": 50
}
```

**Advanced search with detailed fetch and all filters:**

```json
{
  "location": "Los Angeles, CA",
  "radius": "100000",
  "makes": "313316249374727",
  "vehicleType": "car_truck",
  "carType": ["sedan", "suv"],
  "transmissionType": "automatic",
  "minYear": 2018,
  "maxYear": 2024,
  "minMileage": 0,
  "maxMileage": 50000,
  "priceMin": 15000,
  "priceMax": 35000,
  "exteriorColors": ["black", "white", "silver"],
  "keywords": ["leather", "sunroof", "navigation"],
  "fetchDetailedItems": true,
  "maxListingAge": "86400",
  "maxResults": 100
}
```

### ⬆️ Output example

The scraper outputs structured data for each vehicle listing:

**Standard output (fetchDetailedItems off):**

```json
{
  "id": "2093879114728054",
  "marketplace_listing_title": "2017 Subaru WRX Sport",
  "listing_price": {
    "amount": "19980.00",
    "currency": "CAD",
    "formatted_amount": "CA$19,980"
  },
  "location": {
    "reverse_geocode": {
      "city": "Edmonton",
      "state": "AB"
    }
  },
  "primary_listing_photo": {
    "image": {
      "uri": "https://scontent.facebook.com/v/..."
    }
  },
  "is_sold": false,
  "is_pending": false,
  "listing_date": 1771264204,
  "listing_date_ms": 1771264204000,
  "_fetchedAt": "2026-02-16T17:56:09.379Z"
}
```

**With detailed fetch enabled (fetchDetailedItems on):**

```json
{
  "id": "2093879114728054",
  "marketplace_listing_title": "2017 Subaru WRX Sport",
  "listing_price": {
    "formatted_amount": "CA$19,980"
  },
  "listing_date": 1771264204,
  "listing_date_ms": 1771264204000,
  "extraListingData": {
    "description": "2017 Subaru WRX Sport 2.0T 6-Speed Manual | Aftermarket Exhaust | Power Sunroof...",
    "creation_time": 1771264154,
    "creation_time_ms": 1771264154000,
    "vehicle_make_display_name": "Subaru",
    "vehicle_model_display_name": "wrx sport",
    "vehicle_odometer_data": {
      "value": 102049,
      "unit": "KILOMETERS"
    },
    "vehicle_condition": "VERY_GOOD",
    "vehicle_exterior_color": "grey",
    "vehicle_interior_color": "black",
    "vehicle_transmission_type": "MANUAL",
    "vehicle_fuel_type": "GASOLINE",
    "location": {
      "city": "Edmonton",
      "state": "AB",
      "latitude": 53.539,
      "longitude": -113.505
    },
    "seller": {
      "name": "Lakewood Chevrolet"
    }
  }
}
```

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

Facebook Marketplace Vehicle Scraper runs on Apify's **pay-per-use** model. You only pay for the compute resources you use.

| Listings | Standard | With Detailed Fetch |
|----------|----------|---------------------|
| 50 | ~$0.05 | ~$0.15 |
| 200 | ~$0.15 | ~$0.50 |
| 500 | ~$0.35 | ~$1.20 |

*Costs vary based on filters, location, and whether detailed fetch is enabled. Residential proxy usage is included in compute costs.*

**Free tier**: New Apify users get $5 in free credits monthly — enough to scrape hundreds of vehicle listings!

### 🔍 Fetch Detailed Item Info

Toggle **Fetch Detailed Item Info** in the input to control how much data you get per listing:

| | Standard (off) | Detailed Fetch (on) |
|---|---|---|
| **Speed** | Fast | Slower (1 extra request per listing) |
| **Cost** | Low | Higher (additional proxy usage) |
| **Listing date** | ✅ Approximate (~1 min accuracy) | ✅ Exact creation time |
| **Description** | — | ✅ Full seller description |
| **Make/Model/Year** | — | ✅ Structured vehicle data |
| **Mileage** | — | ✅ Odometer reading + unit |
| **Colors** | — | ✅ Exterior + interior |
| **Condition** | — | ✅ Vehicle condition rating |
| **Seller info** | — | ✅ Name, type, dealership |
| **All photos** | — | ✅ Every listing photo |
| **Coordinates** | — | ✅ Latitude/longitude |

**Recommendation**: Start with detailed fetch **off** for speed and cost savings. Enable it when you need the richer vehicle data (mileage, condition, seller, description).

### 📅 How listing dates work

Every listing automatically gets an approximate posting date — no extra cost, no extra requests. This means:

- **Age filtering always works** — filter by "Last 1 hour", "Last 24 hours", etc. without enabling detailed fetch
- **Discord timestamps always show** — "Listed 2 hours ago in Edmonton, AB"
- **Accuracy**: ~1 minute of the actual posting time

When **Fetch Detailed Item Info** is enabled, the scraper also gets the exact `creation_time` from Facebook and uses it for a second, more precise age filter pass.

### 💬 Discord notifications for new listings

Never miss a deal! Set up Discord notifications to get instant alerts when new vehicles match your criteria:

1. Create a webhook in your Discord server (Server Settings > Integrations > Webhooks)
2. Copy the webhook URL
3. Paste it into the "Discord Webhook URL" field
4. Configure notification preferences (new items only, image style, etc.)

Each notification includes:

- Vehicle photo (thumbnail or full size)
- Title, price, and location
- **Live-updating relative time** — "Listed 2 hours ago" (auto-updates in Discord)
- Direct link to the listing
- Available/Sold status

### 🔤 Filtering by keywords

Facebook only lets you filter by ONE make at a time. Use the **Keywords** feature to filter by multiple makes, models, or features:

```json
{
  "keywords": ["BMW", "Mercedes", "Audi", "M3", "AMG", "S-line"]
}
```

Keywords match against listing titles, descriptions, and vehicle attributes. Perfect for:

- Finding specific trims (GT, Sport, Limited)
- Filtering luxury brands together
- Searching for specific features (leather, sunroof, AWD)

### 🔄 Deduplication across runs

The scraper remembers listings from previous runs, so you can:

- **Monitor new listings**: Run daily and only see fresh inventory
- **Avoid duplicates**: Perfect for building a unique dataset over time
- **Get Discord alerts for new items only**: No spam from listings you've already seen

Deduplication data persists in your Apify storage between runs.

### ✨ Tips for best results

1. **Start with a smaller radius** — Begin with 40-65km and expand if needed
2. **Use age filtering** — "Maximum Listing Age" catches bumped/boosted old listings that appear as new
3. **Enable detailed fetch selectively** — Only when you need mileage, condition, seller, or description data
4. **Combine keywords strategically** — Filter by multiple makes OR specific trims/features
5. **Run scheduled jobs** — Set up hourly or daily runs to monitor the market continuously
6. **Use Discord alerts** — Get instant notifications instead of checking the dataset manually

### 🔗 Integrations

Connect Facebook Marketplace Vehicle Scraper with your favorite tools:

- **Google Sheets** — Automatically export new listings to a spreadsheet
- **Zapier** — Trigger workflows when new vehicles are found
- **Make (Integromat)** — Build complex automation pipelines
- **Slack** — Get notifications in your team channels
- **Webhooks** — Send data to any URL when runs complete
- **API** — Integrate directly with your applications

### 🛠️ Using the API

Access scraped data programmatically using the Apify API:

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run_input = {
    "location": "Toronto, Ontario",
    "makes": "367577657422824",  # Toyota
    "priceMax": 25000,
    "maxResults": 50
}

run = client.actor("your-username/facebook-marketplace-vehicle-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["marketplace_listing_title"], item["listing_price"]["formatted_amount"])
```

**Node.js:**

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('your-username/facebook-marketplace-vehicle-scraper').call({
    location: 'Toronto, Ontario',
    makes: '367577657422824',  // Toyota
    priceMax: 25000,
    maxResults: 50
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => console.log(item.marketplace_listing_title));
```

### ❓ FAQ

#### What vehicle types can I scrape?

The scraper supports all Facebook Marketplace vehicle categories: Cars & Trucks, Motorcycles, Powersports (ATVs, snowmobiles), RVs & Campers, Boats, Commercial & Industrial vehicles, and Trailers.

#### Why do I need residential proxies?

Facebook blocks datacenter IP addresses. The scraper uses Apify's residential proxy network to access Marketplace reliably. This is included automatically — no extra configuration needed.

#### Can I scrape multiple locations?

Currently, the scraper searches one location per run. For multiple locations, you can run the scraper multiple times with different locations, use the Apify Scheduler to automate runs, or orchestrate via the API.

#### Do I need "Fetch Detailed Item Info" for age filtering?

No. Age filtering works out of the box using approximate listing dates. Enabling detailed fetch adds a second, more precise filter pass using the exact creation time, but is not required.

#### How accurate is the listing date without detailed fetch?

The approximate listing date is accurate to within ~1 minute of the actual posting time. This is precise enough for age filtering and Discord timestamps.

#### Can I filter by multiple makes?

Facebook's native filters only allow one make at a time. Use the **Keywords** feature to filter by multiple makes (e.g., "BMW, Mercedes, Audi").

#### Is scraping Facebook Marketplace legal?

Web scraping publicly available data is generally legal. This scraper only extracts publicly visible listing information — no private user data, login credentials, or personal information. Always use scraped data responsibly and in compliance with applicable laws.

### 🔗 Related scrapers

- **[Facebook Marketplace Query Scraper](https://apify.com/your-username/facebook-marketplace-query-scraper)** — Search for any item by keyword (electronics, furniture, etc.)

### 📞 Support and feedback

- **Questions?** Check the [Issues tab](https://apify.com/your-username/facebook-marketplace-vehicle-scraper/issues) for known issues and solutions
- **Found a bug?** Create a new issue with steps to reproduce
- **Feature requests?** We'd love to hear your ideas — open an issue!
- **Need a custom solution?** Contact us for custom scraping projects

***

*Facebook Marketplace Vehicle Scraper is not affiliated with or endorsed by Facebook/Meta. Use responsibly and in accordance with Facebook's Terms of Service.*

# Actor input Schema

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

Enter a city, province/state, address, or postal code (e.g., 'Toronto, Ontario' or 'Vancouver, BC' or 'New York, NY')

## `radius` (type: `string`):

Search radius from the center point

## `maxResults` (type: `integer`):

Maximum number of listings to collect (10-500). The scraper will automatically calculate the required pages.

## `maxListingAge` (type: `string`):

Only include listings posted within this time period. Sellers can bump old listings to the top by boosting or editing them — this filter uses the actual posting date to ensure you only see genuinely recent listings. Works with or without Fetch Detailed Item Info enabled.

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

How to sort the search results

## `priceMin` (type: `integer`):

Minimum price filter (use 0 for no minimum)

## `priceMax` (type: `integer`):

Maximum price filter

## `vehicleType` (type: `string`):

Filter by vehicle type

## `makes` (type: `string`):

Select a specific vehicle manufacturer or leave as 'All Makes' for no filter

## `carType` (type: `array`):

Filter by vehicle body style (leave empty for all styles)

## `transmissionType` (type: `string`):

Filter by transmission type

## `minYear` (type: `integer`):

Minimum vehicle year (use 0 for no minimum)

## `maxYear` (type: `integer`):

Maximum vehicle year (use 0 for no maximum)

## `minMileage` (type: `integer`):

Minimum vehicle mileage (use 0 for no minimum)

## `maxMileage` (type: `integer`):

Maximum vehicle mileage (use 0 for no maximum)

## `exteriorColors` (type: `array`):

Filter by exterior color (leave empty for all colors)

## `interiorColors` (type: `array`):

Filter by interior color (leave empty for all colors)

## `keywords` (type: `array`):

Filter listings that include one or more of these keywords in the title, description, or attributes. Perfect for filtering by multiple makes (BMW, Mercedes), specific models (i3, Accord), trims (GT, AMG), or features (leather, sunroof). Case-insensitive with inclusive OR logic.

## `fetchDetailedItems` (type: `boolean`):

Get complete information for each listing including: full description, seller information, all photos, exact posting time, and condition details. Slower but provides much richer data. Uses additional proxy requests per listing.

## `fetchListingMedia` (type: `boolean`):

Fetch the complete photo gallery and any pre-recorded videos for each listing via Facebook's media viewer endpoint. Populates an `extraListingMedia` field with `listing_photos` (all image URIs with dimensions & alt-text) and `listing_videos` (playable URLs + thumbnails).

Independent of 🔍 Fetch Detailed Item Info — enable either, both, or neither. Adds one extra proxy request per listing.

## `enableDeduplication` (type: `boolean`):

Avoid re-processing items that were collected in previous runs

## `discordWebhookUrl` (type: `string`):

Webhook URL for sending notifications to Discord (leave empty to disable)

## `discordNotifyOnlyNew` (type: `boolean`):

Send notifications only for items not seen in previous runs

## `discordImageDisplay` (type: `string`):

How to display images in Discord notifications

## `proxy` (type: `object`):

Proxy settings for accessing Facebook Marketplace. Residential proxies are required — Facebook blocks datacenter IPs. The default configuration works out of the box with Apify's proxy network.

## Actor input object example

```json
{
  "location": "Toronto, Ontario",
  "radius": "65000",
  "maxResults": 20,
  "maxListingAge": "",
  "sortBy": "",
  "priceMin": 0,
  "priceMax": 214748364700,
  "vehicleType": "",
  "makes": "",
  "transmissionType": "",
  "minYear": 0,
  "maxYear": 0,
  "minMileage": 0,
  "maxMileage": 0,
  "keywords": [],
  "fetchDetailedItems": false,
  "fetchListingMedia": false,
  "enableDeduplication": true,
  "discordWebhookUrl": "",
  "discordNotifyOnlyNew": true,
  "discordImageDisplay": "thumbnail",
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CA"
  }
}
```

# Actor output Schema

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

Quick overview of all scraped vehicle listings with photos, prices, and locations

## `vehicleDetails` (type: `string`):

Vehicle-specific information including make, model, mileage, and condition (requires fetchIndividualItems=true)

## `fullDetails` (type: `string`):

Complete listing data with descriptions and seller information (requires fetchIndividualItems=true)

## `allListings` (type: `string`):

All scraped listings in raw JSON format

# 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 = {
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "CA"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("raidr-api/facebook-marketplace-vehicle-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 = { "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "CA",
    } }

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

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

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

```

## CLI example

```bash
echo '{
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CA"
  }
}' |
apify call raidr-api/facebook-marketplace-vehicle-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=raidr-api/facebook-marketplace-vehicle-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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