OfferUp Scraper avatar

OfferUp Scraper

Pricing

from $0.05 / 1,000 listings

Go to Apify Store
OfferUp Scraper

OfferUp Scraper

Collect public OfferUp listings by keyword, search URL, or listing ID. Get asking prices and locations, with optional seller, photo, and vehicle details for resale and market research.

Pricing

from $0.05 / 1,000 listings

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 days ago

Last modified

Share

🛒 Compare public OfferUp listings

Resellers and market researchers can collect public US OfferUp listings with titles, asking prices, currency, and listing IDs. Add locations, photos, seller data, and vehicle facts when available to compare offers in a structured dataset without copying each page by hand.

📦 Listing prices and public details

Each row holds one public listing. The Actor saves the first eligible match and skips later matches for the same listing, even across different submitted values. Optional fields are included when OfferUp shows them. Search rows are kept if optional details cannot be read.

You can compare asking prices and conditions, group listings by public location, and review seller ratings or vehicle facts. Photos are source links; the Actor does not download or store image files. Vehicle facts come from the listing, not a VIN decoder or vehicle-history check.

▶️ Run an OfferUp search or lookup

  1. Choose Keywords, Search or explore URLs, or Listing URLs or IDs.
  2. Add the values for that method. Fields for other methods are ignored.
  3. For searches, choose shared location and search filters if needed.
  4. Set Maximum listings if you want a cap. Turn on Include listing details when you need public item-page data.
  5. Start the run and open the listings dataset.

No OfferUp login is needed. Keywords and search URLs share one set of filters per run. Use separate runs for searches that need different filters. Direct listing lookups always request available details and carry the detail charge when successful.

⚙️ Input

Search filters apply only to Keywords and Search or explore URLs.

FieldTypeWhat it does
discoveryMethodstringRequired. Choose keywords, searchUrls, or listings.
keywordsarray of stringsRequired for Keywords. All keywords share the same filters.
searchUrlsarray of URL objectsRequired for Search or explore URLs. URLs set the base search; shared filters apply to each URL.
listingsarray of stringsRequired for Listing URLs or IDs. Add public item URLs or listing IDs. Available details carry a separate charge.
zipCodestringFive-digit US ZIP code for searches. Use this or coordinates, not both.
coordinatesobjectSearch center with both latitude and longitude. Use this or a ZIP code, not both.
coordinates.latitudenumberLatitude in decimal degrees, from -90 to 90.
coordinates.longitudenumberLongitude in decimal degrees, from -180 to 180.
radiusMilesnumberSearch radius of zero or more miles. Requires a location here or in the URL. Uses approximate public locations.
categorystringOfferUp category ID from a public category URL.
minPricenumberMinimum asking price in USD, inclusive and zero or more.
maxPricenumberMaximum asking price in USD, inclusive. Must be at least minPrice.
conditionsarray of stringsChoose new, openBox, reconditioned, used, forParts, or other. Leave blank for any condition.
pickupOnlybooleanKeep listings whose public data confirms local pickup. False applies no pickup filter.
shippingOnlybooleanKeep listings whose public data confirms shipping. False applies no shipping filter. If both delivery filters are true, listings must offer both.
postedAfterstringDate in YYYY-MM-DD format. Keep listings posted on or after it; exclude listings without a public posted date.
sortBystringOrder within each search: relevance, newest, closest, priceAsc, or priceDesc. Leave blank for source order.
maxItemsintegerRun-wide cap on qualifying listings, at least 1 when set. Leave empty to return all available results until the source is exhausted. Searches continue beyond the first page; there is no fixed upper limit in the schema.
includeDetailsbooleanAdd public descriptions, photos, seller data, and vehicle facts to searches when available. Successful details carry a separate charge. Direct lookups always include available details. Valid listings remain if details are unavailable.

Successful default-input example

This is the public input from the successful default-input run on the current beta build.

{
"discoveryMethod": "keywords",
"keywords": [
"bicycle"
],
"pickupOnly": false,
"shippingOnly": false,
"maxItems": 10,
"includeDetails": false
}

🧾 Output

Run output

FieldTypeWhat it does
listingsstringOpens saved listings in the dataset overview.

Listing row fields

All methods use the same row shape. Only listingId, title, price, and currency are required. Other fields may be absent when OfferUp does not show them.

