OfferUp Vehicles Scraper
Pricing
from $2.50 / 1,000 results
OfferUp Vehicles Scraper
Scrape OfferUp.com Cars & Trucks listings nationwide or for a specific US state.
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
10 days ago
Last modified
Categories
Share
Scrapes OfferUp Cars & Trucks listings into the same vehicle dataset contract used by the eBay, Craigslist, and Autotrader Actors in this monorepo.
Features
- Nationwide Cars & Trucks browse (
/explore/k/5/1) or a specific US state (/explore/sk/{state}/cars-trucks) - Keyword searches and custom explore/search/detail start URLs
- Optional detail scraping for VIN, mileage, drivetrain, transmission, colors, seller, and images
listedAtfrom relative post times when OfferUp shows them- State verification before saving when a state filter is selected
- Live progress on
/and/statuswhile the run is active - Debug HTML dumps for empty or failed pages
Input
| Field | Description |
|---|---|
searchKeywords | Vehicle keywords such as Honda Civic |
startUrls | OfferUp explore, search, or item detail URLs |
locationScope | nationwide or state |
state | US state code when scope is state |
maxItems | Cap on saved listings (0 = unlimited) |
maxPagesPerSearch | Max result pages per keyword/URL |
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) |
proxyConfiguration | Use US residential proxies |
Example:
{"searchKeywords": ["Toyota Camry"],"startUrls": [{"url": "https://offerup.com/explore/sck/tx/dallas/cars-trucks"}],"locationScope": "state","state": "TX","maxItems": 50,"scrapeItemDetails": true}
Skip existing listings (duplicate check)
OfferUp 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 or exceeds a 20s timeout, 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. Cached URLs expire after 30 days, and the store is capped at 50,000 entries (oldest first). Legacy boolean true entries are migrated to timestamps on load.
Example:
{"searchKeywords": ["Toyota Camry"],"locationScope": "state","state": "TX","maxItems": 100,"duplicateCheck": true,"duplicateCheckApiUrl": "https://your-api.example.com/listings/exists","duplicateCheckStoreName": "vehicle-listing-urls"}
Output
{"itemId": "779357ec-5c27-3e26-8210-0c0b189db896","title": "2014 Chevrolet Silverado 1500","listedAt": "2026-07-17T12:00:00.000Z","price": "17899","currency": "USD","year": "2014","make": "Chevrolet","model": "Silverado 1500","mileage": "118621","vin": "3GCUKSEC1EG174897","location": "Plano, TX","seller": "Example Seller","imageUrl": "https://images.offerup.com/example.jpg","images": ["https://images.offerup.com/example.jpg"],"url": "https://offerup.com/item/detail/779357ec-5c27-3e26-8210-0c0b189db896"}
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.
Tips
- Keep the default US residential proxy. OfferUp redirects non-US traffic to a geolocation unavailable page.
- Prefer Cars & Trucks explore URLs for category-focused crawls.
- Enable detail scraping when you need VIN/specs or reliable state filtering.
- Enable
duplicateCheckon scheduled re-runs to skip listings you already stored. - Bound cost with
maxItemsandmaxPagesPerSearch. - Set
scrapeItemDetails: falsewhen search-card fields are enough. - Prefer skipping known listings over raising memory.
- Keep browser concurrency low.
Legal notice
Scrape only public information and comply with applicable law, OfferUp's terms, and reasonable request rates. The Actor does not intentionally collect private contact information.