OfferUp Scraper | US Marketplace Listings & Prices avatar

OfferUp Scraper | US Marketplace Listings & Prices

Pricing

from $3.50 / 1,000 results

Go to Apify Store
OfferUp Scraper | US Marketplace Listings & Prices

OfferUp Scraper | US Marketplace Listings & Prices

Scrape OfferUp listings with price, condition, seller info & location. Search by keyword, ZIP code, radius & price range. Supports multi-keyword, pagination & detail page enrichment.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

1

Monthly active users

14 days ago

Last modified

Share

OfferUp Scraper — US Local Marketplace Listings, Prices, Conditions & Seller Data

The most complete OfferUp marketplace data extractor on Apify. Pull live listings — price, condition, location, shipping flag, full description, image gallery, and seller reputation — from any US ZIP code or metro on demand. Built for reseller arbitrage, used-car flipping, brand monitoring, ecommerce intelligence, dropshipping research, and second-hand price benchmarking across America's largest peer-to-peer marketplace at offerup.com.

Apify Actor


What This Actor Does

The OfferUp Scraper is a production-ready Apify Actor that extracts public listings from OfferUp — the United States' largest mobile-first local classifieds and peer-to-peer (C2C) marketplace, with tens of millions of monthly active users buying and selling used phones, laptops, cars, furniture, baby gear, tools, sneakers, gaming consoles, bikes, instruments, appliances, fashion, and just about everything else across every US state and metro.

Each run takes one or more search keywords plus a city/ZIP and radius, then returns clean structured JSON listings with the full pricing, condition, location, image, and seller-reputation payload. Optional detail-page enrichment dives into each listing for the long-form description, full image gallery, category, and TruYou-verified seller stats.

In a single run the actor returns structured records covering:

  • Listings — every public OfferUp post matching your keyword and geo filters, including title, price, condition, category, post date, location, shipping availability, image gallery, and direct URL
  • Sellers — username, star rating, review count, TruYou verified flag, account join date, and total item count
  • Search context — every record carries the keyword and location it was harvested under, so multi-keyword and multi-metro pulls are trivially groupable downstream
  • ProvenancelistingUrl, listingId, and scrapedAt ISO timestamp on every record so you can audit and de-duplicate across runs

Each record is flat JSON, schema-stable, deduplicated by listing ID, and ready for direct ingestion into Postgres, BigQuery, Snowflake, Google Sheets, Airtable, or any BI tool — no parsing scripts, no per-listing DOM scraping, no headless-browser maintenance burden on your end.

Why scrape OfferUp yourself when this actor exists?

OfferUp does not offer a public data API. The web app is a heavily-defended Next.js single-page application with aggressive anti-bot protection. Teams who try to roll their own scraper invariably hit the same wall:

  • Datacenter IPs are blocked instantly — OfferUp returns HTTP 403 on the first request from any AWS, GCP, Azure, OVH, Hetzner, or Linode IP range
  • Cloudflare-style JS challenge on every cold visit — requires a real headless browser to solve, not requests or axios
  • TLS fingerprint inspection — Python requests and Node fetch are rejected even with perfect headers
  • Dynamic listing schema — OfferUp's internal Apollo cache and __NEXT_DATA__ payload changes shape every few weeks
  • Infinite-scroll pagination — no traditional page numbers in the UI; listings load on viewport scroll events
  • Per-IP rate ceilings — 5–10 search pages from a single IP and you're shadow-blocked for hours
  • Geofencing — non-US IPs see a stripped-down or redirected UX
  • CAPTCHA escalation — repeat offenders get full hCaptcha challenges that DIY scrapers cannot solve
  • Detail pages require fresh session warmup — going straight to /item/detail/{id} without homepage cookies returns an empty shell

This actor solves every one of those problems out of the box: Playwright + stealth patches + US residential proxy rotation + session warmup + API response interception + multi-strategy fallback parsing + automatic 403 retry with fresh IP. You get reliable, structured OfferUp data without owning a single Docker image.


Quick Start

One-Click Run

  1. Click "Try for free" on the Apify Store page
  2. Type one or more Keywords (iphone 15, macbook pro, peloton bike, f150) and a Location (Los Angeles, CA or a ZIP like 90001)
  3. Optionally set Radius, Min/Max Price, Condition, and Delivery Type, then hit Start
  4. Download as JSON, CSV, Excel, HTML, XML, or JSON Lines directly from the Apify dataset view

API Run (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/offerup-scraper").call(run_input={
"keywords": ["iphone 15", "macbook pro 14", "airpods pro"],
"location": "Los Angeles, CA",
"radius": 30,
"priceMin": 200,
"priceMax": 1500,
"condition": "like_new",
"deliveryType": "all",
"scrapeDetails": True,
"maxRecords": 500,
"maxPages": 10,
"requestDelay": 2000,
})
for listing in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"${listing['price']:>6} {listing['condition'] or '-':<10} "
f"{listing['title'][:60]:<60} | {listing['location']} | {listing['sellerName']}")

