# OfferUp Scraper - Listings, Cars & Details (`soldgraph/offerup-scraper`) Actor

OfferUp listings near any US ZIP code with category, condition, price and car filters (make, mileage, body style). Full listing details with seller and vehicle info. Pay per result.

- **URL**: https://apify.com/soldgraph/offerup-scraper.md
- **Developed by:** [Soldgraph](https://apify.com/soldgraph) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## OfferUp Scraper - Listings, Cars & Details

Search **OfferUp** listings around any US ZIP code by keyword. Every row has the price, city, condition, a link and a photo. Car and truck searches add mileage, and filters for make, maximum mileage and body style. **Details mode** adds the description, posted date, coordinates, shipping, all photos, the seller profile and vehicle details.

### What you can do with it

- **Find local deals** to flip, across several ZIP codes in one run
- **Price items** from what similar listings ask nearby
- **Source used cars** by make, mileage and body style
- **Monitor a category** on a schedule

### How to use it

1. Add keywords and US ZIP codes. Every keyword is searched around every ZIP code.
2. Optional: radius (up to nationwide), sort, category, condition, price range, car filters.
3. Run it and export as JSON, CSV or Excel.

For full details, choose **Full details for listing URLs or IDs** and paste `offerup.com/item/detail/...` links, item numbers or IDs.

### Input example

```json
{ "queries": ["honda civic"], "zipCodes": ["10001"], "radius": "50", "vehicleMaxMileage": "100000" }
```

### Output example

```json
{
  "query": "mountain bike",
  "zip": "10001",
  "title": "Red Mountain Bike with Rear Derailleur",
  "price": 55,
  "currency": "USD",
  "city": "Colma",
  "state": "CA",
  "link": "https://offerup.com/item/detail/..."
}
```

### Pricing

- **Search results: $2.00 per 1,000 listings**
- **Listing details: $6.00 per 1,000 listings**

OfferUp repeats listings across pages. Repeats are removed, so you only pay for unique listings.

### FAQ

**How many listings per search?** OfferUp stops a search at about 220 listings. Use more ZIP codes, a smaller radius or tighter filters to cover more.

**What do the fields mean?** See the [field reference](https://soldgraph.com/docs/api/offerup-listings).

# Actor input Schema

## `mode` (type: `string`):

Search returns listings with price, city and photo. Details adds the description, posted date, coordinates, shipping, all photos, seller profile and vehicle details.

## `queries` (type: `array`):

One search per line.

## `zipCodes` (type: `array`):

Five-digit US ZIP codes. Every keyword is searched around every ZIP code.

## `radius` (type: `string`):

Optional.

## `maxPages` (type: `integer`):

Page sizes vary. One search stops at about 220 listings. You pay per unique listing returned.

## `sort` (type: `string`):

Optional. Order of results.

## `category` (type: `string`):

Optional. 1 Electronics & Media, 2 Home & Garden, 3 Clothing, Shoes & Accessories, 4 Baby & Kids, 5 Vehicles, 5.1 Cars & Trucks, 6 Toys, Games & Hobbies, 7 Sports & Outdoors, 8 Collectibles & Art.

## `condition` (type: `string`):

Optional. Only listings in this condition.

## `minPrice` (type: `integer`):

Optional. Only listings at or above this price.

## `maxPrice` (type: `integer`):

Optional. Only listings at or below this price.

## `vehicleMake` (type: `string`):

Optional, lowercase with underscores, for example toyota or land_rover. Only for car and truck searches.

## `vehicleMaxMileage` (type: `string`):

Optional. Car and truck searches only.

## `vehicleStyle` (type: `string`):

Optional. Car and truck searches only.

## `listings` (type: `array`):

For details mode: offerup.com/item/detail/... URLs, item numbers or IDs from a search, one per line.

## Actor input object example

```json
{
  "mode": "search",
  "queries": [
    "mountain bike"
  ],
  "zipCodes": [
    "10001"
  ],
  "maxPages": 1
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "mountain bike"
    ],
    "zipCodes": [
        "10001"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("soldgraph/offerup-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "queries": ["mountain bike"],
    "zipCodes": ["10001"],
}

# Run the Actor and wait for it to finish
run = client.actor("soldgraph/offerup-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "mountain bike"
  ],
  "zipCodes": [
    "10001"
  ]
}' |
apify call soldgraph/offerup-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,soldgraph/offerup-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/rLwizH0g2CFqYbF8d/builds/GB0h8AtqwfcxaNAlu/openapi.json
