# Goofish (闲鱼) Data Scraper (`devcake/goofish-scraper`) Actor

Collect Goofish marketplace data at scale—from basic search results to enriched products, sellers, and comments.

- **URL**: https://apify.com/devcake/goofish-scraper.md
- **Developed by:** [devcake](https://apify.com/devcake) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 66.7% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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/platform/actors/running/actors-in-store#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

## Goofish (Xianyu) Listings, Prices & Seller Data

Extract Goofish (Xianyu / 闲鱼) listings into a clean, ready-to-use dataset for **product sourcing, price tracking, seller research, and second-hand market analysis**. Enter the products you want to find, choose the maximum number of results, and start the Actor—no Goofish account is required.

### ✨ What can this Goofish scraper do?

- 🔎 **Search up to 50 keywords in one run**, from English product names to Chinese search terms.
- 🖼️ **Add listing details** such as descriptions, full image galleries, engagement counts, item status, and category.
- 🛡️ **Review seller signals** including credit level, positive-review ratio, reply rate, verification, and active-listing count.
- 👤 **Get the extended seller profile** — praise ratio, reviews, certifications, shop level, social, IP region — bundled into detail enrichment at no extra cost.
- 💬 **Include public comments and replies** — opt-in buyer-intent enrichment at $0.0045 per returned entry.
- 📅 **Schedule searches** to build recurring snapshots of prices, demand, and new listings.
- 📥 **Download results** for spreadsheets, reports, dashboards, or other workflows.

The Actor returns public marketplace information that is available during the run. Some fields may be empty when a listing or seller does not provide them.

### 🚀 How to scrape Goofish listings

1. Open the Actor and enter one or more product keywords.
2. Choose the **Maximum results** you want returned.
3. Turn on **Include product details** for descriptions, images, engagement data, seller information, and the public seller profile.
4. Optionally turn on **Fetch comments** to add public comments and replies. Required product details are included automatically.
5. Click **Start** and open the **Dataset** tab when the run finishes.

For a quick search, start with one keyword and 50 items. For recurring research, save the settings and connect the task to an [Apify Schedule](https://docs.apify.com/platform/schedules).

### 📊 What Goofish data can you extract?

Each dataset row represents one listing. The exact fields depend on whether detail enrichment is enabled — when it is on, both the listing details and the extended seller profile are included.

| Data group | Information returned |
|---|---|
| 🏷️ Listing | Item ID, title, URL, thumbnail, badges, category, status, and quantity |
| 💴 Pricing | Current display price, numeric price, original price when shown, sold price when available, and shipping fee |
| 📍 Location | Listing area and seller city when available |
| 📈 Engagement | Want count, views, favorites, collections, and sold count when available |
| 🖼️ Content | Full description, rich description, image gallery, image count, video references, and product specifications when present |
| 👤 Seller | Nickname, seller ID, profile image, biography, registration details, and listing count |
| 🛡️ Seller trust | Credit level, positive-review ratio, 24-hour reply ratio, reply time, Zhima verification, and seller badges |
| 💬 Public discussion | Up to 50 public root comments and nested replies, with author, time, content, and reply linkage |
| 🔗 Related listings | Up to 10 other listings from the same seller when returned by Goofish |
| 🔍 Search context | Keyword and result page that produced the listing |

### 📦 Output examples

Each Dataset row is one listing. The examples below are shortened for
readability; additional fields may be present, and some values may be `null`
when Goofish does not return them.

#### 1. Search only

Leave **Include product details** off for the fastest mode. It returns the core listing information from the search result.

```json
{
    "item_id": "912345678901",
    "title": "JinkoSolar 410W Solar Panel",
    "price_text": "¥ 369",
    "price_value": "369",
    "area": "上海",
    "user_nick": "gadget_shop88",
    "want_count": 12,
    "want_text": "12人想要",
    "badges": ["icon:13", "百分百好评"],
    "pic_url": "https://gw.alicdn.com/imgextra/example.jpg",
    "detail_url": "https://www.goofish.com/item?id=912345678901",
    "category_id": "50007218",
    "seller_id": "Z2FkZ2V0X3Nob3A4OA==",
    "publish_time": "2026-07-28T09:00:00+00:00",
    "keyword": "solarpower",
    "page": 1,
    "_phase": "search",
    "_schema_version": 1
}
```

#### 2. Search with detail enrichment

Turn on **Include product details** to keep the search fields and add
descriptions, engagement, full images, item status, specifications, category,
standard seller information, and the extended public profile under
`seller.profile`. This example also has **Fetch comments** on; leave it off to
omit `comment_count`, `comments`, and `_comments_status`.

```json
{
    "item_id": "912345678901",
    "title": "JinkoSolar 410W Solar Panel",
    "price_text": "¥ 369",
    "area": "上海",
    "want_count": 12,
    "want_count_official": 13,
    "view_count": 1480,
    "fav_count": 27,
    "collect_count": 18,
    "sold_count": 0,
    "description": "410W mono solar panel. Local pickup is available.",
    "item_status": 0,
    "item_status_str": "在售",
    "quantity": 1,
    "images": [
        {
            "url": "https://gw.alicdn.com/imgextra/example-1.jpg",
            "width": 1440,
            "height": 1920
        },
        {
            "url": "https://gw.alicdn.com/imgextra/example-2.jpg",
            "width": 1440,
            "height": 1920
        }
    ],
    "image_count": 2,
    "has_video": false,
    "specifications": {
        "Brand": "JinkoSolar",
        "Power": "410W"
    },
    "seller": {
        "nick": "gadget_shop88",
        "seller_id": 2200123456789,
        "city": "上海",
        "portrait_url": "https://gw.alicdn.com/avatar/example.jpg",
        "credit_level": "信用极好",
        "good_ratio_rate": "99.50",
        "reply_ratio_24h": "0.92",
        "reply_interval": "3分",
        "zhima_auth": true,
        "level_tags": ["百分百好评"],
        "item_count_total": 412,
        "other_items": [
            {
                "item_id": "912345678902",
                "title": "Solar inverter 3kW",
                "price": "899",
                "pic": "https://gw.alicdn.com/imgextra/other-item.jpg"
            }
        ],
        "profile": {
            "praise_ratio": 98,
            "review_num": 3503,
            "introduction": "Specializing in solar equipment and accessories.",
            "shop_level": "L6",
            "shop_score": 5207,
            "social_followers": "2062",
            "social_following": "12",
            "certifications": [
                "idle_zhima_zheng",
                "real_name_certification_77",
                "real_person_certification_77"
            ],
            "zhima_certified": true,
            "real_name_certified": true,
            "real_person_certified": true,
            "ip_location": "上海"
        }
    },
    "category_path": ["数码电器", "太阳能/光伏"],
    "comment_count": 2,
    "comments": [
        {
            "comment_id": "101",
            "type": "comment",
            "author_nick": "buyer",
            "author_id": "9001",
            "content": "还在吗？",
            "created_at": "2026-07-29T12:34:56+08:00",
            "reply_to": null
        },
        {
            "comment_id": "102",
            "type": "answer",
            "author_nick": "seller",
            "author_id": "9002",
            "content": "在的",
            "created_at": "2026-07-29T12:40:00+08:00",
            "reply_to": "101"
        }
    ],
    "keyword": "solarpower",
    "page": 1,
    "_phase": "detail",
    "_enriched": true,
    "_enrich_status": "ok",
    "_seller_profile_status": "ok",
    "_comments_status": "ok",
    "_schema_version": 1
}
```

The seller-profile request is part of detail enrichment. If Goofish does not
return it, the listing can still be detail-enriched while
`_seller_profile_status` explains the profile result and `seller.profile` may
be absent.

Selecting **Fetch comments** automatically enables detail enrichment. The
Actor adds at most 50 flattened discussion entries per listing. Root entries
use `type: "comment"` and nested replies use `type: "answer"`.
`_comments_status: "ok"` can accompany an empty array and
`comment_count: 0`; listings with no public discussion are not charged for a
comment event. A failed comments call does not discard successful detail data.

In the Dataset Output tab:

- **Overview** keeps one row per product and shows `comment_count` plus
  `_comments_status`.
- **Comments** expands the nested array into one row per public comment or
  reply, including author, content, timestamp, and reply linkage.
- **JSON** and exports keep the complete nested `comments` array inside the
  product record.

### 🎯 Popular use cases

#### Product sourcing from China

Search Goofish, compare prices and photos, and shortlist sellers using public reputation signals. This helps resellers, collectors, procurement researchers, and niche buyers explore China’s second-hand market.

The Actor supports research and shortlisting. It does not contact sellers, place orders, arrange payment, verify authenticity, or organize shipping.

#### Second-hand price tracking

Repeat the same search and compare saved datasets over time. Sort by newest, price, or biggest price drop to focus each snapshot on the change you care about.

#### Marketplace seller research

Enable detail enrichment to compare credit, reviews, response signals, verification, location, listing count, and the bundled extended public profile.

#### Export marketplace listings

Collect multiple searches in one run and download the dataset for analysis, reporting, catalog review, or dashboards. Use item IDs when comparing repeated runs.

#### Second-hand market analysis

Combine price, location, engagement, age, condition, category, and seller information to study supply and buyer interest. Results are a snapshot, not a complete historical record.

### ⚙️ Search options

| Option | What you can choose |
|---|---|
| 🔎 Search keywords | 1–50 product names or search terms |
| 📦 Maximum results | 1–100,000 products; billing is based on results actually returned |
| ✨ Include product details | Adds descriptions, images, engagement, item status, category, seller trust data, and the public seller profile |
| 💬 Fetch comments | Adds public comments and replies; required product details are included automatically |

Detail enrichment takes longer. Use search-only mode when titles, prices, areas, seller names, badges, and links are enough.

### 💳 How much does it cost?

The Actor uses **three result-related event types**. Every final Dataset row
receives the regular search charge, successful detail enrichment adds one
detail event, and every returned public comment or reply adds one comment
event:

| Charge | Event | Price each | Customer total per 1,000 |
|---|---|---:|---:|
| Regular search result | `apify-default-dataset-item` | $0.0010 | $1.00 |
| Detail add-on | `detail-enriched-result` | $0.0040 | $5.00 total |
| Public comment or reply | `comment-result` | $0.0045 | $4.50 per 1,000 entries |

The enriched total is the $0.001 Dataset charge plus the $0.004 detail add-on.
A failed detail request receives only the regular search charge. Seller-profile
data is bundled into detail enrichment and does not create another charge.
Comments and replies are charged only when returned: zero entries add $0.
The number of charged occurrences in a run is the number of Dataset rows plus
successful detail enrichments plus returned comments and replies. For example,
1,000 fully enriched products with 2,500 returned comments produce 1,000
Dataset events, 1,000 detail events, and 2,500 comment events.
Use the maximum-item setting to begin with a small sample and check the
Actor’s **Pricing** tab for the currently published prices.

Enrichment takes longer but does not change what counts as a returned item. Unavailable details may leave a partial row with an enrichment-status label.

### ❓ Frequently asked questions

#### Are Goofish and Xianyu the same marketplace?

Yes. Xianyu (闲鱼) is also presented under the Goofish name. This Actor accepts English and Chinese product keywords.

#### Do I need a Goofish account?

No. The Actor collects public listing and seller information without requiring you to provide a Goofish login.

#### How do I source a product from China?

Search in English, Chinese, or both. Compare prices, photos, locations, engagement, and seller signals, then create a shortlist. Complete seller contact, authenticity checks, payment, shipping, and compliance separately.

#### How can I see seller details on a marketplace listing?

Turn on **Include product details** to get seller credit, reviews, reply signals, verification, location, listing count, and the extended public seller profile (praise ratio, certifications, shop level, social, IP region) — all in one pass. Not every field is guaranteed.

#### How are comments charged?

Turn on **Fetch comments** with product details. Each public root
comment or nested reply returned is one `comment-result` event at $0.0045.
A listing with zero returned entries has no comments charge.

#### Can this Actor guarantee that a seller or item is genuine?

No. Credit labels, reviews, verification badges, descriptions, and photos are research signals—not guarantees. Review expensive purchases carefully and complete all communication, payment, and buyer-protection steps through the marketplace.

#### Why are some detail fields empty?

A field may be missing because Goofish did not provide it, the listing changed, or enrichment was off. Use enrichment status to separate complete and partial rows.

# Actor input Schema

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

Enter one or more product names or search terms.

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

Stop after returning this many products. You are charged only for results returned.

## `fetchDetails` (type: `boolean`):

Add descriptions, full images, engagement data, seller information, and the public seller profile.

## `includeComments` (type: `boolean`):

Add public comments and replies. Product details are included automatically and use detail-enrichment pricing.

## Actor input object example

```json
{
  "keywords": [
    "solarpower"
  ],
  "maxItems": 50,
  "fetchDetails": false,
  "includeComments": false
}
```

# Actor output Schema

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

No description

## `tableView` (type: `string`):

No description

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

No description

## `session` (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 = {
    "keywords": [
        "solarpower"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("devcake/goofish-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 = { "keywords": ["solarpower"] }

# Run the Actor and wait for it to finish
run = client.actor("devcake/goofish-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "keywords": [
    "solarpower"
  ]
}' |
apify call devcake/goofish-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=devcake/goofish-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/IVT8x8LMtmagmMGP3/builds/WMgGMec4UtfaYXcmK/openapi.json
