# Facebook Marketplace Scraper, Search & Monitor - No Login (`k1ra/facebook-marketplace-scraper`) Actor

Search & monitor Facebook Marketplace in ANY city — not just San Francisco — no login, no cookies, zero account risk. Filters: price, radius, condition, days-listed, sort. Full descriptions, exact dates, all photos. Only never-seen listings on scheduled runs for deal hunting and reselling.

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

## Pricing

$3.00 / 1,000 results

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?

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 Search, Monitor & Deal Scraper — No Login

Search and monitor **Facebook Marketplace in any city in the world** — no login, no cookies, zero account risk. Unlike URL-based scrapers that silently return San Francisco results no matter what link you paste, this actor runs a **real search**: you say *what* and *where*, it returns listings from exactly that location with real filters applied, and it can watch a search for you and alert you the moment something new lists.

***

### Use Cases

#### Facebook Marketplace Search Scraper

Run a real **Facebook Marketplace search** — not a URL wrapper. Pass search terms, a city or coordinates, a radius, and price/condition/date filters. The actor returns matching listings from *your* location, correctly, every time.

#### Facebook Marketplace Monitor & Deal Alerts

Turn any search into a **Facebook Marketplace monitor**: turn on *Only new listings* and schedule the actor hourly or daily. Every run outputs only listings that have never appeared before — pipe them to Slack, Discord, email, or a spreadsheet for instant **deal alerts**.

#### Reseller & Flipper Deal Finder

Built for resellers and flippers who need to see new listings **before anyone else**. Sort by newest-first, filter to your price window, and monitor multiple searches at once to catch underpriced items the moment they post.

#### Market Research & Price Tracking

Pull structured pricing, condition, and location data across a category or search term for **market research**, competitor pricing checks, and local price benchmarking — without touching a browser or a Facebook account.

#### No-Login Facebook Marketplace API Alternative

A clean **Facebook Marketplace API alternative** — no cookies, no session tokens, no account to get banned. Public listing data only, extracted the same way any logged-out visitor sees it.

***

### Who Uses This

| Use Case | Who It's For |
|---|---|
| Deal monitoring & alerts | Resellers, flippers, deal hunters |
| Local market research & pricing | Analysts, small businesses, real-estate/vehicle researchers |
| Lead & inventory sourcing | Sourcing teams, liquidation buyers |
| Competitor & category tracking | Marketplace sellers, brand researchers |
| Agent & pipeline integration | Developers building bots, alert tools, RAG/agent workflows |

***

### Why This Scraper

- 📍 **Location that actually works** — search any city by name (`"Chicago, IL"`, `"Toronto"`, `"Berlin"`) or coordinates, with a radius you control. No more "only works in San Francisco".
- 🔒 **No login, no cookies, ever** — you never hand over a Facebook account or session. Nothing to get banned.
- 🎯 **Real search filters** — price bounds, days listed, condition, category, and sorting (newest first, price low→high, distance).
- ✂️ **Strict matching** — cuts Facebook's "vaguely relevant" filler so `iphone 13` returns iPhone 13s, not phone cases and AirPods.
- 🔔 **Monitoring mode** — remembers every listing it has seen and outputs **only new listings** on each scheduled run. Perfect for deal hunting: schedule it hourly and get a feed of fresh finds, never repeats.
- 📅 **Exact listing dates** — every listing's real creation time (with *Include full details*), the field other scrapers famously miss.

***

### Output

Each listing includes:

| Field | Example |
|---|---|
| `title` | `"Apple iPhone 13 128GB"` |
| `price` | `{ "amount": 290, "currency": "USD", "formatted": "$290" }` |
| `originalPrice` | `{ "amount": 350, "formatted": "$350" }` — when discounted |
| `location` | `{ "city": "Brooklyn", "state": "NY" }` |
| `url` | direct link to the listing |
| `primaryPhotoUrl` | main photo |
| `isSold` / `isPending` / `isLive` | availability flags |
| `deliveryTypes` | `["IN_PERSON", "DOOR_PICKUP"]` |
| `categoryId`, `hasVideo`, `searchQuery` | extras |

With **Include full details** on, each listing also gets:

| Field | Example |
|---|---|
| `description` | full listing text |
| `createdAt` | `"2026-07-04T17:31:55Z"` — exact listing date |
| `condition` | `"used_like_new"` + full `attributes` list |
| `photos` | all photo URLs |
| `coordinates` | precise `{latitude, longitude}` |
| `locationText`, `status`, `shippingEligible` | more context |

***

### How to Use

**1.** In the **Input** tab, set your search terms and location.

**2.** Click **Start** — results appear in the **Dataset** tab as each listing completes.

