# Yupoo Store Scraper: New Listing & Restock Monitor (`getascraper/yupoo-store-monitor`) Actor

Scrape any Yupoo wholesale store (x.yupoo.com) and monitor it on a schedule for new albums and restocks, not another full catalog dump. Get title, category, photo count and direct link as JSON, CSV or Excel. Sends new listings straight to Slack, Sheets or email via Apify integrations.

- **URL**: https://apify.com/getascraper/yupoo-store-monitor.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.98 / 1,000 new 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

## 🔔 Yupoo Store Scraper: New Listing & Restock Monitor

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#EFFBF9;border:1px solid #BFE8E1;border-top:4px solid #0F766E;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Know the moment a Yupoo store adds new stock</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Schedule this Actor against any Yupoo store and get only the albums and categories added since your last check, delivered as a clean dataset with links, photo counts, and thumbnails.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFE8E1;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B5D57">🆕 New listings only</span><br>
<span style="font-size:12px;color:#57534E">No more re-downloading a full catalog to spot what changed</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFE8E1;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B5D57">🗓️ Runs on a schedule</span><br>
<span style="font-size:12px;color:#57534E">Set it once in Apify and get checked automatically, daily or hourly</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFE8E1;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B5D57">🏬 Multiple stores at once</span><br>
<span style="font-size:12px;color:#57534E">Track every supplier you source from in a single run</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFE8E1;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0B5D57">🖼️ Ready to act on</span><br>
<span style="font-size:12px;color:#57534E">Direct link, category, photo count, and thumbnail for every new listing</span>
</td>
</tr>
</table>

