# Facebook Marketplace Status Check \[$0.30/1k] + Price Tracking (`memo23/facebook-marketplace-status-check`) Actor

Facebook Marketplace Status Check — batch-check listing IDs and get ACTIVE / SOLD / PENDING / REMOVED per listing, plus the price and title it saw so you can spot price cuts between runs. Thousands of IDs per run, one lean request each. Pay only per listing checked.

- **URL**: https://apify.com/memo23/facebook-marketplace-status-check.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Agents, Lead generation, AI
- **Stats:** 11 total users, 11 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.30 / 1,000 listing status checks

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/platform/actors/running/actors-in-store#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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 Status Check — ACTIVE / SOLD / PENDING / REMOVED

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/fb-marketplace-status-check/logo@2x.png" alt="Facebook Marketplace Status Check" width="180"/>
</p>

**Re-check Marketplace listings you already track.** Feed a batch of listing IDs and get each one's current status back — plus the price and title the checker saw, so you can spot a price cut or a title edit between runs.

| Input | Row emitted |
|---|---|
| Listing ID (`1684796895966121`) | `{ status, price, title, … }` |
| Item URL (`/marketplace/item/<id>/`) | same |

> Pure HTTP. One lean GraphQL request per listing — not a 900 KB page load. No login, no browser.

---

### Why use this checker?

- **Cheap re-checks at scale.** Thousands of IDs per run, a small fraction of the cost of re-scraping each listing.
- **Price-change detection for free.** The response already carries price and title, so every check doubles as a snapshot. Diff two runs and you have a price-drop feed.
- **Honest about uncertainty.** A listing we couldn't reach comes back `UNDETERMINED` — never mislabeled `REMOVED`. A transient rate-limit will never tell you a live listing was deleted.
- **Self-healing tokens.** Facebook's request tokens and query ID are harvested from a live page at startup and re-harvested if they go stale — nothing hardcoded to rot.

### Overview

