Marketplaces · Live on Apify

Facebook Marketplace Scraper: Prices and Price Drops

Get public Facebook Marketplace listings by city and search words. Each row has the price, photos, location and delivery options. Repeat runs can show only new listings or price drops.

About $0.89 for 1,000 results$0.00089 per result + $0 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

listingId1347713167500771
urlhttps://www.facebook.com/marketplace/item/1347713167500771/
title2012 Honda Click 125

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: pattaya in City. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Facebook Marketplace Scraper collects public Facebook Marketplace listings by city and search words, without a Facebook login, and returns one row per listing with the price, photos, location, delivery options and a market price comparison.

Good for

  • Watch a city for new listings of a product and get only the new ones on every scheduled run.
  • Track price drops on used cars, motorbikes, phones or furniture you are following.
  • Compare asking prices in one or several cities: every search gets a median price, and every listing shows how far below that median it is.

Who uses it

Local resellers

Find new listings of a product in your city.

Used car and phone buyers

Follow price drops on items you want.

Market analysts

Compare asking prices in one or more cities.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Listing$0.00089 (from $0.000623 on paid Apify plans)One Marketplace listing saved to the Dataset from search results (title, price, location, photo, post date).
Listing with details$0.008 (from $0.0056 on paid Apify plans)One listing saved with its own page read: description, condition, all photos (only when Listing details is on). Charged instead of Listing, not on top.
Search$0.008 (from $0.0056 on paid Apify plans)One search (city and keyword, or start URL) that got an answer from Facebook, even when it finds nothing.
Unchanged listing checked$0.0004 (from $0.00028 on paid Apify plans)One known listing re-checked by price tracking and found unchanged, so no row was saved (only when Track price changes is on).
Listing page checked$0.008 (from $0.0056 on paid Apify plans)One listing page opened that gave no paid row: outside the radius, or a removal check. Removed rows themselves are free.

Examples

  • One result: about $0.0009.
  • 1,000 results: about $0.89.
  • Every day 100 results, for 30 days: about $2.67 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 5,600 results.

Prices checked on 8 November 2026. See the current price on Apify.

Questions

Do I need a Facebook account or cookies?

No. The Actor reads Marketplace as a visitor who is not logged in.

Can I get seller names or phone numbers?

No. Seller data is never saved.

Does it return all listings in a city?

No. It returns what Facebook shows a visitor for your search. Use several search words to cover more.

How do I get only new listings every day?

Turn on onlyNew, give the monitor a monitorName and run it on an Apify schedule. Listings you already have are skipped free.

Which countries work?

Any city where Facebook Marketplace works. Prices come in the local currency, with priceUsd when Facebook shows it.

Details

Step by step on Apify
  1. Open the Input tab. City is prefilled with pattaya (box 1). Any city name works, for example london or los angeles.
  2. Keep Search words = motorbike or type your own (box 2).
  3. Keep Max listings = 10 from the form (box 3). If you leave it empty, the Actor saves up to 50 listings per search.
  4. Click Start.
  5. Open the Output tab. Switch views with the tabs (box 1), check Title, Price and Currency (box 2) and Below median % (box 3).
Use cases
TaskInputYou getKey fieldsNext step
Export listings for a city and productcity, query, maxItemsListingtitle, price, currency, url, postedAtCSV or Excel export
Get only new listings on a scheduleonlyNew + Apify scheduleNew listinglistingId, title, price, firstSeenAtSlack or Notion via deliveryConnector
Track price drops and removed listingstrackChanges, monitorNameChanged listingchangeType, previousPrice, priceDropPercentWebhook or Slack
Find underpriced itemsquery, priceMin, priceMaxListing with market comparisonmarketMedianPrice, belowMarketPercentSpreadsheet
Compare markets across citiescities, queriesMarket summary per searchMARKET_SUMMARY: median, p25, p75, countAPI
Read full listing pagesincludeDetails or startUrls with item linksDetailed listingdescription, condition, distanceKm, vehicleDatabase
Tips for better results
  • Turn on onlyNew and set a monitorName. Run it on a schedule to get only new listings.
  • The default timeout is 5 minutes. Raise it for thousands of listings.
  • Photo links expire after some days. Download the photos you want to keep.
