Facebook Marketplace Scraper avatar

Facebook Marketplace Scraper

Pricing

from $0.45 / 1,000 results

Go to Apify Store
Facebook Marketplace Scraper

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

Coder

Maintained by Community

Actor stats

7

Bookmarked

202

Total users

55

Monthly active users

9 days ago

Last modified

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:

SectionWhat it contains
IdentityListing ID, title, and direct link to the listing page
priceFormatted price, numeric amount, and currency when available
locationCity, state or province, and full location label when available
MediaImage URLs from the listing (more images when detailed mode is enabled)
StatusSold and pending flags when shown on the listing
categoryMarketplace category identifier when available
sourceUrlThe 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

  1. Open the Actor in the Apify Console.
  2. 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.
  3. Optionally set global filters (sort, price, condition, date listed, availability) and vehicle filters (year, mileage, body style, transmission).
  4. 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).
  5. 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

TypeList of URLs
FormatFacebook Marketplace search, category, or vehicle browse pages (facebook.com/marketplace/...)
TipCopy 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

TypeList of URLs
FormatIndividual listing pages (facebook.com/marketplace/item/<id>)
TipUse 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

TypeList of search rows
Required fieldsSearch query, Location slug
Location slugThe 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

TypeList of search rows
Required fieldsLocation slug
MakeVehicle 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

FieldDescription
Minimum yearEarliest model year to include
Maximum yearLatest model year to include
Body styleSedan, SUV, station wagon, truck, and other body types
Minimum mileageMinimum odometer reading
Maximum mileageMaximum odometer reading
TransmissionAll, automatic, or manual

Applies to vehicle searches only.

Global filters

FieldDescription
SortSuggested, price, date listed, distance, or vehicle-specific sort options
Exact matchStricter keyword matching when enabled
Minimum priceMinimum price in the local Marketplace currency
Maximum priceMaximum price in the local Marketplace currency
ConditionNew, used – like new, used – good, used – fair
Date listedAll, last 24 hours, last 7 days, or last 30 days
AvailabilityAvailable or sold listings

Applies to keyword searches and vehicle searches only. Not applied to direct search URLs or direct item URLs.

TypeInteger
Range11000
Default10

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

TypeBoolean
Defaultfalse
EffectVisits 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

TypeBoolean
Defaultfalse
EffectEach 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 sourceUrl on 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

ModeWhenWhat you get
Summary (default)fetchDetails: false on search resultsCore fields: id, url, title, price, location, images, status flags, category, sourceUrl
DetailedfetchDetails: true on search results, or any direct item URLFull listing data — all fields Facebook exposes on the detail page

Output fields

Summary mode (default)

FieldDescription
idUnique Marketplace listing identifier
urlDirect link to the listing page
titleListing title
priceObject with formatted, amount, and currency when available
locationObject with city, state, and full when available
imagesArray of image URLs
is_soldWhether the listing is marked sold
is_pendingWhether the listing is marked pending
categoryMarketplace category identifier when available
sourceUrlThe search URL or item URL that produced this listing

Additional fields in detailed mode

FieldDescription
descriptionFull listing description text
sellerSeller name and profile link when available
conditionItem condition (for example USED)
creation_timeWhen the listing was posted (timestamp and formatted)
is_liveWhether the listing is currently live
videosVideo URLs when available
delivery_optionsDelivery or pickup options when listed
accessibility_captionsImage accessibility captions when available
latitude / longitudeCoordinates 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 sourceUrl on 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:

LimitValue
Search URLs per run3 (only the first URLs in your list)
Maximum listings per search20
Direct item URLs per run20

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

  1. Copy URLs from the site — Use real Marketplace search URLs after setting keywords, location, and filters in the browser.
  2. Use keyword searches for quick setup — Enter query and location slug without building URLs manually.
  3. Use vehicle searches for cars and trucks — Pick a make and location, then apply year, mileage, and body-style filters.
  4. Start with a small maxListings — Test your search with 10–20 listings before large exports.
  5. Enable deduplication for overlapping searches — Turn on Deduplicate listings across searches when multiple searches may return the same items.
  6. Use direct item URLs for known listings — Paste /marketplace/item/... links when you need full detail for specific listings.
  7. Filter in the dataset — Export to JSON, CSV, or Excel, then filter on title, price.formatted, location.full, or sourceUrl.
  8. 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.