Facebook Marketplace Vehicles Scraper
Under maintenancePricing
from $2.50 / 1,000 results
Facebook Marketplace Vehicles Scraper
Under maintenanceScrape 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
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
3 days ago
Last modified
Categories
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
cookiesto 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
cookiesinput for deeper access - Exact
listedAtfrom Facebookcreation_timewhen 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
| Field | Description |
|---|---|
searchKeywords | Vehicle keywords such as Honda Civic |
startUrls | Marketplace URLs (when set, only these) |
locationScope | location or state (if no startUrls) |
locationSlug | City slug such as dallas or new-york |
state | US state code when scope is state |
radiusMiles | Search radius (1–500) |
maxItems | Cap on saved listings (0 = unlimited) |
maxPagesPerSearch | Scroll batches per keyword/hub |
maxListingAgeDays | Keep only recently posted listings |
scrapeItemDetails | Open each item page for richer fields |
duplicateCheck | Skip detail scraping for listing URLs already known (default false) |
duplicateCheckApiUrl | Optional POST exists API; leave empty for Apify storage only |
duplicateCheckStoreName | Named KV store (default vehicle-listing-urls) |
cookies | Optional secret Facebook cookie JSON |
proxyConfiguration | Use 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
duplicateCheckApiUrlis set, the Actor POSTs batches of up to 500 listing URLs to your endpoint, then skips URLs returned inexisting. 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
duplicateCheckApiUrlis 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
searchKeywordsempty and setscrapeItemDetails: 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
duplicateCheckon scheduled re-runs to skip listings you already stored. - Bound cost with
maxItemsandmaxPagesPerSearch. - 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.
Legal notice
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.