Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Goofish Xianyu Scraper (闲鱼 Idlefish) icon

Goofish Xianyu Scraper (闲鱼 Idlefish)

Scrape Goofish (Xianyu, Idlefish) listings by item link or seller profile: price, condition, want and view counts, seller rating, photos. No login required.

17 runs on Apify $0.0035 per item ($3.5 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust itemUrls, sellerUrls, maxItems (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0035 per item = $3.5 per 1,000

You are charged forWhenPrice
Item returnedOne listing returned in the dataset with its price, condition and seller details. Diagnostic rows and the labelled sample row are not charged.$0.0035

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-20, and they are what you are actually charged.

Inputs

FieldWhat it doesType
itemUrlsGoofish listing links, one per line. A full link like https://www.goofish.com/item?id=995598771021 works, and so does the bare number. Each one comes back as a full row.array
sellerUrlsGoofish seller profile links, one per line, like https://www.goofish.com/personal?userId=605970805 — or just the number. Every listing on the profile is walked and returned in the same shape as an item link, up to the limit below.array
maxItemsStop after this many listings across the whole run. Item links are done first, then sellers. Counts only listings that actually came back — rows explaining a dead link are free and do not count.integer
includeDescriptionKeep the full listing description in each row. Turn it off for a narrower table when you only want prices and counts.boolean

What you get

A structured dataset — each result includes fields like:

itemIdtitlepricecurrencyconditionTextwantCountviewCountcitysellerNicksellerGoodReviewRateimageCountlistedAturl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Developer & Research Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

GitHub Scraper iconDeveloper & Research Tools

GitHub Scraper

Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

Stack Overflow / Stack Exchange Scraper

Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

Package Registry Scraper (npm + PyPI)

Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

arXiv Scraper

Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

OpenAlex Scholarly Works Scraper

Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

Crossref Scholarly Works Scraper

Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.

2 use cases

See all Developer & Research Tools →

Goofish (闲鱼) Xianyu Scraper

Paste Goofish listing links, or a seller's profile link, and get back a clean table: title, asking price, what the seller says the condition is, how many people have saved it, how many have looked at it, where it is, who is selling it and what their good-review rate is, every photo, and the link back.

Goofish (闲鱼, Xianyu, sometimes written Idlefish) is Alibaba's second-hand marketplace. It is where most of China's used-goods trade actually happens, and almost none of it is visible from outside the app.

Read the limitations section before you buy. There is a real one at the top of it, and it will decide whether this is useful to you.

---

What you put in

Two fields. Use either, or both in the same run.

{
  "itemUrls": [
    "https://www.goofish.com/item?id=1051964780358",
    "1080166744321"
  ],
  "sellerUrls": [
    "https://www.goofish.com/personal?userId=605970805"
  ],
  "maxItems": 100,
  "includeDescription": true
}
  • Item links: a full goofish.com/item?id=... link, the h5.m.goofish.com mobile version, or

just the number. All three work.

  • Seller links: a goofish.com/personal?userId=... link, or just the number. Every listing on

that profile is walked, twenty at a time, and returned in exactly the same shape as an item link.

  • Maximum listings: a hard stop for the whole run. Item links are done first, then sellers.
  • Include the seller's description: leave it on for the full text, turn it off for a narrower

table.

If you run it with nothing filled in, you get one clearly-labelled free example row telling you what to put where. You are not charged for it.

---

What you get back

One row per listing. A real one, from a live run:

{
  "itemId": "1069417084034",
  "url": "https://www.goofish.com/item?id=1069417084034",
  "title": "上市公司碳排放量/碳排放强度2010-2024",
  "price": 2,
  "originalPrice": 0,
  "currency": "CNY",
  "shippingFee": 0,
  "conditionLevel": 9,
  "conditionText": "9/10",
  "wantCount": 173,
  "viewCount": 1851,
  "collectCount": 67,
  "soldCount": 0,
  "quantity": 9849,
  "city": "上海",
  "province": "上海",
  "district": "黄浦区",
  "sellerId": "2222727101158",
  "sellerNick": "南***鱼",
  "sellerGoodReviewRate": "98%",
  "sellerItemCount": 679,
  "sellerSoldCount": 3363,
  "sellerReplyRate24h": "99%",
  "sellerLastSeen": "45分钟前来过",
  "sellerUrl": "https://www.goofish.com/personal?userId=2222727101158",
  "categoryId": 50023914,
  "status": "在线",
  "listedAt": "2026-07-21T15:34:17.000Z",
  "images": ["https://img.alicdn.com/bao/uploaded/i2/O1CN01eHDc0ukvCtC2b8G8_..."],
  "imageCount": 2,
  "description": "...",
  "sourceItemRecord": true,
  "sourceDetailPage": true
}

A few of those need explaining:

  • price is what the seller is asking, in yuan. originalPrice is the "was" figure where the

seller set one, and is usually null. Nothing is converted to another currency; converting it would mean picking an exchange rate and quietly baking it into your data.

  • conditionLevel is Goofish's own 10-point scale, where 10 means brand new. conditionText

is a plain reading of it. The number comes straight from the listing; we do not guess it from the photos or the wording.

  • wantCount and viewCount are the real interest signals. On a second-hand marketplace they

tell you more than the price does: a ¥3 listing with 2,119 wants and 10,355 views is a very different object from a ¥2,569 camera with 0 and 0.

  • sellerGoodReviewRate is the percentage Goofish shows on the seller's own page.

sellerLastSeen is their "last active" string, in Chinese, exactly as the site renders it.

  • Nicknames arrive masked (南***鱼). That is Goofish masking them, not us. There is no

unmasked version available to anyone who is not logged in.

  • sourceItemRecord and sourceDetailPage say which of the two Goofish endpoints answered for

that row. Both true is a complete row. If one is false, the fields it owns are null rather than guessed, and you can see at a glance that it happened. See the note about old listings below.

  • foundViaSeller appears only on rows that came from a seller profile *and* whose own seller

id matches the profile you asked for.

Rows that are not listings

Some rows are free diagnostics, and they always carry _diagnostic: true and charged: false:

reasonWhat happened
not_foundThe listing is gone: sold, withdrawn or deleted.
unreadable_inputNo id could be read from that line.
seller_mismatchThe listings returned for that profile belong to other people, so none were kept.
no_listingsThe seller has nothing on show right now.
blockedGoofish would not answer for that one. Usually clears in a few minutes.
all_exits_refusedGoofish refused every attempt the run was allowed to make, so the rest were not attempted.
charge_limit_reachedThe run's cost limit was too low to return even one listing, so nothing was fetched.

Filter them out with ?filter= on the dataset, or just ignore any row where _diagnostic is set.

---

Limitations: read this part

There is no keyword search, and that is not an oversight. Goofish's keyword search endpoint requires a logged-in account. Signed out it answers with a login demand, and it does so for everything, including a real Chrome browser on a home connection, which renders an empty results page. This Actor does not create accounts and does not ask you for yours, so it cannot search. If what you need is "find me all listings for X", this is the wrong tool and you should not buy it. What it does instead is turn links you already have (from the app, from a shared link, from a seller you are watching) into structured data.

Other things worth knowing before you spend anything:

  • Old listings come back thinner, and the row tells you when. Goofish keeps the detail page for

long-archived listings but drops the underlying item record, so those rows have the title, price, want and view counts and the seller, while conditionLevel, images, province, district, categoryId, quantity and description are null. Measured on a 150-listing seller walk: 140 rows complete, 10 thin, all ten of them listings from previous years. sourceItemRecord: false is the flag. It is never guessed at and never filled in with a placeholder.

  • Seller profiles are capped by Goofish at what the profile itself shows. Sold and delisted

items are not on there, so you get the seller's current shelf, not their history.

  • A seller's listing count and sold count come from their profile header. They are Goofish's

numbers, not a count of the rows returned, and the two can differ.

  • soldCount is 0 on most listings: Goofish does not populate it consistently, and a 0 there

does not mean nothing sold. wantCount and viewCount are the two that are reliably present.

  • Everything is in Chinese, because that is what is on the listings. Titles, cities, condition

labels and the seller's "last seen" string are passed through unchanged rather than machine-translated into something you cannot check.

  • Prices move. A Goofish seller can change the asking price at any time, and many relist the

same object repeatedly. A row is a snapshot of the moment it was fetched.

  • A listing that goes away mid-run comes back as a free not_found row, not a gap and not a

silent drop.

---

What it costs you

A flat price per listing that actually comes back, plus a small fee per run. There are no volume tiers to work out and no monthly minimum.

Free rows stay free. The example row, every diagnostic in the table above, and every listing Goofish could not return are written to your dataset without being charged. A run that finds nothing charges you for nothing beyond starting it.

If you set a maximum cost on the run and it is too low to return a single listing, the Actor stops before fetching anything and tells you, rather than spending the budget on a partial answer.

---

FAQ

Can it search Goofish by keyword? No. Goofish requires a logged-in account for search, and this Actor does not use accounts. It works from listing links and seller profile links.

Do I need a Goofish account, a cookie or a token? No. You paste links; nothing else is asked of you and nothing is stored.

Can I give it a link copied from the Goofish app? Yes. App share links, www.goofish.com, h5.m.goofish.com and bare numeric ids all work.

What is Xianyu, and is it the same thing as Goofish? Same marketplace. 闲鱼 (Xianyu) is the Chinese name, Goofish is the name on the international domain, and Idlefish is a common transliteration. All three refer to Alibaba's second-hand app.

Why are the seller nicknames full of asterisks? Goofish masks them for anyone who is not signed in. That is the platform's behaviour and it applies to every tool, including this one.

How many listings can I pull from one seller? As many as their profile shows, subject to your maximum-listings setting. Profiles are walked twenty at a time until the pages stop producing new listings.

Are the prices in US dollars? No, yuan (CNY), as listed. Nothing is converted.

Can I run it on a schedule to watch a price? Yes. Point it at the item links you care about and schedule it; each run is a fresh snapshot with a timestamp.

What happens if Goofish blocks a request? The Actor tries again. If every attempt it is allowed to make gets refused, it stops, says so in the log, and writes a free row explaining why. It does not charge you for the attempts.

---

Output fields

FieldMeaning
itemId, urlThe listing's id and its link
titleThe listing title, as written
price, originalPrice, currencyAsking price and any "was" price, in CNY
shippingFeePostage as listed, 0 when free
conditionLevel, conditionTextCondition on Goofish's 10-point scale, 10 = brand new
wantCount, viewCount, collectCount, soldCountInterest and sales counters
quantityUnits the seller says are available
city, province, districtWhere the item is
sellerId, sellerNick, sellerUrlWho is selling it
sellerGoodReviewRate, sellerReplyRate24h, sellerLastSeenSeller reputation and responsiveness
sellerItemCount, sellerSoldCountHow much they list and how much they have sold
categoryIdGoofish's own category id
statusListing state as Goofish labels it
listedAtWhen it was posted, ISO 8601
images, imageCountEvery photo URL on the listing
descriptionThe seller's description, when you leave that option on
sourceItemRecord, sourceDetailPageWhich endpoints answered for this row
foundViaSellerPresent when the row came from a seller profile you asked for