Whatnot Scraper - Livestream Marketplace Data
Whatnot Livestream Marketplace Scraper
Scrape live shopping shows and product listings from Whatnot, 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_viewersandtotal_watchlist_users— for trend tracking and demand modeling. - Two modes:
categoriesfor the show feed,livestreamsfor 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
- Pick a mode.
categorieswalks a single tag page like/tag/sports_cardsand returns the shows it surfaces.livestreamstakes specific show URLs and returns the products inside each one. - The scraper navigates with a real Chromium browser through a US residential proxy. Whatnot's Cloudflare clears automatically — no CapSolver keys, no manual challenges.
- While the page mounts, the scraper intercepts Whatnot's internal
GetFeedandLiveShopFeedGraphQL responses, parses the JSON directly, and emits flat records. - It scrolls a few times to trigger lazy-loaded pages, dedupes by record ID, and stops when
maxItemsis reached.
Input
{
"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. |
proxyConfiguration |
object | Apify residential US | Residential US proxy required. Whatnot geofences listings to US IPs and sits behind Cloudflare. Datacenter IPs are blocked before the first byte. |
Drill into a specific livestream
{
"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
{
"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
{
"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.
Does Whatnot Scraper need proxies?
Yes. Whatnot Scraper requires Apify residential proxies pinned to the US. Whatnot is Cloudflare-protected and geofences its listing feed to US IPs — datacenter and non-US proxies see an empty splash page. The default proxy configuration in the input ships with this set up correctly.
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 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 CAPTCHA keys, no setup — Whatnot's Cloudflare clears automatically with the bundled residential proxy. You ship input JSON, you get clean records out.