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's secondhand marketplace, by keyword, item URL or ID, or seller URL or ID. Returns title, price, condition, location, image and seller details such as Zhima credit and verification, with the mode auto-detected and no cookies.
Pricing
from $5.00 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
37
Total users
4
Monthly active users
4 days ago
Last modified
Categories
Security
Limited permissionsShare
What is Goofish Scraper — Xianyu C2C Listings, Item Detail & Seller?
Seller catalog input
Provide seller IDs as strings or seller profile URLs in startUrls. Clear the
Search keyword field when running from sellers alone.
{"sellerIds": ["2209657546241"],"maxResults": 25,"maxItemsPerSeller": 25,"maxSellerPages": 5,"fetchDetails": false}
Seller-only listing runs read anonymous public profile and catalog responses.
Each listing includes the seller's nickname, profile link, public bio, follower
counts and public review indicators when available. SELLER_PROFILES in the
run's key-value store also keeps profiles for completed empty catalogs. No
login credentials or cookies are requested. Goofish may still block anonymous
access; a blocked response is an upstream failure.
maxResults is a global cap; maxItemsPerSeller optionally caps each seller.
The source serves pages of 20 cards. At most 100 seller references, 250 pages
per seller, 1,000 HTTP requests and ten minutes apply to a seller-only run.
Each seller also has a two-minute limit. Caller-provided proxy settings are
honored. Without proxy settings, seller-only runs try direct access. The
existing Console proxy default remains available and adds platform proxy usage.
Reaching a result, page, time or charge limit reports incomplete coverage.
VALID_EMPTY requires completed source responses and no matching listings.
Catalog cards do not reliably expose condition, publication date, views, wants
or full descriptions; missing values remain null. Explicit condition and date
filters exclude unknown values. Enable detail enrichment to use detail-page
fields, which may also be unavailable. itemStatus is the raw availability
value, not an item-condition rating. The seller's IP region is not the item's
city. Source ordering and available inventory can change while paging.
Ordinary seller listing rows use the existing Listing scraped event; filtered and duplicate listings are not charged. Detail enrichment uses the existing detail event only after usable details are returned. Existing startup fees and the live platform-usage payer still apply. The run's Output and Run summary records show delivered counts, named charges and source coverage. Seller receipt checkpoints prevent automatic replay of unresolved effects; changed snapshots or ambiguous storage/charging require reconciliation before resuming. They do not guarantee atomic storage and billing.
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 public catalog 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:
- A residential proxy fallback residential if the owner-managed key environment 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 public catalog 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 public catalog 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 public catalog 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.