```json
{
  "searchQueries": ["iphone 13", "herman miller chair"],
  "location": "New York, NY",
  "radiusKm": 65,
  "minPrice": 50,
  "maxPrice": 500,
  "daysListed": 7,
  "sortBy": "creation_time_descend",
  "maxItems": 100,
  "strictMatching": true,
  "includeDetails": true
}
```

***

### Deal Monitoring in 2 Minutes

1. Set your searches and location, turn on **Only new listings**.
2. Schedule the actor (e.g. every hour) using Apify's built-in **Scheduler**.
3. Every run outputs only listings that never appeared before — pipe them to Slack, Discord, email, or a spreadsheet with any Apify integration.

Use a different **Monitoring ID** per watch-list to keep separate memories (e.g. `iphone-nyc`, `couch-la`).

***

### Proxy Setup

The actor comes with a built-in residential proxy that works out of the box — no configuration needed. Just run it.

***

### Pricing

**Pay per listing scraped — one flat price, no start fee, no add-on for full details or monitoring mode.**

Every other general-purpose Facebook Marketplace scraper on the Store charges a base fee just to start the run, then extra for detailed listings or monitoring checks. This actor charges **one price per listing, period** — turn on full details or monitoring mode at no extra cost. It's also billed lean: the actor runs on a right-sized memory footprint, so the platform compute cost that stacks on top of any actor's price stays as low as possible here.

| Listings scraped | Estimated cost |
|---|---|
| 10 | ~$0.03 |
| 100 | ~$0.30 |
| 1,000 | ~$3.00 |

*You are only charged for listings actually written to the dataset — a run that finds nothing costs $0.*

***

### Schedule & Automate

Use Apify's built-in **Scheduler** to run this actor on a cron schedule — hourly, daily, or weekly — and turn any search into a standing **Facebook Marketplace monitor**. Connect the dataset to Slack, Google Sheets, Zapier, Make, or any webhook via the Apify API.

***

### Integrations & Automation

This **Facebook Marketplace scraper** plugs into the entire Apify integrations ecosystem and any tool that speaks HTTP:

