Apify Store
AS
Apify Store
/memo23/facebook-marketplace-scraper-ppe

Facebook Marketplace [$1.5💰] Get newest items ASAP

💰$1.50/1K Facebook Marketplace scraper with no cookies or login — anti-bot handled and maintained so your pipeline doesn't die mid-contract. Keyword or URL search, price/condition/radius filters; cars

liveasyncunknown~30s typical
agentslead generationmcp serversfacebookmarketplaceppe
$0.0019
per result + $0.005 call
plus $0.001 platform fee per run
Actor charges $0.0015 per result; Cracked adds 25% plus a $0.005 call fee
Bring your own Apify Store key: provider portion drops to $0.
$Set up https://cracked-ai-pearl.vercel.app/SKILL.md, then use Cracked to run apify /memo23/facebook-marketplace-scraper-ppe for me.

Input

FieldTypeDescription
startUrlsarrayPaste one or more Facebook Marketplace URLs such as `'https://www.facebook.com/marketplace/nyc/search/?query=sleeper%20trucks'`.
searchQuerystringSearch term to use when building a Marketplace search URL.
sortBystring (best_match | creation_time_descend | price_ascend | price_descend | distance_ascend)Sort order used when building the Marketplace search. default "best_match"
daysSinceListedstring (0 | 1 | 7 | 30)Preset age filter matching the reference repo. Keeps only listings posted within the last N days: `"0"` = any time (default), `"1"` = last 24 hours, `"7"` = last 7 days, `"30"` = last 30 days. default "0"
availabilitystring (in stock | out of stock)Availability filter used when building the Marketplace search. default "in stock"
deliveryMethodstring (all | local_pick_up | shipping)Delivery filter used when building the Marketplace search. default "all"
conditionNewbooleanInclude new items in the generated Marketplace URL. default false
conditionUsedLikeNewbooleanInclude used-like-new items in the generated Marketplace URL. default false
conditionUsedGoodbooleanInclude used-good items in the generated Marketplace URL. default false
conditionUsedFairbooleanInclude used-fair items in the generated Marketplace URL. default false
minPriceintegerMinimum listing price for the generated Marketplace URL. default 0
maxPriceintegerMaximum listing price for the generated Marketplace URL. default 0
countryPresetstring ( | usa | usa_full | can | mex | bra)Optional multi-city preset. Each preset expands into a fixed list of Marketplace locations in that country, and EACH location is a separate start URL - so a preset with 128 locations costs roughly 128x the start fee of a single-location run. Pick the smallest preset that covers what you need. Every location in the expanded ('verified') presets was checked against Facebook and confirmed to resolve to the right place. Leave empty to use a single Marketplace location below. default ""
marketplaceLocationstringMarketplace location slug such as `phoenix`, `nyc`, `prague`, or `melbourne`. This is used for a single generated URL when no country preset is selected.
radiusKmintegerSearch radius in kilometres, written into the generated Marketplace URL and sent to Facebook as filter_radius_km. NOTE: Facebook currently IGNORES this on the logged-out endpoint this actor uses - measured directly, a 5 km and an 805 km request return an identical result set, and the effective reach is whatever Facebook decides (roughly 100-120 km around the location). To cover a wider area, add more locations or pick a bigger country preset rather than raising this. default 200
exactbooleanIf checked, Facebook will try to match the search query more exactly when the generated URL is used. default false
categoriesarrayPick one or more Facebook Marketplace categories. Each selected category is scraped as its own search (Facebook only accepts one category per search), and the results are combined. Leave empty to search all categories. If you also use a Country preset, every city is searched for every selected category.
categoryIdstringAdvanced: raw Facebook Marketplace category slug(s) to append as `category_id`. Prefer the Categories picker above. You can list several slugs comma-separated (e.g. `vehicles,electronics`) and each is scraped as its own search. Use category slugs like `vehicles` or `propertyforsale`, not numeric IDs.
latitudenumberOptional latitude for precise pinned-location searches. Provide longitude too.
longitudenumberOptional longitude for precise pinned-location searches. Provide latitude too.
includeSellerbooleanIf checked, the scraper will try to open the item page and scrape more data about the item. Adds the full description, all photos, structured attributes, and (for vehicles) the complete `vehicle` field set. Note: the seller's name/profile is only served by Facebook to logged-in sessions — provide `cookies` to get it; without cookies `seller` stays null but `vehicle.sellerType` is still returned. Default: false (faster, search-results-only runs). default false
flattenOutputbooleanIf checked, the actor will export a cleaner, flatter dataset with top-level fields like title, description, location, and pricing. Leave it off to keep the current response format for existing integrations. default false
monitoringModebooleanIf checked, it will only scrape newly items compared to what has been scraped in previous runs. default false
maxListingAgeHoursintegerDeliver only listings created within the last N hours — older ones are dropped before delivery and never billed. Pagination stops once the feed is past the age window. Works best with sortBy=creation_time_descend in the URL and monitoring mode. 0 = disabled. default 0
resetMonitoringCachebooleanIf checked, the actor will wipe the monitoring-mode cache (the named key-value store `facebook-marketplace-default-filter-ppe`) at the start of this run. All currently-live listings will then be treated as new and pushed to the dataset. Use this once when switching from testing to production, then turn it off so subsequent runs only return genuinely new items. Has no effect when `monitoringMode` is off. default false
preciseLocationbooleanIf checked, the scraper will enforce strict geo-filtering. It will use latitude/longitude from the URL (e.g. &latitude=39.04&longitude=-77.49&radius=65) instead of coordinates inferred by Facebook from the proxy IP. Results whose location falls outside the requested radius will be discarded. Recommended when Facebook redirects away from the city slug and returns listings from the wrong region. default false
locationResultsModestring (maximize_results | mark_far_results | only_nearby_results)Choose whether to keep as many Facebook results as possible, keep them but mark far-away ones, or only keep listings that fall inside the resolved search radius after checking item detail pages. default "maximize_results"
cookiesarrayOPTIONAL. Every listing field — photos, description, location, price, dates and vehicle data — is returned without cookies. Supply them only to populate `marketplace_listing_seller`: Facebook stopped exposing seller identity to logged-out sessions, so with `includeSeller` on and no cookies that one field comes back empty and the run says so in the log. Export with a browser extension such as EditThisCookie; they are sanitised and reused for both URL-based and filter-generated searches.
maxItemsintegerMaximum listings to scrape PER START URL (each URL gets its own budget — 12 URLs with maxItems 72 can return up to 864 items). In filter mode (no start URLs) it is simply the run's total. The run never exceeds your maximum cost per run setting. default 100
minDelayintegerMinimum delay in seconds between Facebook API calls. Lower = faster and cheaper runs; raise it if you see rate-limiting on very large runs. default 2
maxDelayintegerMaximum delay in seconds between Facebook API calls. Lower = faster and cheaper runs; raise it if you see rate-limiting on very large runs. default 5
maxConcurrencyintegerMaximum number of pages that can be processed at the same time. default 10
minConcurrencyintegerMinimum number of pages that will be processed at the same time. default 1
maxRequestRetriesintegerNumber of times the crawler will retry a failed request before giving up. Keep this low (5-10) so a single deterministic error cannot burn the entire run timeout on retries. default 10
proxyobjectLeave empty to use a residential proxy automatically — on the pay-per-event build that is the actor's own built-in residential proxy at no extra cost to you; on the rental build it defaults to Apify Residential. Only set this if you want to use your own proxies. Do NOT select the Apify datacenter group: Facebook blocks datacenter IPs and returns an empty page for every request.

