Goofish Xianyu Scraper (闲鱼 Idlefish)
Pricing
from $3.35 / 1,000 items
Goofish Xianyu Scraper (闲鱼 Idlefish)
Turn Goofish (闲鱼, Xianyu) item or seller links into a table. Each listing row has the title, price in yuan, the 10-point condition, want and view counts, location, the seller's nickname and good-review rate, every photo and the description. No account needed. $3.50 per 1,000 listings.
Pricing
from $3.35 / 1,000 items
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
92
Total users
50
Monthly active users
3 days ago
Last modified
Categories
Share
Paste Goofish (闲鱼, Xianyu) item or seller links and get every listing as a row: the title, asking price in yuan, Goofish's 10-point condition, want and view counts, location, the seller's masked nickname and good-review rate, every photo and the description.
There is no keyword search. This works from links you already have: from the app, from a shared link or from a seller you follow.
| Input | Goofish item links or ids, and seller profile links or ids |
| Output | One row per listing: price, condition, want and view counts, location, category and specs, seller rating and credit, photos and description |
| Ceiling | 5,000 listings per run |
| Account needed | None |
| Price | $3.50 per 1,000 listings on the free plan, down to $3.35 on Business. The free plan's $5 a month covers about 1,400 |
🔍 What Goofish Scraper does
Goofish (闲鱼, Xianyu, sometimes written Idlefish) is Alibaba's second-hand marketplace. This takes listings you can already see and turns them into a table.
An item link can be the full goofish.com/item?id= address, the mobile h5.m.goofish.com version
or just the number. A seller link is a goofish.com/personal?userId= address or its number, and
every listing on that profile is walked and returned in the same shape as an item link. Item links
are done first, then sellers.
Before any of a seller's listings are kept, the first one is read back to check it really belongs
to that seller. If it does not, you get a free note and nothing from that profile. Rows that did
come from a profile you asked for carry foundViaSeller.
Each row is put together from two parts of Goofish, and sourceItemRecord and sourceDetailPage
say which answered. When one is missing, its fields are null rather than guessed. Old listings are
the usual case: on a 150-listing seller walk, 140 rows were complete and 10 came back thinner, all
of them listings from earlier years. That walk took 87 seconds on a test run, and a run of 13 item
links took 11.
Filters are off unless you set them: a price band, how recently it was listed, a minimum condition and free shipping only. A listing a filter leaves out is not charged. If your filters match very few of the listings read, the run stops early and leaves a free note saying how many it read and kept.
Lite mode returns the listing record alone: no want, view or save counts and nothing about the seller. It is billed at its own lower price once that price is on the Pricing tab. Until then, a run with it on writes one free note and stops without fetching anything.
📋 What data you get from each Goofish listing
| What you get | Field |
|---|---|
| Listing id and link | itemId, url |
| Title and the seller's description | title, description |
| Asking price, the "was" price, currency and shipping fee | price, originalPrice, currency, shippingFee |
| Goofish's 10-point condition | conditionLevel, conditionText |
| Interest: wants, views and saves | wantCount, viewCount, collectCount |
| Sold counter and units on offer | soldCount, quantity |
| Where the item is | city, province, district |
| The seller: id, masked nickname, good-review rate, reply rate, last seen, shelf size and sales | sellerId, sellerNick, sellerGoodReviewRate, sellerReplyRate24h, sellerLastSeen, sellerItemCount, sellerSoldCount, sellerUrl |
| Category, status and the date it was listed | categoryId, categoryName, status, listedAt |
| Specs the seller picked, brand and model | specs, brand, model |
| Auction listing, free shipping, shop seller | auction, freeShipping, sellerIsShop |
| The seller's credit as Goofish shows it: Zhima credit label, real-person check, member since, good and bad reviews, usual reply time | sellerZhimaCredit, sellerVerified, sellerSince, sellerGoodReviews, sellerBadReviews, sellerReplyTime |
| The seller's other listings, as links | sellerOtherItems |
| On listings Goofish inspected and stores itself: the inspection summary and the other units on sale | inspection, variants, variantCount |
| Every photo | images, imageCount |
| Which part of Goofish answered, and whether it came from a seller you asked for | sourceItemRecord, sourceDetailPage, foundViaSeller |
| When the row was read | scrapedAt |
▶️ How to scrape Goofish listings
- Open Goofish Scraper and click Try for free.
- Paste listing links into Item links, or profile links into Seller links, one per line.
- Set Maximum listings.
- Untick Include the seller's description if you only want prices and counts.
- Click Start, then download the dataset as JSON, CSV or Excel.
With neither item links nor seller links you get one free example row telling you what to put where.
💰 How much does it cost to scrape Goofish listings?
$3.50 per 1,000 listings. That is the free plan's price; paid plans pay a little less: $3.45 on Starter, $3.40 on Scale and $3.35 on Business. On the free plan, the $5 Apify gives you each month covers about 1,400 listings.
Not charged: the example row, every note listed further down, listings your filters leave out, and a listing that turns up twice, which is delivered once. If you set a maximum cost for the run, it stops when that is reached and says so in the log; if the limit is too low for a single listing, nothing is fetched at all.
📥 What you give it
{"itemUrls": ["https://www.goofish.com/item?id=1080166744321", "1081033347338"],"sellerUrls": ["https://www.goofish.com/personal?userId=605970805"],"maxItems": 100,"includeDescription": true}
| Field | Default | What it is |
|---|---|---|
itemUrls | none | Listing links, one per line. A full link, the mobile link or the bare number all work. The form opens with one example link. |
sellerUrls | none | Seller profile links or their numbers, one per line. Every listing on the profile is walked, up to the limit below. |
maxItems | 100 | 1 to 5,000 listings across the whole run. Only listings that come back count; free notes do not. |
includeDescription | true | Keeps the seller's full description. Turn it off for a narrower table. |
minPrice, maxPrice | none | Keep only listings asking at least or at most this many yuan. |
listedWithinDays | none | Keep only listings put up in the last N days, 1 to 3,650. |
minCondition | none | Keep only listings at or above this grade, 1 to 10, where 10 is brand new. |
freeShippingOnly | off | Keep only listings Goofish marks as shipped free (包邮). |
liteMode | off | The listing record only. See above for when it opens. |
proxyConfiguration | none | Only for your own servers, which are used as given. Leave it alone otherwise. |
A value a filter can't use, such as a lowest price above the highest, stops the run before it fetches
anything, with a free invalid_filters note.
📤 What you get back
A real row from a real run, with the photo list and the seller's other listings cut short:
{"itemId": "1080166744321","url": "https://www.goofish.com/item?id=1080166744321","title": "全新正版《我住长江尾》,段志强著,中华书局出版!未拆封,正品","price": 35,"originalPrice": 68,"currency": "CNY","shippingFee": 0,"conditionLevel": 10,"conditionText": "Brand new","wantCount": 23,"viewCount": 494,"collectCount": 10,"soldCount": 0,"quantity": 2,"city": "上海","province": "上海","district": "闵行区","sellerId": "2208434265414","sellerNick": "正***店","sellerGoodReviewRate": "99%","sellerItemCount": 262,"sellerSoldCount": 2991,"sellerReplyRate24h": "96%","sellerLastSeen": "2小时前来过","sellerUrl": "https://www.goofish.com/personal?userId=2208434265414","categoryId": 50023914,"status": "在线","listedAt": "2026-08-28T12:51:10.000Z","images": ["https://img.alicdn.com/bao/uploaded/i2/2208434265414/O1CN01fTSS3lERTGG1chua_!!4611686018427387206-0-xy_item.jpg"],"imageCount": 4,"description": "保证,印刷清晰,纸张手感好~\n\n内容讲复旦教授回归土地的田园生活,真实生动,适合喜欢历史、乡村、治愈系文学的朋友阅读收藏,也适合送礼~\n\n全国包邮(偏远地区除外),喜欢直接拍,细节随时问我~","sourceItemRecord": true,"sourceDetailPage": true,"categoryName": "社科心理","brand": null,"model": null,"specs": {"成色": "全新"},"auction": false,"freeShipping": true,"sellerIsShop": null,"sellerZhimaCredit": null,"sellerVerified": true,"sellerSince": "2020-06-27T03:56:53.000Z","sellerGoodReviews": 487,"sellerBadReviews": 4,"sellerReplyTime": "38分钟","sellerOtherItems": ["https://www.goofish.com/item?id=1036944580767","https://www.goofish.com/item?id=1090669018994"],"inspection": null,"variants": null,"variantCount": null,"scrapedAt": "2026-10-17T17:46:47.528Z"}
| Field | How to read it |
|---|---|
price, originalPrice, currency | The asking price in yuan, and the "was" price where the seller set one. Nothing is converted. |
conditionLevel, conditionText | Goofish's own 10-point scale, where 10 is brand new. Read straight from the listing, never guessed from the photos. |
wantCount, viewCount, collectCount | How many people want it, looked at it and saved it. On a second-hand market these say more than the price. |
sellerNick, sellerLastSeen | Nicknames arrive masked by Goofish, and "last seen" is Goofish's own Chinese wording. |
sellerItemCount, sellerSoldCount | From the seller's profile header. Goofish's numbers, not a count of your rows. |
sourceItemRecord, sourceDetailPage | Which part of Goofish answered for this row. Both true is a complete row. |
foundViaSeller | Present only on rows from a seller profile you asked for, when the listing's own seller matches it. Lite rows never carry it, since lite mode doesn't read the seller. |
categoryName, specs, brand, model | The category and the labels the seller picked when listing it, in Chinese as Goofish shows them. specs is an object of label and value. |
sellerZhimaCredit | The credit label Goofish shows for the seller, such as 信用极好, and null when it shows none. It is never a score we work out. |
sellerVerified | true when Goofish shows the seller's real-person check as passed, otherwise null. |
sellerSince, sellerReplyTime | When the seller joined, and their usual reply time in Goofish's own Chinese wording. |
sellerIsShop | true when the listing page marks the seller as a shop, null when it doesn't say. |
inspection | Only on listings Goofish inspected: the report's conclusion, how many points were checked, how many were abnormal and the defects found. |
variants, variantCount | Only on listings Goofish stores itself: other units on sale under the same listing, each with its own id, link, price and grade. variantCount is Goofish's total, and the list holds the ones it shows on the page. |
scrapedAt | When the row was read. |
🧾 Reading the output
Real rows have no charged field. Every free row carries charged: false, so dropping those leaves
only listings.
| Row | How to spot it | Billed |
|---|---|---|
| A listing | An itemId and no charged field | yes |
| The example row | _sample: true | no |
| A note | _diagnostic: true, with a reason and a note | no |
Notes use reason, not an error code:
reason | What it means |
|---|---|
not_found | The listing is gone, sold, withdrawn or deleted, or there is no public profile with that seller id. |
unreadable_input | No id could be read from that line. |
seller_mismatch | The listings returned for that profile belong to other sellers, so none were kept. |
no_listings | The seller has nothing on show right now. |
blocked | Goofish did not answer for that listing or seller. It usually clears in a few minutes. |
NOT_SERVED | This listing was not served this run. Re-run it later. Until 12 October 2026 this code was called all_exits_refused. |
charge_limit_reached | The run's maximum cost was too low for even one listing, so nothing was fetched. |
invalid_filters | A filter was set to a value no listing could match, so nothing was fetched. |
few_matches | Your filters matched very few of the listings read, so the run stopped early. It says how many were read and kept. |
lite_mode_not_open | Lite mode was on before its price is listed, so nothing was fetched. |
unreadable_record | Goofish answered for that listing in a shape the actor could not read. |
route_changed | Goofish changed how it answers, so the run stopped. Try again later, or open an issue. |
time_limit | The run got close to its time limit and stopped on its own. The listings delivered before that are complete and charged. Give the run more time, or ask for fewer listings, to get the rest. This is the one note that can end a run as failed, and only when the time limit stopped it before any listing came back. |
💡 What people use it for
- Watching the asking price and the want and view counts on listings you already follow, on a schedule.
- Reading a seller's whole shelf before buying from them: good-review rate, reply rate and what else they sell.
- Comparing interest across listings of the same kind. A ¥3 listing with 2,119 wants and 10,356 views is a very different thing from a ¥2,569 camera with none.
- Keeping a record of listings, with their photo links and descriptions, before they sell and disappear.
🚧 What it does not do
- No keyword search. If you need "every listing for X", this is the wrong tool.
- No sold history. A seller profile shows the current shelf. Sold and delisted items are not on it.
soldCountis 0 on most listings, and a 0 does not mean nothing sold. Goofish fills it in unevenly. The want and view counts are the reliable ones.- No translation. Titles, cities, conditions and "last seen" stay in Chinese, as listed.
- No currency conversion. Prices are in yuan.
- No unmasked nicknames. Goofish masks them for anyone who is not signed in.
- A row is a snapshot. Sellers change prices and relist the same thing often.
- It is not an official Goofish (Xianyu) tool. Dami's Studio is independent and is not affiliated with or endorsed by Goofish (Xianyu) or Alibaba, or by any other company named on this page.
🧭 Which China marketplace scraper do you need?
| If you want | Use |
|---|---|
| Second-hand Xianyu listings, from links you already have | This one |
| Retail products in a Taobao category | Taobao Category Products Scraper |
| Whatever Taobao's homepage feed is recommending right now | Taobao Product Feed Scraper |
| 1688 offers by search term: unit price, MOQ and the quantity price ladder | 1688 Wholesale Scraper |
| Public RedNote (Xiaohongshu) notes with their engagement | RedNote Scraper |
❓ Questions people ask
Can it search Goofish by keyword?
No. It works from listing and seller links.
Do I need a Goofish account, a cookie or a token?
No. You paste links, and nothing else is asked for.
Is Xianyu the same as Goofish?
Yes. 闲鱼 (Xianyu) is the Chinese name, Goofish the name on the international site, and Idlefish a common translation.
How many listings can I pull from one seller?
As many as their profile shows, up to your Maximum listings.
Why are some fields null on an old listing?
Goofish keeps less for long-archived listings. sourceItemRecord: false marks those rows, and the
missing fields are left empty rather than filled with a guess.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made code for
Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/goofish-scraper. Either way the run
happens on your Apify account at the same price.
Is scraping Goofish legal?
It reads listings anyone can open without signing in. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page and send the links you used and the run ID. The note rows in the dataset usually name the reason already.