OfferUp Scraper avatar

OfferUp Scraper

Under maintenance

Pricing

from $3.50 / 1,000 results

Go to Apify Store
OfferUp Scraper

OfferUp Scraper

Under maintenance

Scrape 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

Leonard Parisi

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

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
}
FieldTypeDefaultRequired
searchQuerystring
latnumber
lonnumber
locationstring""— (display/logging only)
resultsLimitinteger20

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 install
npm run build # tsc → dist/

Deployment

./node_modules/.bin/apify login # first time only
npm 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")