OfferUp Scraper — Listings, Prices & Seller Data avatar

OfferUp Scraper — Listings, Prices & Seller Data

Pricing

from $3.50 / 1,000 results

Go to Apify Store
OfferUp Scraper — Listings, Prices & Seller Data

OfferUp Scraper — Listings, Prices & Seller Data

Scrape OfferUp listings by keyword or URL. Extract title, price, location, condition, seller info, images, and shipping details. Supports filters for price, condition, and sort. No API key, no login.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Scrape OfferUp listings at scale by keyword or direct URL. Extract titles, prices, locations, conditions, seller profiles, images, and shipping details from the largest US local marketplace. No API key, no login required.

What does OfferUp Scraper do?

This actor scrapes OfferUp's public search feed and listing detail pages to extract structured marketplace data. It uses OfferUp's server-rendered __NEXT_DATA__ JSON payload — no browser required, no API key needed.

In search mode, it paginates through OfferUp's search results using the nextPageCursor mechanism, collecting up to 50 listings per page. Each page returns listing titles, prices, locations, conditions, images, and delivery flags. In detail mode, it fetches individual listing pages and extracts the full Apollo GraphQL cache, which includes descriptions, category trees, seller profiles with ratings, GPS coordinates, all listing images, posting dates, and shipping details.

The scraper supports OfferUp's native filters: price range, item condition (New, Used, Open box, Reconditioned, For parts), and sort order (recent first, price ascending/descending, closest, best match). Datacenter proxies work reliably.

Who is it for?

  • Resellers and flippers tracking local deals and price arbitrage opportunities across US markets
  • Market researchers analyzing secondhand pricing trends, supply density, and category demand
  • E-commerce analysts monitoring competitor pricing and inventory on the US local marketplace
  • Data scientists building datasets of secondhand goods pricing, geography, and seller behavior
  • Lead generation teams identifying high-volume sellers and business accounts on OfferUp

Use cases

  • Price monitoring: Track prices of specific product categories (electronics, furniture, vehicles) across different US cities to identify pricing trends and arbitrage opportunities
  • Market research: Analyze listing density, average prices, and condition distribution for product categories to size the secondhand market
  • Competitor intelligence: Monitor what resellers and business accounts are listing, their pricing strategies, and seller ratings
  • Inventory sourcing: Find bulk deals and underpriced items by scanning recent listings with price filters and condition filters
  • Geographic analysis: Map listing activity and pricing by location using extracted GPS coordinates and city data

Why use OfferUp Scraper?

  • No API key, no login — works out of the box with zero configuration on OfferUp's public pages
  • 26 data fields — extracts listing details, seller profiles, category trees, images, coordinates, and shipping info
  • Bulk pagination — follows OfferUp's nextPageCursor to collect hundreds or thousands of listings per keyword
  • Built-in filters — supports price range, condition, and sort order at the search level, reducing unnecessary data
  • Dual mode — search by keyword for bulk collection, or provide direct URLs for full listing detail with descriptions and seller data
  • Export to CSV, JSON, Excel — download results in any format, or connect to Google Sheets, Slack, Zapier, and Make

What data can you extract?

The scraper extracts the following fields from OfferUp listings. Search mode populates the core fields; detail mode (via direct URLs) adds descriptions, categories, seller profiles, and full image galleries.

