OfferUp Scraper
Under maintenancePricing
from $3.50 / 1,000 results
OfferUp Scraper
Under maintenanceScrape OfferUp search results by keyword and location. Returns structured listing data — title, price, condition, and images. Stealth browser with residential proxies for high reliability.
Pricing
from $3.50 / 1,000 results
Rating
0.0
(0)
Developer
Leonard Parisi
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
OfferUp Scraper (Apify Actor)
First-party actor replacing crowdpull/offerup-scraper (~$0.09/query → ~$0.02/query, 4.5× cheaper).
How it works
Navigates to https://offerup.com/search?q=<query> with PlaywrightCrawler + stealth plugin to establish a valid session, then calls POST /api/graphql (OfferUp's internal GraphQL endpoint) from within the page context so the request inherits browser cookies. Explicit lat/lon are passed as GraphQL searchParams — OfferUp ignores the URL ?location= parameter and uses IP geolocation for SSR, so the GraphQL variables are the only reliable way to target a city.
Images, fonts, and media are blocked to reduce proxy bandwidth.
Input
{"searchQuery": "mountain bike","lat": 34.0522,"lon": -118.2437,"location": "Los Angeles","resultsLimit": 20}
| Field | Type | Default | Required |
|---|---|---|---|
searchQuery | string | — | ✅ |
lat | number | — | ✅ |
lon | number | — | ✅ |
location | string | "" | — (display/logging only) |
resultsLimit | integer | 20 | — |
Output
{"listingId": "6760813b-6fea-3a1a-a5f1-997d0e5f7030","title": "Trek Road Bike","price": "$350","imageUrl": "https://images.offerup.com/...","images": ["https://images.offerup.com/..."],"listingUrl": "https://offerup.com/item/detail/6760813b-6fea-3a1a-a5f1-997d0e5f7030/","condition": "Good"}
price, imageUrl, condition are omitted when absent (not null — Effect Schema's Schema.optional rejects null). Debug screenshots and HTML are saved to the key-value store on failure (debug-screenshot-attempt-N, debug-html-attempt-N).
Development
npm installnpm run build # tsc → dist/
Deployment
./node_modules/.bin/apify login # first time onlynpm run deploy # apify push --force
Copy the actor ID from the Apify console and update ACTOR_ID in apps/api/src/adapters/offerup.ts.
Current actor ID: 3xAedihtuCglLxfiA (leonardparisi~offerup-scraper)
Infrastructure
- Base image:
apify/actor-node-playwright-chrome(same digest as facebook-marketplace actor) - Proxies: Apify residential pool, US only
- Memory: 1024 MB minimum
- Timeout: 120 seconds
- Runtime: Node 20, ESM (
"type": "module")