Facebook Marketplace Listing & Price Extractor avatar

Facebook Marketplace Listing & Price Extractor

Pricing

from $0.49 / 1,000 results

Go to Apify Store
Facebook Marketplace Listing & Price Extractor

Facebook Marketplace Listing & Price Extractor

Extract public Facebook Marketplace listings by city feed, category, keyword search, or direct item URL, with price, location, photos, delivery method, seller, and listing status per item.

Pricing

from $0.49 / 1,000 results

Rating

0.0

(0)

Developer

Nimbryxo-studio

Nimbryxo-studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

Pull public Facebook Marketplace listings from a city feed, a category, a keyword search, or a direct item link. Point it at one or more Marketplace URLs β€” or just give it a keyword and a location β€” and get back structured rows with price, location, photos, delivery method, and listing status for cars, furniture, electronics, apartments, and everything else people list on Marketplace.

What this actor does

  • Scrapes any mix of Marketplace location feeds, category feeds, keyword-search feeds, and direct item URLs in a single run
  • Builds a search feed automatically from a keyword and location when you don't supply a URL
  • Filters results by price range, item condition, delivery method, and listing age, checked against the data each listing actually returns
  • Can visit each listing's own page for extra detail (description, attributes, additional photos) instead of relying on search-result data alone
  • Tags every row with which input URL produced it, so results from several searches stay attributable
  • Drops duplicate listing IDs seen across different inputs by default
  • Values Facebook doesn't expose are never guessed: core fields stay in every row as empty strings, null or false, and extra source fields appear only when present

Output per listing

Every row has the same core set of fields. When Facebook doesn't expose a value, that field is still present as an empty string, null, false or an empty list rather than being dropped.

