Whatnot is the live shopping marketplace where a lot of trading cards, sneakers and collectibles change hands, often during live streams. It has no public API for listings, so I built a small tool on Apify that turns a Whatnot search into a table, with the seller's track record on every row.
Here is one real use: what does a PSA 10 Charizard cost on Whatnot right now, and who is selling them?
The search
The input works like the filters on the website: a keyword, a category, and Whatnot's own card filters.
{
"searchQueries": ["charizard"],
"categories": ["Pokémon Cards"],
"gradedOnly": true,
"gradingServices": ["PSA"],
"grades": ["10"],
"buyFormat": "buy_it_now",
"sort": "price_asc",
"maxResultsPerSearch": 300
}
The run returned 73 listings in 16 seconds. Each row has the price, currency, quantity, category, the date it was listed and a link, plus the seller's items sold on Whatnot, followers, rating and number of reviews.
The prices
| Price | Listings |
|---|---|
| Under $100 | 10 |
| $100 to $499 | 36 |
| $500 to $1,999 | 17 |
| $2,000 and up | 9 |
The cheapest was $15 and the most expensive $490,000, a 1999 first edition. One more listing asked $999,999, a placeholder price rather than a real offer, so I left it out of the table. The middle listing of all 73 was $300 ($292.50 without the placeholder).
Two things to keep in mind. These are asking prices: Whatnot shows sold prices only to logged-in users, and the tool never logs in. And "PSA 10" is a filter on how sellers tag their listings, so a few titles mention other grades. Read the titles before you compare.
Who is selling
The seller columns are what make this more than a price list. The cheapest PSA 10 Charizard from a seller rated 5.0 with over a thousand sales was $100, from a seller with 11,846 items sold. In Python, with the Apify client:
from statistics import median
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("cleanscrape/whatnot-scraper").call(run_input={
"searchQueries": ["charizard"],
"categories": ["Pokémon Cards"],
"gradedOnly": True, "gradingServices": ["PSA"], "grades": ["10"],
"buyFormat": "buy_it_now", "sort": "price_asc", "maxResultsPerSearch": 300,
})
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
real = [r for r in rows if r["price"] < 999999]
print(len(rows), "listings, median", median(r["price"] for r in real))
trusted = [r for r in real if r["sellerRating"] == 5 and (r["sellerSoldCount"] or 0) >= 1000]
for r in trusted[:5]:
print(r["price"], r["title"], r["sellerUsername"], r["sellerSoldCount"])
Live shows
Switch "What to find" to live and upcoming shows and the same category gives you the streams. The top 100 live Pokémon card shows had 6,041 viewers between them when I ran it, the biggest over a thousand. Each show row has the title, viewers, start time, format (52 Singles, 29 Surprise Sets and 19 Breaks in this run), tags and seller, and you can ask for the items for sale in each show too.
Only new listings
For deal alerts, sort by "Newly listed", turn on "Only listings or shows not saved before" and schedule the task. Each run looks at the newest listings and returns the ones earlier runs did not save, plus price drops on ones they did. The skipped ones are not charged.
Try it
Whatnot Scraper on Apify. You pay per listing saved, and the search above cost about $0.15. It works on all eight Whatnot marketplaces: the US, Canada, the UK, Germany, France, Belgium, the Netherlands and Australia.
Top comments (0)