# Whatnot Scraper - Livestream Marketplace Data (`jungle_synthesizer/whatnot-scraper`) Actor

Scrape Whatnot livestream shows and in-show product listings. Extract show titles, hosts, viewer counts, categories, prices, auction status, and seller stats. Filter by category tag (sports cards, Pokemon, TCG, toys, sneakers, comics, and more).

- **URL**: https://apify.com/jungle\_synthesizer/whatnot-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** E-commerce, Social media, Business
- **Stats:** 10 total users, 1 monthly users, 75.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 record scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## Whatnot Livestream Marketplace Scraper

Scrape live shopping shows and product listings from [Whatnot](https://www.whatnot.com), the dominant US livestream auction platform for collectibles. Returns show titles, hosts, viewer counts, categories, and — when you drill into a specific show — the auction and buy-now products listed inside it.

***

### Whatnot Scraper Features

- Pulls live and scheduled shows from any Whatnot category tag (sports cards, Pokémon, TCG, toys, sneakers, comics, and 15+ more).
- Captures host details — username, profile image, premier-shop status — so each show is already attributed to a seller.
- Drills into individual livestreams to extract every product line item: title, price (USD), auction-vs-buy-now, quantity, and listing status.
- Reports point-in-time activity — `active_viewers` and `total_watchlist_users` — for trend tracking and demand modeling.
- Two modes: `categories` for the show feed, `livestreams` for in-show products. Pick one per run, or chain runs.
- Returns flat JSON. Array fields are plain string arrays. No nested objects to unpack.

***

### What Can You Do With Whatnot Data?

- **Resellers** — track which shows are pulling viewers in your vertical, then study auction prices for inventory benchmarks.
- **Collectible pricing services** — sample current bids and buy-now prices across a category to ground market value.
- **Market analysts** — count concurrent livestreams per category as a leading indicator of demand for sports cards, TCG, sneakers, and other collectible verticals.
- **CRM enrichment** — pipe seller usernames and premier-shop flags into prospecting pipelines for high-volume hosts.
- **E-commerce intel** — compare Whatnot listing volume against eBay, StockX, or Goldin for the same SKUs.

***

### How Whatnot Scraper Works

1. Pick a mode. `categories` walks a single tag page like `/tag/sports_cards` and returns the shows it surfaces. `livestreams` takes specific show URLs and returns the products inside each one.
2. The scraper loads the US listing feed and Whatnot's Cloudflare clears automatically — no keys to supply, no manual challenges.
3. While the page mounts, the scraper intercepts Whatnot's internal `GetFeed` and `LiveShopFeed` GraphQL responses, parses the JSON directly, and emits flat records.
4. It scrolls a few times to trigger lazy-loaded pages, dedupes by record ID, and stops when `maxItems` is reached.

***

### Input

```json
{
  "mode": "categories",
  "categoryTag": "sports_cards",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
```

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `mode` | string | `categories` | `categories` returns livestream shows for a tag. `livestreams` returns the products inside specific show URLs. |
| `categoryTag` | string | `sports_cards` | Whatnot category-tag slug. Examples: `sports_cards`, `trading_card_games`, `toys`, `sneakers`, `comics`, `coins_and_money`. Whatnot uses underscores, not hyphens. |
| `livestreamUrls` | array | `[]` | List of `https://www.whatnot.com/live/<uuid>` URLs (used in `livestreams` mode). |
| `maxItems` | integer | `15` | Cap on returned records. The default keeps runs under the Apify tester's 5-minute budget; bump it for larger pulls. |

#### Drill into a specific livestream

```json
{
  "mode": "livestreams",
  "livestreamUrls": [
    { "url": "https://www.whatnot.com/live/0c3621ad-012a-49a5-9174-aa25c04ab724" }
  ],
  "maxItems": 30
}
```

***

### Whatnot Scraper Output Fields

A single dataset schema covers both modes. The `record_type` field tells you whether the row is a livestream show or a product listing inside one. Fields that don't apply to a given record type are `null`.

#### Categories mode — livestream show record

```json
{
  "record_type": "livestream",
  "id": "c2f772f5-88de-4ef5-9dbe-c293d006a8ad",
  "title": "$1 Singles NBA, NFL, MLB Sudden Death",
  "url": "https://www.whatnot.com/live/c2f772f5-88de-4ef5-9dbe-c293d006a8ad",
  "status": "PLAYING",
  "start_time": "2026-05-01T18:15:29.160Z",
  "active_viewers": 19,
  "total_watchlist_users": 1,
  "stream_service": "agora",
  "seller_username": "2farrgone",
  "seller_id": "13508717",
  "seller_profile_url": "https://www.whatnot.com/user/2farrgone",
  "seller_profile_image": "https://images.whatnot.com/...",
  "seller_is_premier": null,
  "categories": ["Football Cards"],
  "tags": ["Raw Cards", "$1 Starts", "Sudden Death"],
  "category_tag": "sports_cards",
  "thumbnail_url": "https://images.whatnot.com/...",
  "scraped_at": "2026-05-01T18:25:53.346Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `record_type` | string | Always `livestream` in categories mode. |
| `id` | string | Whatnot livestream UUID. |
| `title` | string | Show title set by the host. |
| `url` | string | Canonical Whatnot URL for the livestream. |
| `status` | string | `PLAYING`, `SCHEDULED`, or `ENDED`. |
| `start_time` | string | ISO 8601 timestamp the show is scheduled to start (or did start). |
| `active_viewers` | number | Concurrent viewer count at scrape time. |
| `total_watchlist_users` | number | Users who have added the show to their watchlist. |
| `stream_service` | string | Backend streaming service (`ivs`, `agora`). |
| `seller_username` | string | Host's Whatnot handle. |
| `seller_id` | string | Whatnot internal seller ID. |
| `seller_profile_url` | string | Direct URL to the host's profile. |
| `seller_profile_image` | string | Host avatar URL. |
| `seller_is_premier` | boolean | `true` if the host is a Premier Shop. May be null when the flag isn't returned. |
| `categories` | array of strings | Whatnot categories for the show (e.g. "Football Cards"). |
| `tags` | array of strings | Show tags (e.g. "Raw Cards", "$1 Starts"). |
| `category_tag` | string | The source category-tag slug used for discovery. |
| `thumbnail_url` | string | Show thumbnail image URL. |
| `scraped_at` | string | ISO timestamp the record was extracted. |

#### Livestreams mode — in-show product record

```json
{
  "record_type": "listing",
  "id": "TGlzdGluZ05vZGU6MTc2ODE2OTMxNg==",
  "title": "Mystery Pack #7",
  "url": "https://www.whatnot.com/live/0c3621ad-012a-49a5-9174-aa25c04ab724",
  "status": "ACTIVE",
  "price_usd": 5.00,
  "currency": "USD",
  "transaction_type": "AUCTION",
  "quantity": 1,
  "description": "",
  "seller_username": "ht_breaksingles",
  "seller_id": "UHVibGljVXNlck5vZGU6NTY3NDAwMzA=",
  "seller_profile_url": "https://www.whatnot.com/user/ht_breaksingles",
  "livestream_id": "0c3621ad-012a-49a5-9174-aa25c04ab724",
  "livestream_url": "https://www.whatnot.com/live/0c3621ad-012a-49a5-9174-aa25c04ab724",
  "thumbnail_url": "https://images.whatnot.com/...",
  "scraped_at": "2026-05-01T18:25:53.346Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `record_type` | string | Always `listing` in livestreams mode. |
| `id` | string | Whatnot listing-node ID (base64-encoded). |
| `title` | string | Product title shown in the live shop. |
| `url` | string | Parent livestream URL. |
| `status` | string | `ACTIVE`, `ENDED`, or other listing-status code. |
| `price_usd` | number | Listing price in USD, converted from Whatnot's cents-amount payload. |
| `currency` | string | Currency code (typically `USD`). |
| `transaction_type` | string | `AUCTION`, `BUY_NOW`, or `GIVEAWAY`. |
| `quantity` | number | Quantity available. |
| `description` | string | Listing description text (often empty). |
| `seller_username` | string | Host running the show. |
| `seller_id` | string | Whatnot internal seller ID. |
| `seller_profile_url` | string | Direct URL to the seller's profile. |
| `livestream_id` | string | Parent livestream UUID. |
| `livestream_url` | string | Parent livestream URL. |
| `thumbnail_url` | string | Listing thumbnail image URL. |
| `scraped_at` | string | ISO timestamp the record was extracted. |

***

### FAQ

#### How do I scrape Whatnot?

Whatnot Scraper hits the public category and livestream pages through a real browser. Pick `categories` mode and a category tag, run it, and you get back the shows currently surfaced on that tag. To get product-level data, copy a livestream URL into the `livestreamUrls` input and switch to `livestreams` mode.

#### What data does Whatnot Scraper return?

Whatnot Scraper returns either livestream show records (host, viewer count, status, categories, tags) or in-show product listings (price, transaction type, quantity, listing status). Both record types share a flat schema with a `record_type` discriminator field.

#### How much does Whatnot Scraper cost to run?

Whatnot Scraper is pay-per-result. A fixed start fee per run plus $0.001 per record saved. A typical 100-record category pull is around $0.20. A 1,000-record pull is about $1.10. There's no subscription and you only pay for records that get saved to the dataset.

#### Why are some fields null in the output?

Whatnot Scraper uses one schema for two record types. Livestream rows have viewer counts but no price; listing rows have price but no viewers. Fields that don't apply to a given record are returned as `null` rather than omitted, which keeps the dataset shape consistent across runs.

#### Can I filter by category?

Whatnot Scraper takes a single category-tag slug per run. Whatnot uses underscores in slugs (`sports_cards`, `trading_card_games`, `coins_and_money`). The input enum lists 21 supported tags covering the main collectible verticals. To cover more categories, run the actor multiple times.

***

### Need More Features?

Need a different Whatnot data shape, additional categories, or seller-profile crawling? [File an issue](https://console.apify.com/actors/issues) on the actor page or email through the Apify console.

### Why Use Whatnot Scraper?

- **First paid Whatnot actor on Apify** — the alternatives are free, sporadically maintained, and surface fewer fields. This one is built and monitored.
- **Real schema, two modes** — categories mode gives you market-level signal (which shows are live, who's hosting), livestreams mode gives you the actual auction prices. One actor covers both jobs that other scrapers split across separate tools.
- **No keys, no setup** — Whatnot's Cloudflare clears automatically. You ship input JSON, you get clean records out.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

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

What to extract from Whatnot. 'categories' returns livestream shows for a category tag. 'livestreams' drills into specific livestream URLs and returns the products listed inside each show.

## `categoryTag` (type: `string`):

Whatnot category tag slug (used in 'categories' mode). Examples: sports\_cards, trading\_card\_games, toys, sneakers, comics, books\_movies, electronics, coins\_and\_money. Whatnot uses underscores, not hyphens.

## `livestreamUrls` (type: `array`):

Whatnot livestream URLs to scrape products from (used in 'livestreams' mode). Format: https://www.whatnot.com/live/<uuid>

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

Maximum number of records to return. Categories mode returns livestream shows; livestreams mode returns product listings inside each show.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "mode": "categories",
  "categoryTag": "sports_cards",
  "maxItems": 15
}
```

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "mode": "categories",
    "categoryTag": "sports_cards",
    "maxItems": 15
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/whatnot-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "mode": "categories",
    "categoryTag": "sports_cards",
    "maxItems": 15,
}

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

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

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

```

## CLI example

```bash
echo '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "mode": "categories",
  "categoryTag": "sports_cards",
  "maxItems": 15
}' |
apify call jungle_synthesizer/whatnot-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jungle_synthesizer/whatnot-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/4B8JukOfdSVPEIZ38/builds/9sZJIwRlVWdx4trSO/openapi.json