FieldTypeDescription
listingIdstringUnique OfferUp listing identifier (UUID format)
titlestringListing title as shown on OfferUp
pricenumberListing price in USD
locationstringCity and state (e.g. "Los Angeles, CA")
conditionstringItem condition: New, Open box, Reconditioned, Used, For parts, Other
descriptionstringFull listing description text (detail mode only)
categorystringTop-level category (e.g. "Electronics & Media")
subcategorystringSub-category (e.g. "Cell phones & Accessories")
imageUrlstringPrimary listing image URL
imageCountnumberTotal number of listing images (detail mode)
imagesarrayAll listing image URLs at full resolution (detail mode)
urlstringDirect link to the listing on OfferUp
isFirmPricestringWhether the seller marked the price as firm
shippingAvailablestringWhether shipping is available for this listing
localPickupstringWhether local pickup is available
vehicleMilesnumberMileage for vehicle listings
postDatestringISO date when the listing was posted (detail mode)
sellerNamestringSeller's display name (detail mode)
sellerIdstringSeller's OfferUp user ID (detail mode)
sellerRatingnumberSeller's average rating out of 5 (detail mode)
sellerRatingCountnumberNumber of ratings received (detail mode)
sellerJoinDatestringWhen the seller joined OfferUp (detail mode)
latitudenumberListing GPS latitude (detail mode)
longitudenumberListing GPS longitude (detail mode)
quantitynumberAvailable quantity (detail mode)
searchTermstringThe keyword that returned this listing
scrapedAtstringISO timestamp of when the data was scraped

Example output (search mode)

{
"listingId": "b7a4da0d-f9ff-3320-a652-bd4dea75d12e",
"title": "iPhone 12 64GB Factory Unlocked",
"price": 300,
"location": "The Bronx, NY",
"condition": null,
"description": null,
"category": null,
"subcategory": null,
"imageUrl": "https://images.offerup.com/xANL-1U3BSOUbAFkIbYW2_lm3XI=/250x333/f3ab/f3ab8f599a724e188fed7f135306fd40.jpg",
"imageCount": null,
"images": null,
"url": "https://offerup.com/item/detail/b7a4da0d-f9ff-3320-a652-bd4dea75d12e",
"isFirmPrice": null,
"shippingAvailable": "false",
"localPickup": "true",
"vehicleMiles": null,
"postDate": null,
"sellerName": null,
"sellerId": null,
"sellerRating": null,
"sellerRatingCount": null,
"sellerJoinDate": null,
"latitude": null,
"longitude": null,
"quantity": null,
"searchTerm": "iphone",
"scrapedAt": "2026-09-09T12:00:00.000Z"
}

How to use

Option A: Search by keyword

Search for listings across OfferUp using one or more keywords. The scraper paginates automatically and applies your filters.

  1. Open the OfferUp Scraper on Apify Console
  2. Enter one or more keywords in Search Keywords (e.g. iphone, mountain bike, couch)
  3. Set Max Results Per Search to control how many listings to collect per keyword
  4. Optionally set Minimum/Maximum Price, Condition, and Sort By
  5. Click Start to run
{
"searchTerms": ["macbook pro", "dell laptop"],
"maxResults": 500,
"priceMin": 200,
"priceMax": 1500,
"condition": "USED",
"sortBy": "-posted"
}

Option B: Scrape specific listing URLs

