# OfferUp Scraper — Deal Radar (`intelscrape/offerup-deal-radar`) Actor

OfferUp under-$X deal radar: maxPrice/minPrice packs, dealScore, multi-metro alerts. Pay per listing. Lawful use only.

- **URL**: https://apify.com/intelscrape/offerup-deal-radar.md
- **Developed by:** [IntelScrape](https://apify.com/intelscrape) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Seller trust (2026-09-06)

- minSellerRating / requireVerifiedSeller / filtersApplied

## OfferUp Deal Radar — Local Deal Score & Alerts

![Actor Banner](https://api.apify.com/v2/key-value-stores/PyvJzfQg02FD3RYhd/records/offerup-deal-radar-banner.png)

> 🇨🇳 **中文简介 (Chinese — China & Singapore):**
> 想在 OfferUp 抢本地低估价？按关键词与地区抓取在售列表并突出交易分/新品信号，方便翻新与套利。按结果计费，适合中新买家研究美国本地二手供应。现在就在 Apify 试跑，把高分列表送进提醒。

> 🇸🇬 **Ringkasan Melayu (Singapore):**
> Nak deal OfferUp tempatan? Scrap senarai mengikut kata kunci/lokasi dengan skor deal. Bayar per hasil. Sesuai untuk reseller di Singapura. Cuba di Apify hari ini.

#### 🤖 NEW: Connect This To Your AI!

Nice — you've got OfferUp deal scores. **Continue your journey →** triage alerts in Claude / Cursor via **[Skip Trace MCP Server](https://apify.com/intelscrape/skip--trace)**.

**Next step path:** OfferUp ↔ Craigslist / Marketplace / eBay comps.

- Soft-cross siblings: **[Craigslist Deal Scraper](https://apify.com/intelscrape/craigslist-deal-scraper)** · **[Facebook Marketplace Deal Radar](https://apify.com/intelscrape/facebook-marketplace-deal-radar)** · **[eBay Sold Comps](https://apify.com/intelscrape/ebay-sold-comps-scraper)**.

#### 🏆 Featured Bots by IntelScrape

*Path: Leads → Emails → Skip Trace → Enrich (pick the next step when you’re ready).*

1. **[OfferUp Deal Radar](https://apify.com/intelscrape/offerup-deal-radar)** — Local Deal Score & Alerts
2. **[Craigslist Deal Scraper](https://apify.com/intelscrape/craigslist-deal-scraper)** — Next: Multi-City CL Deals
3. **[Facebook Marketplace Deal Radar](https://apify.com/intelscrape/facebook-marketplace-deal-radar)** — Next: FB Marketplace Deals
4. **[eBay Sold Comps](https://apify.com/intelscrape/ebay-sold-comps-scraper)** — Next: Sold Price Anchors
5. **[Amazon Product Scanner](https://apify.com/intelscrape/amazon-product)** — Sibling: Opportunity Score
6. **[Amazon Product Review Scraper](https://apify.com/intelscrape/amazon-product-review-scraper)** — Sibling: Review VOC
7. **[TikTok Scraper](https://apify.com/intelscrape/tiktok-scraper)** — Sibling: Influencer Leads
8. **[Skip Trace MCP Server](https://apify.com/intelscrape/skip--trace)** — Continue in Claude / Cursor / ChatGPT

> **Nice — paid upsell:** Wire `discordWebhook` / `webhookUrl` + optional `minDealScore` to get `deal-alert` notifies on high-score OfferUp finds. Pair with **[Craigslist Deal Scraper](https://apify.com/intelscrape/craigslist-deal-scraper)** and **[Facebook Marketplace Deal Radar](https://apify.com/intelscrape/facebook-marketplace-deal-radar)**.

***

⚡ **Use this Actor in n8n — no code**

1. Add the official **Apify** node in n8n.
2. Connect your Apify API token.
3. Run Actor ID: `IntelScrape/offerup-deal-radar`.

***

**OfferUp deal hunting for flippers** — multi-metro fanout, **dealScore**, **newOnly**, Discord alerts. Same ICP as Facebook Marketplace Deal Radar — not another raw OfferUp dump.

[![Apify](https://img.shields.io/badge/Apify-Actor-blue)](https://apify.com/intelscrape/offerup-deal-radar)

### Why this Actor

| You get | Most OfferUp scrapers |
| --- | --- |
| **dealScore 0–100** + **reasons\[]** | Title/price only |
| **Multi-metro** `metros[]` / `cities[]` fanout | One city per run |
| **newOnly** (schedule-ready KV seen-IDs) | Full re-dumps |
| **Discord / webhook** alerts | Manual CSV export |
| Honest **demoMode** fixtures | Silent empty / blocked runs |

Gap: Store OfferUp actors are thin (~111 users at top). No competitor ships this Deal Radar combo (score + alerts + multi-metro) like facebook-marketplace-deal-radar.

### Pricing (PPE)

| Event | What |
| --- | --- |
| `apify-default-dataset-item` | One listing via `pushData` |
| `apify-actor-start` | Run start |
| `deal-alert` | Discord and/or CRM webhook notify succeeds (high-score deals when `minDealScore` set) |

`deal-alert` bills only when a webhook/Discord notify actually succeeds — real delivered alert value (including `demoMode` if you wire a real webhook). One charge per listing even if both Discord + CRM fire.

### Quick start

1. Set `query` (e.g. `iPhone`) and `metros` (`Austin TX`, `Houston TX`, `Dallas TX`, …).
2. Optional: `minDealScore`, `newOnly`, `discordWebhook`, `radiusMiles`.
3. For Store try-outs or when OfferUp blocks: `demoMode: true`.
4. Schedule the Task so fresh deals keep flowing.

#### Input

- `query` · `metros[]` / `cities[]` · `radiusMiles`
- `maxItems` · `minPrice` · `maxPrice` · `minDealScore`
- `newOnly` · `discordWebhook` · `webhookUrl` · `demoMode`

#### Output

`title`, `price`, `location`, `url`, `postedAt`, `dealScore`, `reasons`, plus `metro` / `source`.

### Support

IntelScrape on Apify.

### License

Apache-2.0

> **Nice — next step:** Fan the same hunt across **[Craigslist](https://apify.com/intelscrape/craigslist-deal-scraper)** · **[Facebook Marketplace](https://apify.com/intelscrape/facebook-marketplace-deal-radar)** · **[eBay Sold Comps](https://apify.com/intelscrape/ebay-sold-comps-scraper)**. Continue your journey →.

# Actor input Schema

## `query` (type: `string`):

OfferUp search keywords (e.g. iPhone, sofa, mountain bike).

## `metros` (type: `array`):

Metro/city names to fan out across (e.g. Austin TX, Houston TX, Dallas TX). Alias of cities\[].

## `cities` (type: `array`):

Optional alias for metros\[]. Same city/metro names.

## `maxItems` (type: `integer`):

Maximum listings to push across all metros.

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

Filter out listings cheaper than this (0 = no min).

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

Filter out listings more expensive than this (0 = no max).

## `minDealScore` (type: `integer`):

Only push listings with dealScore >= this (0–100).

## `radiusMiles` (type: `integer`):

Search radius in miles (best-effort for live OfferUp search).

## `newOnly` (type: `boolean`):

Skip IDs already stored in KeyValueStore (offerup-deal-seen-ids). Schedule-friendly.

## `discordWebhook` (type: `string`):

Optional Discord incoming webhook for new deal alerts. Live runs: a successful Discord post bills the deal-alert PPE event ($0.002).

## `webhookUrl` (type: `string`):

Optional HTTP POST of each new listing JSON. Live runs: a successful POST bills deal-alert ($0.002). One alert charge per listing even if both Discord + CRM fire.

## `demoMode` (type: `boolean`):

Load bundled demo listings (no live scrape). Use when OfferUp blocks or for Store try-outs.

## `condition` (type: `array`):

Filter by item condition (igolaizola/crowdpull parity). Leave empty for any. Values: new, openBox, reconditioned, used, forParts, other (aliases NEW/OPEN\_BOX/USED accepted).

## `conditions` (type: `array`):

Alias of condition\[]. Same condition tokens.

## `sortBy` (type: `string`):

Sort listings (igolaizola). bestMatch | recent | closest | lowPrice | highPrice.

## `includeDetails` (type: `boolean`):

Fetch listing detail pages for description/photos/condition (igolaizola fetchDetails / crowdpull includeDetails). Extra requests per item.

## `onlyWithPhotos` (type: `boolean`):

Skip listings without an image.

## `delivery` (type: `string`):

Filter delivery (crowdpull): p=pickup, s=shipping, p\_s=both.

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

OfferUp category id (cid) — igolaizola parity. Top picks or raw cid like 1.2 (Electronics). Leave empty for all.

## `zipCode` (type: `string`):

US ZIP search center (igolaizola). Merged into metros/cities fanout when set.

## `latitude` (type: `number`):

Search center latitude (crowdpull). Pair with longitude.

## `longitude` (type: `number`):

Search center longitude (crowdpull). Pair with latitude.

## `maxAgeHours` (type: `integer`):

Only keep listings newer than this many hours (igolaizola maxAge). 0 = no filter. Uses postedAt/daysSinceListed when available.

## `onlyListingsNewerThan` (type: `string`):

Crowdpull-style date filter. ISO date (2024-01-15) or relative (7d, 30d, 6m, 24h). Leave empty for none. Combined with maxAgeHours (stricter wins).

## `searchQueries` (type: `array`):

Run multiple keywords in one job (lulzasaur/abotapi/memo23). When set, overrides singular query for fanout. Cap 10.

## `startUrls` (type: `array`):

OfferUp item or search URLs (memo23). Item detail URLs are enriched; search URLs are crawled. Cap 20.

## `proxyConfiguration` (type: `object`):

Apify proxy settings. Residential recommended for OfferUp.

## `minSellerRating` (type: `number`):

Only keep listings whose sellerRating >= this (0–5). 0 = no filter. Rival parity with crowdpull/piotrv seller trust gates. Pair with includeDetails for live seller ratings.

## `requireVerifiedSeller` (type: `boolean`):

Skip listings where sellerVerified is not true. Best with includeDetails. Rival seller-trust gate.

## Actor input object example

```json
{
  "query": "iPhone",
  "metros": [
    "Austin TX",
    "Houston TX",
    "Dallas TX"
  ],
  "maxItems": 50,
  "minPrice": 0,
  "maxPrice": 0,
  "minDealScore": 0,
  "radiusMiles": 30,
  "newOnly": false,
  "demoMode": false,
  "condition": [],
  "sortBy": "bestMatch",
  "includeDetails": true,
  "onlyWithPhotos": false,
  "delivery": "p_s",
  "category": "",
  "maxAgeHours": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "minSellerRating": 0,
  "requireVerifiedSeller": false
}
```

# Actor output Schema

## `listings` (type: `string`):

OfferUp listings pushed to the default dataset (dealScore, price, URL, reasons).

# 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 = {
    "query": "iPhone",
    "metros": [
        "Austin TX",
        "Houston TX",
        "Dallas TX"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("intelscrape/offerup-deal-radar").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 = {
    "query": "iPhone",
    "metros": [
        "Austin TX",
        "Houston TX",
        "Dallas TX",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("intelscrape/offerup-deal-radar").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 '{
  "query": "iPhone",
  "metros": [
    "Austin TX",
    "Houston TX",
    "Dallas TX"
  ]
}' |
apify call intelscrape/offerup-deal-radar --silent --output-dataset

```

## MCP server setup

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

```

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/SkD4yqBkiBWFDkosn/builds/rHYxh3tcINA4f0g61/openapi.json