Normalized fields

  • id β€” Facebook's Marketplace listing ID
  • title β€” the listing title (null if not found)
  • price β€” object with amount, currency, formatted, and amountWithOffset (each null when unknown)
  • city, state, locationText β€” the listing's location (null when not exposed)
  • primaryPhotoUrl β€” URL of the main listing photo
  • listingUrl β€” direct link to the listing (https://www.facebook.com/marketplace/item/<id>)
  • creationTime β€” when the listing was posted (Unix timestamp), only when Facebook exposes it
  • listingPhotos, listingVideo, vehicle β€” extra media and vehicle data, only when the source page includes them

Run and source information

  • facebookUrl, sourceUrl β€” the Marketplace page this row was scraped from (the input URL, or the generated search URL)
  • sourceType β€” whether that input was a search, category, location, or direct-item URL
  • inputIndex β€” position of the input in startUrls, or -1 for a search generated from searchQuery + location
  • searchQuery, locationQueried β€” the keyword and location behind a generated search; null for rows from startUrls
  • dataMode β€” fast or deep, depending on whether listing pages were visited
  • extractionSource β€” internal label for how the row was found (null when not recorded)
  • accessState β€” page-access status for the source; always results on rows that reach the dataset
  • qualityStatus β€” complete when both ID and title were found, partial otherwise
  • missingFields β€” which of title, price, location couldn't be read for this row
  • sellerDataAvailability β€” exposed when the seller's name or ID was found, not_exposed otherwise
  • scrapedAt β€” ISO 8601 UTC time the row was written

Facebook's own field names (kept for compatibility)

  • marketplace_listing_title, listing_price (formatted_amount, amount, amount_with_offset_in_currency, sometimes currency), strikethrough_price, comparable_price, comparable_price_type, min_listing_price, max_listing_price
  • location.reverse_geocode β€” city, state, and city_page (display_name, id)
  • primary_listing_photo β€” image.uri and photo id
  • is_sold, is_pending, is_live, is_hidden, is_viewer_seller β€” status flags (is_live is null when unknown)
  • delivery_types β€” delivery/pickup methods the seller offers (empty list when not exposed)
  • marketplace_listing_category_id β€” Facebook's category ID for the listing
  • marketplace_listing_seller β€” seller name and id (empty strings when not exposed)
  • custom_title, custom_sub_titles_with_rendering_flags, origin_group, listing_video, parent_listing

Any other fields Facebook includes for a listing are passed through under their original names. Examples are redacted_description and attribute_data, which are more common in deep mode.

Input

FieldTypeDefaultDescription
startUrlsarray–Marketplace search, category, location, or direct item URLs to scrape
searchQuerystring–Keyword to search for; only used when startUrls has no valid Marketplace URL, and then location is required
locationstring–Marketplace location slug or city/state to pair with searchQuery, e.g. nyc or Austin, TX
latitudenumber–Center latitude, added to the generated searchQuery search only
longitudenumber–Center longitude, added to the generated searchQuery search only
radiusKminteger–Search radius in kilometers (1–500), added to the generated searchQuery search only
categoryIdstring–Facebook Marketplace category ID, added to the generated searchQuery search only
sortBystringrelevancerelevance, newest, price_asc, or price_desc. Sent to Facebook for a generated search; the actor also re-orders each batch of rows it writes by price or posting time
minPricenumber–Only return listings priced at or above this amount; listings without a readable price are dropped
maxPricenumber–Only return listings priced at or below this amount; listings without a readable price are dropped
conditionstringanyany, new, used_like_new, used_good, or used_fair; listings whose condition can't be read are dropped
deliveryMethodstringallall, shipping, or local; listings without matching delivery data are dropped
daysSinceListedinteger–Only include listings created within this many days; listings without a posting time are dropped
maxItemsinteger50Maximum listings to return across all inputs combined
maxItemsPerUrlinteger50Maximum listings to return from each individual input URL
resultsLimitinteger–Older per-source limit kept for existing integrations; maxItemsPerUrl takes priority when both are set
scrapeModestringfastfast (search-result data only), deep (also visits each listing page for extra fields), or auto (behaves like fast unless includeListingDetails or includeAllPhotos is on)
includeListingDetailsbooleanfalseTurns on the same per-listing detail fetch as scrapeMode: deep
includeAllPhotosbooleanfalseAlso turns on the per-listing detail fetch (same effect as deep); photos are kept as Facebook exposes them
deduplicateAcrossInputsbooleantrueReturn each listing ID once across all inputs. When turned off, the same listing can appear in several rows, including repeats from a single input in fast mode
proxyConfigurationobject{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"}Proxy used to reach Marketplace. Whenever Apify Proxy is enabled, the actor uses the US residential group regardless of the group or country you pick

Example: keyword search by city

{
"searchQuery": "laptop",
"location": "New York, NY",
"condition": "used_good",
"minPrice": 50,
"maxPrice": 500,
"maxItems": 100
}

Example: scrape a category feed with full listing detail

{
"startUrls": [{ "url": "https://www.facebook.com/marketplace/sanfrancisco/instruments" }],
"scrapeMode": "deep",
"maxItemsPerUrl": 40
}

Example: a single item page

{
"startUrls": [{ "url": "https://www.facebook.com/marketplace/item/772594759027016/" }]
}

Use cases

  • Price monitoring β€” track asking prices for a specific product category across cities over time
  • Resale and arbitrage β€” scan multiple city feeds for underpriced items in a category you resell
  • Vehicle shopping β€” pull vehicle listings by location and price range instead of scrolling the app
  • Apartment hunting β€” collect rental listings from several neighborhood feeds into one dataset
  • Market research β€” compare listing volume and pricing for a product across regions or time periods

FAQ

Why did I get fewer listings than maxItems? maxItems and maxItemsPerUrl are ceilings, not guarantees. A search or feed may simply have fewer matching listings, Facebook may stop loading more as the page is scrolled, or your filters may remove listings that don't expose the data they check. If no listing at all can be returned and Facebook's page wasn't recognised as a genuine empty result, the run is marked as failed with the reason in its status message.

What's the difference between fast and deep scrape mode? fast reads only what's already on the search/feed results page and writes rows as they are found. deep additionally opens each listing's own page to pick up fields like the description, extra photos, and category-specific attributes (e.g. vehicle details) that aren't shown in the feed view, and writes rows once that source is finished.

Why is the seller empty on some rows? Facebook doesn't expose seller identity on every listing or in every view. When it isn't on the page, marketplace_listing_seller keeps empty name and id values and sellerDataAvailability is not_exposed.

Can I combine several searches or cities in one run? Yes. Add multiple entries to startUrls, mixing location feeds, category feeds, search feeds, and direct item URLs as needed; each row records which input it came from via sourceUrl and sourceType. searchQuery and location are ignored as soon as startUrls contains a valid Marketplace URL, so put keyword searches into the URLs themselves when mixing.

Does this need Facebook login or cookies? No. It reads Marketplace pages that are publicly accessible without signing in.

Do I need to configure a proxy myself? No. The default US residential proxy is what the actor relies on, and when Apify Proxy is enabled it always uses that group and country. To target another region's Marketplace, use that city's Marketplace URL or location.

Is this affiliated with Facebook or Meta? No. This is an independent, third-party actor that reads publicly accessible Facebook Marketplace pages; it is not affiliated with or endorsed by Meta.