Facebook Marketplace Vehicles Scraper avatar

Facebook Marketplace Vehicles Scraper

Under maintenance

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Facebook Marketplace Vehicles Scraper

Facebook Marketplace Vehicles Scraper

Under maintenance

Scrape Facebook Marketplace vehicle listings by city/radius or US state metro hubs.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Fahim Mahmud Chisti

Fahim Mahmud Chisti

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Share

Scrapes Facebook Marketplace vehicle listings into the same dataset contract used by the eBay, Craigslist, Autotrader, and OfferUp Actors.

Important limits

  • Marketplace is radius-based, not truly nationwide. Use a city locationSlug, or expand a US state across curated metro hubs with listing-ID deduplication.
  • Anonymous mode returns search-card data (title, price, image, location, URL, item ID). Facebook gates individual item pages behind login ("This content isn't available right now"), so without cookies the Actor cannot read detail-only fields (VIN, full specs, seller, description) and falls back to the card-level summary for each listing.
  • Provide session cookies to unlock item detail pages, deeper pagination, and seller identity.
  • The Actor stops at hard login walls / checkpoints (captcha). It does not bypass Facebook authentication.

Features

  • City/radius searches and state metro-hub fan-out
  • Keyword and custom Marketplace start URLs
  • Optional encrypted cookies input for deeper access
  • Exact listedAt from Facebook creation_time when present, with a fallback derived from the "Listed X ago" text on the listing page
  • Shared vehicle output fields (VIN, mileage, make/model, images, location, etc.)
  • Live progress on / and /status
  • Debug HTML dumps for empty or failed pages

Input

FieldDescription
searchKeywordsVehicle keywords such as Honda Civic
startUrlsMarketplace URLs (when set, only these)
locationScopelocation or state (if no startUrls)
locationSlugCity slug such as dallas or new-york
stateUS state code when scope is state
radiusMilesSearch radius (1–500)
maxItemsCap on saved listings (0 = unlimited)
maxPagesPerSearchScroll batches per keyword/hub
maxListingAgeDaysKeep only recently posted listings
scrapeItemDetailsOpen each item page for richer fields
duplicateCheckSkip detail scraping for listing URLs already known (default false)
duplicateCheckApiUrlOptional POST exists API; leave empty for Apify storage only
duplicateCheckStoreNameNamed KV store (default vehicle-listing-urls)
cookiesOptional secret Facebook cookie JSON
proxyConfigurationUse US residential proxies

Without keywords, the Actor browses the vehicles category page (facebook.com/marketplace/<slug>/vehicles), which serves listings to anonymous sessions. Keyword searches use the /search?query=... endpoint, which usually requires session cookies to return products.

Example (anonymous-friendly):

{
"locationScope": "location",
"locationSlug": "dallas",
"radiusMiles": 40,
"maxItems": 50,
"scrapeItemDetails": false
}

Skip existing listings (duplicate check)

Marketplace detail scraping opens each item in a browser with residential proxies. On scheduled re-runs, most results are often listings you already stored. Duplicate check skips those URLs so you do not pay again for detail pages you already have.

Enable it with duplicateCheck: true (default false).

If N consecutive listing URLs in a search are known duplicates (N = duplicateCheckLeadingStop, default 20), that search stops (no further pages) to avoid paying for known inventory.

Modes

  • When duplicateCheckApiUrl is set, the Actor POSTs batches of up to 500 listing URLs to your endpoint, then skips URLs returned in existing. It also reads and updates the named Apify Key-Value store. A URL is skipped if either your API or the store marks it as known.
  • When duplicateCheckApiUrl is empty, the Actor uses the Apify Key-Value store only (no external API).

API contract

// Request
{ "listingUrls": ["https://example.com/listing/1", "https://example.com/listing/2"] }
// Response
{
"existing": ["https://example.com/listing/1"],
"missing": ["https://example.com/listing/2"]
}

listingUrls may also be a single string. URLs are normalized (query string and trailing slash ignored). No auth header is required for public endpoints. If the API call fails, the Actor fail-opens and scrapes the batch.

After a listing is saved successfully, its URL is written to the named store under the KNOWN_LISTING_URLS record so future runs skip it even without an API.

Example:

{
"locationScope": "location",
"locationSlug": "dallas",
"radiusMiles": 40,
"maxItems": 100,
"duplicateCheck": true,
"duplicateCheckApiUrl": "https://your-api.example.com/listings/exists",
"duplicateCheckStoreName": "vehicle-listing-urls"
}

Output

{
"itemId": "123456789012345",
"title": "2018 Ford F-150 Lariat",
"listedAt": "2024-07-03T12:26:40.000Z",
"price": "32500",
"currency": "USD",
"year": "2018",
"make": "Ford",
"model": "F-150 Lariat",
"mileage": "84000",
"location": "Dallas, TX",
"seller": null,
"imageUrl": "https://scontent.xx.fbcdn.net/example.jpg",
"images": ["https://scontent.xx.fbcdn.net/example.jpg"],
"url": "https://www.facebook.com/marketplace/item/123456789012345/"
}

When the Actor is started from an Apify Task, each dataset item also includes taskId and taskName so you can track which Task produced it. Direct Actor runs set both to null.

seller is often null anonymously. When cookies unlock it, the field is populated. Extra Marketplace status and coordinates are stored in specifics.

Tips

  • Keep the default US residential proxy.
  • Start with a single city slug and small maxItems.
  • Anonymous runs: leave searchKeywords empty and set scrapeItemDetails: false — item pages are login-gated, so detail requests only add cost.
  • With cookies: keywords, item details, and state filters all work.
  • Prefer detail scraping when using state filters (requires cookies to be effective).
  • Enable duplicateCheck on scheduled re-runs to skip listings you already stored.
  • Bound cost with maxItems and maxPagesPerSearch.
  • Prefer skipping known listings over raising memory.
  • Keep browser concurrency low.
  • Supply cookies only if you accept the account-risk trade-off; never commit cookie files.

Scrape only public information and comply with applicable law, Facebook's terms, and reasonable request rates. The Actor does not intentionally collect private contact information.