Call it

curl
curl https://cracked-ai-pearl.vercel.app/v1/run \
  -H "Authorization: Bearer ck_live_..." -H "content-type: application/json" \
  -d '{"provider":"apify","endpoint":"/memo23/facebook-marketplace-scraper-ppe","input":{"startUrls":["https://www.facebook.com/marketplace/nyc/search/?query=sleeper%20trucks"],"searchQuery":"free","marketplaceLocation":"phoenix","cookies":[],"maxItems":3,"maxConcurrency":3},"wait":false}'
poll
curl "https://cracked-ai-pearl.vercel.app/v1/runs/<runId>?wait=30" -H "Authorization: Bearer ck_live_..."
cli
npx cracked-ai run -p apify -e /memo23/facebook-marketplace-scraper-ppe -i '{"startUrls":["https://www.facebook.com/marketplace/nyc/search/?query=sleeper%20trucks"],"searchQuery":"free","marketplaceLocation":"phoenix","cookies":[],"maxItems":3,"maxConcurrency":3}' -w 120
mcp
run_tool({ provider: "apify", endpoint: "/memo23/facebook-marketplace-scraper-ppe", input: {"startUrls":["https://www.facebook.com/marketplace/nyc/search/?query=sleeper%20trucks"],"searchQuery":"free","marketplaceLocation":"phoenix","cookies":[],"maxItems":3,"maxConcurrency":3}, wait: false })

Try it

Runs against your signed-in workspace balance. Sign in if you have not.