Facebook Marketplace Scraper
Pricing
from $1.33 / 1,000 results
Facebook Marketplace Scraper
Scrape Facebook Marketplace listings by search term or category, in any city — title, price, location, photo, delivery options and sold status. No login, cookies or API key.
Pricing
from $1.33 / 1,000 results
Rating
0.0
(0)
Developer
Farhan Febrian Nauval
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Scrape Facebook Marketplace listings by search term or category, in any city — title, price, location, photo, delivery options and sold status. No login, no cookies, no API key.
What you get
| Field | Meaning |
|---|---|
title, customTitle | Listing title as shown, and the seller's raw text |
subtitle | The grey detail line — mileage on a car, beds on a rental |
priceFormatted, priceAmount | AU$450 and 450.00 — display and numeric |
strikethroughPriceFormatted | Original price, when the seller has cut it |
city, state, locationDisplay | Where the item is |
photoUrl | Primary listing photo |
hasVideo, videoId | Whether the listing has a video, and its id |
createdAt | When it was listed, as UTC |
isSold, isLive, isPending | Listing state |
deliveryTypes | e.g. ["IN_PERSON"] |
listingUrl | Direct link to the listing |
Input
{"searchQueries": ["mountain bike"],"categories": ["vehicles"],"city": "sydney","sortBy": "newest"}
Search terms and categories can be used together or separately; each becomes its own set of rows.
Things worth knowing
The city slug sets the region and the currency. sydney returns AUD and
Australian suburbs, london returns GBP and UK towns, jakarta returns IDR. Use
the slug Facebook itself uses in the URL.
An unrecognised city or category is silently redirected. Facebook answers a
bogus city with a 200 and a full page of listings — from a completely different
feed. Nothing in the response says the location was ignored. This actor compares
where it landed against what you asked for and reports a redirected error instead
of handing you plausible-looking data about the wrong place.
One page is all that is public. A feed holds roughly 24–32 listings. The page
advertises more through has_next_page and a cursor, but spending that cursor
requires a signed-in session, so maxItemsPerInput above ~30 will not yield more.
This is a hard limit of the logged-out surface, not a setting.
The seller is never disclosed. marketplace_listing_seller is present on every
listing and null on every one of them. Seller name, profile and rating are not
available without logging in, so anything that depends on seller identity —
separating dealers from private sellers, for instance — cannot be built on this
data. sellerName is included as an explicit null rather than omitted, so the
absence is visible.
No video URL exists here either. A listing with a video exposes only its id, so
the actor reports hasVideo and videoId rather than a playable link it cannot
actually produce.
Search occasionally bounces to the login page. Facebook sometimes answers a
search URL with a redirect to /login — intermittently, not consistently: the same
query usually succeeds on the next run, and category browsing is affected less often
than search. The actor reports this as login_walled with the URL it landed on,
rather than silently returning nothing.
Use a residential proxy. Facebook is selective about client IPs; the input defaults to Apify's residential group.
Failure reporting
Every input produces at least one row. Failures carry _error and _errorDetail:
_error | Meaning |
|---|---|
no_listings | The feed rendered but matched nothing |
redirected | Facebook sent the request to a different feed — check the city or category slug |
login_walled | Facebook bounced the route to its login page — intermittent, usually clears on a retry |
network_error | The request never reached Facebook |
blocked | A response arrived but was unusable |
If every feed fails, the run aborts rather than finishing with an empty dataset.