Whatnot Scraper - Live Shows, Lots & Sellers
Pricing
from $1.00 / 1,000 results
Whatnot Scraper - Live Shows, Lots & Sellers
Scrape Whatnot live and upcoming shows, queued items and lots, and seller profiles. Search by keyword or URL, then filter by category, format, seller rating, and country. Extract ratings, followers, sold counts, and more.
Pricing
from $1.00 / 1,000 results
Rating
5.0
(1)
Developer
Abot API
Maintained by CommunityActor stats
2
Bookmarked
3
Total users
2
Monthly active users
13 hours ago
Last modified
Categories
Share
Whatnot Scraper: Live Shows, Items & Seller Data
Whatnot is the largest live-shopping marketplace for collectibles: trading cards, sports cards, sneakers, comics, coins and toys, sold by sellers running scheduled live shows. This actor turns that into structured data: live shows playing now and scheduled for later, the items and lots sellers have listed (including the ones queued into an upcoming show), and seller profiles with ratings, followers and sold counts. Search by keyword or paste links, filter by category, format and seller quality, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.
Why This Scraper?
- Two ways in. Search by keyword, or paste a show, item, seller, category or search link and it is routed automatically to the right walk.
- Pre-sale detail on every item. Price, buying format, stock, condition and, for items queued into an upcoming show, the start time of that show, so you know what is coming before it sells.
- Seller quality on every row. Username, rating, review count, followers, sold count, verified and Premier Shop flags travel with every show and item, not just seller profiles, so you can rank by seller quality without an extra read.
- The site's own filters, all in one run. Category, show status and format, buying format, condition, graded and autographed only, minimum seller rating, Premier Shop only, seller country and a price range.
- Filters that actually work. Category handles are checked against the site's live category list before the run starts, and the price range is enforced here because the site's own price filter silently returns items below the floor anyway.
- Built for monitoring. Incremental mode returns only new and changed results on a recurring schedule, and Resume continues one interrupted run without paying for what it already collected.
- Honest about a real limit. Realised (sold) prices for finished shows are not published anywhere on the site, so this actor does not invent them, and a run that could not read the site fails loudly instead of returning an empty dataset.
Use Cases
- Collectors and resellers: track a category or seller for newly scheduled shows, fresh stock and price changes before a show starts.
- Sourcing and arbitrage: watch Buy It Now listings for a card, shoe or set across many sellers, filtered by condition and price range.
- Seller research and scouting: rank sellers by rating, followers, items sold and Premier Shop status before deciding who to watch or buy from.
- Market monitoring: run a scheduled incremental scan of a category to see new supply and pricing show up over time, without re-downloading what you already have.
- Community and fan tools: build a dashboard of live and upcoming shows in a category with viewer counts, start times and seller info.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
recordType | "show" (also "lot", "seller") |
title | "Sample vintage card break night" |
url | Whatnot link to the show, item or seller |
status | "PLAYING" (also "CREATED") |
startTime / endTime | show start and end time, UTC ISO 8601 |
activeViewers / watchlistUsers | live viewer count and watchlist size (shows) |
price / currency | listed price and its currency, in major units (items) |
transactionType | "BUY_IT_NOW" (also "LIVESTREAM_AUCTION") |
currentBid / currentBidCount | live auction state (items) |
listingStatus | "ACTIVE" (items) |
categories / categoryLabel | category names on a show or item |
tags | show tags, for example "Vintage", "Graded Cards" |
scheduledShowStartTime | the start time of the show a lot is queued into |
sellerUsername / sellerUrl | the seller behind every show, item and profile |
sellerRating / sellerReviewCount | seller rating out of 5 and review count |
sellerFollowerCount / sellerSoldCount | seller audience size and lifetime sales |
sellerIsVerified / sellerIsPremierShop | verified and Premier Shop flags |
changeType / changedFields | NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED (incremental mode) |
firstSeenAt / lastSeenAt | first and most recent time this result was seen (incremental mode) |
scrapedAt | when this row was read, UTC ISO 8601 |
Item and lot records also carry the subtitle, description, quantity, image URLs, break details (format, total spots, spots filled, spots sold), variants and a catalogue product match with its price range. Seller records also carry the display name, bio, following count, average shipping days, store banner, live and can-go-live flags, and, with "Read each seller's full profile" on, their most recent reviews (rating, text, the seller's reply and the date).
How to Use
- Pick a mode:
search(by keyword) orurl(paste links). - In search mode, add one or more keywords and a Result type (live shows, items and lots, sellers, or the platform's mixed feed). In URL mode, paste show, item, seller, category or search links.
- Narrow with the filters that apply to your Result type: category, show status and format, buying format, condition, graded or autographed only, minimum seller rating, Premier Shop only, seller country, and a price range.
- Set Max results to control run size and cost, then click Start.
Search for items by keyword:
{"mode": "search","queries": ["charizard"],"resultType": "lots","maxItems": 20}
Every live show in a category right now:
{"mode": "search","resultType": "shows","categories": ["pokemon_cards"],"showStatus": ["PLAYING"],"maxItems": 20}
Filtered Buy It Now items in a price range, from well-rated sellers:
{"mode": "search","queries": ["vintage lego"],"resultType": "lots","buyingFormat": ["BUY_IT_NOW"],"minSellerRating": "4.5","minPrice": 10,"maxPrice": 200,"maxItems": 50}
Paste links (category and search):
{"mode": "url","urls": ["https://www.whatnot.com/tag/pokemon_cards","https://www.whatnot.com/search?query=charizard"]}
A seller link (whatnot.com/user/<username>) returns that seller's profile plus their scheduled shows and their shop.
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/whatnot-scraper").call(run_input={"mode": "search", "queries": ["charizard"], "resultType": "lots"})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["price"], item["currency"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/whatnot-scraper').call({ mode: 'search', queries: ['charizard'], resultType: 'lots' });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Max results and page limits
Max results (maxItems) is the run's overall cap; 0 means no limit. In search mode, each keyword gets its own share of the cap, so one popular keyword cannot swallow the whole run. Max pages per keyword or link (maxPages) bounds how many result pages (24 results each) a single keyword or link is walked before moving on; 0 means no page limit, so the run stops only at Max results or when the site runs out of results.
Resume and recurring updates
- Resume from a previous run (
resumeFromRunId) continues one interrupted run: paste its run or dataset id and this actor skips everything already collected there, so you don't pay twice. - Incremental mode (
incrementalMode) is for scheduled monitoring of the same search. The first run returns everything asNEW. Later runs return onlyNEW,UPDATEDandREAPPEAREDby default, so you catch a newly scheduled show, a show going live, a price change or a fresh lot in a category you watch. Audience counters (viewers, watchlist, followers, sold count, reviews) are deliberately ignored when deciding what changed, because they drift constantly.stateKeynames or shares the stored state; leave it empty and the actor derives one from the mode, Result type, keywords, links and filters, so two different searches never mix by default.emitUnchangedandemitExpiredalso return (and bill) unchanged and expired rows;EXPIREDis only produced once a run has fully scanned the tracked search, never after a capped, resumed or empty run.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
- Authorize a connector once under Apify โ Settings โ Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field (
mcpConnectors). Notion gets a rich page per result and needsnotionParentPageUrlset to the page items should be created under; the other connectors get a best-effort write or digest. maxNotifyListingscaps how many results are written to each connector per run.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave mcpConnectors empty to skip it entirely.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (keyword search) or url (scrape pasted links). |
resultType | string | shows | What a search (or a pasted search/category link) returns: shows, lots, sellers, or mixed. A pasted show, item or seller link always returns its own kind. |
queries | array | ["charizard"] | Search keywords (search mode). Each keyword gets its own share of Max results. |
urls | array | sample | Whatnot links to scrape (url mode): show, item, seller, category or search links. |
categories | array | (none) | Only return results in these category handles (prefilled with pokemon_cards in the Console). Checked against the site's live category list at the start of the run. |
showStatus | array | (none) | Only return shows in these states: PLAYING or CREATED. Applies to Result type shows or mixed. |
showFormat | array | (none) | Only return shows run in these formats (auction, breaks, buy it now, graded, singles, surprise sets). Applies to Result type shows or mixed. |
buyingFormat | array | (none) | Only return items sold this way: BUY_IT_NOW or LIVESTREAM_AUCTION. Applies to Result type lots or mixed. |
conditions | array | (none) | Only return items marked with these free-text conditions, for example "Near Mint" or "Graded". |
gradedOnly | boolean | false | Only return items marked as professionally graded. |
autographedOnly | boolean | false | Only return items marked as autographed. |
minSellerRating | string | any | Minimum seller rating: any, 4.0, 4.5, or 5.0. |
premierShopOnly | boolean | false | Only return results from sellers marked as Premier Shops. |
sellerCountries | array | (none) | Only return results from sellers in these countries. |
minPrice | integer | (none) | Only return items priced at or above this amount. Enforced by this actor on each record's own price. |
maxPrice | integer | (none) | Only return items priced at or below this amount. Enforced by this actor on each record's own price. |
sortBy | string | (none) | Ordering asked of the site: recommended, viewers-desc, viewers-asc for shows; best-match, price-asc, price-desc, newest for items and sellers. |
fetchSellerDetails | boolean | false | Read each seller's full public profile and attach it to every result (adds a per-result surcharge; cached within a run). |
maxSellerReviews | integer | 20 | How many of each seller's most recent reviews to attach, when fetchSellerDetails is on. 0 attaches none. |
maxItems | integer | 20 | Maximum number of results returned across the whole run. 0 for unlimited. |
maxPages | integer | 0 | Maximum result pages walked per keyword or link, at 24 results a page. 0 for no page limit. |
resumeFromRunId | string | (none) | Continue one interrupted run from a previous run or dataset id, without re-collecting what it already gathered. |
incrementalMode | boolean | false | Return only new and changed results on scheduled runs against the same search. |
stateKey | string | (none) | Name or share an incremental-mode state. Leave empty to derive one from the search scope. |
emitUnchanged | boolean | false | Also return (and bill) results unchanged since the last run, marked UNCHANGED. |
emitExpired | boolean | false | Also return (and bill) results no longer found after a complete scan, marked EXPIRED. |
proxy | object | Apify Proxy | Connection settings. |
mcpConnectors | array | (none) | Optional: send results to apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which result pages are created. |
maxNotifyListings | integer | 50 | Cap on results written to each connector per run. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"recordType": "show","id": "00000000-0000-0000-0000-000000000000","showId": "00000000-0000-0000-0000-000000000000","url": "https://www.whatnot.com/live/00000000-0000-0000-0000-000000000000","title": "Sample vintage card break night","description": "Mixed vintage breaks, sample spots to start.","status": "PLAYING","isLiveNow": true,"isScheduled": false,"startTime": "2026-01-01T18:00:00Z","endTime": null,"activeViewers": 250,"watchlistUsers": 80,"categories": ["Sample Category"],"categorySlugs": ["sample_category"],"tags": ["Sample Tag"],"isFreeShippingEnabled": true,"buyerMaxShippingCost": 5.0,"currency": "USD","thumbnailUrl": "https://images.whatnot.com/sample-thumbnail.jpg","sellerUsername": "example_seller","sellerUrl": "https://www.whatnot.com/user/example_seller","sellerRating": 4.8,"sellerReviewCount": 500,"sellerFollowerCount": 10000,"sellerSoldCount": 8000,"sellerIsVerified": true,"sellerIsPremierShop": false,"changeType": "NEW","changedFields": [],"firstSeenAt": "2026-01-01T18:00:00Z","lastSeenAt": "2026-01-01T18:00:00Z","scrapedAt": "2026-01-01T18:05:00Z"}
Plan Requirement
The default proxy setting works out of the box. If a run reports that requests were refused, or for large or frequent runs, the residential proxy group gives more headroom; pick it under Connection. Residential and the other non-default options are billed by traffic and cost more, so switch only when you need to.
FAQ
How much does it cost?
You pay per result returned, plus a start charge per run. Reading each seller's full profile is opt-in and adds a small surcharge only on the results that come back carrying those extra fields. The Pricing tab shows the current rates. Use Max results to cap the cost of any run.
Is it legal to scrape Whatnot?
This actor collects only publicly available marketplace data. You are responsible for how you use it: follow Whatnot's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution.
Can I get only new or changed results on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared results, and unchanged ones are not billed unless you turn emitUnchanged on.
Why doesn't this actor return sold or final auction prices?
Realised (sold) prices for finished shows are not published by the site: its own show-status filter has no "ended" value, a show carries no connection to what it sold, and a seller's show list returns only future shows. This actor returns the pre-sale picture instead: which shows are running and scheduled, which lots are queued into them, and at what starting price.
Why did my run fail instead of returning an empty dataset?
If the site refuses every request, the run stops with a clear message so "nothing matched" is never confused with "nothing could be read". Run it again in a few minutes, or enable Apify Proxy in the Connection section. If the site changed its data format, the run names that cause directly; no keyword, filter or proxy change will help.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
๐ Want more sports data?
Pair this actor with these related scrapers from the same team:
| ๐ StockX Scraper Scrape StockX market data by keyword, category or URL. Every row carries lowest ask... | ๐ท๏ธ Vinted.fr Scrape Vinted.fr, France's C2C second-hand fashion marketplace: search with... |
| ๐ KREAM Korea Scraper Scrape KREAM (kream.co.kr) sneaker and fashion resale data by keyword search, filters... | โฝ Netshoes Brazil Scrape sportswear and footwear from netshoes.com.br. Search by keyword with the store's... |
| โฝ JioHotstar Scraper Scrape the JioHotstar catalog by content type or URL. Extract shows, movies, episodes... | ๐ UNIQLO Scraper Scrape UNIQLO products across 21 country storefronts in local currency. Price with pre... |
๐ Browse all abotapi scrapers
๐ฌ Support & custom scrapers
- ๐ Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- ๐ ๏ธ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
- โญ Enjoying it? A quick review on the actor page helps other users find it.