{
  "openapi": "3.0.1",
  "info": {
    "title": "Goofish Scraper — Xianyu C2C Listings, Item Detail & Seller",
    "description": "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.",
    "version": "1.9",
    "x-build-id": "0sxKtDtrNwanoE1Hw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~goofish-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-goofish-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/khadinakbar~goofish-scraper/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-goofish-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/khadinakbar~goofish-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-goofish-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchQuery": {
            "title": "Search keyword (mode: search)",
            "type": "string",
            "description": "Free-text keyword to search Goofish listings (e.g. 'iPhone 15 Pro', '手办', 'Sony A7 III'). Chinese and English both work. Leave blank if you are using startUrls or itemIds instead."
          },
          "startUrls": {
            "title": "Item, seller, or search URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "Goofish/Xianyu URLs — accepted: item pages (https://www.goofish.com/item?id=...), seller pages (https://www.goofish.com/personal?userId=...), and search URLs (https://www.goofish.com/search?q=...). Mode is auto-detected per URL. Each URL counts toward maxResults independently.",
            "items": {
              "type": "string"
            }
          },
          "itemIds": {
            "title": "Item IDs (mode: detail)",
            "uniqueItems": true,
            "type": "array",
            "description": "Numeric Goofish item IDs (the value after `id=` in the item URL). Each ID is scraped as a detail-mode item. Mutually compatible with startUrls and searchQuery.",
            "items": {
              "type": "string"
            }
          },
          "sellerIds": {
            "title": "Seller user IDs (mode: seller)",
            "uniqueItems": true,
            "type": "array",
            "description": "Numeric Goofish seller user IDs (the value after `userId=` in the seller URL). Each seller is scraped for profile + their active listings (capped per seller by maxResults).",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard cap on listings/items returned and charged for. Useful to control PPE spend. The actor stops scraping the moment this is reached. Defaults to 30.",
            "default": 30
          },
          "sortBy": {
            "title": "Sort order (search mode)",
            "enum": [
              "relevance",
              "newest",
              "priceAsc",
              "priceDesc"
            ],
            "type": "string",
            "description": "Sort order for SEARCH mode results. 'relevance' is Goofish default; 'newest' shows recent posts first; 'priceAsc'/'priceDesc' sort by current price.",
            "default": "relevance"
          },
          "priceMin": {
            "title": "Min price (CNY)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum listing price in CNY (¥). Listings below this are filtered out client-side (not charged). Leave empty for no minimum."
          },
          "priceMax": {
            "title": "Max price (CNY)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum listing price in CNY (¥). Listings above this are filtered out client-side (not charged). Leave empty for no maximum."
          },
          "condition": {
            "title": "Condition filter",
            "enum": [
              "all",
              "used",
              "new"
            ],
            "type": "string",
            "description": "Filter by item condition. 'all' returns everything; 'used' keeps only secondhand items; 'new' keeps only items listed as new/unopened.",
            "default": "all"
          },
          "publishedWithinDays": {
            "title": "Published within N days",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Keep only listings published within the last N days (client-side filter; not charged for filtered items). Leave empty for no freshness limit."
          },
          "fetchDetails": {
            "title": "Enrich each listing with detail page",
            "type": "boolean",
            "description": "When true, every search/seller listing is enriched with a detail-page fetch (full description, all images, view count, want count, full seller card). Bills the higher per-listing rate — see pricing. Defaults to false.",
            "default": false
          },
          "useUnblockerFallback": {
            "title": "Retry blocked public pages through Apify Unblocker",
            "type": "boolean",
            "description": "Experimental only. the managed browser route browser route currently rejects Unblocker's TLS interception certificate before the public Goofish page loads, so leave this disabled until an HTTP-compatible recovery route is available. It is never used for login, cart, or other stateful work.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Goofish (Alibaba) requires anti-bot-capable IPs. The actor auto-resolves: the managed proxy route residential (if the managed proxy route_PROXY env is set) → Apify residential → Apify datacenter US fallback. Override here if you have a preferred config.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}