Tony Wang6 min readHow to Scrape Whatnot in 2026 (API & Python)
Scrape Whatnot's live-show catalog — browse, categories, live show detail — via a structured API. Covers what's public vs. blocked, not in-stream bidding.
The fastest way to collect Whatnot data in 2026 is a structured API that returns live-show and category listings as normalized JSON. Whatnot is a live-commerce and auction platform — sellers run video streams where buyers bid or buy in real time — which is a genuinely different genre from a static product catalog like eBay or StockX. This guide covers what's actually scriptable: which shows are live, what categories exist, and a show's product/listing metadata. It does not cover real-time in-stream bidding activity (the live bid ticks inside a stream), which isn't exposed by any public interface.
Why scrape Whatnot data?
- Live-commerce market research — track how many shows are running in a category at a given time, and which sellers are active.
- Category and seller trend tracking — watch which categories (trading cards, sneakers, women's fashion) are growing in show volume.
- Collectibles market monitoring — trading cards, graded slabs, and sneaker resale are the platform's core categories; tracking show titles and tags surfaces what's trending.
- AI pipelines and agents — feed normalized show and category data into a market-monitoring or research agent instead of screen-scraping a video-first UI.
Is it legal to scrape Whatnot?
Option 1: DIY in Python (and why it breaks)
A naive scraper hits the browse page and tries to pull show cards out of rendered markup:
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://www.whatnot.com/category/trading_card_games",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Live show cards, thumbnails, and status render from client-side state —
# you end up parsing JSON out of a script tag, not stable HTML
It demos once, then breaks:
- The ToS is explicit. Whatnot names scraping, spidering, and crawling directly as a prohibited use of the App — this isn't ambiguous.
- The page is a live app, not a document. Show status (
PLAYINGvs. ended), viewer counts, and product state update via websocket/client state, not static markup — a UI change silently breaks a CSS-selector scraper. - There's no public read API to fall back on. The official Seller API is a closed Developer Preview for sellers managing their own inventory — it isn't a substitute for browsing the public catalog.
- Anti-bot defenses. Like most high-traffic commerce apps, Whatnot fronts its site with bot detection; scripted requests without a real browser session get rate-limited or blocked quickly.
Option 2: No-code / ready-made tools
Browser extensions and point-and-click scrapers can export a single browse page's show list, but tracking a fast-moving live-show platform means re-pulling category listings on a schedule to catch shows starting and ending — a job for a stable endpoint, not a one-off manual export.
Option 3: A structured Whatnot API
For a repeatable workflow, a Whatnot scraping API returns normalized JSON for the category list, live shows by category, and a show's product detail — no page parsing, no closed developer program to apply to. Start with the category list:
curl "https://api.crawlora.net/api/v1/whatnot/categories" \
-H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"categories": [
{ "id": "Q2F0ZWdvcnlOb2RlOjE0OQ==", "name": "Trading Card Games", "slug": "trading_card_games" },
{ "id": "Q2F0ZWdvcnlOb2RlOjM=", "name": "Sports Cards", "slug": "sports_cards" },
{ "id": "Q2F0ZWdvcnlOb2RlOjY1Ng==", "name": "Women's Fashion", "slug": "womens_fashion" }
]
}
}
Use a category slug to browse its live shows, then pull a specific show's products by id:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/whatnot"
categories = requests.get(f"{base}/categories", headers=h).json()["data"]["categories"]
browse = requests.get(
f"{base}/browse", headers=h, params={"category": "trading_card_games"}
).json()["data"]
show_id = browse["shows"][0]["id"]
show = requests.get(f"{base}/live/{show_id}", headers=h).json()["data"]
browse returns the shows currently associated with a category:
{
"code": 200,
"msg": "OK",
"data": {
"category": "trading_card_games",
"shows": [
{
"id": "6ddb7fd2-43bb-44e0-8ee8-6656e82fa26a",
"url": "https://www.whatnot.com/live/6ddb7fd2-43bb-44e0-8ee8-6656e82fa26a",
"title": "$100k Late Night Slab Show",
"seller_username": "legacy_auction_house",
"status": "PLAYING",
"start_time_ms": 1785996739803,
"thumbnail_url": "https://images.whatnot.com/...",
"tags": ["Sudden Death", "Graded Cards", "Pokémon"]
}
]
}
}
And live/{id} returns that show's product listings (check the docs for the full field list):
{
"code": 200,
"msg": "OK",
"data": {
"id": "6ddb7fd2-43bb-44e0-8ee8-6656e82fa26a",
"url": "https://www.whatnot.com/live/6ddb7fd2-43bb-44e0-8ee8-6656e82fa26a",
"products": [
{
"id": "TGlzdGluZ05vZGU6MjEzMTA5NzI1NA==",
"title": "slab",
"description": "show live",
"price_cents": 1000,
"currency": "USD",
"status": "running",
"transaction_type": "AUCTION",
"quantity": 219,
"seller": { "username": "legacy_auction_house", "rating": 4.9, "review_count": 128914 }
}
]
}
}
What you can collect
- Categories: name and slug for every top-level category Whatnot organizes shows under (trading cards, sports cards, fashion, and more)
- Browse-by-category: currently associated shows — ID, URL, title, seller username, status, start time, thumbnail, and descriptive tags
- Live show detail: a show's product/listing entries — title, description, price, currency, status, transaction type (auction vs. fixed price), quantity, and basic seller stats (username, rating, review count)
This is catalog and show-level metadata — a snapshot of what's listed and running, not a stream of individual bid events.
Limitations
- The API surface is narrow. This is a 3-endpoint group — browse, categories, and live show detail — there's no search, no seller-profile endpoint, and no historical archive of past shows.
- No in-stream bidding data. Bid-by-bid activity inside a live auction (who bid what, when, the running high bid tick-by-tick) isn't exposed by any public interface, including this one —
live/{id}returns listing state, not a bid log. - Show state is a snapshot.
status,quantity, and price fields reflect the moment you pull them; a fast-moving auction show can change seconds later. - No official public read API to compare against. Whatnot's own Seller API is a closed preview for sellers managing inventory, so there's no first-party alternative for general market research.
- Public data only. This covers public browse and show pages — not account data, DMs, order history, or a way to place a bid on a seller's behalf.
Where this gets used
- Collectibles and resale market research — track which categories and tags (graded cards, specific franchises) show up most often across live shows.
- Live-commerce trend tracking — monitor show volume and seller activity by category over time.
- Feed enrichment for research and monitoring agents — normalized show/category JSON instead of parsing a video-first web app.
Sources
Start collecting
Try it first, free: run any public URL through the Free Web Scraper, or check whether a site blocks bots with the Anti-Bot Checker — no signup.
Test the categories, browse, and live-show endpoints in the Playground, check the schema in the API docs, and review pricing. Whatnot's live-auction model sits next to two other collectibles and resale marketplaces in this series: how to scrape StockX for order-book resale pricing, and how to scrape eBay for fixed-price and traditional-auction listings. See also is web scraping legal.
Part of our how-to-scrape guide series — every platform we cover, in one index.
Frequently asked questions
Does Whatnot have a public API?
Not a general-purpose one. Whatnot runs a Seller API in Developer Preview, scoped to sellers managing their own listings and sale notifications, and it's currently closed to new applicants. There's no public read API for browsing the marketplace.
Is it legal to scrape Whatnot?
Whatnot's Terms of Service explicitly prohibit using any software, technology, or device to scrape, spider, or crawl the App or harvest data, and separately bar bypassing access restrictions. Public facts aren't copyrightable and hiQ v. LinkedIn found accessing public data isn't a CFAA violation, but the ToS is the binding constraint here — this isn't legal advice, so review the terms yourself and consult a lawyer for your specific use case.
What does Whatnot's robots.txt allow?
It's permissive on the public site — Allow: / — and only disallows account, dashboard, inbox, messages, order, and video/player paths, which are the private and auth-gated surface. It doesn't fence off public browse or category pages the way some competitors do.
Can I track live bidding activity on a Whatnot show with this API?
No. The browse, categories, and live-show-detail endpoints return catalog and listing metadata — show status, product price, quantity, transaction type — not a bid-by-bid log of what happens inside a live auction. Real-time in-stream bidding isn't exposed by any public interface, including this one.
What can I collect from Whatnot's catalog API?
Three things: the full category list (name and slug), shows currently browsable in a category (ID, title, seller, status, start time, tags), and a specific show's product listings (title, price, currency, status, transaction type, quantity, and basic seller stats) via its ID.
How do I get a show's ID to look up its products?
Call /whatnot/browse with a category slug (from /whatnot/categories) — each returned show includes an id field. Pass that id to /whatnot/live/{id} to get the show's product/listing detail.
Why is this API surface so small compared to other platforms?
Whatnot is a live-video-first app without a conventional public catalog API, so this group covers what's reliably scriptable — category taxonomy, browse-by-category, and per-show listing detail — rather than overclaiming coverage of search, seller profiles, or historical show archives that aren't exposed.