FieldTypeWhat it does
listingIdstringOfferUp listing ID for matching exports.
titlestringPublic listing title.
pricenumberCurrent asking price.
currencystringCurrency code for the asking price.
originalPricenumberOriginal asking price when shown.
firmPricebooleanWhether the source marks the price as firm.
locationobjectPublic listing location. Coordinates are approximate.
location.citystringPublic city name.
location.statestringPublic state name or code.
location.zipCodestringPublic ZIP code.
location.latitudenumberApproximate latitude in decimal degrees.
location.longitudenumberApproximate longitude in decimal degrees.
conditionstringSource-published item condition.
descriptionstringPublic item description.
primaryImageUrlstringMain image URL chosen by the source.
photosarray of objectsPublic photos and available image sizes.
photos.urlstringSource URL for each photo.
photos.widthintegerImage width in pixels.
photos.heightintegerImage height in pixels.
categoryPatharray of stringsCategory names from broad to specific.
quantityintegerSource-published available quantity.
postedAtstringSource-published creation date and time.
editedAtstringSource-published edit date and time.
availabilitystringPublic availability state.
removedbooleanWhether a successfully read listing is marked removed.
sellerobjectPublic seller profile and reputation.
seller.idstringSeller ID for joining listings.
seller.namestringPublic seller name.
seller.avatarUrlstringSeller profile image URL.
seller.locationstringPublic seller location.
seller.joinedAtstringSource-published join date and time.
seller.activitystringPublic activity text.
seller.ratingnumberSource-published rating.
seller.ratingCountintegerNumber of ratings.
seller.itemsSoldintegerSource-published items-sold count.
seller.businessbooleanWhether the source labels a business account.
seller.dealerbooleanWhether the source labels a dealer account.
seller.verificationsarray of stringsPublic verification labels.
seller.phoneNumbersarray of stringsPhone numbers the seller makes public.
seller.websitesarray of stringsWebsite links the seller makes public.
pickupAvailablebooleanPublic local pickup availability.
shippingAvailablebooleanPublic shipping availability.
shippingobjectPublic seller-paid shipping facts.
shipping.sellerPaidbooleanWhether the source says the seller pays shipping.
vehicleobjectPublic vehicle facts from the listing.
vehicle.makestringVehicle make.
vehicle.modelstringVehicle model.
vehicle.yearintegerModel year.
vehicle.mileagenumberPublished mileage.
vehicle.mileageUnitstringUnit for mileage.
vehicle.vinstringPublicly supplied vehicle identification number.
vehicle.transmissionstringPublished transmission type.
vehicle.drivetrainstringPublished drivetrain.
vehicle.fuelTypestringPublished fuel type.
vehicle.titleStatusstringPublished vehicle title status.
vehicle.fuelEconomystringPublished fuel-economy information.
vehicle.trimstringPublished trim.
vehicle.enginestringPublished engine information.
vehicle.bodyStylestringPublished body style.
vehicle.colorstringPublished color.

Complete example listing

This genuine row comes from a successful direct lookup on the current beta build.

{
"listingId": "1041ca53-a606-36da-8f3d-871e34799b36",
"title": "Bike Rack For Seat Post",
"price": 15,
"currency": "USD",
"originalPrice": 15,
"firmPrice": false,
"condition": "New",
"description": "In excellent working condition",
"quantity": 1,
"postedAt": "2026-09-22T16:48:57.292Z",
"availability": "LISTED",
"removed": false,
"pickupAvailable": true,
"shippingAvailable": false,
"photos": [
{
"url": "https://images.offerup.com/gECme_pWpftMJbV2qxCFCrQz1PE=/1920x1080/4680/4680ef1ce4704f0abbb91ebf0c035593.jpg",
"width": 1920,
"height": 1080
},
{
"url": "https://images.offerup.com/pIwm4k4rMONh5zkytuAfq8k-_wc=/1920x1080/9841/9841c30201bc4241946b0a4629a34e2d.jpg",
"width": 1920,
"height": 1080
},
{
"url": "https://images.offerup.com/pdIDwK4H7NwoGiVU2h1t8BBn1Bs=/1920x1080/1987/1987e53fd8414a16b011d91ed8590573.jpg",
"width": 1920,
"height": 1080
}
],
"primaryImageUrl": "https://images.offerup.com/77HjGz109nF25r_8bF5EhCN92lI=/444x250/4680/4680ef1ce4704f0abbb91ebf0c035593.jpg",
"location": {
"city": "Wichita",
"state": "KS",
"zipCode": "67204",
"latitude": 37.742,
"longitude": -97.365
},
"categoryPath": [
"Sports & Outdoors",
"Bikes & Cycling"
],
"seller": {
"id": "142612",
"name": "Skylar",
"avatarUrl": "https://images.offerup.com/ejnvmmxuy20NNRq4mpcrzRECZq4=/100x100/smart/9cbb/9cbb74041bf0493ead11447f652faf5a.jpg",
"location": "Wichita, KS",
"joinedAt": "2014-04-06T12:15:35Z",
"activity": "Responds within 1 hour",
"rating": 5,
"ratingCount": 78,
"itemsSold": 435,
"business": false,
"dealer": false,
"verifications": [
"TRUYOU"
]
},
"shipping": {
"sellerPaid": false
}
}

💳 Pricing

This Actor uses pay-per-event pricing. A Listing charge applies to each unique public listing saved. Listing details is an extra charge when public item-page details are added to a saved listing, including direct lookups. Failed detail requests do not create a detail charge. Empty searches do not create listing charges. See the Store pricing panel for current rates and plan tiers.

🔌 Integrations

Start runs and read the dataset through the Apify API. Export rows as JSON or CSV, schedule runs, or use Apify webhooks to connect finished runs to your workflow.

❓ FAQ

What if a listing has no details?

Valid search listings are kept when optional details are unavailable. Fields that the source does not show may be absent. Failed details are not charged as successful details.

Can I require both shipping and local pickup?

Yes. Turn on both filters. A listing must have public data that confirms both options. These filters apply only to searches.

Can each keyword use a different location or price range?

No. All searches in one run share the filters you set. Use separate runs for different filter sets.

What happens if the same listing appears twice?

The first eligible occurrence is saved right away. Later matches are skipped, and the saved row is not changed to collect later match data.

Does leaving Maximum listings empty collect every OfferUp listing?

It returns all available results until the source is exhausted. This covers what OfferUp exposes for your search, not a promise of full marketplace coverage. A set limit is a cap, not a promised count.

Can I use this to decode a VIN or check vehicle history?

The Actor returns vehicle facts published with the listing when available. It does not decode VINs, value vehicles, or verify vehicle history.

Do I need an OfferUp account?

No. The Actor reads public US OfferUp listings without login. It does not read private messages or perform purchases or account actions.

Where is the official OfferUp marketplace?

The source website is OfferUp. This Actor exports public listing data from that marketplace.

📝 Changelog

v0.0 (04-10-2026)

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré