# Goofish Scraper 闲鱼 Xianyu - Listings, Seller Shops & SKU Stock (`parseforge/goofish-scraper`) Actor

Scrape Goofish (闲鱼 Xianyu) listings and seller shops: price, SKU stock, condition, wants, views, Zhima credit. No login. Export CSV, Excel, JSON or XML.

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

## Pricing

from $3.50 / 1,000 listing scrapeds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 🐟 Goofish Scraper

> 🚀 **Export Goofish (闲鱼 / Xianyu) listings and whole seller shops in seconds.** 50 fields per listing, SKU variants with live stock, want and view counts and the seller's Zhima credit and review record. 100 listings from one shop in 83 seconds, no login and no cookie.

Paste Goofish listing links or item IDs, or a seller's profile link, and get every listing back as a clean structured row: title, asking price and price range, the seller's own "was" price, condition, shipping fee, stock, how many people want it and how many have viewed it, category and attributes, the full description, every photo, and each SKU variant with its own price and quantity. Every row also carries the seller block: nickname, IP location, days on Goofish, number of listings, items sold, followers, good, neutral and bad review counts, reply rate and reply time, last active time, credit level and Zhima credit.

Goofish is Alibaba's second-hand marketplace (formerly Idle Fish / 闲鱼), the largest in China. This Actor reads the same listing data the Goofish website loads for a buyer, straight from Goofish's own API, and walks a seller's catalog 20 listings at a time until the shop ends or your cap is reached.

| 🎯 Target Audience | 💡 Primary Use Cases |
| --- | --- |
| Resellers and cross-border sourcing teams | Price second-hand and clearance stock from Chinese sellers before buying |
| Brand protection teams | Track who is reselling your products on Goofish, at what price and in what condition |
| Marketplace and pricing analysts | Build price and demand datasets from want counts, views and SKU stock |
| Seller research and lead generation | Vet a Goofish shop by its sales, reviews, credit and reply rate |

### 📋 What the Goofish Scraper does

> 💡 **Why it matters:** a Goofish listing page shows a buyer everything that decides a deal: the price, the condition, how many other people want it, and whether the seller can be trusted. This Actor turns those pages into rows you can sort, filter and compare across thousands of listings.

- **Listing links or IDs:** `https://www.goofish.com/item?id=1006691167284` or just `1006691167284`.
- **Whole seller shops:** paste `https://www.goofish.com/personal?userId=2209657546241` (or the numeric ID) and the Actor walks every listing on show, with an optional per-seller cap.
- **Prices done properly:** the asking price, the SKU price range (`minPrice` / `maxPrice`) and the seller's original price where they set one, all in yuan.
- **SKU variants with stock:** every variant's options, price and remaining quantity.
- **Demand signals:** want count, view count and favorites, the numbers Goofish shows under each listing.
- **Seller trust in every row:** Zhima credit, Goofish credit level, real-name and Zhima verification, review counts, good-review rate, reply rate and time, last active.
- **Categories and attributes:** Goofish's own category, brand, condition and other listing properties.
- **Clean output:** no `null` in data fields; missing values read `Not Disclosed` or `N/A`, flags read `Yes` or `No`, lists are always arrays.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

Every row is one Goofish listing.

| 🖼 Field | Description |
| --- | --- |
| 🖼 `imageUrl` | Main listing photo |
| 📌 `title` / 🔗 `url` / 🆔 `itemId` | Listing title, link and Goofish item ID |
| 🟢 `status` | Listing status as Goofish shows it (`在线` = on sale) |
| 💴 `price` / `originalPrice` / `currency` | Asking price, the seller's "was" price, currency (CNY) |
| 📉 `minPrice` / 📈 `maxPrice` | Price range across SKU variants |
| ✨ `condition` | Condition as the seller set it (`全新`, `几乎全新`, `轻微使用痕迹`...) |
| 🚚 `shippingFee` / `freeShipping` | Shipping fee in yuan, free shipping flag |
| 📦 `quantity` | Units in stock |
| ❤️ `wantCount` / 👀 `viewCount` / ⭐ `favoriteCount` | "N people want this", views, favorites |
| 🗂 `category` / `categoryId` | Goofish category |
| 📍 `city` | Where the listing ships from |
| 📅 `publishedAt` | When the listing was created (ISO 8601) |
| 📝 `description` | Full listing text |
| 👤 `sellerId` / `sellerName` / `sellerUrl` / `sellerAvatarUrl` | Who is selling |
| 🌏 `sellerIpLocation` / ✍️ `sellerSignature` | Seller's IP region and profile signature |
| 🗓 `sellerRegisteredAt` / `sellerDaysOnGoofish` | Account age |
| 🏪 `sellerItemCount` / `sellerSoldCount` / `sellerFollowers` | Shop size, items sold, followers |
| 👍 `sellerGoodReviewRate` / `sellerGoodReviews` / `sellerNeutralReviews` / `sellerBadReviews` | Review record |
| 💬 `sellerReplyRate24h` / `sellerReplyTime` / `sellerLastActive` | Responsiveness |
| 🏅 `sellerCreditLevel` / `sellerZhimaCredit` / `sellerZhimaVerified` / `sellerRealNameVerified` | Credit and verification |
| 🏷 `attributes` / `tags` | Listing properties (brand, condition...) and Goofish tags (`包邮`...) |
| 🎛 `variants` | SKU variants: `skuId`, `options`, `price`, `quantity` |
| 🖼 `images` | Every listing photo |
| 🕒 `scrapedAt` / ❌ `error` | Capture time, and an error message on failed inputs |

Three real rows from a cloud run:

**A listing with SKU variants and a set condition:**

```json
{
  "imageUrl": "https://img.alicdn.com/bao/uploaded/i3/O1CN017npcys1vyQxcRJLe3_!!4611686018427381249-0-fleamarket.jpg",
  "title": "1.5米复古波点细长条发带春夏季辣妹时尚百搭高级感装饰脖领飘带",
  "url": "https://www.goofish.com/item?id=1006691167284",
  "itemId": "1006691167284",
  "status": "在线",
  "price": 4.82,
  "originalPrice": "Not Disclosed",
  "currency": "CNY",
  "minPrice": 4.82,
  "maxPrice": 8.29,
  "condition": "全新",
  "shippingFee": 0,
  "freeShipping": "Yes",
  "quantity": 606,
  "wantCount": 0,
  "viewCount": 57,
  "favoriteCount": 0,
  "category": "丝带",
  "categoryId": "50025449",
  "city": "莆田",
  "publishedAt": "2025-12-29T04:12:27.000Z",
  "description": "1.5米复古波点细长条发带春夏季辣妹时尚百搭高级感装饰脖领飘带\n\n✅丝带\n✅颜色：以规格选项为准\n\n【购物须知】...",
  "sellerId": "2209657546241",
  "sellerName": "韩国逃跑的青石斑鱼",
  "sellerUrl": "https://www.goofish.com/personal?userId=2209657546241",
  "sellerAvatarUrl": "https://img.alicdn.com/bao/uploaded/i3/O1CN01Uqsj4L1vyQxY8YQo7_!!4611686018427381249-0-mtopupload.jpg",
  "sellerIpLocation": "河北省",
  "sellerSignature": "诚信第一，服务至上",
  "sellerRegisteredAt": "2021-09-19T05:13:09.000Z",
  "sellerDaysOnGoofish": 1835,
  "sellerItemCount": 5906,
  "sellerSoldCount": 1468,
  "sellerFollowers": 143,
  "sellerGoodReviewRate": "95%",
  "sellerGoodReviews": 97,
  "sellerNeutralReviews": 20,
  "sellerBadReviews": 5,
  "sellerReplyRate24h": "低于50%",
  "sellerReplyTime": "3小时+",
  "sellerLastActive": "15小时前来过",
  "sellerCreditLevel": "卖家信用极好",
  "sellerZhimaCredit": "信用中等",
  "sellerZhimaVerified": "Yes",
  "sellerRealNameVerified": "Yes",
  "attributes": [{ "name": "成色", "value": "全新" }],
  "tags": ["包邮"],
  "variants": [
    { "skuId": "6005513065480", "options": "颜色: 红色波点1条装", "price": 4.82, "quantity": 16 },
    { "skuId": "6005513065481", "options": "颜色: 白色波点1条装", "price": 4.82, "quantity": 186 }
  ],
  "images": [
    "https://img.alicdn.com/bao/uploaded/i3/O1CN017npcys1vyQxcRJLe3_!!4611686018427381249-0-fleamarket.jpg",
    "https://img.alicdn.com/bao/uploaded/i2/O1CN01x1aGTF1vyQxdBsxF2_!!4611686018427381249-0-fleamarket.jpg"
  ],
  "scrapedAt": "2026-09-28T18:59:10.035Z",
  "error": null
}
```

**A listing with demand (5 people want it, 155 views) and a sold-out variant:**

```json
{
  "imageUrl": "https://img.alicdn.com/bao/uploaded/i1/O1CN01Rz39Bg1vyQxcRHw9S_!!4611686018427381249-2-fleamarket.png",
  "title": "鬼斧神蛋美妆蛋超软不易吃粉底液化定妆蛋粉扑干湿两用",
  "url": "https://www.goofish.com/item?id=1008889632066",
  "itemId": "1008889632066",
  "price": 6.45,
  "minPrice": 6.45,
  "maxPrice": 9.78,
  "condition": "Not Disclosed",
  "quantity": 84,
  "wantCount": 5,
  "viewCount": 155,
  "favoriteCount": 1,
  "category": "美妆蛋",
  "city": "宜宾",
  "variants": [
    { "skuId": "6170634599038", "options": "颜色: 黑色【1枚装】", "price": 6.45, "quantity": 57 },
    { "skuId": "6170634599039", "options": "颜色: 棕色【1枚装】", "price": 6.45, "quantity": 0 }
  ],
  "scrapedAt": "2026-09-28T18:58:53.822Z",
  "error": null
}
```

**A new, unopened item found by walking the seller's shop:**

```json
{
  "imageUrl": "https://img.alicdn.com/bao/uploaded/i4/O1CN01meeBZv1vyQxdMrqfz_!!4611686018427381249-0-fleamarket.jpg",
  "title": "新款车载香薰车内倒置香氛杯室内空气香薰氛围感香薰摆件大容量",
  "url": "https://www.goofish.com/item?id=1008889476432",
  "itemId": "1008889476432",
  "price": 8.16,
  "minPrice": 8.16,
  "maxPrice": 22.96,
  "condition": "全新未拆封",
  "quantity": 49995,
  "viewCount": 26,
  "category": "香薰蜡烛",
  "city": "十堰",
  "variants": [
    { "skuId": "6170634683157", "options": "颜色: 倒置香氛室内空气香 薰[桂影浮樽]橙花香", "price": 8.16, "quantity": 9999 }
  ],
  "scrapedAt": "2026-09-28T18:59:13.913Z",
  "error": null
}
```

(The last two rows are shortened for reading. Every row in the dataset carries all 50 fields.)

### ✨ Why choose this Actor

- **Listings and whole shops in one Actor.** Paste item links, seller links, or both. Seller shops are walked page by page to the end, and each listing comes back in the same full shape as a direct link.
- **SKU-level stock.** Each variant's price and remaining quantity, so you can see which colors or sizes are selling out.
- **Seller trust signals in every row.** Zhima credit, credit level, verification, review counts, reply rate and last active, with no second lookup.
- **Demand you can rank by.** Want count and view count come straight from Goofish, the same numbers a buyer sees.
- **No login, no cookie, no Chinese phone number.** The Actor reads only what Goofish shows a logged-out visitor.
- **Errors are never charged.** A deleted listing or an unreadable link produces an error row you do not pay for.

### 📈 How it compares to alternatives

| | This Actor | Typical Goofish scraper |
| --- | --- | --- |
| Listing links or IDs | Yes | Yes |
| Whole seller shop from one link | Yes, every listing on show | Often a separate Actor |
| SKU variants with price and stock | Yes | Sometimes |
| Seller Zhima credit, reviews and reply rate in each row | Yes | Often a separate lookup |
| Keyword search | No. Goofish requires a logged-in account for search, and this Actor never uses one | Only with a logged-in account behind it |
| Login or cookie needed | No | Some ask for a session cookie |

### 🚀 How to use

1. **Create a free Apify account** ([sign up here](https://console.apify.com/sign-up?fpr=vmoqkp)) and get $5 in free usage credit.
2. Open the Actor and paste one or more **listing URLs or item IDs**, and/or one or more **seller profile URLs or user IDs**.
3. Optionally set **Max listings per seller** to sample each shop instead of taking all of it.
4. Set **Max Items** and click **Start**. Keep the default residential proxy.
5. Download the dataset as CSV, Excel, JSON or XML, or read it from the Apify API.

A minimal input:

```json
{
  "sellerUrls": ["https://www.goofish.com/personal?userId=2209657546241"],
  "maxItemsPerSeller": 200,
  "maxItems": 1000
}
```

### 💼 Business use cases

#### 🛒 Cross-border sourcing and resale

Walk the shops of the Goofish sellers you buy from every week. Sort by `price` against `originalPrice`, filter `condition` to `全新` or `几乎全新`, and use `variants` to see exactly which sizes and colors are still in stock.

#### 🛡️ Brand protection

Collect the listings of known resellers of your products. The seller block tells you how big each shop is (`sellerItemCount`, `sellerSoldCount`), how long it has existed and where it operates from (`sellerIpLocation`).

#### 📊 Pricing and demand research

Join `wantCount` and `viewCount` to price and category to find which second-hand items move and at what price point. Rerun on a schedule to watch prices drop over time.

#### 🤝 Supplier and seller vetting

Before you trust a Goofish seller with a large order, check their good-review rate, bad reviews, reply rate, Zhima credit and real-name verification, all in one row.

### 🔌 Automating Goofish Scraper

Schedule runs and route the output with Apify integrations: **Make**, **Zapier**, **Slack**, **Airbyte**, **GitHub** and **Google Drive**, or plain webhooks. For example, walk a list of seller shops every morning and post new listings under a price threshold to a Slack channel, or append every run to a Google Sheet to track prices over time.

### 🌟 Beyond business use cases

- **Research:** study China's circular economy with real second-hand prices, conditions and demand.
- **Personal:** watch a seller you like and catch new listings before anyone else.
- **Non-profit:** track resale of donated or restricted goods.
- **Experimentation:** a real Chinese e-commerce dataset with prices, SKUs and seller reputation for pricing models and NLP.

### 🤖 Ask an AI assistant about this scraper

Paste this README into ChatGPT, Claude or any AI assistant and ask how to set the input for your goal, how to join the output with other data, or how to analyze the listings. Each row is flat JSON with one listing per row, which models handle easily.

### ❓ Frequently Asked Questions

**🔐 Do I need a Goofish account, a cookie or a Chinese phone number?**
No. The Actor reads only what Goofish shows a logged-out visitor. You never log in or paste a cookie.

**🔎 Can I search Goofish by keyword?**
No, and that is deliberate. Goofish only answers keyword searches for logged-in accounts: we tested it from browsers and IPs in mainland China, Hong Kong and the US and every logged-out search was refused. This Actor does not use accounts. Start from listing links you already have or from the shops of sellers you care about.

**🏪 How many listings can I get from one seller?**
Every listing the seller has on show. In testing, 100 listings from a 5,906-listing shop took 83 seconds. Set **Max listings per seller** to cap each shop.

**🔗 Which links work?**
`goofish.com/item?id=...` listing links and bare item IDs, and `goofish.com/personal?userId=...` seller links and bare user IDs. Duplicates are removed, so a listing pasted twice is scraped once.

**💴 What currency are prices in?**
Chinese yuan (CNY), exactly as the seller set them. Nothing is converted.

**✨ Why is `condition` sometimes `Not Disclosed`?**
Goofish only has a condition when the seller picked one. Many shop-style listings leave it out, and the Actor does not guess.

**🎛 What is in `variants`?**
One entry per SKU the seller set up, with the option text (for example `颜色: 红色波点1条装`), the variant's own price and its remaining stock. Single-item listings have an empty list.

**🔒 What happens with a deleted or sold listing?**
You get an error row with Goofish's own message (for example `您要看的宝贝不存在或已被删除啦!`). Error rows are never charged.

**🛡️ Do I need a proxy?**
Yes, and it is set by default. Goofish only answers real browsers on residential IPs, so the Actor uses Apify's residential proxy and rotates IP and browser fingerprint on its own if Goofish pushes back.

**⚡ How fast is it?**
About 1.2 listings per second: 100 listings in 83 seconds in testing.

**📁 What formats can I export?**
CSV, Excel, JSON and XML from the dataset view, or any format through the Apify API.

### 🔌 Integrate with any app

The dataset is available through the Apify API and every Apify integration, so you can pull it into a spreadsheet, database, BI tool or ML pipeline without glue code.

### 🔗 Recommended Actors

- [1688 Wholesale Scraper](https://apify.com/parseforge/1688-scraper): Alibaba's Chinese wholesale marketplace with MOQ, tiered prices and factories.
- [AliExpress Product Scraper](https://apify.com/parseforge/aliexpress-scraper): AliExpress products with prices, orders and stores.
- [Mercari Scraper](https://apify.com/parseforge/mercari-scraper): second-hand listings from Mercari.
- [Carousell Listings Scraper](https://apify.com/parseforge/carousell-scraper): second-hand listings from Carousell across Southeast Asia.
- [Vinted Scraper](https://apify.com/parseforge/vinted-scraper): second-hand fashion listings from Vinted.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more e-commerce and marketplace Actors.

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** this is an independent tool and is not affiliated with, endorsed by, or connected to Goofish, Xianyu or Alibaba. It collects only publicly available data. You are responsible for how you use the data, in line with Goofish's terms and applicable law.

# Actor input Schema

## `itemUrls` (type: `array`):

Goofish listing links such as https://www.goofish.com/item?id=1006691167284, or just the numeric item ID. Each one returns the full listing: price range, SKU variants with stock, condition, want and view counts, description, images and the seller block.

## `sellerUrls` (type: `array`):

Goofish seller links such as https://www.goofish.com/personal?userId=2209657546241, or just the numeric user ID. The Actor walks the seller's whole shop, 20 listings per page, and returns every listing in the same full shape as a listing link.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `maxItemsPerSeller` (type: `integer`):

Stop walking a seller's shop after this many listings and move to the next seller. Leave empty to take every listing the seller has on show (still capped by Max Items).

## `proxyConfiguration` (type: `object`):

Goofish only opens listing data to real browsers on residential IPs, so residential proxy is the default. Datacenter IPs are refused.

## Actor input object example

```json
{
  "itemUrls": [
    "https://www.goofish.com/item?id=1006691167284",
    "1008889632066"
  ],
  "sellerUrls": [
    "https://www.goofish.com/personal?userId=2209657546241"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Listing, price, demand and seller fields for every listing

## `fullData` (type: `string`):

Complete dataset with all 50 fields, including SKU variants, attributes and every photo

# 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 = {
    "itemUrls": [
        "https://www.goofish.com/item?id=1006691167284",
        "1008889632066"
    ],
    "sellerUrls": [
        "https://www.goofish.com/personal?userId=2209657546241"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/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 = {
    "itemUrls": [
        "https://www.goofish.com/item?id=1006691167284",
        "1008889632066",
    ],
    "sellerUrls": ["https://www.goofish.com/personal?userId=2209657546241"],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

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

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

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

```

## CLI example

```bash
echo '{
  "itemUrls": [
    "https://www.goofish.com/item?id=1006691167284",
    "1008889632066"
  ],
  "sellerUrls": [
    "https://www.goofish.com/personal?userId=2209657546241"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call parseforge/goofish-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/goofish-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/6UDRfcdzoChfHLjkx/builds/QwbEJU3LsV4TORVdN/openapi.json
