# Xianyu (Goofish) Item & Seller Scraper (`maksim_lazouski/xianyu-goofish-item-seller-scraper`) Actor

Scrape Xianyu (Goofish, 闲鱼) items and seller shops without login, cookies or your own proxy. Get price, description, photos, attributes, views, wants and the seller's profile by item link, list up to 240 items of a seller's shop, or collect similar items. Pay per result.

- **URL**: https://apify.com/maksim_lazouski/xianyu-goofish-item-seller-scraper.md
- **Developed by:** [Maksim Lazouski](https://apify.com/maksim_lazouski) (community)
- **Stats:** 1 total users, 0 monthly users, 91.7% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.00 / 1,000 item rows

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

### What does Xianyu (Goofish) Item & Seller Scraper do?

Xianyu (Goofish) Item & Seller Scraper reads **items** and **seller shops** from [Xianyu](https://www.goofish.com) (闲鱼, also called Goofish), China's largest marketplace for second-hand goods. Give it **item links** or **seller links** and it returns clean rows: the full item with price, description, photos, attributes, counts and the seller's profile; a seller's card; the items of a seller's shop; the similar items Xianyu shows under an item.

- **No Xianyu account, no cookies, no proxy of your own.** Paste links and press Start.
- **Full item rows.** About 45 fields per item: price and original price, shipping fee, full text, every photo, attributes, views, wants and saves, listing date, category, and 20 fields about the seller.
- **A seller's shop by link.** The seller's card and up to 240 items of the shop, each stored once.
- **Similar items.** Up to 30 items Xianyu recommends under each item you give.
- **You pay per row** that was read and stored, and for nothing else.

This actor does **not** search by keyword: Xianyu shows search results only to logged-in users, and the actor never logs in. It starts from links you have: items, or sellers.

It runs on the Apify platform, so you also get scheduling, an API, webhooks, integrations, and export of the results to JSON, CSV, Excel or HTML.

### What data can you extract from Xianyu?

| Group | Fields |
|---|---|
| Item | id, link, title, full description, state (on sale or not), item type, quantity, listing date |
| Price | price, original price, shipping fee (all in CNY) |
| Interest | number of wants, views and saves, units sold |
| Category | category id and name, channel category, attributes such as brand, condition and size |
| Media | every photo of the item |
| Seller in the item row | id, link, name, city, signature, registration date, number of items, items sold, good-review rate, review counts, reply rate and time, last visit, credit level, verification, tags, and ten more of the seller's items |
| Seller card | id, link, name, province, introduction, followers, following, number of items and reviews, share of good reviews, shop level and score, credit label, verification |
| Listed item (a seller's list) | id, link, title, price, category, state, wants, photos, labels |
| Listed item (similar items) | id, link, title, price, city, wants, publishing date, seller name, photo, start of the description, free shipping, labels |

### How to scrape Xianyu items and sellers

1. Open the actor and go to the **Input** tab.
2. Paste **item links or ids**, or **seller links or ids**, or both, one per line.
3. For sellers, choose how many items of each shop to return (up to 240).
4. Turn on **Similar items** to get the items Xianyu shows under each of your items, and **Open every listed item** to get the full item row for every item of a shop.
5. Press **Start**.
6. Open the **Output** tab, or export the dataset as JSON, CSV or Excel, or read it through the API.

A seller's link is the address of the seller's page, `https://www.goofish.com/personal?userId=...`. The same number is in every item row as `seller_id`, so a run over items gives you the sellers to read next.

### How much does it cost to scrape Xianyu?

You pay for the rows the actor stores, at three prices:

| What | Price |
|---|---|
| A full item row | $3.00 per 1,000 |
| A seller card | $1.00 per 1,000 |
| A listed item (a seller's list, or similar items) | $0.50 per 1,000 |

- 1,000 full item rows cost $3.00.
- One seller with 240 listed items costs $0.12.
- One item with its 30 similar items costs $0.018.

You do not pay for items the actor could not read, and a run that reads nothing fails without charging a row. Apify's free plan comes with $5 of usage a month, which is enough for about 1,600 full item rows.

### Input

| Field | What it does |
|---|---|
| `items` | Item links or ids. `https://www.goofish.com/item?id=777420130180` and `777420130180` are the same. |
| `sellers` | Seller links or ids. `https://www.goofish.com/personal?userId=2214156880408` and `2214156880408` are the same. |
| `maxItemsPerSeller` | How many items of each seller's list to return: 0 to 240, 60 by default. 0 returns only the seller's card. |
| `includeSimilar` | Adds the similar items (up to 30) of every item in `items`. |
| `scrapeDetails` | Off: a short row per listed item. On: the full item row for every listed item. |
| `maxItems` | Stop after this many rows. |
| `maxConcurrency` | How many items and sellers are read at the same time. 10 by default. |

Items by link, with their similar items:

```json
{
    "items": [
        "https://www.goofish.com/item?id=777420130180",
        "699966960469"
    ],
    "includeSimilar": true
}
```

A seller's shop, with the full row for every item:

```json
{
    "sellers": ["https://www.goofish.com/personal?userId=2214156880408"],
    "maxItemsPerSeller": 100,
    "scrapeDetails": true
}
```

### Output

Every row has a `type` field: `item`, `seller` or `listing`.

#### An item row

About 45 fields. The lists are cut short here and the seller's name is masked.

```json
{
    "type": "item",
    "item_id": "777420130180",
    "url": "https://www.goofish.com/item?id=777420130180",
    "title": "实拍 UR专柜正品紫红色系显白V领金丝线粗棒针织套头毛衣",
    "description": "实拍 UR专柜正品紫红色系显白V领金丝线粗棒针织套头毛衣\n[1]尺码：S 36\n[2]面料：聚酯纤维\n[3]成色：几乎全新...",
    "price": 50,
    "original_price": 499,
    "currency": "CNY",
    "shipping_fee": 12,
    "status": "在线",
    "quantity": 1,
    "sold_count": 0,
    "want_count": 189,
    "view_count": 24438,
    "saved_count": 416,
    "created_at": "2024-03-26T01:39:17Z",
    "category_id": "50114004",
    "category_name": "女士毛衣/针织衫",
    "attributes": {"品牌": "UR", "成色": "几乎全新", "尺码": "S", "适用季节": "秋冬季", "袖长": "长袖"},
    "images": ["https://img.alicdn.com/bao/uploaded/i4/O1CN01JSizVO1oHC5SVa2fc_!!53-fleamarket.heic"],
    "seller_id": "2394395199",
    "seller_url": "https://www.goofish.com/personal?userId=2394395199",
    "seller_name": "大***铺",
    "seller_city": "青岛",
    "seller_registered_at": "2015-01-04T16:47:31Z",
    "seller_item_count": 866,
    "seller_sold_count": 58,
    "seller_good_review_rate": "100%",
    "seller_reply_rate_24h": "低于50%",
    "seller_reply_time": "3小时",
    "seller_last_seen": "8小时前来过",
    "seller_credit": "信用极好",
    "seller_verified": ["实人认证已通过"],
    "seller_other_items": [
        {"item_id": "843256561326", "title": "实拍 ZARA专柜正品显瘦V领设计灯笼袖收腰款式含羊毛针织毛", "price_text": "¥50",
         "url": "https://www.goofish.com/item?id=843256561326"}
    ]
}
```

#### A seller row

```json
{
    "type": "seller",
    "seller_id": "2394395199",
    "url": "https://www.goofish.com/personal?userId=2394395199",
    "name": "大***铺",
    "location": "山东省",
    "introduction": "全场闲置物品售出一律不退不换！不议价！不包邮！",
    "followers": 2710,
    "following": 2,
    "item_count": 230,
    "review_count": 28,
    "good_review_percent": 100,
    "shop_level": "L2",
    "shop_score": 47,
    "credit": "卖家信用极好",
    "real_person_verified": true
}
```

#### A listed item row

From a seller's list (`"source": "seller"`):

```json
{
    "type": "listing",
    "source": "seller",
    "source_seller_id": "2394395199",
    "source_seller_name": "大***铺",
    "item_id": "842485579368",
    "url": "https://www.goofish.com/item?id=842485579368",
    "title": "实拍 UR专柜正品黄色系镂空编织休闲短款针织毛衣",
    "price": 50,
    "currency": "CNY",
    "category_id": "50114004",
    "want_count": 4,
    "image": "https://img.alicdn.com/bao/uploaded/i4/O1CN01QglqsG1oHC8yX0Vqs_!!53-fleamarket.heic",
    "images": ["https://img.alicdn.com/bao/uploaded/i4/O1CN01QglqsG1oHC8yX0Vqs_!!53-fleamarket.heic"],
    "tags": ["4人想要"]
}
```

From the similar items of an item (`"source": "similar"`):

```json
{
    "type": "listing",
    "source": "similar",
    "source_item_id": "770661560846",
    "item_id": "1081913905419",
    "url": "https://www.goofish.com/item?id=1081913905419",
    "title": "119.9“江南布衣”新款‼️，今年爆款，直筒八分裤‼️‼️",
    "price": 119.9,
    "currency": "CNY",
    "city": "杭州",
    "published_at": "2026-09-07T07:43:08Z",
    "image": "https://img.alicdn.com/bao/uploaded/i1/2220233411358/O1CN01dZnfXCIom5J2BxV2_!!4611686018427382558-0-xy_item.jpg",
    "has_video": true,
    "free_shipping": true
}
```

### Limits you should know

- **No search by keyword.** Xianyu answers a search only for a logged-in user. This actor reads what a visitor who is not logged in can see, and never logs in.
- **Up to 240 items per seller.** The actor reads the first 240 items of a seller's list, in the order the seller's page shows them. A seller with more items is returned in part; `item_count` in the seller row says how many there are.
- **Similar items are Xianyu's choice.** They are the up to 30 items Xianyu shows under an item. Ask twice and the list can differ.
- **A deleted item cannot be read.** It is listed in the run's `FAILED` record with Xianyu's own words and is not charged. An item that was sold may still be readable; `status` says what state it is in.
- **Large counts come rounded.** For big shops Xianyu shows followers as "4.2w" (ten thousands); the actor returns 42000.
- **Text is returned as Xianyu gives it:** in Chinese, prices in CNY. Photos are links to Xianyu's own image files, many of them in HEIC format.
- **An item takes about 3 seconds** for one reader, and a seller's list of 240 items about half a minute; ten read at the same time by default. For a large job set the run's timeout to fit.

### FAQ

#### Do I need a Xianyu account, cookies or a proxy?

No. The actor reads what Xianyu shows to a visitor who is not logged in, and brings its own connections.

#### How do I find sellers and items without search?

Start from what you have: links from your own browsing, from a supplier list, from an earlier export. Every item row carries its seller's id and ten more of that seller's items, a seller's shop gives up to 240 item links, and similar items lead from one item to up to 30 others in the same niche.

#### What happens when an item could not be read?

Each item and each seller is tried up to three times. What still fails is listed in the `FAILED` record of the run's key-value store, with the reason. A failed item is not charged; if a seller's list breaks off part-way, the rows already stored are kept and the seller is listed in `FAILED`. The `SUMMARY` record holds the counts of the run.

If Xianyu starts refusing visitors, or the connection is lost, the run does not press on: it waits and tries again with one visitor at a time. If that does not help within a few minutes, the run stops, is marked as failed and keeps what it stored. Start it again with **Resurrect** and it goes on from where it stopped. A row is never stored twice, also when a run is restarted.

#### Can I run it on a schedule or call it from my code?

Yes. Use Apify's schedules for regular runs, for example to watch the prices of a list of items or the new items of a seller, and the Apify API or its clients for Python and JavaScript to start runs and read results. The `maxItems` field and the run's spending limit keep a run within a budget.

#### Is it legal to scrape Xianyu?

The actor reads only what Xianyu shows publicly, without logging in. Many sellers on Xianyu are private persons, and the rows hold their public profile: a name, a city, a self-description. That is personal data. Collect it only for a purpose the rules that apply to you allow, keep no more than you need, and do not use it to contact or profile people. You are responsible for how you use the data; if you are not sure, ask a lawyer.

#### Something is wrong or a field is missing

Open an issue on the actor's **Issues** tab with the item or seller link. Requests for other marketplaces are welcome there too.

Xianyu and Goofish are trademarks of their owner. This actor is not affiliated with or endorsed by Xianyu, Goofish, Taobao or Alibaba Group.

# Actor input Schema

## `items` (type: `array`):

Xianyu items to read in full. Each line is a link such as https://www.goofish.com/item?id=777420130180 or just the number from it.

## `sellers` (type: `array`):

Sellers whose profile and item list to read. Each line is a link to the seller's page such as https://www.goofish.com/personal?userId=2214156880408 or just the number from it. The seller's number is also in every item row (seller_id).

## `maxItemsPerSeller` (type: `integer`):

How many items of each seller's list to return, in the order the seller's page shows them. 240 is the most. 0 returns only the seller's profile.

## `includeSimilar` (type: `boolean`):

For every item in "Item links or ids", also return the similar items Xianyu shows under it (up to 30 per item).

## `scrapeDetails` (type: `boolean`):

Off: one short row per listed item (title, price, pictures, link). On: the actor opens every item of a seller's list and every similar item, and returns the full item row instead.

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

The run stops once it has stored this many rows. Leave empty for no limit.

## `maxConcurrency` (type: `integer`):

How many items and sellers are read at the same time, each from its own address. More is faster; the default suits most jobs.

## Actor input object example

```json
{
  "sellers": [
    "https://www.goofish.com/personal?userId=2214156880408"
  ],
  "maxItemsPerSeller": 60,
  "includeSimilar": false,
  "scrapeDetails": false,
  "maxConcurrency": 10
}
```

# Actor output Schema

## `results` (type: `string`):

One row per item, per seller or per listed item; the field `type` says which.

## `summary` (type: `string`):

How many items, sellers and listed items were stored, how many failed, and why the run stopped if it did.

## `failed` (type: `string`):

The items and sellers that could not be read, each with the reason (a deleted item, for one). An empty list when everything was read.

# 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 = {
    "sellers": [
        "https://www.goofish.com/personal?userId=2214156880408"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maksim_lazouski/xianyu-goofish-item-seller-scraper").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 = { "sellers": ["https://www.goofish.com/personal?userId=2214156880408"] }

# Run the Actor and wait for it to finish
run = client.actor("maksim_lazouski/xianyu-goofish-item-seller-scraper").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 '{
  "sellers": [
    "https://www.goofish.com/personal?userId=2214156880408"
  ]
}' |
apify call maksim_lazouski/xianyu-goofish-item-seller-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maksim_lazouski/xianyu-goofish-item-seller-scraper"
        }
    }
}
```

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/5qF5TVHf73u9x1B1D/builds/JqaO38tEqqn5MwdBY/openapi.json
