Whatnot Seller Inventory Scraper
Pricing
Pay per event
Whatnot Seller Inventory Scraper
Track Whatnot seller inventory in real time. Give it seller usernames and get every active listing back — price, quantity, status, transaction type, sales channels. Also runs keyword search across the PRODUCT listings surface. No login, no cookies, Pay-Per-Event.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
🔥 What this scrapes
Give this Actor a list of Whatnot seller usernames (or profile URLs) and it returns every active listing in each seller's shop — the same data Whatnot's own storefront shows, structured for export. It also accepts search keywords as a secondary mode, pulling rows off the PRODUCT search vertical.
Every row carries: listing id, title, subtitle, description, price (amount + currency), listing status, transaction type (BUY_IT_NOW / AUCTION), quantity, seller username + star rating, product id, image URLs, and sales-channel ids.
✨ Features
- Seller-first design. The lead use case is tracking a known list of sellers' inventory over time, not blind keyword search — run it on a schedule and diff the output.
- Keyword search mode. Add
searchKeywordsalongside or instead of sellers to pull rows off thePRODUCTvertical. - Fault-isolated per target. One bad username or a keyword the API can't answer never sinks the run — every other seller/keyword in the batch still lands.
- Pydantic-validated rows. Every dataset item is schema-checked before it's pushed; malformed API rows are skipped, not shipped.
- Pay only for results. No data → no per-row charge, only the small run warm-up fee.
🎯 Use cases
- Resellers tracking competitor shops — watch a shortlist of sellers' active listings and prices, scheduled daily or hourly.
- Drop/restock alerting — diff successive runs to catch new listings or price changes the moment they post.
- Category and keyword research — sample what's actively listed for a given search term before sourcing inventory yourself.
- Marketplace intelligence tools — feed Whatnot inventory data into a pricing or demand dashboard alongside other marketplaces.
⚙️ How to use it
- Add one or more entries to
sellerUsernames— a bare username (city_sole) or a full profile URL (https://www.whatnot.com/user/city_sole) both work. - Optionally add
searchKeywordsto also pull PRODUCT search results for those terms. - Adjust
maxListingsPerSeller/maxListingsPerKeywordif you want fewer rows than the default cap. - Run it. Rows land in the dataset as each target finishes, so you can start reading before the run ends.
📥 Input
| Field | Type | Default | Description |
|---|---|---|---|
sellerUsernames | array of strings | ["city_sole", "ayden_snkrs", "bamasoles"] | Seller usernames or profile URLs. Primary input mode. |
searchKeywords | array of strings | [] | Keyword search terms against the PRODUCT vertical. Secondary input mode. |
maxListingsPerSeller | integer | 100 | Cap on listings fetched per seller (max 1050). |
maxListingsPerKeyword | integer | 100 | Cap on listings fetched per keyword (max 1050). |
proxyConfiguration | object | BUYPROXIES94952, US | Apify Proxy — pinned to a US datacenter exit; not user-overridable. |
{"sellerUsernames": ["city_sole", "ayden_snkrs"],"searchKeywords": ["jordan 1"],"maxListingsPerSeller": 100,"maxListingsPerKeyword": 100}
📤 Output
One row per listing, unified across both input modes:
{"source": "seller","source_value": "city_sole","listing_id": "TGlzdGluZ05vZGU6MjI4ODY1NjY4OA==","title": "Custom Designed Trainer Deposit","subtitle": "New","price_amount": 9000,"price_currency": "GBP","listing_status": "ACTIVE","transaction_type": "BUY_IT_NOW","quantity": 99,"current_bid_amount": null,"current_bid_currency": null,"current_bid_count": null,"seller": { "username": "city_sole", "rating_overall": 5.0, "rating_num_reviews": 107 },"product_id": "UHJvZHVjdE5vZGU6NjAzNzQwMTU4","image_urls": ["https://images.whatnot.com/..."],"sales_channel_ids": ["city_sole"],"listing_url": "https://www.whatnot.com/user/city_sole","scraped_at": "2026-09-16T12:00:00+00:00"}
💰 Pricing
Pay-Per-Event, no subscription:
| Event | Price |
|---|---|
| Actor start | $0.20 flat, per run |
| Listing scraped | $0.002 per row pushed |
That's $2.20 per 1,000 results all-in (run fee + 1,000 rows). A 3-seller monitoring run pulling ~150 listings costs about $0.50.
🚧 Limitations
currentBidis always null. Live auction bid state isn't exposed on the search/shop surface — only static listing data.- One query tops out around 1,050 rows, regardless of how many total results the API reports. Breadth comes from adding more sellers or keywords, not raising the per-target cap.
- No livestream or auction-in-progress data — this Actor covers static shop/search listings, not live-show state.
❓ FAQ
Does this need a Whatnot login or cookies? No. The GraphQL endpoint this Actor calls answers unauthenticated requests.
Can I track the same sellers on a schedule? Yes — that's the primary use case. Schedule the Actor and diff successive dataset exports for new/changed listings.
Why is current_bid_amount always null?
Whatnot doesn't expose live bid state on this data surface. Live auction pricing needs the livestream itself, which is out of scope here.
What happens if a username doesn't exist? That target reports zero rows and the run still succeeds — it does not fail the whole batch.
Your feedback
Found a field that changed shape, or a seller Whatnot renamed? Message us through the Apify Console — we watch every DevilScrapes Actor's issues and ship fixes fast.