If you buy from wholesale suppliers who list their catalog on [Yupoo](https://x.yupoo.com), you already know the problem: no notifications, no RSS, no "sort by newest" that actually works across categories. Most buyers fall back on a spreadsheet of album links, and that spreadsheet goes stale the moment a seller reuses a product code or a link outlives the page it pointed to. This **Yupoo store scraper and monitor** replaces that manual tracking: it checks the store on a schedule and only ever shows you what's actually new.

### 🔍 What does Yupoo Store Monitor do?

It checks one or more Yupoo store URLs (any `*.x.yupoo.com` store), reads every album currently listed, and compares that list against what it saw last time. The first run captures a full baseline of the store. Every run after that, the Actor pushes only the albums and categories that weren't there before, tagged so you know exactly what's new.

Run it manually whenever you want a snapshot, or turn on an [Apify Schedule](https://docs.apify.com/platform/schedules) and get it checked automatically without touching it again.

### 🎯 Why use Yupoo Store Monitor?

**You're a dropshipper watching a handful of go-to suppliers.** You don't have time to babysit five different Yupoo stores by hand. Schedule this once, and new drops land in your dataset (or your [integration](https://apify.com/integrations) of choice: Slack, Google Sheets, email) the moment they're detected.

**You're a wholesale reseller sourcing seasonal inventory.** Suppliers restock without warning. Instead of guessing when to check back, you get a dated record of exactly which albums appeared and when, so you can move on new stock before it sells through.

**You're a sourcing agent managing catalogs for multiple clients.** One run covers every store you track. You hand your client a clean feed of new listings instead of a manual screenshot roundup.

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#EFFBF9;border:1px solid #BFE8E1;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0F766E;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Paste your store URLs</span><br>
<span style="font-size:12px;color:#57534E">Add one or more Yupoo store links in the Input tab and hit Start.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EFFBF9;border:1px solid #BFE8E1;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0F766E;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">First run sets the baseline</span><br>
<span style="font-size:12px;color:#57534E">Every current album is captured once, tagged "baseline" so it's not mistaken for a new drop.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EFFBF9;border:1px solid #BFE8E1;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0F766E;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Schedule it, get alerts</span><br>
<span style="font-size:12px;color:#57534E">Add a daily or hourly Apify Schedule. Every run after that outputs only what's new.</span>
</td>
</tr>
</table>

### ⚙️ Input

| Field | Type | Required | Description |
|---|---|---|---|
| Yupoo store URLs to monitor | array of URLs | Yes | One or more Yupoo store URLs, e.g. `https://storename.x.yupoo.com`. Any page on the store works; it's normalized to that store's full album feed. |
| Max albums to scan per store, per run | integer | No | Safety cap on how many albums are paged through per store, per run. Default 2000. |
| Max request retries | integer | No | How many times to retry a failed page fetch. Default 3. |
| Proxy configuration | object | No | Defaults to Apify's datacenter proxy, which is all Yupoo's store pages need. |
| Monitoring state key | string | No | Advanced: only change this to run separate baselines from the same Actor Task. Default `default`. |
| Reset monitoring baseline | boolean | No | Wipes the stored baseline before this run, so the current catalog is captured fresh instead of diffed. |

### 📦 Output

Each dataset item is either a baseline capture or a genuinely new listing/category:

```json
{
  "changeType": "new_album",
  "storeUrl": "https://wholesaleshop.x.yupoo.com",
  "storeSlug": "wholesaleshop.x.yupoo.com",
  "albumId": "215901697",
  "categoryId": "5062333",
  "categoryTitle": "Yupoo LEGO",
  "title": "LEGO 76209 Thor Hammer",
  "url": "https://wholesaleshop.x.yupoo.com/albums/215901697",
  "photoCount": 8,
  "thumbnailUrl": "https://photo.yupoo.com/wholesaleshop/1f6cb871/small.jpeg",
  "detectedAt": "2026-08-27T06:36:32.664Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### 📋 Data table

| Field | Type | Description |
|---|---|---|
| changeType | string | `baseline` (first-run snapshot), `new_album`, or `new_category`. |
| storeUrl | string | The store's base URL. |
| storeSlug | string | The store's subdomain, for grouping multi-store results. |
| albumId | string | The Yupoo album ID (absent on `new_category` items). |
| categoryId | string | The category the album belongs to. |
| categoryTitle | string | The category's display name. |
| title | string | The album (or category) name. |
| url | string | Direct link to the album or category on Yupoo. |
| photoCount | number | Number of photos in the album. |
| thumbnailUrl | string | Link to the full-resolution photo on Yupoo. Opens in a new tab (Yupoo blocks the image from loading inline outside its own site). |
| detectedAt | string | When this Actor detected the item, in ISO 8601 format. |

### 💰 Pricing

This Actor is pay per event: you pay for what you actually get, not a subscription and not a flat rate. A run that finds nothing new costs nothing. Check the Pricing tab on this page for the exact rate breakdown.

### ⭐ Enjoying Yupoo Store Monitor?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#EFFBF9;border:1px solid #BFE8E1;border-left:5px solid #0F766E;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">If this saved you from manually re-checking supplier stores, a rating helps other resellers find it too.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other dropshippers and sourcing agents find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#0F766E;border:1px solid #BFE8E1;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/yupoo-store-monitor/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 💡 Tips

- Expect zero output items on a brand-new store's first run beyond the `baseline` items. That's expected: the first run establishes what "current" looks like, so there's nothing to compare it against yet.
- Run this on a schedule that matches how often your suppliers actually restock. Once or twice a day is enough for most wholesale stores; hourly is only worth it for fast-moving drops.
- If you intentionally start tracking a different set of categories or want a clean slate, enable "Reset monitoring baseline" once, then turn it back off.
- Pair this with Apify's built-in integrations (Slack, Email, Google Sheets, Zapier, Make) to get new listings pushed straight to where your team already works.

### ❓ FAQ

**Does this work on any Yupoo store?**
Yes, any store on a `*.x.yupoo.com` subdomain. Paste the store's homepage or any album URL and it's normalized automatically.

**Why did my first run return mostly "baseline" items instead of "new" ones?**
That's by design. The first check against a store has nothing to compare against, so it records the current catalog as the baseline. New-listing alerts start from the second run onward.

**Can I monitor more than one store at a time?**
Yes. Add as many store URLs as you want in the Input tab; each is tracked independently with its own baseline.

**Does this see prices or let me buy through Yupoo?**
No. Yupoo is a photo-catalog host, not a storefront: it has no prices, cart, or checkout. This Actor surfaces new listings with a direct link; you still purchase through your existing channel with that supplier.

**Can I get a restock alert for a Yupoo store?**
Yes, that's the core feature. Schedule this Actor daily (or hourly) and it flags any album that wasn't in the store the last time it checked, which is exactly what a restock looks like from the outside.

**Does this detect new arrivals on a Yupoo store automatically?**
Yes. Every scheduled run compares the current album list against the last one and outputs only what changed, so new arrivals show up without you having to open the store yourself.

### 🔗 Other actors

- [Shopify product scraper](https://apify.com/getascraper/shopify-store-product-monitor) ↗ - Monitor any Shopify store for new and changed products.
- [WooCommerce product scraper](https://apify.com/getascraper/woocommerce-store-monitor) ↗ - Track new and changed listings on WooCommerce stores.
- [Poshmark closet scraper](https://apify.com/getascraper/poshmark-closet-monitor) ↗ - Watch a Poshmark seller's closet for new listings.
- [Chinagoods Scraper 中国小商品城: Yiwu booth monitor](https://apify.com/getascraper/chinagoods-booth-monitor) ↗ - Monitor Yiwu wholesale market booths for new products.
- [Mercari Seller Scraper: Shop Listings, Ratings & Item History](https://apify.com/getascraper/mercari-seller-scraper) ↗ - Pull a Mercari seller's full shop listing history.

# Actor input Schema

## `storeUrls` (type: `array`):

One or more Yupoo store URLs to watch for new albums (listings), e.g. https://storename.x.yupoo.com. Paste the store's homepage, /albums page, or any album's URL, and it is normalized to that store's full album feed.

## `proxyConfiguration` (type: `object`):

Yupoo store pages are plain server-rendered HTML with no anti-bot challenge on a direct GET (confirmed live). Datacenter proxy (the default) is sufficient and far cheaper than residential.

## `maxRequestRetries` (type: `integer`):

How many times to retry a failed page fetch before giving up on that page.

## `maxAlbumsPerStore` (type: `integer`):

Safety cap on how many albums this Actor will page through per store in a single run. Raise it if a store has a very large catalog and you suspect new listings near the back of the feed are being missed.

## `monitoringStateKey` (type: `string`):

Only change this if you run multiple independent monitoring configurations from the same Actor Task and need separate baselines. Leave as 'default' otherwise.

## `resetMonitoringState` (type: `boolean`):

Wipe the stored baseline for this monitoring state key before this run, so every currently-listed album is captured again as a fresh baseline instead of being diffed against history. Use this once after changing which stores you track.

## Actor input object example

```json
{
  "storeUrls": [
    {
      "url": "https://wholesaleshop.x.yupoo.com"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxRequestRetries": 3,
  "maxAlbumsPerStore": 2000,
  "monitoringStateKey": "default",
  "resetMonitoringState": false
}
```

# Actor output Schema

## `newListings` (type: `string`):

No description

## `monitoringState` (type: `string`):

No description

# 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 = {
    "storeUrls": [
        {
            "url": "https://wholesaleshop.x.yupoo.com"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "maxRequestRetries": 3,
    "maxAlbumsPerStore": 2000,
    "monitoringStateKey": "default",
    "resetMonitoringState": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/yupoo-store-monitor").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 = {
    "storeUrls": [{ "url": "https://wholesaleshop.x.yupoo.com" }],
    "proxyConfiguration": { "useApifyProxy": True },
    "maxRequestRetries": 3,
    "maxAlbumsPerStore": 2000,
    "monitoringStateKey": "default",
    "resetMonitoringState": False,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/yupoo-store-monitor").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 '{
  "storeUrls": [
    {
      "url": "https://wholesaleshop.x.yupoo.com"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxRequestRetries": 3,
  "maxAlbumsPerStore": 2000,
  "monitoringStateKey": "default",
  "resetMonitoringState": false
}' |
apify call getascraper/yupoo-store-monitor --silent --output-dataset

```

## MCP server setup

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

```

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/F6FNmj82mGUUEUB4s/builds/4e4tO11qkA4aDusVY/openapi.json