Provide direct OfferUp listing URLs to extract full detail including descriptions, seller profiles, and all images.

  1. Open the OfferUp Scraper on Apify Console
  2. Paste listing URLs into Listing URLs (e.g. https://offerup.com/item/detail/b7a4da0d-f9ff-3320-a652-bd4dea75d12e)
  3. Click Start to run
{
"startUrls": [
"https://offerup.com/item/detail/b7a4da0d-f9ff-3320-a652-bd4dea75d12e",
"https://offerup.com/item/detail/70de5ee4-b14a-3e32-99ab-b24867b09e1d"
]
}

Input parameters

ParameterTypeDefaultDescription
searchTermsstring[]["iphone"]Keywords to search on OfferUp. Each keyword runs a separate paginated search.
startUrlsstring[][]Direct listing URLs to scrape with full detail (description, seller, images).
maxResultsinteger200Maximum listings per keyword. Set to 0 for unlimited.
priceMininteger0Minimum price filter in USD.
priceMaxinteger0Maximum price filter in USD. 0 = no limit.
conditionstring""Condition filter: NEW, OPEN_BOX, REFURBISHED, USED, BROKEN, OTHER, or empty for any.
sortBystringbest_matchSort order: best_match, -posted (recent), distance, price (low-high), -price (high-low).
proxyConfigurationobjectApify autoProxy settings. Datacenter proxies work well for OfferUp.

Full input example

{
"searchTerms": ["nintendo switch", "ps5"],
"startUrls": [],
"maxResults": 300,
"priceMin": 100,
"priceMax": 400,
"condition": "",
"sortBy": "-posted",
"proxyConfiguration": { "useApifyProxy": true }
}

Output example

Full detail mode output (from a direct listing URL):

{
"listingId": "b7a4da0d-f9ff-3320-a652-bd4dea75d12e",
"title": "iPhone 12 64GB Factory Unlocked",
"price": 300,
"location": "The Bronx, NY",
"condition": "Used",
"description": "iPhone 12 64GB Factory Unlocked\n\nBattery health:80%\n\nIt's a store pickup only!!",
"category": "Electronics & Media",
"subcategory": "Cell phones & Accessories",
"imageUrl": "https://images.offerup.com/YBmAIK5zGdMKKEnYQxUvcnAi0Hg=/960x1280/f3ab/f3ab8f599a724e188fed7f135306fd40.jpg",
"imageCount": 6,
"images": [
"https://images.offerup.com/YBmAIK5zGdMKKEnYQxUvcnAi0Hg=/960x1280/f3ab/f3ab8f599a724e188fed7f135306fd40.jpg",
"https://images.offerup.com/2IlIgjhu8Ba3Tmo1v4b6w_5KZOg=/960x1280/9c80/9c80764abc9b4f738e26b1d86a0cc4bb.jpg"
],
"url": "https://offerup.com/item/detail/b7a4da0d-f9ff-3320-a652-bd4dea75d12e",
"isFirmPrice": "false",
"shippingAvailable": "false",
"localPickup": "true",
"vehicleMiles": null,
"postDate": "2026-09-08T18:26:37.366Z",
"sellerName": "Throggs Neck Wireless & ELEC",
"sellerId": "29428444",
"sellerRating": 5,
"sellerRatingCount": 175,
"sellerJoinDate": "2017-05-26T00:37:53Z",
"latitude": 40.882,
"longitude": -73.83,
"quantity": 1,
"searchTerm": null,
"scrapedAt": "2026-09-09T12:00:00.000Z"
}

Tips for best results

  • Use specific keywords — "macbook pro m2" returns more targeted results than "laptop". OfferUp's search works best with specific product names.
  • Combine keywords and filters — Use priceMin/priceMax with condition to narrow down to exactly what you need and avoid wasting compute.
  • Sort by recent — Set sortBy to -posted to get the freshest listings first, useful for deal monitoring.
  • Start with search mode — Keyword search is fast (no per-listing requests). Use direct URLs only when you need descriptions and seller data.
  • Set reasonable maxResults — Each search page returns ~50 listings. Setting maxResults: 500 means ~10 pages per keyword, which runs in seconds.
  • Detail pages need US proxy — If you use direct listing URLs and get geo-blocked, switch to the BUYPROXIES94952 proxy group (US datacenter IPs).
  • Deduplicate across keywords — The scraper automatically deduplicates listings across keywords within the same run.
  • Schedule regular runs — Use Apify Scheduler to run daily or weekly and track new listings or price changes over time.
  • Check null fields — Search mode returns core fields only. Fields like description, sellerName, and images are null in search mode — use direct URLs for those.
  • Monitor vehicle listings — OfferUp has a large vehicles section. Use condition and price filters to find cars, and the vehicleMiles field for mileage data.

Integrations

OfferUp Scraper integrates with the tools you already use:

  • Google Sheets — automatically push scraped listings into a spreadsheet for tracking and analysis
  • Slack — get notified when new listings matching your criteria are found
  • Zapier — connect OfferUp data to 5,000+ apps (CRM, email, databases)
  • Make (Integromat) — build automated workflows that trigger on new scraping results
  • Webhooks — receive HTTP callbacks when a run finishes, with dataset download links
  • Schedule — run the scraper on a recurring schedule (hourly, daily, weekly) to monitor listings

API usage

Use the Apify API to run this scraper programmatically from any language.

cURL

curl -X POST "https://api.apify.com/v2/acts/logiover~offerup-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchTerms": ["iphone 15"],
"maxResults": 100,
"sortBy": "-posted"
}'

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('logiover/offerup-scraper').call({
searchTerms: ['iphone 15'],
maxResults: 100,
sortBy: '-posted',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("logiover/offerup-scraper").call(run_input={
"searchTerms": ["iphone 15"],
"maxResults": 100,
"sortBy": "-posted",
})
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
print(f"Got {len(items)} listings")

Use with AI agents (MCP)

OfferUp Scraper works with the Apify MCP server, letting AI agents like Claude search OfferUp listings and analyze marketplace data in natural language. Connect the Apify MCP server to your AI agent and ask questions like: "Find all iPhones under $200 on OfferUp and show me the cheapest 10 with their locations."

FAQ

Does OfferUp Scraper require an API key or login?

No. This scraper works entirely with OfferUp's public pages. No API key, no account login, and no cookies are required. It extracts data from server-rendered HTML that OfferUp serves to any visitor.

What data does it extract from search results vs. detail pages?

Search mode extracts title, price, location, condition, image, shipping/pickup flags, and listing URL. Detail mode (direct URLs) adds the full description, category tree, seller name/rating/join date, GPS coordinates, all images, posting date, and quantity.

How many listings can I scrape in one run?

There is no hard limit. A typical search keyword returns 50 listings per page, and the scraper follows pagination automatically. You can collect thousands of listings per keyword. Set maxResults to control the volume.

Why do some fields show null in search mode?

Fields like description, sellerName, category, postDate, and images are only available on the detail page. In search mode, the scraper extracts only what OfferUp includes in the search feed. To get full data, provide the listing URL in startUrls.

Why am I getting zero results for detail URLs?

Detail pages may return "Geolocation Unavailable" when accessed from non-US IP addresses. Switch to the BUYPROXIES94952 proxy group in the proxy configuration, which routes through US-based datacenter IPs.

What export formats are available?

You can download results as JSON, CSV, Excel (XLSX), XML, or RSS directly from the Apify Console. You can also connect to Google Sheets for automatic syncing.

How fast is the scraper?

Search mode is very fast — each page request returns ~50 listings and takes 1-2 seconds. A run collecting 500 listings typically finishes in under 30 seconds. Detail mode is slower since it makes one request per listing URL.

This scraper extracts only publicly available listing data that any visitor can see on offerup.com without logging in. The data is factual marketplace information (prices, titles, locations). Users are responsible for complying with applicable laws, OfferUp's Terms of Service, and data protection regulations in their jurisdiction.

Does OfferUp block scraping?

OfferUp's search pages work reliably with standard datacenter proxies. Detail pages may enforce geographic restrictions (US-only access). The scraper handles retries and proxy rotation automatically.

Can I filter by location or city?

OfferUp's search results are influenced by the proxy's geographic location. The scraper uses rotating datacenter proxies, so results may come from various US cities. For location-specific results, you can filter the output data by the location field.

How often is the data updated?

OfferUp listings are live and change frequently. Schedule the scraper to run hourly or daily to track new listings, removed listings, and price changes over time.

Check out these related scrapers for marketplace data:

This OfferUp Scraper extracts publicly available data from offerup.com. All extracted information — listing titles, prices, locations, images, and seller profiles — is data that any visitor can access without creating an account or agreeing to restricted terms. The scraper does not bypass any authentication, CAPTCHA, or access control mechanisms.

Users are solely responsible for ensuring their use of extracted data complies with applicable laws (including GDPR, CCPA, and other data protection regulations), OfferUp's Terms of Service, and any relevant intellectual property rights. Anthropic and the developer provide this tool for legitimate data collection purposes and do not endorse any use that violates third-party rights.