API Run (Node.js / TypeScript)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/offerup-scraper').call({
keywords: ['nike air max', 'jordan 1', 'yeezy 350'],
location: 'New York, NY',
radius: 20,
priceMin: 50,
priceMax: 400,
condition: 'good',
deliveryType: 'shipping',
scrapeDetails: false,
maxRecords: 1000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} sneaker listings in NYC`);
items.slice(0, 5).forEach(i => console.log(`$${i.price}${i.title}`));

API Run (cURL)

curl -X POST "https://api.apify.com/v2/acts/haketa~offerup-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"keywords": ["honda civic", "toyota camry", "ford f150"],
"location": "Houston, TX",
"radius": 50,
"priceMin": 3000,
"priceMax": 20000,
"deliveryType": "pickup",
"maxRecords": 500
}'

API Run (PHP)

$ch = curl_init('https://api.apify.com/v2/acts/haketa~offerup-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'keywords' => ['couch', 'dining table', 'queen bed'],
'location' => 'Chicago, IL',
'radius' => 25,
'maxRecords' => 200,
]),
CURLOPT_RETURNTRANSFER => true,
]);
$listings = json_decode(curl_exec($ch), true);

How It Works

OfferUp is a defended Next.js application that pulls listing data through a combination of server-side-rendered __NEXT_DATA__ payloads and internal JSON API responses (Apollo / GraphQL cache). This actor uses a layered extraction strategy so it stays resilient when one strategy breaks.

Source endpointPurposeExtraction technique
https://offerup.com/Cookie + JS-challenge establishment ("session warmup")Playwright navigation, wait for stable <title>
https://offerup.com/search?q={kw}&location={loc}&radius={R}Keyword + geo search results__NEXT_DATA__ JSON → Apollo cache (Listing:*, Item:*) + looseTiles array
Internal /api/... & /graphql callsLive feed items + pagination payloadspage.on('response') interception → findFeedItems recursive walker
https://offerup.com/item/detail/{id}Per-listing description, gallery, full seller statsOptional scrapeDetails: true follow-up navigation

Engineering details

  • Engine: Playwright (Chromium, headless) — the only reliable way to pass OfferUp's JS challenge and TLS fingerprint check
  • Stealth patchesnavigator.webdriver, plugin count, languages, and window.chrome are normalized to defeat fingerprint-based bot detection
  • US residential proxy required and configured by default (RESIDENTIAL, country-US) — datacenter IPs are blocked instantly
  • Per-session IP rotation — each keyword gets a fresh session-{sessionId} token so consecutive runs come from different residential addresses
  • Homepage warmup flow — visits offerup.com first to set anti-bot cookies before any /search request
  • API response interception — every JSON response with feed, graphql, or /api/ in the URL is captured for fallback parsing
  • Three-strategy listing extraction — (1) Apollo cache → (2) looseTiles array → (3) raw HTML/Cheerio selectors
  • 403 / 429 auto-recovery — burned sessions are closed, fresh IP rotated in, exponential backoff applied, same page retried
  • Infinite-scroll-aware pagination?page=N parameter walk up to maxPages, deduplicated by listingId
  • Configurable politenessrequestDelay between page requests, jittered keyword delays, hard cap on per-keyword pages
  • Schema normalization — image arrays, prices in cents vs dollars, owner vs seller vs user keys, and ISO vs relative dates all resolved to a single flat output schema

Input Parameters

{
"keywords": ["iphone 15", "macbook pro 14"],
"location": "Los Angeles, CA",
"radius": 30,
"priceMin": 200,
"priceMax": 1500,
"condition": "like_new",
"deliveryType": "all",
"scrapeDetails": true,
"maxRecords": 500,
"maxPages": 10,
"requestDelay": 2000,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Parameter reference

ParameterTypeDefaultDescription
keywordsarray<string>["iphone"]One or more search terms. Each keyword runs an independent search so a 5-keyword input is effectively 5 scrapes stitched into one dataset.
locationstring"Los Angeles, CA"City + state (e.g., "New York, NY") or a 5-digit US ZIP (e.g., "90001"). Leave empty for OfferUp's default nationwide view.
radiusinteger30Search radius in miles, 1–50. Common values: 5, 10, 20, 30, 50.
priceMininteger0Minimum item price in USD. 0 = no minimum.
priceMaxinteger0Maximum item price in USD. 0 = no maximum.
conditionstring"all"One of: all, new, like_new, good, fair, poor. Applied as a post-filter against the listing's reported condition.
deliveryTypestring"all"all = any, pickup = local pickup only, shipping = shipping-eligible listings only. Maps to OfferUp's delivery_param URL flag.
scrapeDetailsbooleanfalseIf true, visits each listing's detail page for the long-form description, full image gallery, category, and complete seller reputation block. Slower but much richer data.
maxRecordsinteger0Total listing cap across all keywords combined. 0 = unlimited.
maxPagesinteger10Maximum search result pages per keyword. 0 = unlimited.
requestDelayinteger2000Milliseconds between requests. Keep ≥ 1500ms — OfferUp blocks fast scrapers. Min 1000, max 10000.
proxyConfigurationobjectApify RESIDENTIAL USUS residential proxy is mandatory. Datacenter and non-US IPs are blocked.

Output Schema

Every listing record is a flat JSON object with the following fields. All fields default to null when OfferUp does not return a value for that listing.

Listing fields

FieldTypeDescription
listingIdstringUnique OfferUp listing ID (matches the path in listingUrl).
titlestringItem title as displayed on the listing card.
pricenumberAsking price in USD.
conditionstringReported condition: New, Like New, Good, Fair, or Poor.
locationstring"City, ST" of the seller as shown on OfferUp.
postDatestringISO-8601 listing creation date (when OfferUp exposes it).
postDateAgostringRelative time string ("2 hours ago", "3 days ago").
shippingAvailablebooleantrue if the seller offers shipping (OfferUp SHIPPING flag), false for local-pickup-only, null if unknown.
categorystringOfferUp item category (e.g., Electronics > Cell Phones). Populated when scrapeDetails: true.
descriptionstringFull long-form item description. Populated when scrapeDetails: true.
imagesarray<string>Image URLs (first thumbnail in card mode, full gallery in detail mode).
listingUrlstringDirect deep link: https://offerup.com/item/detail/{listingId}.

Seller fields

FieldTypeDescription
sellerNamestringSeller's display name / username.
sellerRatingnumberAverage star rating (1.0 – 5.0).
sellerReviewCountintegerTotal number of buyer reviews left on the seller.
sellerVerifiedbooleantrue if the seller passed OfferUp's TruYou identity verification.
sellerJoinDatestringDate the seller joined OfferUp.
sellerItemCountintegerTotal active listings the seller currently has on OfferUp.

Provenance fields

FieldTypeDescription
searchKeywordstringThe keyword from your input that surfaced this listing.
searchLocationstringThe location string from your input.
scrapedAtstringISO-8601 timestamp of extraction.

Example: card-mode record (scrapeDetails: false)

{
"listingId": "1234567890",
"title": "iPhone 15 Pro Max 256GB Unlocked - Like New in Box",
"price": 899,
"condition": "Like New",
"location": "Los Angeles, CA",
"postDate": null,
"postDateAgo": "4 hours ago",
"shippingAvailable": true,
"category": null,
"description": null,
"images": ["https://offerupimage.com/listing/1234567890_1.jpg"],
"sellerName": "alex_la",
"sellerRating": 4.9,
"sellerReviewCount": 87,
"sellerVerified": true,
"sellerJoinDate": null,
"sellerItemCount": null,
"listingUrl": "https://offerup.com/item/detail/1234567890",
"searchKeyword": "iphone 15",
"searchLocation": "Los Angeles, CA",
"scrapedAt": "2026-05-16T18:42:11.000Z"
}

Example: detail-mode record (scrapeDetails: true)

{
"listingId": "9876543210",
"title": "2018 Honda Civic LX Sedan — 62k miles, clean title",
"price": 14500,
"condition": "Good",
"location": "Houston, TX",
"postDate": "2026-05-14T09:15:00Z",
"postDateAgo": "2 days ago",
"shippingAvailable": false,
"category": "Cars & Trucks > Sedan",
"description": "Single owner, all service records included. New tires and brakes within the last 5,000 miles. Clean title, no accidents on Carfax. Cash only, pickup in Spring Branch.",
"images": [
"https://offerupimage.com/listing/9876543210_1.jpg",
"https://offerupimage.com/listing/9876543210_2.jpg",
"https://offerupimage.com/listing/9876543210_3.jpg",
"https://offerupimage.com/listing/9876543210_4.jpg"
],
"sellerName": "Marcos H.",
"sellerRating": 5.0,
"sellerReviewCount": 23,
"sellerVerified": true,
"sellerJoinDate": "2021-03-08",
"sellerItemCount": 4,
"listingUrl": "https://offerup.com/item/detail/9876543210",
"searchKeyword": "honda civic",
"searchLocation": "Houston, TX",
"scrapedAt": "2026-05-16T18:43:55.000Z"
}

Condition & Delivery Reference

Condition values

ValueMeaning
allReturn every condition (default).
newSealed / unused with tags.
like_newUsed briefly, no visible wear.
goodNormal wear consistent with age.
fairNoticeable wear but fully functional.
poorHeavy wear, defects, or for-parts items.

Delivery types

ValueOfferUp URL flagReturned listings
all(none)Pickup + shipping
pickupdelivery_param=pLocal pickup only
shippingdelivery_param=sNationwide shippable
CategoryTypical sub-categories
ElectronicsPhones, laptops, tablets, TVs, cameras, gaming consoles, audio
Cars & TrucksSedans, SUVs, trucks, motorcycles, boats, RVs, parts
Home & GardenFurniture, appliances, tools, decor, lawn & garden, kitchen
Clothing & ShoesSneakers, streetwear, designer, kids, plus-size, accessories
Sports & OutdoorsBikes, fitness, golf, camping, fishing, hunting
Baby & KidsStrollers, car seats, toys, cribs, clothing, gear
Tools & MachineryPower tools, hand tools, lawn equipment, construction
Musical InstrumentsGuitars, drums, keyboards, DJ gear, amps
CollectiblesSports cards, comics, vinyl, coins, antiques
Pet SuppliesCrates, beds, aquariums, supplies

Use Cases

Reseller Arbitrage & Flipping Research

Resellers, flippers, and eBay/Amazon FBA operators use this dataset to:

  • Source under-priced inventory — pull every "good" or better iPhone under $400 in a 50-mile radius and compare to current eBay sold-comps
  • Identify motivated sellers — listings priced 30–40% below median for the model are prime flip targets
  • Build daily watch lists for high-velocity categories (sneakers, consoles, power tools, designer bags)
  • Detect price-drop signals by re-running searches daily and diffing the same listingId across runs
  • Benchmark local vs national pricing by combining OfferUp data with eBay sold-listings to compute spread per metro
  • Filter for TruYou sellers only (sellerVerified: true) to reduce no-show and scam risk

Used-Car & Vehicle Flipping Intelligence

Independent dealers, mechanics, and car-flipping operators use OfferUp to:

  • Track local vehicle supply by make/model/year across major metros
  • Compare OfferUp asking prices to KBB and Manheim auction data for arbitrage
  • Filter clean-title cars under $15K in Houston, Phoenix, Dallas, and Atlanta for cash-and-flip workflows
  • Monitor truck and work-vehicle markets (F-150, Silverado, Tundra, ProMaster, Transit) for contractor demand
  • Spot mileage outliers by feeding the description field through an LLM that extracts mileage and condition signals
  • Map seller reputation against price — verified sellers with 5+ reviews command and accept slightly higher prices

Brand & Counterfeit Monitoring

Brand-protection teams, IP counsel, and trademark holders use the dataset to:

  • Scan listings for unauthorized resale of premium brands (Nike, Lululemon, Apple, Dyson, Yeti)
  • Detect counterfeit signals — sub-market pricing on luxury items (Louis Vuitton, Gucci, Rolex, Hermès)
  • Track MAP (Minimum Advertised Price) compliance violations by retailers liquidating overstock
  • Document infringement evidence with timestamped scrapedAt, full image gallery, seller identity, and direct listing URL
  • Issue takedown requests to OfferUp's Brand Protection team with structured evidence packages

Dropshipping & Ecommerce Market Intelligence

Shopify operators, dropshippers, and DTC brand teams use OfferUp data to:

  • Validate product-market fit by counting active listings for a SKU across the top 10 US metros
  • Quantify second-hand competition — if 200 used Theragun units are live below $150, your new-unit MSRP needs work
  • Identify trending categories by tracking week-over-week listing-count growth across keywords
  • Benchmark second-hand resale value as a marketing proxy ("resells for 75% of MSRP after 18 months")
  • Run regional A/B pricing tests by comparing OfferUp medians across Seattle, Miami, Chicago, and LA
  • Score affiliate-marketing opportunities by identifying high-volume sub-categories with active organic demand

Real Estate & Local Economic Intelligence

Commercial real estate analysts, neighborhood researchers, and economic-development teams use OfferUp listings as a proxy for local consumer activity:

  • Map household-formation rates — surges in baby gear, cribs, and stroller listings signal millennial family migration
  • Identify gentrification corridors — spikes in furniture and decor listings precede neighborhood turnover
  • Quantify move-out activity — moving boxes, packing supplies, "everything must go" titles trend with relocation seasons
  • Compare consumer-electronics velocity across ZIP codes to score retail catchment areas
  • Build neighborhood affluence indices from median asking prices of premium-brand listings

Market Research & Competitive Intelligence

Consultants, hedge-fund analysts, and equity researchers use OfferUp as an alt-data signal for:

  • Consumer-electronics demand modeling — second-hand listing velocity correlates with primary sales lag
  • Auto-market signal extraction — used-car supply on OfferUp is a leading indicator for retail and auction pricing
  • Furniture-industry tracking — IKEA, West Elm, and Article second-hand listings track new-purchase decay curves
  • Sneaker-resale alpha — Nike SNKRS releases drop into OfferUp inventory within 48 hours of release
  • DTC-brand survival analysis — discontinued brands appear as inventory liquidations on OfferUp before bankruptcy filings

Insurance & Claims Research

P&C insurers, claims adjusters, and SIU teams use OfferUp data to:

  • Validate claimed item values against the live second-hand market in the claimant's ZIP
  • Detect post-loss "windfall sales" — claimants listing the supposedly-stolen item on OfferUp within 30 days
  • Build replacement-cost matrices for personal-property claims using condition-stratified medians
  • Investigate auto-theft rings by matching listing photos to NICB-reported stolen vehicles
  • Adjust depreciation curves for high-volume categories using actual sale-comparable data

Academic & Policy Research

Universities, think tanks, and government research bureaus use OfferUp data for:

  • Circular-economy and sustainability studies — quantifying re-use rates across product categories
  • Consumer-behavior research — pricing psychology, condition-discount curves, urban-rural arbitrage
  • Labor-market signal research — gig-seller activity correlates inversely with employment indicators
  • Local-commerce policy analysis — sales-tax-exempt P2P volume as a macro indicator
  • Digital-divide studies — comparing OfferUp activity across rural vs urban ZIPs

Journalism & Data Reporting

Investigative reporters, consumer-affairs writers, and local-news data teams use the dataset to:

  • Track post-disaster inventory dumps — used generators, sandbags, and tarps after hurricanes
  • Cover the resale economy with quantitative metro-level supply and price stories
  • Investigate stolen-goods marketplaces in cooperation with local PD
  • Report on inflation and used-pricing trends with cited, reproducible data
  • Document scam patterns — too-good-to-be-true listings, repeated phone numbers, fake TruYou sellers

Sample Queries & Recipes

Recipe 1: iPhone 15 deal-hunter across the top 4 US metros

{
"keywords": ["iphone 15", "iphone 15 pro", "iphone 15 pro max"],
"location": "Los Angeles, CA",
"radius": 50,
"priceMin": 400,
"priceMax": 900,
"condition": "like_new",
"maxRecords": 1000
}

Repeat with location set to "New York, NY", "Chicago, IL", and "Houston, TX" and merge results downstream.

Recipe 2: Used Honda Civic / Toyota Camry market in Houston

{
"keywords": ["honda civic", "toyota camry"],
"location": "Houston, TX",
"radius": 50,
"priceMin": 5000,
"priceMax": 20000,
"deliveryType": "pickup",
"scrapeDetails": true,
"maxRecords": 500
}

scrapeDetails: true brings back full mileage and condition notes in the description field — feed to an LLM for structured extraction.

Recipe 3: Designer-sneaker arbitrage scan (NYC + LA + Miami)

{
"keywords": ["jordan 1", "yeezy 350", "nike dunk", "off white"],
"location": "New York, NY",
"radius": 30,
"priceMin": 100,
"priceMax": 500,
"deliveryType": "shipping",
"condition": "like_new",
"maxRecords": 800
}

Recipe 4: Living-room furniture pulse for a Chicago real-estate analyst

{
"keywords": ["couch", "sectional", "dining table", "queen bed"],
"location": "Chicago, IL",
"radius": 20,
"priceMax": 1500,
"maxRecords": 600
}

Recipe 5: Power-tool flipping watch list in Phoenix

{
"keywords": ["dewalt drill", "milwaukee m18", "makita", "ridgid"],
"location": "Phoenix, AZ",
"radius": 30,
"priceMin": 50,
"priceMax": 400,
"condition": "good",
"maxRecords": 400
}

Recipe 6: Brand-protection scan — counterfeit luxury watches

{
"keywords": ["rolex submariner", "rolex datejust", "rolex daytona"],
"location": "Miami, FL",
"radius": 50,
"priceMin": 500,
"priceMax": 5000,
"scrapeDetails": true,
"maxRecords": 300
}

Listings priced 90% below market on a Rolex Submariner are near-certain counterfeits — flag for the brand's legal team.

Recipe 7: Baby & kids gear in Seattle (move-in season demand signal)

{
"keywords": ["stroller", "car seat", "crib", "bassinet"],
"location": "Seattle, WA",
"radius": 25,
"condition": "like_new",
"maxRecords": 500
}

Recipe 8: Cheap fast sample — sanity-check 20 listings before a big run

{
"keywords": ["airpods"],
"location": "Dallas, TX",
"maxRecords": 20,
"maxPages": 1
}

Costs pennies and verifies your filters before you launch a 10K-record job.


Integration Examples

Google Sheets (via Apify Integration)

  1. Create an Apify Schedule that runs the actor daily with your saved input
  2. Add the "Save to Google Sheets" integration to the schedule
  3. Receive a fresh OfferUp listings sheet every morning — auto-deduplicated by listingId
  4. Pivot on searchKeyword × location for category × metro analytics in seconds

Make.com / Zapier / n8n

The Apify connector is supported natively on every major automation platform. Trigger downstream workflows on:

  • New listings (current run minus previous run, joined on listingId)
  • Price drops (listingId seen yesterday at $1,200, today at $950 → Slack alert)
  • TruYou-verified sellers only — auto-route promising leads to a dedicated CRM list
  • Condition upgrades (GoodLike New retag) — sign of seller re-listing

Power BI / Tableau / Looker

Connect Apify's REST API (/v2/datasets/{id}/items) as a data source and refresh on the Apify schedule cadence. Build dashboards covering:

  • Median price per category per metro
  • Shipping-vs-pickup mix by ZIP
  • Seller-rating distribution and TruYou penetration
  • Listing volume heatmaps by US metro
  • Week-over-week category velocity

Postgres / Snowflake / BigQuery

Use the Apify webhook integration to POST run results directly to your warehouse ingestion endpoint after each scheduled run. The flat output schema maps cleanly to a single offerup_listings table — index on listingId, searchKeyword, location, and scrapedAt.

Salesforce / HubSpot CRM Enrichment

Trigger an Apify run nightly and upsert seller records into a OfferUp_Sellers custom object keyed on sellerName. Use sellerVerified, sellerRating, and sellerItemCount as lead-scoring signals for B2B sales teams targeting power resellers.

LLM-Powered Description Extraction

Set scrapeDetails: true, then pipe the description field through GPT, Claude, or Gemini to extract:

  • Vehicle mileage, accident history, title status
  • Phone model, storage, carrier lock status
  • Furniture dimensions, brand, year
  • Sneaker size, colorway, release year

The structured JSON can feed pricing models, recommendation engines, or fraud-detection pipelines.

Slack / Discord Alerting

Wire run-completion webhooks into Slack to push deal alerts:

ALERT — iphone 15 pro max 256gb @ Phoenix, AZ — $649 (35% below median) — sellerRating 4.9 (87 reviews, TruYou) — view listing


Major US Marketplace Metros at a Glance

MetroStatePopulationOfferUp Marketplace Notes
New YorkNY19.5MHighest density of designer fashion, electronics, and luxury resale listings
Los AngelesCA13.0MUsed cars, fitness equipment, audio gear, premium streetwear hotspot
ChicagoIL9.4MFurniture, baby gear, and home-appliance turnover from constant rental churn
Dallas–Fort WorthTX8.1MTrucks, ATVs, tools, ranch equipment dominant categories
HoustonTX7.3MUsed cars, energy-sector tools, electronics, oil-field gear
WashingtonDC6.4MOffice furniture, electronics, designer fashion, government-relocation churn
MiamiFL6.3MLuxury watches, designer handbags, boats, marine equipment
PhiladelphiaPA6.2MSneakers, vintage clothing, tools, used cars
AtlantaGA6.1MSneakers, music gear, fashion, electronics resale hub
PhoenixAZ5.0MRVs, outdoor gear, used cars, retiree estate-sale inventory
BostonMA4.9MCollege-cycle furniture flips, electronics, bikes
San Francisco BayCA4.7MApple devices, designer fashion, tech-startup furniture clear-outs
SeattleWA4.0MOutdoor gear, bikes, Apple electronics, baby gear
DetroitMI4.4MTrucks, tools, motorcycles, used cars
MinneapolisMN3.7MWinter sports gear, snowblowers, baby gear
San DiegoCA3.3MSurfing, marine, fitness, sneakers
TampaFL3.3MFurniture, boats, RVs, golf equipment
DenverCO3.0MOutdoor gear, bikes, snowboards, fitness equipment
San AntonioTX2.6MTrucks, tools, baby gear, military-relocation inventory
PortlandOR2.5MBikes, vinyl, vintage clothing, outdoor gear
SacramentoCA2.4MUsed cars, tools, furniture, sneakers
Las VegasNV2.3MCasino chairs, designer fashion, electronics
AustinTX2.3MTech gear, music equipment, bikes, baby gear
CharlotteNC2.7MSneakers, electronics, used cars, fishing gear
OrlandoFL2.7MTheme-park resale, baby gear, electronics

The actor works for every US ZIP code — these are simply the highest-volume marketplaces.


Cost & Performance

MetricValue
EnginePlaywright (Chromium) + API response interception + Cheerio fallback
Runtime (1 keyword, 1 page, ~20 records)30–60 seconds
Runtime (1 keyword, 10 pages, ~200 records)4–8 minutes
Runtime (5 keywords × 10 pages × scrapeDetails:true)25–45 minutes
Pricing modelPay-per-event (Actor start + per dataset item)
Data freshnessLive at run time — listings reflect OfferUp's current state
Auth requiredNone (no OfferUp account needed)
Proxy requiredYes — Apify RESIDENTIAL (US) is configured by default
ConcurrencyMultiple keywords run sequentially in one actor run; launch parallel actor runs for concurrent metros
Memory footprint1024 MB minimum, 2048 MB recommended for scrapeDetails: true
Max input pages per keywordConfigurable via maxPages (default 10)
Per-request politenessrequestDelay (default 2000 ms, min 1000) plus jittered keyword gaps

  • Public data only — every field returned by this actor is publicly visible on offerup.com without login
  • No PII enrichment — the actor does not attempt to resolve seller usernames to real identities, phone numbers, emails, or social-media handles
  • TruYou identity verification status is a public boolean flag exposed by OfferUp itself — no underlying identity documents are scraped
  • No payment data, no buyer data, no message threads — only listing-side public marketplace data
  • Image URLs are pointers to OfferUp's CDN; the actor does not rehost or republish images
  • robots.txt and ToS — review OfferUp's current robots.txt and Terms of Service before commercial deployment; respect rate limits via the requestDelay parameter
  • GDPR / CCPA — although OfferUp is a US marketplace, downstream consumers in the EU, UK, or California must apply their own lawful-basis assessment when processing seller usernames as personal data
  • Brand & trademark use — "OfferUp" is a trademark of OfferUp Inc.; this actor is unaffiliated, unendorsed, and provided purely as a public-data extraction utility
  • Stolen-goods reporting — if your use case involves identifying stolen merchandise, coordinate with the relevant law-enforcement agency and respect chain-of-custody requirements

Important: OfferUp data may not be used for unlawful purposes including but not limited to stalking, harassment, deceptive trade practices, or any activity that violates OfferUp's Terms of Service. The user is responsible for the lawful application of the dataset.


Frequently Asked Questions

How fresh is the data?

Live at run time. The actor hits OfferUp's live search and detail endpoints, so every record reflects what's visible to a real user at the moment the actor ran. There is no cache between you and OfferUp.

How many listings can I get per run?

Configurable via maxRecords and maxPages. Typical practical limits are 200–2,000 listings per metro per keyword per run before OfferUp starts rate-shaping that residential session. For larger pulls, split across multiple actor runs (different metros, different keywords) and merge downstream.

Do I need an OfferUp account or API key?

No. OfferUp does not offer a public API, and no login is required to view public listings. You only need an Apify account to run the actor.

Does it cover every US state and ZIP code?

Yes — OfferUp operates nationwide and the actor accepts any "City, ST" or 5-digit ZIP as the location input. Coverage density follows OfferUp's user base — top metros have tens of thousands of active listings; rural ZIPs have fewer.

Why is residential proxy required?

OfferUp blocks every datacenter IP range (AWS, GCP, Azure, OVH, Hetzner, DigitalOcean, Linode, etc.) on the first request with HTTP 403. The actor ships pre-configured with Apify's RESIDENTIAL proxy group restricted to country-US — this is non-negotiable for reliable extraction.

Can it solve CAPTCHAs?

The actor uses stealth Playwright + session rotation + residential IPs to avoid CAPTCHAs in the first place. If an individual session does get a challenge, the actor rotates to a fresh residential session automatically (consecutiveFails retry loop). Full hCaptcha solving is not part of this actor.

What's the difference between card mode and scrapeDetails: true?

Card mode (scrapeDetails: false, the default) returns whatever data is on the search-result tile: title, price, location, condition, first thumbnail, basic seller name. Detail mode visits each listing's full page for the long-form description, full image gallery, OfferUp category, complete seller stats (rating, review count, TruYou flag, join date, total listings). Detail mode is 5–10× slower but gives you ~3× more usable data per record.

Can I scrape vehicle (car/truck) listings?

Yes. OfferUp's "Cars & Trucks" category is fully supported — use keywords like honda civic, f150, silverado, tundra, tacoma, tesla model 3, etc. The description field (in detail mode) is where mileage, VIN hints, accident history, and service notes typically appear — pipe it through an LLM for structured extraction.

Can I filter by exact OfferUp category?

The actor accepts keywords, not category IDs. Most use cases work better with keywords because OfferUp's category taxonomy is noisy — dewalt drill will surface every relevant tool whether it's filed under "Power Tools" or "Hand Tools" or "Construction Equipment". If you need pure-category scraping, run multiple keyword variants and dedupe on listingId.

Can I get seller phone numbers or emails?

No. OfferUp deliberately hides seller contact info — communication happens through in-app messaging, which is not accessible without authentication. The actor returns sellerName, rating, TruYou status, and join date — that's the full public seller surface.

Does the actor deduplicate listings?

Yes. A Set of listingId (or listingUrl / title fallback) is maintained across pages and across keywords within the same run, so a listing matching multiple keywords appears in the dataset exactly once.

What happens when OfferUp blocks me with a 403?

The actor automatically detects HTTP 403 and 429, closes the burned session, waits with exponential backoff (8000ms × failCount + jitter), creates a fresh session with a new residential IP, re-warms the homepage, and retries the same page. It gives up on a keyword after 3 consecutive blocks to avoid wasting CU.

Can I run this on the Apify Free Plan?

Yes — but you'll burn through free credits faster than CSV-based scrapers because Playwright + residential proxy is more expensive than direct HTTP. For sustained daily use, the Starter or Scale plan is recommended.

Can I schedule it to run automatically?

Yes. Apify's built-in Scheduler supports any cron expression — hourly deal scans, twice-daily reseller pulls, weekly market-research snapshots. Combine with webhook integrations for fully automated alerting pipelines.

What export formats are supported?

JSON, CSV, Excel (XLSX), HTML, XML, RSS, JSON Lines — all available directly from the Apify dataset view or via the /v2/datasets/{id}/items?format=... API endpoint.

Are listing images downloaded?

Noimages is an array of OfferUp CDN URLs. Download them client-side if you need local copies; this keeps the actor fast and avoids re-hosting third-party content.

Why are some fields null?

OfferUp doesn't surface every field on every listing card. Common nulls in card mode: description, category, images beyond the first thumbnail, sellerJoinDate, sellerItemCount, sellerReviewCount. Set scrapeDetails: true to populate them.

Does it work for international OfferUp variants?

OfferUp is US-only as of this writing. For other markets, see the related-actors catalog below — we maintain dedicated scrapers for Kleinanzeigen (Germany), Marktplaats (Netherlands), Kijiji (Canada), TradeMe (New Zealand), Lelong (Malaysia marketplace), Chợ Tốt (Vietnam), and Mourjan (MENA).

How do I report a bug or request a feature?

Open an issue on the Apify Store actor page or contact the developer directly through the Apify Console.


If you need second-hand marketplace data from other countries — or want to combine multi-market intelligence — these sibling scrapers are built to the same standard:


Comparison vs. Alternatives

ApproachSetup timeData freshnessAnti-bot handlingSchema normalizationMaintenance burden
This actor< 1 minuteLiveBuilt-in (residential + session rotation)Flat unified JSONZero
Manual scrolling + screenshotsHours per metroLiveManualNoneHigh
DIY Python + requestsDoesn't workBlocked instantly (datacenter IPs)DIYN/A
DIY Playwright + free proxies2–4 weeks devLiveBrittle, daily breakageDIYVery high
DIY Playwright + paid residential proxy1–2 weeks dev + ongoingLiveDecentDIYHigh
Buying a third-party OfferUp datasetDays to procureStale (weekly+)N/AVendor schemaVendor lock-in
Hiring a scraping agencyWeeks + retainerVariableAgency-managedCustomContract overhead

Why Pay-Per-Event Pricing?

This actor uses pay-per-event pricing instead of flat monthly subscriptions or unpredictable per-Compute-Unit billing:

  • You only pay when the actor runs — no monthly minimums, no idle subscription costs
  • Charges scale with data delivered — small test pulls cost pennies, big multi-metro pulls scale linearly and transparently
  • Line-item billing inside Apify — every run shows event count, duration, and exact cost
  • Free to evaluate — set maxRecords: 20 for a sub-dollar smoke test before any big commitment
  • No proxy surcharges to manage separately — residential proxy usage is included in the per-event price
  • Predictable budgeting — finance teams can model cost per record × records per month

Changelog

VersionDateNotes
1.0.02026-05Initial public release — Playwright + US residential proxy + API response interception, multi-keyword search, ZIP/city + radius targeting, price/condition/delivery filters, optional detail-page enrichment, full seller reputation block, pay-per-event pricing

Keywords

OfferUp scraper · OfferUp data API · OfferUp price scraper · OfferUp listings extractor · OfferUp marketplace scraper · OfferUp data extraction · OfferUp web scraping · OfferUp.com scraper · US used items data · US second-hand marketplace data · second-hand marketplace data · used items API · peer-to-peer marketplace scraper · C2C marketplace scraper · OfferUp lead generation · OfferUp seller data · OfferUp reseller research · OfferUp arbitrage tool · used car scraper US · used iPhone price data · used MacBook listings · sneaker resale data · OfferUp brand monitoring · counterfeit detection OfferUp · OfferUp competitive intelligence · dropshipping product research · ecommerce market analysis · second-hand price benchmark · OfferUp price tracker · OfferUp deal finder · Apify marketplace actor · OfferUp Los Angeles listings · OfferUp New York listings · OfferUp Chicago listings · OfferUp Houston listings · OfferUp Phoenix listings · OfferUp Philadelphia listings · OfferUp San Antonio listings · OfferUp Dallas listings · OfferUp Miami listings · OfferUp Seattle listings · OfferUp Atlanta listings · OfferUp Denver listings · OfferUp ZIP code search · TruYou verified seller data · OfferUp shipping listings · OfferUp pickup listings · classifieds scraper US · local marketplace data USA


Support

  • Bug reports: Open an issue on the Apify Store actor page
  • Feature requests: Same place — please describe your use case so we can prioritize correctly
  • Direct contact: Reach the developer through the Apify Console profile

If this actor saves you time, a 5-star rating on the Apify Store helps other resellers, ecommerce teams, and marketplace researchers discover it. Thank you!