Whatnot Listings Scraper — Live Shop, Prices & Sellers
Pricing
from $0.89 / 1,000 whatnot listings
Whatnot Listings Scraper — Live Shop, Prices & Sellers
Scrape Whatnot listings by keyword, seller shop, or URL — a Whatnot API alternative for collectors and resellers. Export price, buy-it-now vs auction, condition, live-show flags, and seller ratings as JSON.
Pricing
from $0.89 / 1,000 whatnot listings
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
3
Monthly active users
7 days ago
Last modified
Categories
Share
Disclaimer: Unofficial tool for publicly accessible Whatnot listings. Whatnot and related names are trademarks of Whatnot Inc. Not affiliated with, sponsored by, or endorsed by Whatnot Inc. For informational, research, aggregation, and market-intelligence use only. Respect applicable terms of use and law.
Whatnot listings scraper for the live-commerce marketplace — Pokémon, sports cards, comics, sneakers, and collectibles. Use it as a Whatnot scraper, Whatnot API alternative, and Whatnot seller shop export: search by keyword, walk a seller username, or paste search / listing / profile / live / tag URLs. Dataset rows include price (major units, not cents), buy-it-now vs auction, condition, quantity, live-show flags, seller rating, and image URLs. Fast HTTP GraphQL — no login, no headless browser. Call from Python, Node.js, cURL, or Apify MCP.
Built for card flippers, break hosts, reseller pricing, seller intelligence, and scheduled listing monitors.
Collectibles suite
| Actor | Focus |
|---|---|
| TCGPlayer Listings Scraper | US TCG seller listings and shops |
| Cardmarket Listings Scraper | EU TCG seller offers and shops |
| Fanatics Collect Scraper | Weekly / Premier auctions, Buy Now, sold comps |
| Goldin Auctions Scraper | High-end sports cards / TCG hammer + sold |
| PSA Population Report Scraper | Set-level PSA pop census and gem rate |
| Whatnot Listings Scraper ◄── you are here | Whatnot live-commerce listings and shops |
| PriceCharting Scraper | Guide prices for games, TCG, and comics |
| eBay Active Listings Scraper | Live eBay BIN / auction asking prices |
| eBay Sold Listings Scraper | Completed eBay sold comps |
| eBay Sold Price Intelligence | Recommended price and demand score |
When to use this Actor
- You need a Whatnot scraper / Whatnot listings scraper that returns flat JSON rows
- You want keyword search, seller shop walk, and pasted Whatnot URLs in one run
- You track buy-it-now vs auction, live-show inventory, and seller ratings
- You scrape Whatnot with Python, Node.js, or MCP and export JSON / CSV
- You run a daily monitor and only want new listing IDs billed
When not to use this Actor
- eBay sold comps / fair-value reports — use eBay Sold Listings Scraper (then eBay Sold Price Intelligence)
- US / EU TCG seller books — use TCGPlayer Listings Scraper or Cardmarket Listings Scraper
- Weekly auction hammer — use Fanatics Collect Scraper
- High-end auction hammer — use Goldin Auctions Scraper
- PSA 10 pop / gem rate — use PSA Population Report Scraper
- Official Whatnot Seller API replacement — this Actor reads the public marketplace GraphQL the website uses, not seller-authenticated mutations
- Buyer PII, DMs, or order history — public listing and profile cards only
- Realtime websocket bid ticks — catalog snapshots, not in-stream hammer prices
Key features
- Keyword search —
searchKeywordsacross Products, Shows, Users, or all tabs - Seller shop inventory — cursor-walk shop listings for a handle, optionally filtered with
shopQuery - Start URL parsing — search, listing,
/user/{handle},/live/{id}(fetched by id), and/tag/{name}(that tag's live-show feed) - Buy format + price filters — buy-it-now vs auction, min/max price, live-only (search and seller shops)
- Sort — best match, newly listed (
CREATION_TIME), lowest / highest price (search and seller shops) - Flat CSV-friendly rows —
pricein major units, seller fields on the listing - Optional detail enrichment — extra
getListingfor category, timestamps, offerable, sold counts - HTTP GraphQL path — Chrome TLS impersonation, 256 MB default, no Playwright
- Monitor mode — named Key-Value store of seen listing IDs; later scheduled runs emit only new rows
- Deduplicated IDs across keywords, shops, and URLs
- MCP / AI ready — call from assistants via Apify MCP
Use cases
| Use case | What you get |
|---|---|
| Pokémon / sports-card pricing | Current Whatnot BIN and auction listings for a set or SKU |
| Seller shop dump | Active inventory for a handle; shopQuery to keep one SKU / set |
| Live-show scouting | Optional livestream rows with viewer counts and host username |
| Arbitrage watch | monitorMode on card or sneaker keywords; only new IDs billed |
| Competitor sellers | Ratings, followers, and what they have listed right now |
| Comps workflow | Whatnot live rows, then eBay sold listings for the same query |
Quick start
Keyword search:
{"searchKeywords": ["pokemon cards"],"maxItems": 50,"listingType": "buy_now","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Seller shop walk (omit shopQuery for full inventory):
{"sellerUsernames": ["ninosrips"],"includeSellerProfiles": true,"maxItems": 100,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Add "shopQuery": "vaporeon" to keep only shop listings matching that keyword.
Pasted search URL + monitor:
{"startUrls": [{ "url": "https://www.whatnot.com/search?query=pokemon%20cards&searchVertical=PRODUCT" }],"maxItems": 150,"monitorMode": true,"monitorStoreName": "whatnot-pokemon-bin","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchKeywords | Array | — | Search queries (required if no URLs/sellers) |
sellerUsernames | Array | — | Shop handles to walk |
shopQuery | String | — | Filter each seller shop by keyword (Whatnot shop search). Empty = full inventory |
startUrls | Array | — | Whatnot search, listing, seller, live, or tag URLs (/tag/{name} = that tag's show feed) |
vertical | String | PRODUCT | PRODUCT / LIVESTREAM / USER / ALL |
listingType | String | all | all, buy_now, auction — search and seller shops |
sort | String | best_match | best_match, newest (Newly Listed), price_asc, price_desc — search and seller shops |
minPrice / maxPrice | Number | — | Price band in major currency units |
onlyLive | Boolean | false | Keep rows tied to a live show |
includeListingDetails | Boolean | false | Extra getListing per row (sku, offerable, extra seller sold count) |
includeSellerProfiles | Boolean | false | Also emit seller records on shop walks (USER / ALL search already includes them) |
includeLiveShows | Boolean | false | Also query the Shows tab per keyword |
maxItems | Integer | 100 | Max rows (0 = unlimited subject to maxPages) |
maxPages | Integer | 20 | Pagination safety cap (24 objects/page) |
monitorMode | Boolean | false | Emit only new IDs vs previous run |
monitorStoreName | String | whatnot-listings-monitor | Named KV store for seen IDs |
resetMonitorState | Boolean | false | Wipe the seen-ID cache |
proxyConfiguration | Object | RESIDENTIAL | Apify datacenter IPs often get empty GraphQL; residential recommended |
Output format
Each dataset item is one listing, livestream, or seller row (recordType).
| Field | Type | Description |
|---|---|---|
recordType | String | listing, livestream, or seller |
id | String | Whatnot GraphQL id |
url | String | Public listing / show / profile URL |
title | String | Listing or show title |
subtitle / condition | String | Condition / language line from the card |
description | String | Short listing description |
category | String | Category label from the listing card |
listingStatus | String | e.g. ACTIVE |
transactionType | String | BUY_IT_NOW, ASYNC_AUCTION, LIVE_AUCTION |
isAuction / isBuyNow | Boolean | Format flags |
isOfferable | Boolean | Offers enabled (often already on the card; enrichment fills gaps) |
quantity | Integer | Available quantity |
price | Number | Price in major units (cents converted) |
priceMinor | Integer | Raw minor units from Whatnot |
currency | String | e.g. USD, EUR |
currentBid / currentBidCount | Number / Integer | Auction snapshot when present |
isLive | Boolean | Listing on a live show, or show status is PLAYING / LIVE |
status | String | Livestream status (PLAYING, ENDED, …) |
activeViewers | Integer | Current viewers on livestream rows |
tags | Array | Livestream tags / categories |
imageUrl / imageUrls | String / Array | Primary and all images |
sellerUsername / sellerUrl | String | Seller handle and profile URL |
sellerRating / sellerReviewCount | Number / Integer | Public rating |
sellerFollowerCount / sellerSoldCount | Integer | On shop walks and detail enrichment |
createdAt / updatedAt | String | ISO timestamps when present |
searchQuery | String | Keyword or handle that produced the row |
source | String | search, seller_shop, listing_url, live_url, or tag_url |
scrapedAt | String | ISO scrape time |
Example listing row:
{"recordType": "listing","source": "search","searchQuery": "pokemon cards","id": "TGlzdGluZ05vZGU6MjEzNjkzMTA3OQ==","url": "https://www.whatnot.com/listing/TGlzdGluZ05vZGU6MjEzNjkzMTA3OQ==","title": "Umbreon - Sylveon - Vaporeon Pokémon Coin Set Bundle","condition": "New","transactionType": "BUY_IT_NOW","isBuyNow": true,"quantity": 1,"price": 39.0,"currency": "EUR","isLive": false,"sellerUsername": "ninosrips","sellerRating": 5.0,"sellerReviewCount": 19}
Integration examples
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('crawloop/whatnot-listings-scraper').call({searchKeywords: ['pokemon cards'],maxItems: 50,listingType: 'buy_now',proxyConfiguration: { useApifyProxy: true, apifyProxyGroups: ['RESIDENTIAL'] },});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.slice(0, 5));
Python
from apify_client import ApifyClientclient = ApifyClient(token)run = client.actor("crawloop/whatnot-listings-scraper").call(run_input={"searchKeywords": ["pokemon cards"],"maxItems": 50,"listingType": "buy_now","proxyConfiguration": {"useApifyProxy": True,"apifyProxyGroups": ["RESIDENTIAL"],},})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item.get("title"), item.get("price"), item.get("sellerUsername"))
cURL
curl "https://api.apify.com/v2/acts/crawloop~whatnot-listings-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchKeywords":["pokemon cards"],"maxItems":50,"listingType":"buy_now","proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call crawloop/whatnot-listings-scraper.
Example prompts:
- "Run Whatnot Listings Scraper for pokemon cards, max 50 buy-it-now, residential proxy, and return title, price, currency, sellerUsername, url as JSON"
- "Scrape the Whatnot shop for seller ninosrips, filter shopQuery vaporeon, residential proxy, and summarize prices and quantities"
- "Run Whatnot Listings Scraper on https://www.whatnot.com/tag/sudden_death and return live show titles, viewer counts, and host usernames"
- "Pull live Whatnot listings for jordan 1, then run eBay Sold Listings Scraper for the same query to compare comps"
Suite next step
Whatnot is the live-commerce firehose. For sold comps on the same SKU (Pokémon, sports cards, sneakers), run eBay Sold Listings Scraper next. For live TCG marketplace asks, chain TCGPlayer Listings Scraper or Cardmarket Listings Scraper. For weekly auction hammer, add Fanatics Collect Scraper; for graded high-end, Goldin Auctions Scraper; for gem rate, PSA Population Report Scraper.
FAQ
Is this an official Whatnot API?
No. It calls the same public GraphQL the website uses (search, getListing, liveStream, getUser shop, getLivestreamTagByName) and returns structured dataset rows — a practical Whatnot API alternative for pipelines.
Can I scrape a Whatnot seller shop by username?
Yes — set sellerUsernames (or paste a /user/{handle} URL in startUrls). The Actor walks shop inventory with pagination. Add shopQuery to keep only listings matching that shop search (same as the seller's shop search box).
Can I paste a Whatnot search URL?
Yes — startUrls accepts search links (query + vertical parsed), listing URLs, seller/shop URLs, live show URLs (/live/{id} via liveStream(id)), and tag URLs (/tag/{name} walks that tag's live-show feed).
Do I need a Whatnot login?
No — public marketplace data only.
Does it need a residential proxy?
On Apify, yes — residential. Datacenter IPs often receive empty GraphQL (data: null). The Actor injects RESIDENTIAL on the platform when proxyConfiguration is omitted (API / MCP / cURL). Local runs can omit the proxy. Use apifyProxyGroups: ["RESIDENTIAL"].
Are prices in cents?
price / currentBid are converted to major units (e.g. 3900 → 39.00 EUR). priceMinor keeps the raw integer.
Buy-it-now vs auction?
Filter with listingType: buy_now, auction, or all. Each row has transactionType, isBuyNow, and isAuction.
What is monitor mode?
With monitorMode: true, seen listing IDs are stored in a named Key-Value store. The first run is the baseline. Later scheduled runs push and charge only IDs not seen before.
Python / Node.js / MCP?
Yes — use the Apify client examples above or Apify MCP prompts.
How many listings per search?
Whatnot paginates 24 objects per page. Raise maxPages / maxItems or add more keywords and seller shops.
Related Actors
| Actor | Focus |
|---|---|
| Whatnot Listings Scraper ◄── you are here | Whatnot listings, shops, optional shows |
| TCGPlayer Listings Scraper | US TCG listings and shops |
| Cardmarket Listings Scraper | EU TCG listings and shops |
| Fanatics Collect Scraper | Weekly / Premier auctions + sold |
| PSA Population Report Scraper | PSA pop census and gem rate |
| eBay Sold Listings Scraper | eBay sold comps |
| Goldin Auctions Scraper | Sports cards / TCG auctions |
| PriceCharting Scraper | TCG / games / comics guides |