This is a **status checker, not a full scraper.** It answers "what happened to these listings?" for IDs you already have. For discovery and full listing detail (seller, all photos, vehicle specs, real-estate fields) use the [Facebook Marketplace Scraper](https://apify.com/memo23/facebook-marketplace-scraper-ppe).

### Supported inputs

| Accepted | Example |
|---|---|
| Bare listing ID | `1684796895966121` |
| Item URL | `https://www.facebook.com/marketplace/item/1684796895966121/` |

Supply them via **`listingIds`** or **`startUrls`**. Duplicates are removed automatically.

### Use cases

| Audience | What they use it for |
|---|---|
| Marketplace aggregators | Nightly pass to retire SOLD/REMOVED listings from a live index |
| Dealers & resellers | Watch competitor inventory — what sold, what got marked down |
| Price intelligence | Diff `price` between runs to build a price-history / price-drop feed |
| Lead-gen | SOLD is a completed-transaction signal; PENDING is a deal in progress |

### How it works

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/fb-marketplace-status-check/how-it-works@2x.png" alt="How it works" width="820"/>
</p>

1. **Bootstrap once.** One item page is loaded to harvest Facebook's `lsd` token and the *current* `MarketplacePDPContainerQuery` document ID (read from the page's own preloader — never hardcoded, so it survives Facebook's query rotations).
2. **Check each ID.** A single GraphQL POST per listing (~89 KB compressed; ~0.1 KB when the listing is gone) reads the listing's `is_live` / `is_sold` / `is_pending` flags plus its price, title, location and condition.
3. **Classify + snapshot.** Flags map to a clean status; the snapshot fields ride along at no extra cost.

Rate limits rotate the proxy session and re-bootstrap tokens automatically.

### Input configuration

| Field | Type | Required | Notes |
|---|---|---|---|
| `listingIds` | array | one of the two | Listing IDs or item URLs, one per line. |
| `startUrls` | array | one of the two | Item URLs (URL list editor). |
| `maxConcurrency` | integer | no | Listings checked in parallel, 1–20 (default 10). |
| `maxRetries` | integer | no | Retries per listing before `UNDETERMINED` (default 4). |
| `proxy` | object | no | Proxy for non-paying runs. Paying runs use a built-in residential proxy. |

#### Example input

```json
{
  "listingIds": [
    "1684796895966121",
    "1343074341247657",
    "1111111111111111"
  ],
  "maxConcurrency": 10
}
````

### Output overview

One dataset row per unique listing checked. `status` is the verdict; the remaining fields are the snapshot of the listing at check time.

### Output samples

Live listing:

```jsonc
{
  "id": "1684796895966121",
  "url": "https://www.facebook.com/marketplace/item/1684796895966121/",
  "status": "ACTIVE",
  "isLive": true,
  "isSold": false,
  "isPending": false,
  "title": "2021 Quality trailers  Car trailer",
  "price": 4500,
  "priceFormatted": "$4,500",
  "currency": "USD",
  "locationText": "Peekskill, NY",
  "condition": "USED",
  "createdAt": "2026-07-21T14:24:09.000Z",
  "checkedAt": "2026-07-23T09:03:11.000Z"
}
```

Listing that no longer resolves:

```jsonc
{
  "id": "1111111111111111",
  "url": "https://www.facebook.com/marketplace/item/1111111111111111/",
  "status": "REMOVED",
  "isLive": false,
  "isSold": null,
  "isPending": null,
  "title": null,
  "price": null,
  "priceFormatted": null,
  "currency": null,
  "locationText": null,
  "condition": null,
  "createdAt": null,
  "checkedAt": "2026-07-23T09:03:12.000Z"
}
```

### Key output fields

| Field | Meaning |
|---|---|
| `status` | `ACTIVE` · `SOLD` · `PENDING` · `INACTIVE` (delisted but not sold) · `REMOVED` (no longer resolves) · `UNDETERMINED` (couldn't check — re-queue) |
| `price` | Numeric amount at check time — diff across runs to detect price changes |
| `priceFormatted` | Display price (e.g. `$4,500`) when Facebook supplies it |
| `currency` | ISO currency of `price` |
| `title` | Listing title at check time (detects title edits) |
| `locationText` | e.g. `Peekskill, NY` |
| `condition` | e.g. `USED`, `NEW` |
| `createdAt` | When the listing was originally posted |
| `checkedAt` | When this check ran |

### FAQ

**Is `UNDETERMINED` the same as removed?** No — and that distinction is deliberate. `UNDETERMINED` means the check itself failed (rate-limit/block) after retries. Treat it as "unknown, re-check", never as a deletion.

**What's the difference between `INACTIVE` and `REMOVED`?** `INACTIVE` means the listing still resolves but is no longer live (delisted/expired). `REMOVED` means it doesn't resolve at all.

**Can I detect price drops with this?** Yes — that's what `price` is for. Store each run's `price` per ID and compare; a lower value on a later run is a price cut.

**Does it return the seller?** No. Facebook does not expose seller identity to logged-out requests, so no checker can return it reliably. Use the full scraper if you need listing detail.

**How many IDs per run?** As many as your run charge limit allows — the actor caps itself so it never checks more than you're willing to pay for.

**Will it break when Facebook rotates its GraphQL query?** No. The document ID is read live from Facebook's own page at startup, and re-harvested when tokens go stale.

### Support

Issues and feature requests: the actor's **Issues** tab, or via the Apify Store profile.

### Additional services

Need scheduled monitoring, a price-history pipeline, or a variant tailored to your dataset? Reach out via the Store profile.

### Explore more scrapers

- [Facebook Marketplace Scraper](https://apify.com/memo23/facebook-marketplace-scraper-ppe) — full listings, vehicle & real-estate detail
- [Facebook Group Post Checker](https://apify.com/memo23/facebook-group-post-checker) — exists / deleted for group posts
- [Facebook Public Group Posts Scraper](https://apify.com/memo23/facebook-public-group-posts-scraper) — full group post content

### ⚠️ Disclaimer

This Actor accesses publicly available data on Facebook Marketplace for legitimate research, market-intelligence, and business-analysis purposes. Use of this Actor must comply with Facebook's Terms of Service and all applicable laws, including data-protection regulations (GDPR, CCPA, etc.). The Actor's authors are not responsible for any misuse. Users must:

- Respect rate limits and avoid overloading Facebook's infrastructure
- Not use the results to violate user privacy or platform terms
- Use the data in compliance with applicable jurisdictions
- Not republish scraped content in violation of copyright

This Actor is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc. "Facebook" and "Facebook Marketplace" are trademarks of Meta Platforms, Inc. We do not store any checked data; the Actor returns it directly to your Apify dataset for your authorized use.

### SEO Keywords

facebook marketplace status check, marketplace listing sold checker, facebook listing status api, check if marketplace listing sold, marketplace price change detection, facebook marketplace monitoring, bulk listing status check, marketplace listing removed checker, price drop tracker, facebook marketplace scraper, listing id lookup, marketplace inventory monitoring, apify facebook actor, no-code marketplace checker, facebook marketplace price history, sold listing detection, batch status check, marketplace data extraction, competitor inventory tracking, facebook public data

# Actor input Schema

## `listingIds` (type: `array`):

Facebook Marketplace listing IDs to check (the numeric id from /marketplace/item/<id>/). Paste one per line.

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

Alternatively, full Marketplace item URLs (https://www.facebook.com/marketplace/item/<id>/). The ID is extracted from each URL.

## `maxConcurrency` (type: `integer`):

How many listings to check in parallel (1-20).

## `maxRetries` (type: `integer`):

How many times to retry a listing on rate-limit / transient error before giving up.

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

Proxy used for non-paying runs. Paying runs use the built-in residential proxy automatically.

## Actor input object example

```json
{
  "listingIds": [
    "1449923117154655",
    "2883695402023146"
  ],
  "startUrls": [],
  "maxConcurrency": 10,
  "maxRetries": 4,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "listingIds": [],
    "startUrls": [],
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/facebook-marketplace-status-check").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 = {
    "listingIds": [],
    "startUrls": [],
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/facebook-marketplace-status-check").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 '{
  "listingIds": [],
  "startUrls": [],
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call memo23/facebook-marketplace-status-check --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Facebook Marketplace Status Check [$0.30/1k] + Price Tracking",
        "description": "Facebook Marketplace Status Check — batch-check listing IDs and get ACTIVE / SOLD / PENDING / REMOVED per listing, plus the price and title it saw so you can spot price cuts between runs. Thousands of IDs per run, one lean request each. Pay only per listing checked.",
        "version": "0.0",
        "x-build-id": "XJ5yJIKtuwQlOLcnp"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~facebook-marketplace-status-check/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-facebook-marketplace-status-check",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~facebook-marketplace-status-check/runs": {
            "post": {
                "operationId": "runs-sync-memo23-facebook-marketplace-status-check",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~facebook-marketplace-status-check/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-facebook-marketplace-status-check",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "listingIds": {
                        "title": "Listing IDs",
                        "type": "array",
                        "description": "Facebook Marketplace listing IDs to check (the numeric id from /marketplace/item/<id>/). Paste one per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Listing URLs",
                        "type": "array",
                        "description": "Alternatively, full Marketplace item URLs (https://www.facebook.com/marketplace/item/<id>/). The ID is extracted from each URL.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "How many listings to check in parallel (1-20).",
                        "default": 10
                    },
                    "maxRetries": {
                        "title": "Max retries per listing",
                        "minimum": 0,
                        "maximum": 8,
                        "type": "integer",
                        "description": "How many times to retry a listing on rate-limit / transient error before giving up.",
                        "default": 4
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy used for non-paying runs. Paying runs use the built-in residential proxy automatically.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