- **Make** ([formerly Integromat](https://docs.apify.com/platform/integrations/make)) — trigger searches and route new listings into any Make scenario.
- **Zapier** ([docs](https://docs.apify.com/platform/integrations/zapier)) — pipe new listings into Zaps for alerting or CRM enrichment.
- **Google Sheets** — auto-export every run's dataset to a Sheet for a live deal-tracking spreadsheet.
- **Slack** ([docs](https://docs.apify.com/platform/integrations/slack)) — get notified the moment a scheduled run finds new listings.
- **Airbyte** ([docs](https://docs.apify.com/platform/integrations/airbyte)) — sync the dataset to your data warehouse (Snowflake, BigQuery, Redshift, Postgres).
- **Apify API** — full programmatic control via the official [`apify-client`](https://docs.apify.com/api/v2) packages for Node.js and Python, or the REST endpoints directly.
- **Webhooks** ([docs](https://docs.apify.com/platform/integrations/webhooks)) — fire any HTTP endpoint when a run finishes or finds new listings.

Build a deal-alert bot, a reseller sourcing pipeline, or a market-research dashboard on top of this actor without writing any scraping code.

***

### Honest Limits

- **Seller phone numbers and emails are not public** on Facebook Marketplace without logging in, so they are not scraped — any scraper promising them is using login sessions at the risk of the account that provided them. Seller identity is included only in the rare cases Facebook exposes it publicly.
- Facebook's search always pads results with loosely related items; `strictMatching` (on by default) filters them client-side. `maxItems` caps each query because the feed itself never truly ends.
- Occasionally a listing page is restricted or removed; those records are marked `detailUnavailable` instead of failing your run.

***

### FAQ

**Do I need a Facebook account?**
No. That's the point — nothing to ban, nothing to leak. A true no-login Facebook Marketplace scraper.

**Which countries and cities work?**
Any Facebook Marketplace region — search by any city name or coordinates. This is the fix for the classic "only works in San Francisco" complaint about URL-based scrapers.

**Can I monitor a search and get alerted to new listings?**
Yes. Turn on *Only new listings* and schedule the actor — every run outputs only listings never seen before, with no extra charge for monitoring mode.

**Does full detail extraction cost extra?**
No. Unlike other Facebook Marketplace scrapers, full descriptions, exact dates, all photos, and condition come at the same flat per-listing price.

**What happens if a search returns nothing?**
You are not billed — you only pay for listings actually written to the dataset.

**Is this legal?**
The actor only accesses publicly available data, the same pages any logged-out visitor sees. You are responsible for how you use the data — respect local laws and Facebook's terms.

**Can I use this with AI agents?**
Yes — the input schema is written to be driven by LLMs, and the structured output drops straight into RAG pipelines and agent workflows.

**Can I run this via API?**
Yes. Use the Apify API or the official SDKs (JavaScript, Python) to trigger runs programmatically and retrieve results.

***

### ⭐ Bookmark this Actor & Leave a Review

If this **Facebook Marketplace scraper** saves you time:

- **⭐ Click the star** at the top of the actor page to bookmark it — it makes the actor easier for you to find later and helps other Apify users discover it.
- **📝 Leave a review** — even one sentence on what you use it for helps prioritize what ships next.

***

### Related Apify Actors

- [Facebook Scrapers](https://apify.com/store?search=facebook%20scraper) — the full Facebook scraping catalog
- [Ecommerce Scrapers](https://apify.com/store?category=ECOMMERCE) — marketplace and product-data scrapers
- [Social Media Scrapers](https://apify.com/store?category=SOCIAL_MEDIA) — the full Apify social-media scraping catalog

***

### Support & Feedback

Found a bug or want a feature?

- **Open an issue** on the actor's Issues tab in the Apify Console.
- **Feature requests** are welcome.

# Actor input Schema

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

What to search for — one search per query (e.g. 'iphone 13', 'herman miller chair', 'honda civic').

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

Where to search: a city name ('Los Angeles, CA', 'Toronto', 'Berlin') or raw coordinates 'lat,lng' (e.g. '34.05,-118.24'). Results come from THIS location — not Facebook's San Francisco default.

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

Search radius around the location in kilometers.

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

Only listings priced at or above this amount (in the marketplace's local currency).

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

Only listings priced at or below this amount.

## `daysListed` (type: `integer`):

Only listings created in the last N days — e.g. 1 for today's new listings. Great for deal monitoring.

## `condition` (type: `array`):

Filter by item condition. Leave empty for all conditions.

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

Result ordering. 'Newest first' is ideal for monitoring.

## `categoryId` (type: `string`):

Optional Facebook Marketplace category ID to restrict results to one category.

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

Hard cap per search query. Facebook's feed never truly ends (it pads with loosely related items), so set this to what you actually need.

## `strictMatching` (type: `boolean`):

Only keep listings whose title contains your query terms — cuts Facebook's 'vaguely relevant' filler results.

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

Fetch each listing's page for full description, exact creation date, all photos, and currency (one extra request per listing — slower).

## `onlyNewListings` (type: `boolean`):

Remember every listing across runs and only output ones never seen before. Schedule this actor and get ONLY fresh listings each run — no repeats.

## `monitoringId` (type: `string`):

Optional name for the monitoring memory. Use different IDs to keep separate watch-lists (e.g. 'iphone-nyc' and 'couch-la').

## Actor input object example

```json
{
  "searchQueries": [
    "iphone 13"
  ],
  "location": "New York, NY",
  "radiusKm": 65,
  "sortBy": "best_match",
  "maxItems": 100,
  "strictMatching": true,
  "includeDetails": false,
  "onlyNewListings": false
}
```

# Actor output Schema

## `id` (type: `string`):

Facebook Marketplace listing id.

## `url` (type: `string`):

Direct link to the listing.

## `title` (type: `string`):

Listing title.

## `price` (type: `string`):

Formatted listing price.

## `originalPrice` (type: `string`):

Formatted pre-discount price, when the listing shows one.

## `city` (type: `string`):

Listing city.

## `state` (type: `string`):

Listing state/region.

## `primaryPhotoUrl` (type: `string`):

Main listing photo URL.

## `categoryId` (type: `string`):

Facebook Marketplace category id.

## `isSold` (type: `string`):

True when Facebook marks the listing sold.

## `isPending` (type: `string`):

True when the listing sale is pending.

## `isLive` (type: `string`):

True when the listing is currently active.

## `hasVideo` (type: `string`):

True when the listing includes a video.

## `searchQuery` (type: `string`):

The search term that returned this listing.

## `description` (type: `string`):

Full listing description. Only when 'Include full details' is enabled.

## `createdAt` (type: `string`):

ISO 8601 listing creation date. Only when details are enabled.

## `condition` (type: `string`):

Item condition (e.g. used\_like\_new). Only when details are enabled.

## `locationText` (type: `string`):

Free-text location as shown on the listing page. Only when details are enabled.

## `status` (type: `string`):

Listing status (e.g. AVAILABLE). Only when details are enabled.

## `shippingEligible` (type: `string`):

True when the listing is shipping-eligible. Only when details are enabled.

# 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"
};

// Run the Actor and wait for it to finish
const run = await client.actor("k1ra/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",
}

# Run the Actor and wait for it to finish
run = client.actor("k1ra/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"
}' |
apify call k1ra/facebook-marketplace-scraper --silent --output-dataset

```

## MCP server setup

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