Facebook Marketplace Scraper - Keyword Search
Pricing
from $3.31 / 1,000 listing scrapeds
Facebook Marketplace Scraper - Keyword Search
Search Facebook Marketplace by keyword and city without login: price, condition, city and state, market area, listing age, sold and pending status, delivery types, strikethrough price and photo. Filter by price, condition and age, with monitor mode for new listings.
Pricing
from $3.31 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
16 days ago
Last modified
Categories
Share
Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc. or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. "Facebook Marketplace" is referenced only to describe the publicly available website this Actor collects data from.
Search Facebook Marketplace by keyword and city without a login and get a listing record that actually has the fields you need: price, condition, city and state, listing age, sold/pending status, delivery types, strikethrough price and the photo.
Why this one
The popular Marketplace scraper advertises 9 output fields. Look closely and it is four fields duplicated in snake_case and camelCase:
primary_listing_photo + primaryListingPhotomarketplace_listing_title + listingTitlelistingUrl + itemUrllisting_price.formatted_amount + listingPrice.formatted_amount
No condition. No location. No listing age. No sold status. And its input requires startUrls - there is no keyword search at all.
| This actor | Typical incumbent | |
|---|---|---|
| Keyword + city search | ✅ | ❌ start URLs only |
| Category browse | ✅ | partial |
| Price (numeric and formatted) | ✅ | formatted only |
| Condition (new / used / used like new) | ✅ on category lane | ❌ |
| City + state + market area | ✅ | ❌ |
| Listing age in days | ✅ | ❌ |
| Sold / pending status | ✅ | ❌ |
| Strikethrough (reduced) price | ✅ | ❌ |
| Delivery types | ✅ | ❌ |
| Price / condition / age filters | ✅ | ❌ |
| Monitor mode for new listings | ✅ | ❌ |
What you get per listing
listingUrl · listingId · title · customTitle · priceAmount · priceFormatted · priceMinorUnits · strikethroughPrice · minPrice · maxPrice · condition · conditionRaw · city · state · marketArea · marketAreaId · photoUrl · hasVideo · categoryId · listedAt · listedTimestamp · listingAgeDays · isSold · isPending · isLive · deliveryTypes[] · listingTags[] · sellerAvailable · query · queryType · searchCity · scrapedAt
Input
{"searchQueries": ["bicycle", "iphone"],"cities": ["nyc", "la"],"minPrice": 50,"maxPrice": 500,"maxListingAgeDays": 14,"excludeSold": true,"maxResults": 100,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
| Field | What it does |
|---|---|
searchQueries | Keywords - searched in every city you list |
cities | Marketplace locality slugs: nyc, la, chicago, houston, seattle… |
categories | Browse a category instead (bikes, furniture, electronics) - this lane also returns condition |
startUrls | Any marketplace search/category URL, used as-is |
condition | Keep only matching conditions (new, used, used like new) |
minPrice / maxPrice | Price window |
maxListingAgeDays | Freshness window |
excludeSold | Drop sold/pending (on by default) |
onlyNewListings | Monitor mode - a clean deal-alert feed |
Honest limits - read before you buy
conditioncomes from the category lane, not the search lane. Measured on 2026-07-30:conditionis populated on 14/14 listings from a category browse and 0/14 from a keyword search - Facebook simply omits the field from its search payload. If condition matters to you, passcategories(e.g.["bikes"]) instead of, or as well as,searchQueries. Everything else (price, city, state, listing age, status, photo) is present on both lanes.- No seller identity, by design and by availability.
marketplace_listing_sellerexists in the payload but is null for logged-out callers, and item detail pages are login-walled. Rather than hide that, every row carriessellerAvailable: false. This is also the safest outcome for personal data - the actor returns marketplace inventory, not people. - No description field. The full item description lives on the login-walled detail page. The actor returns the listing title (and
customTitlewhere Facebook sets one) rather than pretending to have a description. - ~14-24 listings per search page. Volume comes from breadth - more keywords and more cities - not deep pagination. A 6-keyword x 4-city run returned 222 listings.
- Some searches return a shell. Facebook occasionally serves a logged-out shell; the actor retries on fresh IPs up to 4 times, then ends successfully with a clear status and $0 billed for that query.
Pricing (pay per event, no start fee)
| Event | Price | What it covers |
|---|---|---|
listing | $0.006 | One listing with price, condition (category lane), city/state, market area, listing age, status, delivery types and photo |
Listings are billed before they are written, and listings removed by your filters are never billed.
Use with AI assistants (MCP)
Works as an LLM tool via the Apify MCP server - ask an assistant for "used bikes under $300 in Chicago listed this week" and it can call this actor directly.
Agent-ready: autonomous payments (x402 & Skyfire)
This actor is agent-ready — AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:
- x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
- Skyfire — agent-to-service payments for fully autonomous AI-agent workflows.
Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.
Integrations
Make, Zapier, Slack, Google Drive, Airbyte, GitHub, the Apify API, Schedules and Webhooks.
Monitor mode
onlyNewListings: true remembers what it has already returned for that query set and emits only new listings - pair it with Apify Schedules for a deal-alert feed that never repeats itself.
Automate & schedule
Run this Actor on autopilot and pull results into your own stack:
- Apify API - start runs, fetch datasets and manage schedules over REST.
- apify-client for JavaScript and apify-client for Python - official SDKs.
- Schedules - run it hourly, daily or weekly and keep your dataset current.
- Webhooks - trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/facebook-marketplace-scraper').call({"searchQueries": ["bicycle"],"cities": ["nyc"],"maxResults": 14,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} records`);
FAQ
Do I need a login or cookies? No.
Why is condition empty? You searched by keyword. Facebook only ships condition on the category lane - see the limits section, with the measured numbers.
Can I get the seller's name? No - it is null for logged-out callers and the detail page requires a login. Every row says so via sellerAvailable.
How do I find city slugs? They are the segment in a Marketplace URL: facebook.com/marketplace/nyc/... → nyc.
Related scrapers by scrapesage
- Facebook Reels Scraper - exact play counts and reaction breakdown
- Facebook Ad Library Scraper - Meta ad creatives and advertiser intel
- eBay Scraper - resale pricing comparison
- Craigslist Scraper - the other big local-classifieds source
Data & lawful use
This Actor reads public listings and the seller information shown on them. Sellers on Facebook Marketplace include private individuals, so seller names, usernames and any contact details are personal data. If you are in the EU or UK you are the data controller for what you do with them: have a lawful basis, use the data for market research, price monitoring or lawful sourcing, honour deletion requests, and do not send private sellers unsolicited marketing.
Under Apify's Standard Actor Contract, which governs your use of this Actor, you are the controller of any personal data in your input and output and scrapesage acts only as your processor: that data is processed solely to run your job, written only to your own Apify storage, never used for any other purpose and never shared onward. If you need help with a data-subject request that involves this Actor's output, open an issue on the Issues tab.
Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc. or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.
"Facebook Marketplace" and any related marks are the property of their respective owners and are used here only in a descriptive, nominative sense - to identify the publicly accessible website from which this Actor collects data. This Actor is not an official Facebook Marketplace product, is not authorised or certified by Meta Platforms, Inc., and does not distribute Facebook Marketplace software. It collects only publicly available information; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the terms of the source website.
Need help?
Open an issue on the Actor's Issues tab, or visit the Apify help center. Feature requests are welcome - this Actor is actively maintained.