# Whatnot Seller Scraper (`maximedupre/whatnot`) Actor

Collect public Whatnot listings, live shows, seller profiles, and category insights by keyword, URL, seller username, or category. Get source fields such as prices, ratings, viewer counts, reviews, and source URLs in structured dataset rows.

- **URL**: https://apify.com/maximedupre/whatnot.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** E-commerce, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🛍️ Explore Whatnot marketplace data

For collectors, resellers, marketplace researchers, and developers, this Actor collects public Whatnot listings, live shows, seller profiles, and category insights. It returns structured prices, sale formats, viewer counts, seller signals, reviews, and source URLs, so you can compare marketplace activity without copying pages by hand.

Use it to:

- Compare public listing titles, prices, sellers, and source URLs with **[Whatnot Listings](https://apify.com/maximedupre/whatnot/examples/whatnot-listings)**.
- Check live show titles, statuses, start times, viewer counts, tags, and sellers with **[Whatnot Live Shows](https://apify.com/maximedupre/whatnot/examples/whatnot-live-shows)**.
- Compare public seller profiles, follower counts, sold counts, ratings, and live status with **[Whatnot Sellers](https://apify.com/maximedupre/whatnot/examples/whatnot-sellers)**.
- Collect public buyer ratings, review text, dates, and reviewer identities with **[Whatnot Reviews](https://apify.com/maximedupre/whatnot/examples/whatnot-reviews)**.
- Rank public categories by viewer and livestream counts with **[Whatnot Category Insights](https://apify.com/maximedupre/whatnot/examples/whatnot-category-insights)**.
- Find public trading card listings and related sellers with **[Whatnot Trading Cards](https://apify.com/maximedupre/whatnot/examples/whatnot-trading-cards)**.
- Find public sneaker listings and related sellers with **[Whatnot Sneakers](https://apify.com/maximedupre/whatnot/examples/whatnot-sneakers)**.

#### 📦 Public listings, shows, sellers, and categories

The default dataset has four row shapes. The `recordType` field tells you whether a row is a `listing`, `liveShow`, `sellerProfile`, or `categoryInsight`. Saved rows include a public `sourceUrl` and a `retrievedAt` time. Some fields appear only when the public source provides them.

If the same source item appears again through another keyword, URL, username, ID, or similar submitted value, only the first eligible occurrence is saved. The row reflects that first saved match and does not combine later matches.

#### 🔎 Choose a Whatnot search

Choose a `resultType` and a `findBy` method. You can search by keywords or a public search URL, read supported public direct URLs, find seller profiles by username, or work with a category. Mixed search uses the product, live-show, and seller search surfaces. Fields that do not match your choices are ignored.

Use one configured search in each run. Seller profiles can include public Whatnot reviews and historical or scheduled shows when you turn on those options. Listings and mixed search can use sale, price, live-only, order, and change-monitoring options. Category insights can use source-supported filters and ordering.

This Actor reads public Whatnot data and does not require a customer-supplied Whatnot login or API key. Public pages can change, disappear, or show fewer fields than expected.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
|---|---|---|
| `resultType` | string | Chooses `listings`, `liveShows`, `sellerProfiles`, `categoryInsights`, or `mixedSearch`. |
| `findBy` | string | Chooses keywords, a search URL, a direct URL, a seller username, or a category. Use the method that matches the result type. |
| `keywords` | array of strings | Supplies one or more keywords for one configured search. |
| `searchUrls` | array of objects | Supplies one or more public Whatnot search URLs. Each URL uses the selected result type and search surface. |
| `searchUrls[].url` | string | Gives one public Whatnot search URL. |
| `directUrls` | array of objects | Supplies supported public listing, seller, live-show, or category URLs. |
| `directUrls[].url` | string | Gives one supported public Whatnot page URL. |
| `sellerUsernames` | array of strings | Supplies one or more public Whatnot seller usernames for seller profiles. |
| `includeReviews` | boolean | For seller profiles, requests public buyer reviews with ratings, text, dates, and reviewer identity. Source-provided review totals are included when available. |
| `includeShowHistory` | boolean | For seller profiles, requests public historical or scheduled shows when available. |
| `category` | string | Supplies one public Whatnot category name or slug for category insights or category-based listings, live shows, or seller results. |
| `categoryFilters` | array of strings | For category insights, supplies filter values supported by the public Whatnot category page. |
| `categoryOrder` | string | For category insights, chooses a source-supported order such as viewer count, livestream count, or name. |
| `saleFormats` | array of strings | For listings and mixed search, keeps only submitted sale formats supported by Whatnot, such as auction or buy now. |
| `minPrice` | number | For listings and mixed search, keeps listings at or above this price. |
| `maxPrice` | number | For listings and mixed search, keeps listings at or below this price. |
| `liveOnly` | boolean | For listings and mixed search, keeps only listings marked live by the source. |
| `listingOrder` | string | For listings and mixed search, chooses a source-supported listing order. |
| `maxItems` | integer | Caps the number of records. Leave it empty to return all available results until the source is exhausted. |
| `monitorChanges` | boolean | For listings and mixed search, compares new public listing observations with prior observations for the same submitted target. |

**Example input**

This example is copied from the public input of the successful current-beta run used for the listing example:

```json
{
  "resultType": "listings",
  "findBy": "keywords",
  "keywords": [
    "trading cards"
  ],
  "includeReviews": false,
  "includeShowHistory": false,
  "liveOnly": false,
  "maxItems": 100,
  "monitorChanges": false
}
```

#### 🧾 Output

**Run output**

| Field | Type | What it does |
|---|---|---|
| `dataset` | string | Opens the accepted public Whatnot records in the default dataset. |

Some values can be absent when Whatnot does not provide them. The tables below list every field in each public dataset shape. Dotted paths show nested objects and array elements.

**Listing record fields**

| Field | Type | What it does |
|---|---|---|
| `recordType` | string | Identifies this row as a listing. |
| `listingId` | string | Gives the stable Whatnot listing identifier. |
| `title` | string | Gives the public listing title. |
| `description` | string | Gives the public listing description. |
| `condition` | string | Gives the condition shown by the seller. |
| `price` | object | Groups the public listing price and currency. |
| `price.amount` | number | Gives the numeric listing price. |
| `price.currency` | string | Gives the currency code for the listing price. |
| `quantity` | integer | Gives the quantity shown by the source. |
| `availability` | string | Gives the availability state shown by the source. |
| `saleFormat` | string | Gives the sale format shown by the source, such as auction or buy now. |
| `isLive` | boolean | Says whether the source marks the listing as live. |
| `images` | array of strings | Lists public image URLs for the listing. |
| `images[]` | string | Gives one listing image URL. |
| `seller` | object | Groups seller details shown with the listing. |
| `seller.username` | string | Gives the seller's public Whatnot username. |
| `seller.displayName` | string | Gives the seller's public display name. |
| `seller.profileUrl` | string | Links to the seller's public profile. |
| `category` | object | Groups category details shown with the listing. |
| `category.name` | string | Gives the public category name. |
| `category.slug` | string | Gives the public category slug when supplied. |
| `category.url` | string | Links to the public category page. |
| `sourceUrl` | string (URI) | Links to the public Whatnot source for the listing. |
| `retrievedAt` | string (date-time) | Gives the time when the Actor retrieved the listing. |

**Listing row example**

This unshortened row is copied from a successful current-beta run:

```json
{
  "recordType": "listing",
  "title": "UNEEKAUCTIONS Thrift Shop by THRIFTWORX trading card",
  "sourceUrl": "https://www.whatnot.com/search?query=trading+cards&searchVertical=PRODUCT",
  "retrievedAt": "2026-09-03T10:48:27.693Z",
  "listingId": "TGlzdGluZ05vZGU6MjIwNDQyMzY5NA==",
  "description": "UNEEKAUCTIONS Thrift Shop by THRIFTWORX trading card",
  "price": {
    "amount": 7,
    "currency": "USD"
  },
  "quantity": 74,
  "availability": "ACTIVE",
  "saleFormat": "BUY_IT_NOW",
  "isLive": false,
  "images": [
    "https://images.whatnot.com/eyJidWNrZXQiOiAid2hhdG5vdC1pbWFnZXMiLCAia2V5IjogImxpc3RpbmdzLzAtZDMxNjQyMTktNTA2My00NjBhLWJjYWEtMDVmZjM5NzdiMTMyLWJiNWE4OTFmLTA0YTctNDA2My04OGYyLWIwMmQzNTQyMThhMy5qcGVnIiwgImVkaXRzIjogeyJyZXNpemUiOiB7IndpZHRoIjogbnVsbCwgImhlaWdodCI6IG51bGwsICJmaXQiOiAiY29udGFpbiIsICJiYWNrZ3JvdW5kIjogeyJyIjogMjU1LCAiZyI6IDI1NSwgImIiOiAyNTUsICJhbHBoYSI6IDF9fX19?signature=0c18a58581678718158e528059d1ba4689a5cd9eeabd6a378065b971b45487fb"
  ],
  "seller": {
    "username": "uneekauctions",
    "displayName": "Don Wedd",
    "profileUrl": "https://www.whatnot.com/user/uneekauctions"
  },
  "category": {
    "name": "Stickers",
    "slug": "stickers",
    "url": "https://www.whatnot.com/tag/stickers"
  }
}
```

**Live show record fields**

| Field | Type | What it does |
|---|---|---|
| `recordType` | string | Identifies this row as a live show. |
| `showId` | string | Gives the stable Whatnot show identifier. |
| `title` | string | Gives the public show title. |
| `status` | string | Gives the show status shown by the source, such as live or scheduled. |
| `startTime` | string (date-time) | Gives the public show start time. |
| `viewerCount` | integer | Gives the viewer count shown by the source. |
| `thumbnailUrl` | string (URI) | Links to the public show thumbnail. |
| `tags` | array of strings | Lists public tags shown for the show. |
| `tags[]` | string | Gives one show tag. |
| `category` | object | Groups category details shown for the show. |
| `category.name` | string | Gives the public category name. |
| `category.slug` | string | Gives the public category slug when supplied. |
| `category.url` | string | Links to the public category page. |
| `seller` | object | Groups seller details shown for the show. |
| `seller.username` | string | Gives the seller's public Whatnot username. |
| `seller.displayName` | string | Gives the seller's public display name. |
| `seller.profileUrl` | string | Links to the seller's public profile. |
| `sourceUrl` | string (URI) | Links to the public Whatnot source for the show. |
| `retrievedAt` | string (date-time) | Gives the time when the Actor retrieved the show. |

**Live show row example**

This unshortened row is copied from a successful current-beta run:

```json
{
  "recordType": "liveShow",
  "title": "SPANISH BASE SET NO ZARD PULLED POP 0 w/ Zack",
  "status": "PLAYING",
  "sourceUrl": "https://www.whatnot.com/search?query=pokemon",
  "retrievedAt": "2026-09-03T10:50:58.293Z",
  "showId": "88b639c0-cea1-4789-be6b-a4212aebde5d",
  "startTime": "2026-09-03T07:28:42.644Z",
  "viewerCount": 510,
  "thumbnailUrl": "https://images.whatnot.com/eyJidWNrZXQiOiAid2hhdG5vdC1pbWFnZXMiLCAia2V5IjogImxpdmVzdHJlYW1fdGh1bWJuYWlscy9lYjk4MjIyNi1iYmQ0LTQzZjctYTViYy1hNTQwNmY0Y2Y1YjcuanBlZyIsICJlZGl0cyI6IHsicmVzaXplIjogeyJ3aWR0aCI6IDQxNCwgImhlaWdodCI6IDY0MCwgImZpdCI6ICJjb3ZlciIsICJiYWNrZ3JvdW5kIjogeyJyIjogMjU1LCAiZyI6IDI1NSwgImIiOiAyNTUsICJhbHBoYSI6IDF9fX0sICJvdXRwdXRGb3JtYXQiOiAid2VicCJ9?signature=d5682bd9fcc29c494d6783aba8e477adafba99abb9ee10b8940c71529d547e51",
  "tags": [
    "Pokémon",
    "$1 Starts",
    "Vintage"
  ],
  "category": {
    "name": "Pokémon Cards",
    "slug": "pokemon_cards",
    "url": "https://www.whatnot.com/tag/pokemon_cards"
  },
  "seller": {
    "username": "collectibletags",
    "profileUrl": "https://www.whatnot.com/user/collectibletags"
  }
}
```

**Seller profile record fields**

| Field | Type | What it does |
|---|---|---|
| `recordType` | string | Identifies this row as a seller profile. |
| `sellerId` | string | Gives the stable Whatnot seller identifier. |
| `username` | string | Gives the seller's public Whatnot username. |
| `displayName` | string | Gives the seller's public display name. |
| `followerCount` | integer | Gives the follower count shown by the source. |
| `soldCount` | integer | Gives the sold-item count shown by the source. |
| `rating` | number | Gives the seller rating shown by the source. |
| `reviewCount` | integer | Gives the public buyer review count shown for the seller. |
| `isVerified` | boolean | Says whether the source marks the seller as verified. |
| `isLive` | boolean | Says whether the source marks the seller as live. |
| `shippingPerformance` | string | Gives shipping performance information shown on the profile. |
| `reviews` | array of objects | Lists public buyer reviews shown for the seller. |
| `reviews[]` | object | Gives one public buyer review. |
| `reviews[].reviewId` | string | Gives the stable review identifier. |
| `reviews[].rating` | number | Gives the star rating shown for the review. |
| `reviews[].text` | string | Gives the public review text when supplied. |
| `reviews[].reviewedAt` | string (date-time) | Gives the review date and time shown by the source. |
| `reviews[].reviewer` | object | Groups public reviewer identity details. |
| `reviews[].reviewer.username` | string | Gives the reviewer's public Whatnot username. |
| `reviews[].reviewer.displayName` | string | Gives the reviewer's public display name. |
| `reviews[].reviewer.profileUrl` | string (URI) | Links to the reviewer's public profile. |
| `shopListings` | array of objects | Lists public listings shown in the seller shop. |
| `shopListings[]` | object | Gives one shop listing. |
| `shopListings[].listingId` | string | Gives the stable shop listing identifier. |
| `shopListings[].title` | string | Gives the public shop listing title. |
| `shopListings[].listingUrl` | string (URI) | Links to the public shop listing. |
| `shopListings[].price` | object | Groups the shop listing price and currency. |
| `shopListings[].price.amount` | number | Gives the numeric shop listing price. |
| `shopListings[].price.currency` | string | Gives the currency code for the shop listing price. |
| `shopListings[].saleFormat` | string | Gives the sale format shown for the shop listing. |
| `shopListings[].quantity` | integer | Gives the quantity shown for the shop listing. |
| `shopListings[].status` | string | Gives the shop listing status shown by the source. |
| `shopListings[].updatedAt` | string (date-time) | Gives the last update time shown for the shop listing. |
| `showHistory` | array of objects | Lists public historical or scheduled shows shown for the seller. |
| `showHistory[]` | object | Gives one seller show. |
| `showHistory[].showId` | string | Gives the stable seller show identifier. |
| `showHistory[].title` | string | Gives the public seller show title. |
| `showHistory[].status` | string | Gives the status shown for the seller show. |
| `showHistory[].startTime` | string (date-time) | Gives the public seller show start time. |
| `showHistory[].viewerCount` | integer | Gives the viewer count shown for the seller show. |
| `showHistory[].thumbnailUrl` | string (URI) | Links to the public seller show thumbnail. |
| `showHistory[].showUrl` | string (URI) | Links to the public seller show. |
| `sourceUrl` | string (URI) | Links to the public Whatnot profile for the seller. |
| `retrievedAt` | string (date-time) | Gives the time when the Actor retrieved the seller profile. |

**Seller profile row example**

This genuine row is shortened. The `reviews` and `showHistory` values use `"..."` where the source row contains more nested data. The shop listing is shown in full.

```json
{
  "recordType": "sellerProfile",
  "username": "smj1az",
  "sourceUrl": "https://www.whatnot.com/user/smj1az",
  "retrievedAt": "2026-09-03T10:50:56.922Z",
  "sellerId": "UHVibGljVXNlck5vZGU6MjcyNjgxNjE=",
  "displayName": "Greenway Vault",
  "followerCount": 65899,
  "soldCount": 65778,
  "rating": 4.9,
  "reviewCount": 8036,
  "isVerified": false,
  "isLive": false,
  "shippingPerformance": "0 days",
  "reviews": "...",
  "showHistory": "...",
  "shopListings": [
    {
      "title": "Sealed Gengar 151C Booster Pack",
      "listingId": "TGlzdGluZ05vZGU6MjIxMTgxNTU0Ng==",
      "listingUrl": "https://www.whatnot.com/listing/TGlzdGluZ05vZGU6MjIxMTgxNTU0Ng%3D%3D",
      "price": {
        "amount": 8,
        "currency": "USD"
      },
      "saleFormat": "BUY_IT_NOW",
      "quantity": 250,
      "status": "ACTIVE",
      "updatedAt": "2026-08-25T13:04:06.000Z"
    }
  ]
}
```

**Category insight record fields**

| Field | Type | What it does |
|---|---|---|
| `recordType` | string | Identifies this row as a category insight. |
| `category` | object | Groups the public category details. |
| `category.name` | string | Gives the public category name. |
| `category.slug` | string | Gives the public category slug when supplied. |
| `category.url` | string (URI) | Links to the public category page. |
| `rank` | integer | Gives the category rank shown in the source results. |
| `viewerCount` | integer | Gives the viewer count shown for the category. |
| `livestreamCount` | integer | Gives the livestream count shown for the category. |
| `subcategories` | array of objects | Lists public subcategories shown for the category. |
| `subcategories[]` | object | Gives one public subcategory. |
| `subcategories[].name` | string | Gives the public subcategory name. |
| `subcategories[].slug` | string | Gives the public subcategory slug when supplied. |
| `subcategories[].url` | string (URI) | Links to the public subcategory page. |
| `subcategories[].viewerCount` | integer | Gives the viewer count shown for the subcategory. |
| `subcategories[].livestreamCount` | integer | Gives the livestream count shown for the subcategory. |
| `shows` | array of objects | Lists public shows discovered in the category. |
| `shows[]` | object | Gives one category show. |
| `shows[].showId` | string | Gives the stable category show identifier. |
| `shows[].title` | string | Gives the public category show title. |
| `shows[].status` | string | Gives the status shown for the category show. |
| `shows[].startTime` | string (date-time) | Gives the public category show start time. |
| `shows[].viewerCount` | integer | Gives the viewer count shown for the category show. |
| `shows[].thumbnailUrl` | string (URI) | Links to the public category show thumbnail. |
| `shows[].showUrl` | string (URI) | Links to the public category show. |
| `shows[].seller` | object | Groups seller details shown for the category show. |
| `shows[].seller.username` | string | Gives the seller's public Whatnot username. |
| `shows[].seller.displayName` | string | Gives the seller's public display name. |
| `shows[].seller.profileUrl` | string (URI) | Links to the seller's public profile. |
| `sellerLeaderboard` | array of objects | Lists public seller leaderboard entries shown for the category. |
| `sellerLeaderboard[]` | object | Gives one category leaderboard entry. |
| `sellerLeaderboard[].rank` | integer | Gives the seller rank shown by the source. |
| `sellerLeaderboard[].username` | string | Gives the seller's public Whatnot username. |
| `sellerLeaderboard[].displayName` | string | Gives the seller's public display name. |
| `sellerLeaderboard[].profileUrl` | string (URI) | Links to the seller's public profile. |
| `sellerLeaderboard[].followerCount` | integer | Gives the follower count shown for the seller. |
| `sellerLeaderboard[].soldCount` | integer | Gives the sold-item count shown for the seller. |
| `sellerLeaderboard[].activeShowCount` | integer | Gives the active show count shown for the seller. |
| `sourceUrl` | string (URI) | Links to the public Whatnot source for the category. |
| `retrievedAt` | string (date-time) | Gives the time when the Actor retrieved the category record. |

**Category insight row example**

This unshortened row is copied from a successful current-beta run:

```json
{
  "recordType": "categoryInsight",
  "category": {
    "name": "pokemon_cards",
    "slug": "pokemon_cards",
    "url": "https://www.whatnot.com/tag/pokemon_cards"
  },
  "sourceUrl": "https://www.whatnot.com/search?query=pokemon&searchVertical=CATEGORY",
  "retrievedAt": "2026-09-03T10:50:57.441Z",
  "rank": 1,
  "viewerCount": 9803
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. A saved public listing, live show, or seller profile row charges its matching `Listing`, `Live show`, or `Seller profile` event. Current prices and user tiers appear in the Store pricing panel. Category insights have no separate buyer-facing event title in the current pricing configuration.

#### 🔌 Integrations

Use the Apify Console or API to start runs and read the default dataset. The Output tab links to the same dataset for export and follow-up processing.

Watch the walkthrough:

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Do I need a Whatnot login or API key?

No. The Actor reads public Whatnot pages and does not need a customer-supplied Whatnot login or API key.

##### Which fields are used for each search?

Choose the `resultType` and `findBy` values that match your target. For example, use keywords or a search URL for search surfaces, seller usernames for seller profiles, and a category for category-based results. Fields for other choices are ignored.

##### What happens when the same listing matches more than one keyword?

The Actor saves the first eligible occurrence and ignores later matches for the same source listing. The saved row reflects the first match and does not combine later matches.

##### What if Whatnot does not show a field?

That field can be absent from the row. The Actor keeps public source values and does not guess a missing value.

##### Can I request seller reviews and past shows?

Yes. Select seller profiles and turn on `includeReviews` or `includeShowHistory`. The Actor returns public reviews and historical or scheduled shows when the source provides them.

##### Why did my run return fewer rows than `maxItems`?

`maxItems` is a cap, not a promise. The public source may return fewer eligible rows because listings, shows, sellers, or categories can be unavailable or filtered out.

##### How current are prices and viewer counts?

They reflect what Whatnot showed when the Actor retrieved the row. Use `retrievedAt` to see that time. The source can change after the run finishes.

##### Does this collect private data or place orders?

No. It does not collect private or account-only data, capture live video or audio, buy or bid, or change Whatnot accounts or listings.

### 📝 Changelog

**v0.0** (03-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~whatnot/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Facebook Marketplace Listing Scraper](https://apify.com/maximedupre/facebook-marketplace-listings). Collect public local listings and compare prices, availability, locations, images, and source links.
- [TikTok Shop Scraper No Cookies](https://apify.com/maximedupre/tiktok-shop-scraper-no-cookies). Collect public TikTok Shop products with seller, price, demand, variant, and shipping data.
- [eBay Seller Scraper](https://apify.com/maximedupre/ebay-seller-scraper). Review public eBay seller profiles, listing snippets, feedback summaries, and optional feedback reviews.
- [Whatnot Listings Scraper](https://apify.com/crawloop/whatnot-listings-scraper). Compare public Whatnot listing prices, sale formats, conditions, seller ratings, and source links.
- [Whatnot Seller Scraper](https://apify.com/devcake/whatnot-seller-scraper). Collect public Whatnot seller profiles, products, reviews, and livestreams for seller research.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `resultType` (type: `string`):

Choose the kind of public Whatnot records to return. Mixed search uses the product, live-show, and seller search surfaces.

## `findBy` (type: `string`):

Choose how to find the selected records. Use the method that matches the result type: keywords or a Search URL for search surfaces, Direct URL for a supported public page, Seller username for Seller profiles, or Category for category-based results.

## `keywords` (type: `array`):

Enter one or more keywords. They are used in one search with the selected result type and search surface.

## `searchUrls` (type: `array`):

Add one or more public Whatnot search URLs. Each URL is searched with the selected result type and search surface.

## `directUrls` (type: `array`):

Add one or more supported public Whatnot listing, seller, live-show, or category URLs.

## `sellerUsernames` (type: `array`):

Enter one or more public Whatnot seller usernames for Seller profiles. A list uses one seller-focused search setup.

## `includeReviews` (type: `boolean`):

For Seller profiles, request public buyer reviews with ratings, text, dates, and reviewer identity. Source-provided seller review totals are included when available.

## `includeShowHistory` (type: `boolean`):

For Seller profiles, request public historical or scheduled shows for each seller when available.

## `category` (type: `string`):

Enter one public Whatnot category name or slug. Use this for Category insights or category-based listings, live shows, or seller results.

## `categoryFilters` (type: `array`):

For Category insights, enter one or more filter values supported by the public Whatnot category page.

## `categoryOrder` (type: `string`):

For Category insights, choose a source-supported order for category results. You may enter another source value when needed.

## `saleFormats` (type: `array`):

For Listings and Mixed search, optionally keep only sale formats supported by Whatnot, such as auction or buy now.

## `minPrice` (type: `number`):

For Listings and Mixed search, keep listings at or above this price.

## `maxPrice` (type: `number`):

For Listings and Mixed search, keep listings at or below this price.

## `liveOnly` (type: `boolean`):

For Listings and Mixed search, keep only listings that are live now.

## `listingOrder` (type: `string`):

For Listings and Mixed search, choose a source-supported order for listing results. You may enter another source value when needed.

## `maxItems` (type: `integer`):

Stop after this many records. Leave it empty to return all available results until the source is exhausted.

## `monitorChanges` (type: `boolean`):

For Listings and Mixed search, compare new public listing observations with prior observations for the same submitted target.

## Actor input object example

```json
{
  "resultType": "listings",
  "findBy": "keywords",
  "keywords": [
    "sneakers"
  ],
  "searchUrls": [
    {
      "url": "https://www.whatnot.com/search?query=sneakers"
    }
  ],
  "directUrls": [
    {
      "url": "https://www.whatnot.com/listing/example"
    }
  ],
  "sellerUsernames": [
    "example-seller"
  ],
  "includeReviews": false,
  "includeShowHistory": false,
  "category": "trading-cards",
  "categoryFilters": [
    "live"
  ],
  "categoryOrder": "viewerCount",
  "saleFormats": [
    "auction"
  ],
  "minPrice": 10,
  "maxPrice": 500,
  "liveOnly": false,
  "listingOrder": "relevance",
  "maxItems": 100,
  "monitorChanges": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

Open the accepted public Whatnot records in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "resultType": "listings",
    "findBy": "keywords",
    "keywords": [
        "trading cards"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/whatnot").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "resultType": "listings",
    "findBy": "keywords",
    "keywords": ["trading cards"],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/whatnot").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "resultType": "listings",
  "findBy": "keywords",
  "keywords": [
    "trading cards"
  ],
  "maxItems": 100
}' |
apify call maximedupre/whatnot --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/whatnot"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/BDsSfUXufTbLk2mxg/builds/KrBJlLw7ioMnss4gc/openapi.json
