# Yupoo Images Downloader (`pizani/yupoo-images-downloader`) Actor

Efficiently download and zip all product images from any Yupoo album. Ideal for suppliers, importers, and e-commerce automation.

- **URL**: https://apify.com/pizani/yupoo-images-downloader.md
- **Developed by:** [Pizani](https://apify.com/pizani) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 865 total users, 4 monthly users, 99.0% runs succeeded, 4 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.40 / 1,000 image downloadeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Yupoo Album Downloader — ZIP Download, Password-Protected Albums & Seller Links

Download every photo from a Yupoo album into a single ready-to-use `.zip`, including password-protected albums and the seller's Weidian / Taobao / 1688 product links. Built for suppliers, sourcing agents, importers and e-commerce automation.

***

### Why this Actor

Not every Yupoo downloader does the same job. Here is what to check when comparing:

| Capability | This Actor |
|---|---|
| 🔓 Opens password-protected albums | ✅ Yes — just pass the password |
| 📦 Delivers a real `.zip` (not a list of URLs) | ✅ Yes — one direct download link |
| 🛒 Extracts Weidian / Taobao / 1688 links from the album | ✅ Yes — links + `main_link` |
| 🏷️ Full album metadata — title, description, seller, cover, photo count | ✅ Yes |
| 🖼️ Original-resolution images | ✅ Yes |
| 💸 Priced per event, not per subscription | ✅ Pay only for what you download |

Most Yupoo downloaders stop at the images. This one returns the commercial context of the album — who the seller is and where the product is actually sold — which is what turns a folder of photos into something you can list, source or resell from.

***

### 🔓 Password-Protected Albums

Locked album? Pass the password in the input and the Actor authenticates and downloads normally. Most Yupoo downloaders simply fail on these albums.

```json
{
  "product_url": "https://example.x.yupoo.com/albums/12345678",
  "password": "1234"
}
```

The output field `password_used` tells you whether authentication was needed for that album.

***

### 🛒 Seller & Marketplace Links

Yupoo albums usually point to where the product is really sold. This Actor extracts those links for you:

```json
{
  "main_link": "https://weidian.com/item.html?itemID=1234567890",
  "links": [
    { "url": "https://weidian.com/item.html?itemID=1234567890", "text": "Weidian" }
  ]
}
```

Useful for sourcing agents building catalogs, and for anyone matching Yupoo photos back to a purchasable listing.

***

### Input

Individual album URLs only — not category or store pages.

| Field | Required | Description |
|---|---|---|
| `product_url` | ✅ | Full URL of the Yupoo album (e.g. `https://example.x.yupoo.com/albums/12345678`) |
| `password` | ❌ | Password for protected albums |

```json
{
  "product_url": "https://example.x.yupoo.com/albums/12345678",
  "password": ""
}
```

| | Example |
|---|---|
| ✅ Correct | `https://example.x.yupoo.com/albums/205649537` |
| ❌ Wrong | `https://example.x.yupoo.com/categories/123` |
| ❌ Wrong | `https://example.x.yupoo.com/albums` |

***

### Output

**ZIP file** — stored in the run's key-value store under the key `ZIP`. The direct download link is also returned as `zip_url` in the dataset.

**Dataset (JSON)** — one item per run:

```json
{
  "zip_url": "https://api.apify.com/v2/key-value-stores/<store-id>/records/ZIP",
  "zip_file": "example_12345678.zip",
  "product_url": "https://example.x.yupoo.com/albums/12345678?uid=1",
  "seller_name": "example",
  "seller_url": "https://example.x.yupoo.com",
  "album_id": "12345678",
  "password_used": false,
  "total_downloaded": 18,
  "image_urls": ["https://photo.yupoo.com/...", "..."],
  "album_title": "Nike Air Max 90",
  "album_description": "Available sizes: 36-45",
  "photo_count_displayed": 18,
  "cover_image_url": "https://photo.yupoo.com/...",
  "main_link": "https://weidian.com/item.html?itemID=1234567890",
  "links": [
    { "url": "https://weidian.com/item.html?itemID=1234567890", "text": "Weidian" }
  ]
}
```

***

### Pricing

**Pay per event** — you are charged per image downloaded, per album, and per run. No monthly subscription: you only pay for what you actually download. See the pricing table on this Actor's page for the current rates.

Platform usage is included — no extra compute charges on top.

***

### Typical Uses

- Sourcing agents building product catalogs from supplier Yupoo stores
- Resellers archiving album photos before the seller deletes them
- Importers collecting QC and product photos at original resolution
- Automations that need album images plus the matching Weidian / Taobao listing

***

### FAQ

**Can it download a password-protected Yupoo album?** Yes. Pass the album password in the `password` field.

**Does it give me a ZIP or just image links?** A real `.zip` with all the images, plus the individual `image_urls` if you prefer them.

**Are the images full resolution?** Yes, the Actor downloads the original-resolution files.

**Can I pass a category or store page?** Not currently — one album URL per run.

**Do I need a subscription?** No. You are charged per album and per image downloaded.

# Actor input Schema

## `product_url` (type: `string`):

Full URL of the Yupoo album (e.g. https://example.x.yupoo.com/albums/12345678?uid=1)

## `password` (type: `string`):

Password for protected albums. Leave empty if the album is public.

## Actor input object example

```json
{}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("pizani/yupoo-images-downloader").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("pizani/yupoo-images-downloader").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 '{}' |
apify call pizani/yupoo-images-downloader --silent --output-dataset

```

## MCP server setup

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

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/7NtFA0ceWpetiGy7O/builds/waaBW0p5OvkvgxAf2/openapi.json
