OfferUp Vehicles Scraper avatar

OfferUp Vehicles Scraper

Pricing

from $2.50 / 1,000 results

Go to Apify Store
OfferUp Vehicles Scraper

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

Fahim Mahmud Chisti

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

10 days ago

Last modified

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
  • listedAt from relative post times when OfferUp shows them
  • State verification before saving when a state filter is selected
  • Live progress on / and /status while the run is active
  • Debug HTML dumps for empty or failed pages

Input

FieldDescription
searchKeywordsVehicle keywords such as Honda Civic
startUrlsOfferUp explore, search, or item detail URLs
locationScopenationwide or state
stateUS state code when scope is state
maxItemsCap on saved listings (0 = unlimited)
maxPagesPerSearchMax result pages per keyword/URL
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)
proxyConfigurationUse 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 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 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 duplicateCheck on scheduled re-runs to skip listings you already stored.
  • Bound cost with maxItems and maxPagesPerSearch.
  • Set scrapeItemDetails: false when search-card fields are enough.
  • Prefer skipping known listings over raising memory.
  • Keep browser concurrency low.

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.