Goofish Scraper — Xianyu C2C Listings, Item Detail & Seller
Pricing
from $5.00 / 1,000 listing scrapeds
Goofish Scraper — Xianyu C2C Listings, Item Detail & Seller
Scrape Goofish (闲鱼/Xianyu — Alibaba C2C secondhand marketplace) by keyword, item URL/ID, or seller URL/ID. Returns title, price, condition, location, image, seller (Zhima credit, verification). Cookieless via MTOP XHR. Three modes auto-detected. MCP-ready.
Pricing
from $5.00 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
15
Total users
5
Monthly active users
9 hours ago
Last modified
Categories
Share
Goofish Scraper — Xianyu Listings, Detail & Seller Data
Goofish Scraper is an Apify Actor for people who need structured Goofish (闲鱼/Xianyu, Alibaba's C2C secondhand marketplace) data from a keyword, an item URL or ID, or a seller URL or ID. It accepts one public input set, auto-detects the mode, and returns one record per scraped listing. Each record can include the title, price, condition, location, image, seller card, item URL, search query echo, result position, and capture timestamp. The Actor is usable through Apify MCP and returns dataset-backed records for downstream review or automation.
Best fit and connected workflows
This Actor fits workflows that start with public Goofish pages and end with structured marketplace records.
Common paths include:
- Keyword discovery for category monitoring, price tracking, and topic browsing.
- Item-level lookup when you already have a Goofish item URL or item ID.
- Seller-level lookup when you want a seller profile plus that seller's active listings.
- MCP-driven agent workflows where a tool call needs a bounded input, a clear output, and dataset readback.
Search mode also supports sorting and filtering, so you can route results toward newer posts, price-ordered lists, or a narrower range of price, condition, and freshness.
Practical scenario
A marketplace analyst starts with the search term "Sony A7 III" and wants a quick view of current Goofish listings. The Actor returns records with the title, current price in CNY, condition, city, primary image, seller card, and item URL. The analyst uses the returned price, condition, and city fields to shortlist listings, then opens the item URLs for manual review or passes the dataset to a follow-up step.
Input fields
| Field | Type | Purpose |
|---|---|---|
searchQuery | string | Keyword search mode. Chinese and English keywords both work. |
startUrls | array of strings | Item, seller, or search URLs. Mode is auto-detected from each URL. |
itemIds | array of strings | Numeric item IDs for detail mode. |
sellerIds | array of strings | Numeric seller user IDs for seller mode. |
maxResults | integer | Hard cap on returned and charged listings. |
sortBy | string | Search ordering: relevance, newest, priceAsc, priceDesc. |
priceMin | integer | Minimum listing price in CNY. |
priceMax | integer | Maximum listing price in CNY. |
condition | string | Condition filter: all, used, or new. |
publishedWithinDays | integer | Freshness filter measured in days. |
fetchDetails | boolean | Enrich each listing with detail-page data. |
proxyConfiguration | object | Proxy settings for Goofish access. |
Focused JSON input example
{"searchQuery": "iPhone 15 Pro","maxResults": 20,"sortBy": "newest","priceMin": 5000,"priceMax": 12000,"condition": "used","publishedWithinDays": 14,"fetchDetails": false}
Output fields
| Field | Type | Purpose |
|---|---|---|
mode | string | Produces search, detail, or seller. |
itemId | string | Goofish numeric item ID. |
title | string | Listing title in original text. |
price | number | Current price in CNY. |
originalPrice | number | Original or strike-through price when surfaced. |
currency | string | ISO 4217 currency code. |
condition | string | Seller-reported item condition. |
city | string | City or district location. |
province | string | Province when surfaced. |
image | string | Primary thumbnail image URL. |
images | array of strings | Listing image URLs, fully populated in detail mode. |
description | string | Full listing description in detail mode. |
wantCount | integer | Number of users who marked the item as wanted. |
viewCount | integer | Listing view count in detail mode. |
publishedAt | string | Publication or last-bump timestamp. |
seller | object | Seller card with nickname, userId, Zhima credit, verification flags, and total listings. |
itemUrl | string | Public Goofish item URL. |
searchQuery | string | Search keyword echo in search mode. |
position | integer | Search result position, 1-indexed. |
scrapedAt | string | Capture timestamp. |
Illustrative output record
{"mode": "search","itemId": "1234567890","title": "Sony A7 III","price": 6200,"currency": "CNY","condition": "9成新","city": "Shanghai","image": "https://example.com/image.jpg","seller": {"nickname": "Alice","userId": "2200000000000","zhimaCredit": 800,"verified": true},"itemUrl": "https://www.goofish.com/item?id=1234567890","searchQuery": "Sony A7 III","position": 1,"scrapedAt": "2026-07-27T10:00:00Z"}
How it works
The Actor uses PlaywrightCrawler and public Goofish web access. It intercepts Alibaba MTOP XHR responses and parses listing data from Goofish search and detail endpoints, including mtop.taobao.idlemtopsearch.pc.search and mtop.taobao.idle.pc.detail.
It auto-detects three modes from input:
- Search mode from
searchQueryor search URLs. - Detail mode from item URLs or
itemIds. - Seller mode from seller URLs or
sellerIds.
Proxy handling is resolved in this order:
- DataImpulse residential if the
DATAIMPULSE_PROXYenvironment variable is set. - Apify residential proxy.
- Apify datacenter US fallback.
Pricing
This Actor uses Pay per event plus Apify platform usage. The live Pricing tab shows the current event charges and platform usage details for your account.
Charged events include:
- Actor start, billed once per run.
- Listing scraped, billed per listing returned in search or seller mode when
fetchDetailsis false. - Listing enriched with detail, billed per returned listing when
fetchDetailsis true or when using detail mode.
For example, if a run returns ten listings in search mode, you are billed for ten listing events plus one start event. If the same run returns twenty-five detail-enriched listings, each returned listing is billed at the detail-enriched rate shown in the live Pricing tab.
Use with AI agents (MCP)
This Actor is available as an Apify Actor usable through Apify MCP. It is a precise tool for turning a public Goofish search term, item reference, or seller reference into structured marketplace records that an agent can inspect or pass downstream.
Actor identity: khadinakbar/goofish-scraper
Search Goofish for "Sony A7 III", return the newest used listings under 12000 CNY, and include the seller card for each item. Give me the dataset rows with item URL, price, condition, city, and position so I can compare options.
Output interpretation for agents:
modeidentifies which input path produced the record.itemUrlis the direct public page to inspect.sellerprovides the seller card when surfaced by the source.searchQueryandpositionhelp trace each record back to the originating search.scrapedAthelps separate current run output from older dataset rows.
Provenance and scope:
- Records come from public Goofish pages and Goofish-surfaced data.
- Search output is one record per returned listing.
- Detail mode can add the full description, all images, view count, want count, and the full seller card.
- Seller mode returns the seller profile plus that seller's active listings.
Pagination and cost guidance:
maxResultssets the hard cap for returned and charged items.- Search and seller workflows can be narrowed with price range, condition, and freshness filters.
- For cost-aware agent flows, start with a smaller
maxResults, then widen only when needed. - Detail enrichment uses the higher per-listing event, so enable it when the extra fields are useful for the task.
JavaScript example with Apify API and dataset readback
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const run = await client.actor('khadinakbar/goofish-scraper').call({searchQuery: 'Sony A7 III',maxResults: 10,sortBy: 'newest',fetchDetails: false,});const dataset = await client.dataset(run.defaultDatasetId).listItems();for (const item of dataset.items) {console.log(item.itemId, item.title, item.price, item.itemUrl);}
Best results and outcome guidance
Use the most direct input for the task:
- Start with
searchQuerywhen you need discovery by topic or model name. - Use
itemIdsor an item URL when you already know the exact listing. - Use
sellerIdsor a seller URL when you want one seller's active listings. - Use
sortBy: newestfor fresh inventory checks. - Use
priceMin,priceMax,condition, andpublishedWithinDaysto shape search results before review. - Enable
fetchDetailswhen the task benefits from full description text, all images, and richer seller information.
Continue the workflow
- Then use 🛍️ Google Shopping Scraper - Extract Prices, Sellers & Deals to extend Goofish Scraper — Xianyu Listings, Detail & Seller Data with a neighboring commerce research source when the brief calls for Google Shopping data.
- Then use Flipkart Reviews Scraper — Ratings, Verified Buyers to extend Goofish Scraper — Xianyu Listings, Detail & Seller Data with a neighboring commerce research source when the brief calls for Flipkart data.
Design note
I found that the output contract includes a dedicated scrapedAt field, which makes each record easy to trace to a specific capture time in the dataset.
FAQ
Can I use this Actor with a Goofish search keyword only?
Yes. searchQuery is a supported input path and the Actor auto-detects search mode.
Can I send a Goofish item URL instead of an ID?
Yes. startUrls accepts item URLs, seller URLs, and search URLs, and the mode is detected from each URL.
Can I scrape seller pages and seller listings together?
Yes. sellerIds and seller URLs are supported, and seller mode returns the seller profile plus active listings.
Can I enrich search results with detail-page fields?
Yes. Set fetchDetails: true to add detail-page data such as full description, all images, view count, want count, and the full seller card.
How do I control the number of billed records?
Use maxResults as the hard cap, and combine it with filters such as price range, condition, and freshness.
Responsible use
Use this Actor for lawful access to public Goofish content and for workflows that respect applicable terms, privacy rules, and platform policies. Keep usage focused on public marketplace data, review seller information thoughtfully, and handle any personal or identifying information with care.