Facebook Marketplace Scraper
Pricing
from $0.45 / 1,000 results
Facebook Marketplace Scraper
Scrape Facebook Marketplace listings by location, category, and filters. Extract titles, prices, images, descriptions, seller info, and posting time. Ideal for market research, price tracking, and lead generation.
Pricing
from $0.45 / 1,000 results
Rating
5.0
(8)
Developer
Coder
Maintained by CommunityActor stats
7
Bookmarked
202
Total users
55
Monthly active users
9 days ago
Last modified
Categories
Share
Collect structured listing data from Facebook Marketplace using direct search URLs, direct item URLs, keyword searches, vehicle searches, or any combination in one run. Paste the same links you use on the site, or build searches in the input form, and receive clean JSON records in your Apify dataset.
Use it for price monitoring, inventory research, vehicle market analysis, deal alerts, and local resale data pipelines — without copying listings manually from search results.
For Facebook Pages, Groups, or profile posts, use the Facebook Posts Scraper. For post comments and replies, use the Facebook Comments Scraper.
What you get
Each saved row is one Marketplace listing, organized into clear sections:
| Section | What it contains |
|---|---|
| Identity | Listing ID, title, and direct link to the listing page |
price | Formatted price, numeric amount, and currency when available |
location | City, state or province, and full location label when available |
| Media | Image URLs from the listing (more images when detailed mode is enabled) |
| Status | Sold and pending flags when shown on the listing |
category | Marketplace category identifier when available |
sourceUrl | The search URL or item URL that produced this listing |
When Fetch detailed information is enabled (or when you use a direct item URL), each row can also include description, seller details, creation time, condition, delivery options, videos, and other fields Facebook exposes on the listing page.
Results stream to the dataset as listings are collected, so you can preview progress before the run finishes.
Quick start on Apify
- Open the Actor in the Apify Console.
- Choose one or more input modes:
- Marketplace search URLs — paste links copied from Facebook after setting filters in your browser, or
- Direct item URLs — paste links to individual
/marketplace/item/...pages, or - Keyword searches — enter a query and location slug, or
- Vehicle searches — pick a make and location slug.
- Optionally set global filters (sort, price, condition, date listed, availability) and vehicle filters (year, mileage, body style, transmission).
- Set Maximum listings per search (default
10) — this limit applies per search URL or per built search row (each keyword or vehicle row counts as one search). - Click Start and open the Dataset tab when the run finishes.
How to get a search URL: Run a search on Facebook Marketplace (set keywords, location, category, and any filters), then copy the URL from your browser address bar.
Example input (direct search URL):
{"startUrls": [{"url": "https://www.facebook.com/marketplace/montreal/search?query=iphone%2013"}],"maxListings": 25}
Example input (keyword search with filters):
{"keywordSearches": [{"query": "sectional sofa","locationSlug": "montreal"}],"minPrice": 500,"maxPrice": 75000,"conditions": ["used_good", "used_like_new"],"dateListed": "last_30_days","maxListings": 50}
Example input (vehicle search):
{"vehicleSearches": [{"make": "honda","locationSlug": "montreal"}],"vehicleMinYear": 2015,"vehicleMaxYear": 2026,"vehicleMaxMileage": 120000,"vehicleBodyStyles": ["sedan", "suv"],"vehicleTransmission": "automatic","sortBy": "vehicle_year_descend","maxListings": 50}
Input parameters
Provide at least one Marketplace search URL, direct item URL, keyword search, or vehicle search.
Marketplace search URLs
| Type | List of URLs |
| Format | Facebook Marketplace search, category, or vehicle browse pages (facebook.com/marketplace/...) |
| Tip | Copy the URL directly from your browser after configuring filters on the site |
URLs are processed exactly as provided — query, sort, price, and other parameters in the link are not changed. Global filters in the input form do not apply to direct search URLs.
Direct item URLs
| Type | List of URLs |
| Format | Individual listing pages (facebook.com/marketplace/item/<id>) |
| Tip | Use when you already have direct links to specific listings |
Each item URL is scraped as-is — search filters do not apply. The listing detail page is always fetched, so output includes the full field set for that listing.
Keyword searches
| Type | List of search rows |
| Required fields | Search query, Location slug |
| Location slug | The city segment from Facebook URLs (for example montreal, sanfrancisco, or a numeric ID) |
Global filters apply to every keyword search built from this section.
Search radius: Facebook limits each location to about 65 km. To cover a larger area, add multiple rows with the same query and different nearby location slugs.
Vehicle searches
| Type | List of search rows |
| Required fields | Location slug |
| Make | Vehicle manufacturer, or All to include every make for that location |
Global filters and vehicle filters below apply to every vehicle search row.
Supported makes include Honda, Toyota, Ford, BMW, Mercedes-Benz, Tesla, Rivian, Lucid, Polestar, and many more — see the full list in the input form.
Vehicle filters
| Field | Description |
|---|---|
| Minimum year | Earliest model year to include |
| Maximum year | Latest model year to include |
| Body style | Sedan, SUV, station wagon, truck, and other body types |
| Minimum mileage | Minimum odometer reading |
| Maximum mileage | Maximum odometer reading |
| Transmission | All, automatic, or manual |
Applies to vehicle searches only.
Global filters
| Field | Description |
|---|---|
| Sort | Suggested, price, date listed, distance, or vehicle-specific sort options |
| Exact match | Stricter keyword matching when enabled |
| Minimum price | Minimum price in the local Marketplace currency |
| Maximum price | Maximum price in the local Marketplace currency |
| Condition | New, used – like new, used – good, used – fair |
| Date listed | All, last 24 hours, last 7 days, or last 30 days |
| Availability | Available or sold listings |
Applies to keyword searches and vehicle searches only. Not applied to direct search URLs or direct item URLs.
Maximum listings per search
| Type | Integer |
| Range | 1 – 1000 |
| Default | 10 |
Controls how many listings are collected per direct search URL or per built search row (each keyword or vehicle row counts as one search). Does not apply to direct item URLs — each item link produces one listing.
For example, 3 keyword searches with a limit of 50 can yield up to 150 listings (before deduplication).
Fetch detailed information
| Type | Boolean |
| Default | false |
| Effect | Visits each listing page for richer fields (description, seller, creation time, and more) |
Slower than the default summary mode, but more complete output. Direct item URLs always return detailed data regardless of this setting.
Deduplicate listings across searches
| Type | Boolean |
| Default | false |
| Effect | Each listing is saved at most once, even if it appears in multiple search results. The first search that reaches the listing sets its sourceUrl. |
Per-search caps still apply: skipped duplicates do not count toward Maximum listings per search, so overlapping searches can keep paginating until each reaches its cap or runs out of results.
What you will see during a run
The run log describes collection progress in plain language.
Typical messages:
Starting data collection for N search URL(s) (max M listings per URL)...Scraped X/Y listings so far.Run finished. Scraped X/Y listings.
If a search returns no listings or cannot be processed, other searches in the same run can still succeed.
On the Apify free plan, you may also see a short notice when free-tier limits apply (see Free plan limits).
Output overview
Dataset structure
- Results are saved to a single Apify dataset
- Each row is one listing object with nested sections (
price,location, etc.) - Use
sourceUrlon each row to see which search or item URL produced it
Field presence varies by listing and category: not every listing includes a price, full description, or seller details. Empty arrays ([]) or null mean no data was published for that listing — not necessarily an error.
Output modes
| Mode | When | What you get |
|---|---|---|
| Summary (default) | fetchDetails: false on search results | Core fields: id, url, title, price, location, images, status flags, category, sourceUrl |
| Detailed | fetchDetails: true on search results, or any direct item URL | Full listing data — all fields Facebook exposes on the detail page |
Output fields
Summary mode (default)
| Field | Description |
|---|---|
id | Unique Marketplace listing identifier |
url | Direct link to the listing page |
title | Listing title |
price | Object with formatted, amount, and currency when available |
location | Object with city, state, and full when available |
images | Array of image URLs |
is_sold | Whether the listing is marked sold |
is_pending | Whether the listing is marked pending |
category | Marketplace category identifier when available |
sourceUrl | The search URL or item URL that produced this listing |
Additional fields in detailed mode
| Field | Description |
|---|---|
description | Full listing description text |
seller | Seller name and profile link when available |
condition | Item condition (for example USED) |
creation_time | When the listing was posted (timestamp and formatted) |
is_live | Whether the listing is currently live |
videos | Video URLs when available |
delivery_options | Delivery or pickup options when listed |
accessibility_captions | Image accessibility captions when available |
latitude / longitude | Coordinates when available (inside location) |
Vehicle and category-specific listings may include additional metadata fields depending on what Facebook publishes for that item.
Example output
The excerpts below come from a real run with keyword searches, vehicle searches, direct search URLs, and a direct item URL. Full output is available in the run dataset.
Example input
{"keywordSearches": [{"query": "sectional sofa","locationSlug": "montreal"}],"vehicleSearches": [{"make": "lucid","locationSlug": "montreal"}],"itemUrls": [{"url": "https://www.facebook.com/marketplace/item/2082392026023664"}],"minPrice": 500,"maxPrice": 75000,"conditions": ["used_good", "used_like_new"],"dateListed": "last_30_days","fetchDetails": false,"maxListings": 50}
Excerpt — keyword search listing (summary mode)
{"id": "1718926402591769","url": "https://www.facebook.com/marketplace/item/1718926402591769/","title": "Reversible Must Grey Sectional Sofa GREAT CONDITION","price": {"amount": "1500.0","currency": null,"formatted": "CA$1,500"},"location": {"city": "Westmount","state": "QC","full": "Westmount, Quebec"},"images": ["https://scontent-lhr6-2.xx.fbcdn.net/v/t39.84726-6/724350627_1214969875027207_4872060484073252579_n.jpg?..."],"is_sold": false,"is_pending": false,"category": "1583634935226685","sourceUrl": "https://www.facebook.com/marketplace/montreal/search/?query=sectional%20sofa&exact=false&minPrice=500&maxPrice=75000&itemCondition=used_good%2Cused_like_new&daysSinceListed=30"}
Excerpt — vehicle search listing (summary mode)
{"id": "1004923282488083","url": "https://www.facebook.com/marketplace/item/1004923282488083/","title": "2027 Artisanal 4x8","price": {"amount": "1400.0","currency": null,"formatted": "CA$1,400"},"location": {"city": "St-Sauveur","state": "QC","full": "Saint-Sauveur-des-monts, Quebec"},"images": ["https://scontent.fsap12-1.fna.fbcdn.net/v/t39.30808-6/718297817_10230478000924332_5433532330628870229_n.jpg?..."],"is_sold": false,"is_pending": false,"category": "807311116002614","sourceUrl": "https://www.facebook.com/marketplace/montreal/vehicles?make=1392638391528793&exact=false&minPrice=500&maxPrice=75000&sortBy=vehicle_year_descend&itemCondition=used_good%2Cused_like_new&daysSinceListed=30&minYear=2015&maxYear=2026&maxMileage=120000&carType=sedan%2Csuv%2Cwagon&transmissionType=automatic"}
Excerpt — direct item URL (always detailed)
{"id": "2082392026023664","url": "https://www.facebook.com/marketplace/item/2082392026023664/","sourceUrl": "https://www.facebook.com/marketplace/item/2082392026023664","title": "2010 Audi Q5","price": {"formatted": "CA$2,400","amount": "2400.0","currency": "CAD"},"description": "Audi q5 2010 moins de 177 000 km\nQuelle trace de rouille ,direction et bearing de roue (4) changer \nc'était mon véhicule d'hiver j'ai 3000$ de pièce neuve que je peux donner avec si tu négocie pas ","location": {"city": "Lévis","state": "QC","full": "Lévis, QC","latitude": 46.760559082031,"longitude": -71.240844726562},"images": ["https://scontent.fasu11-2.fna.fbcdn.net/v/t39.30808-6/735018237_10242986274651025_6251349529862557825_n.jpg?..."],"category": "807311116002614","condition": "USED","creation_time": {"timestamp": 1782779408,"formatted": "2026-06-30 00:30:08","iso": "2026-06-30T00:30:08"},"is_live": true,"is_sold": false,"is_pending": false,"delivery_options": ["IN_PERSON"]}
Combining input modes
You can use multiple input modes in a single run.
{"startUrls": [{"url": "https://www.facebook.com/marketplace/montreal/search?query=iphone%2013"}],"keywordSearches": [{"query": "desk","locationSlug": "sanfrancisco"}],"vehicleSearches": [{"make": "honda","locationSlug": "montreal"}],"itemUrls": [{"url": "https://www.facebook.com/marketplace/item/2082392026023664"}],"minPrice": 500,"maxPrice": 75000,"deduplicateListings": true,"maxListings": 50}
- Each search URL, keyword row, and vehicle row is processed independently, up to Maximum listings per search each
- Direct item URLs each produce one listing regardless of that cap
- Enable Deduplicate listings across searches to save each listing only once across overlapping results
- Use
sourceUrlon each row to see which input produced it - If one search fails or returns no results, others can still complete
Free plan limits
On the Apify free plan, the Actor may automatically apply:
| Limit | Value |
|---|---|
| Search URLs per run | 3 (only the first URLs in your list) |
| Maximum listings per search | 20 |
| Direct item URLs per run | 20 |
Paid Apify plans can use the full input without these caps. If limits apply, the run log will include a short notice.
Data quality and limitations
Public listing data
The Actor reads the same listing data shown on Facebook Marketplace search and item pages. It does not access private seller accounts or unpublished listings.
Coverage varies by listing and category
Prices, descriptions, seller details, and images are not always published. Some fields may be null or empty even when the listing is live on Marketplace.
Direct URLs vs built searches
Global and vehicle filters apply only to keyword searches and vehicle searches. Direct search URLs and direct item URLs are scraped exactly as provided.
Search radius
Each location slug covers roughly 65 km on Marketplace. Use multiple location rows to search a wider area.
Active listings change
Listings are posted, updated, sold, and removed on the live site. Re-run on a schedule to track changes over time.
Free listings
Category pages such as /free/ may return listings with no price (null).
Compliance
You are responsible for using collected data in line with applicable laws and Facebook's terms of service.
Tips for best results
- Copy URLs from the site — Use real Marketplace search URLs after setting keywords, location, and filters in the browser.
- Use keyword searches for quick setup — Enter query and location slug without building URLs manually.
- Use vehicle searches for cars and trucks — Pick a make and location, then apply year, mileage, and body-style filters.
- Start with a small
maxListings— Test your search with 10–20 listings before large exports. - Enable deduplication for overlapping searches — Turn on Deduplicate listings across searches when multiple searches may return the same items.
- Use direct item URLs for known listings — Paste
/marketplace/item/...links when you need full detail for specific listings. - Filter in the dataset — Export to JSON, CSV, or Excel, then filter on
title,price.formatted,location.full, orsourceUrl. - Schedule recurring runs — Use Apify schedules to monitor new listings or track price trends over time.
Frequently asked questions
Why was my search URL skipped?
The URL may not be a valid Facebook Marketplace page, or it could not be processed in that run. Check the run log for warnings.
Why do global filters not affect my direct search URL?
Direct search URLs are scraped exactly as provided. Use Keyword searches or Vehicle searches if you want to control filters from the input form.
Why is price null?
Free listings, items without a listed price, and some categories may not expose a numeric price. The formatted price appears in price.formatted when shown on the site.
Why does a direct item URL return more fields than a search result?
Direct item URLs always fetch the full listing page. Search results use summary mode unless Fetch detailed information is enabled.
Why did a search return zero listings?
The search may have no matching inventory for the selected filters, or Facebook returned no results for that query and location. Try relaxing filters or using a different location slug.
Will the same listing appear twice?
Yes, if you use multiple searches that overlap and deduplication is off. Enable Deduplicate listings across searches or deduplicate on id in your export.
Can I scrape a single listing by URL?
Yes — add the /marketplace/item/<id> link under Direct item URLs.
What is a location slug?
The city segment from Marketplace URLs, such as montreal in facebook.com/marketplace/montreal/search. Facebook also accepts numeric location IDs.
Which makes are supported for vehicle searches?
The input form includes a full dropdown of manufacturers — from Acura and Audi to Tesla, Rivian, Lucid, and Volvo. Choose All to search every make in a location.
Support
For Actor-specific issues, use the Issues tab on the Apify store listing or contact the publisher through Apify.
For platform questions (runs, billing, API, schedules), see Apify documentation and Apify support.


