Whatnot Seller Inventory Scraper avatar

Whatnot Seller Inventory Scraper

Pricing

Pay per event

Go to Apify Store
Whatnot Seller Inventory Scraper

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

DevilScrapes

Maintained by Community

Actor 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 searchKeywords alongside or instead of sellers to pull rows off the PRODUCT vertical.
  • 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

  1. 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.
  2. Optionally add searchKeywords to also pull PRODUCT search results for those terms.
  3. Adjust maxListingsPerSeller / maxListingsPerKeyword if you want fewer rows than the default cap.
  4. Run it. Rows land in the dataset as each target finishes, so you can start reading before the run ends.

📥 Input

FieldTypeDefaultDescription
sellerUsernamesarray of strings["city_sole", "ayden_snkrs", "bamasoles"]Seller usernames or profile URLs. Primary input mode.
searchKeywordsarray of strings[]Keyword search terms against the PRODUCT vertical. Secondary input mode.
maxListingsPerSellerinteger100Cap on listings fetched per seller (max 1050).
maxListingsPerKeywordinteger100Cap on listings fetched per keyword (max 1050).
proxyConfigurationobjectBUYPROXIES94952, USApify 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:

EventPrice
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

  • currentBid is 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.