Limits and good to know
  • Public listings only. The Actor never logs in, so anything Facebook shows only to signed-in users is not available, and no seller name, profile or contact is saved
  • Up to 50 searches per run (cities × search words), up to 5000 listings per search, up to 500 item links per run
  • The default run timeout is 5 minutes, enough for a few hundred listings. For thousands, raise the timeout in the run options; one run works for 30 minutes at most. When time runs out, saved rows are kept and the search is marked PARTIAL with TIME_LIMIT
  • Facebook decides which listings appear and in what order. A search can show fewer listings than the city has, and rows are not strictly sorted even with sortBy
  • priceUsd appears only when Facebook shows a dollar price. Photo links are Facebook links that expire after some days; download photos you want to keep
  • Monitor memory keeps up to 5000 listings per search, in a store named facebook-marketplace-state in your own Apify account
  • Description, condition, exact distance and vehicle details need includeDetails (or radiusKm), which costs more per listing

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "listingId": "1347713167500771",
  "url": "https://www.facebook.com/marketplace/item/1347713167500771/",
  "title": "2012 Honda Click 125",
  "price": 18900,
  "currency": "THB",
  "priceText": "฿18,900",
  "priceUsd": 556.2,
  "originalPrice": null,
  "city": "Pattaya",
  "country": "TH",
  "category": "vehicles",
  "condition": null,
  "deliveryTypes": ["IN_PERSON"],
  "postedAt": "2026-06-28T11:02:15.000Z",
  "status": "active",
  "subtitle": "20K km",
  "primaryImage": "https://scontent…fbcdn.net/…jpg",
  "description": null,
  "changeType": null,
  "marketMedianPrice": 26900,
  "belowMarketPercent": 29.7,
  "isRepost": null,
  "searchQuery": "motorbike",
  "searchLocation": "Pattaya",
  "detailsStatus": "not_requested"
}

Use it from code

Actor ID: cliqtomedia/facebook-marketplace. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/facebook-marketplace").call(run_input={
    "city": "pattaya",
    "query": "motorbike"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~facebook-marketplace/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"city": "pattaya", "query": "motorbike"}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/facebook-marketplace")
result = tool.invoke({"run_input": {"city": "pattaya", "query": "motorbike"}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (40)
FieldTypeMeaning
listingIdstringMarketplace listing id.
urlstringPublic listing page.
titlestringListing title.
pricenumberAsking price in the local currency; null when no price. 0 means free.
currencystringISO currency of the price (THB, USD, EUR…).
priceTextstringPrice as Marketplace shows it.
priceUsdnumberPrice in US dollars as Marketplace converts it, when given.
originalPricenumberEarlier price shown crossed out by Marketplace, when the seller lowered it.
locationstringCity and region of the listing.
citystringCity of the listing.
statestringRegion or state.
countrystringCountry code.
locationIdstringMarketplace location id of the listing city.
latitudenumberApproximate latitude (with details).
longitudenumberApproximate longitude (with details).
distanceKmnumberDistance from the searched city centre, km (with details).
categorystringMarketplace category slug.
categoryIdstringMarketplace category id.
conditionstringItem condition (with details), e.g. used_good.
deliveryTypesarrayDelivery methods offered.
shippingOfferedbooleanSeller offers shipping (with details).
postedAtstringWhen the listing was posted (ISO time).
statusstringactive, pending, sold, or removed (monitoring).
subtitlestringExtra line under the title, e.g. mileage of a vehicle.
primaryImagestringMain photo.
imagesarrayPhoto links; all photos with details.
hasVideobooleanListing has a video.
descriptionstringFull description (with details).
vehicleobjectVehicle data (with details): make, model, trim, mileage, transmission, fuel, colours, owners, private seller or dealer.
changeTypestringMonitoring: new, priceDown, priceUp, stillActive or removed.
firstSeenAtstringMonitoring: when this search first saw the listing.
previousPricenumberMonitoring: price on the previous run.
priceDropPercentnumberMonitoring: price drop since the previous run, %.
marketMedianPricenumberMedian price of this search.
belowMarketPercentnumberHow far below the search median the price is, % (negative = above). Needs 5+ priced listings.
isRepostbooleanSame title, price and city as a listing seen before under another id. Null outside monitor mode.
searchQuerystringSearch words that found the listing.
searchLocationstringSearched city.
searchCategorystringSearched category.
detailsStatusstringok, not_requested, gone (listing page removed) or failed.
Input settings (25)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Citycitystring"pattaya"
Search wordsquerystring"motorbike"
Categorycategorystring
Minimum pricepriceMininteger
Maximum pricepriceMaxinteger
Max listingsmaxItemsinteger10
Only new listingsonlyNewbooleanfalse
Track price drops and removalstrackChangesbooleanfalse
Include unchanged listingsincludeUnchangedbooleanfalse
Monitor namemonitorNamestring
Skip repostsdedupeRepostsbooleantrue
Max removal checksmaxRemovedChecksinteger20
Include detailsincludeDetailsbooleanfalse
Radius (km)radiusKminteger
Conditionconditionarray
Deliverydeliverystring
Listed withindaysSinceListedstring
Posted within (hours)maxAgeHoursinteger
Availabilityavailabilitystring"available"
Title must contain all wordsstrictQuerybooleanfalse
SortsortBystring"best_match"
More citiescitiesarray
More search wordsqueriesarray
Marketplace linksstartUrlsarray
Location idlocationIdstring

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure