OfferUp Scraper avatar

OfferUp Scraper

Pricing

from $1.40 / 1,000 listings

Go to Apify Store
OfferUp Scraper

OfferUp Scraper

Scrape OfferUp listings by keyword, ZIP, and price filters. Each row has the asking price, condition, city, and photo from the public search. Monitor mode saves only new listings and price changes.

Pricing

from $1.40 / 1,000 listings

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by OfferUp Inc. or its affiliates. Data is read from publicly accessible search results only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

OfferUp scraper for US local listings. Each row is one search card: asking price in USD, condition, city, and photo. Search by keyword and ZIP, or paste a results URL. Use it as an OfferUp API alternative from Python, Node.js, cURL, or Apify MCP.

Best for: phone and furniture comps in one ZIP, price-filtered leads, and a scheduled run that saves only new listings and price changes.

ActorRole
OfferUp Scraper ◄── you are hereUS classifieds: price, condition, city, new-listing monitor
Facebook Marketplace ScraperUS marketplace listings
eBay Sold Listings ScraperSold comps for the same goods
Leboncoin ScraperFrance classifieds
Vinted MonitorFashion resale alerts
Depop MonitorDepop new listings
Poshmark Sold Listings ScraperPoshmark sold comps

When to use this Actor

  • A keyword in a ZIP — Set Keyword to iphone and ZIP to 10001. Leave Search URLs empty.
  • A price band — Set a minimum or maximum. Add a condition such as Used when you want that filter.
  • A results page you already opened — Paste the search URL. Keyword and ZIP are ignored when Search URLs is set.
  • New ads and price cuts — Turn on monitor mode and schedule the same search. The first run stores a baseline and saves nothing. Later runs save new listing ids and price changes.

When not to use this Actor

  • A single listing page — Item pages are not requested. The row is the search card.
  • Seller phone numbers or a full seller profile — Those are not on the search card.
  • A national dump in one run — Cap maxItems (150). Split by ZIP.

Key features

  • Search cards — Title, USD price, condition, city, photo, delivery flags, and vehicle miles when the card includes them. Default 256 MB. No browser.
  • Keyword, ZIP, radius, price, and condition — Recent, closest, or price sort.
  • Pasted search URL — a results link. Listing URLs are skipped.
  • Promoted tiles — A seller promotion is still one listing. promoted is true on that row. Display ads are dropped.
  • Monitor — Named key-value store of listing id and last price for that search. The seed run saves nothing.

Input

FieldRequiredDefaultWhat it does
Search URLsNo—Wins over the filters below.
KeywordNoiphone when the form is emptySearch text when URLs are empty.
ZIP codeNo10001US ZIP the search is centered on.
RadiusNo30 milesDistance from the ZIP. 50 miles is the widest step.
Minimum / maximum priceNo—Asking-price band in USD.
ConditionNoanyNew, open box, reconditioned, used, for parts, other.
SortNoRecent firstApplied when the Actor builds the search.
Maximum listingsNo30Cards to examine, up to 150.
Monitor modeNooffBaseline first, then new ids and price changes.
Monitor state storeNoofferup-monitorNamed store for the baseline.
ProxyNooffTurn on US residential only if a run is blocked.
{
"keyword": "iphone",
"zipCode": "10001",
"radius": "30",
"sort": "-posted",
"maxItems": 30,
"monitorMode": false,
"proxyConfiguration": {
"useApifyProxy": false
}
}

Output

FieldMeaning
idListing id
urlPublic listing path built from the id
titleListing title
priceAsking price in USD
conditionCondition text from the card
locationCity and state
imagePhoto URL
isFirmPriceTrue when the card marks the price as firm
vehicleMilesOdometer when the card includes it
flagsDelivery flags such as LOCAL_PICKUP
promotedTrue on a promoted seller tile
changeTypenew or price_change on monitor runs
previousPricePrior asking price when changeType is price_change
scrapedAtUTC timestamp
{
"id": "11111111-1111-1111-1111-111111111111",
"url": "https://offerup.com/item/detail/11111111-1111-1111-1111-111111111111",
"title": "iPhone 13 128GB",
"price": 400,
"currency": "USD",
"condition": "Used",
"location": "Yonkers, NY",
"image": "https://images.offerup.com/example.jpg",
"isFirmPrice": false,
"flags": ["LOCAL_PICKUP"],
"scrapedAt": "2026-09-29T12:00:00Z"
}

Use cases

  • Compare asking prices for one phone model inside a ZIP and keep condition and pickup flags.
  • Pull sofas under a price cap and export city plus photo for a lead list.
  • Schedule monitor mode each morning and export only listings whose price moved.
  • For sold comps on the same goods, run eBay Sold Listings Scraper. For other US marketplace posts, run Facebook Marketplace Scraper.

Integration examples

Replace APIFY_TOKEN. The slug below is the Store name.

Node.js

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("crawloop/offerup-scraper").call({
keyword: "iphone",
zipCode: "10001",
maxItems: 30,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("crawloop/offerup-scraper").call(run_input={
"keyword": "sofa",
"zipCode": "90210",
"maxPrice": 200,
"maxItems": 30,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items))

cURL

curl -X POST "https://api.apify.com/v2/acts/crawloop~offerup-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keyword":"iphone","zipCode":"10001","maxItems":30}'

MCP and AI assistants

Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store name crawloop/offerup-scraper.

Example prompts:

  • "Run OfferUp Scraper for iphone in ZIP 10001 and return price, condition, and location as JSON"
  • "Scrape OfferUp sofas in 90210 under 200 dollars and list title, price, and city"
  • "Run OfferUp Scraper in monitor mode for honda civic in 10001, then use eBay Sold Listings Scraper for sold comps"

Suite next step

This Actor covers US local classifieds. For sold prices on the same goods, run eBay Sold Listings Scraper. For other US marketplace posts, run Facebook Marketplace Scraper.

FAQ

Does this open every listing page? No. Each row is the public search card. Description and seller profile are not requested.

Which country is included? United States searches by ZIP. Other countries are not requested.

What if the run is blocked? Retry once with the proxy off. If the run still fails, turn on a US residential proxy.

What does monitor mode skip? Listing ids already stored for that same search, unless the asking price changed. A quiet tick writes zero rows. The first run only fills the baseline.

Are phone numbers included? No. The row has the public price, city, condition, and photo from the search card.