{
  "openapi": "3.0.1",
  "info": {
    "title": "Wholesale Product Scraper for Alibaba.com - Supplier Leads",
    "description": "Scrape Alibaba.com B2B products by keyword, URL or ID: tiered wholesale (FOB) prices, MOQ, specs, SKU variants, certifications, images, Trade Assurance & supplier/manufacturer leads with firmographics & lead score. Filter, set currency & monitor price drops.",
    "version": "0.1",
    "x-build-id": "JKThs6Apjw5DJk9dK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~alibaba-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-alibaba-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/scrapesage~alibaba-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-alibaba-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/scrapesage~alibaba-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-alibaba-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": {
          "searchTerms": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keywords to search Alibaba.com for, e.g. <code>wireless earbuds</code>, <code>stainless steel water bottle</code>, <code>solar panel</code>. Each keyword is scraped as its own product feed, and the keywords share Max products equally. Leave empty if you only use Start URLs / Product IDs.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Alibaba.com links to scrape: product pages (<code>/product-detail/...html</code>; each returns a full product-detail row, billed as a product detail), search pages (<code>/trade/search?SearchText=...</code>, kept with every filter the link carries; <code>/showroom/...</code> pages run as a keyword search) or supplier minisites (<code>https://&lt;name&gt;.en.alibaba.com/</code>, any of its pages: the supplier's product list is read). You can also link a text file or a Google Sheet of URLs here, or use the box below. Used in addition to the keyword search.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "urlsFromFile": {
            "title": "Import URLs from a file",
            "type": "string",
            "description": "Paste a list of Alibaba.com links (one per line, CSV columns are fine) or one link to a .txt / .csv file or a Google Sheet shared as \"Anyone with the link\". They are read like Start URLs."
          },
          "productIds": {
            "title": "Product IDs (direct detail)",
            "type": "array",
            "description": "Alibaba.com product IDs (e.g. <code>1601295664563</code>) or product links to fetch full product detail for directly. Each returns a full product-detail row, billed as a product detail; an ID Alibaba.com does not have is named on the run card and not billed.",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "number",
            "description": "Only keep products whose lowest unit price is at least this much, in the currency of the country below (USD for US). Sent to Alibaba's own price filter and checked on every row's priceMin."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "number",
            "description": "Only keep products whose lowest unit price is at most this much, in the currency of the country below (USD for US). Sent to Alibaba's own price filter and checked on every row's priceMin."
          },
          "maxMoq": {
            "title": "Max MOQ (minimum order quantity)",
            "minimum": 1,
            "type": "integer",
            "description": "Only keep products whose minimum order quantity is at most this many units - useful for finding low-MOQ suppliers for small / test orders. Sent to Alibaba's own MOQ filter and checked on every row."
          },
          "supplierType": {
            "title": "Supplier type",
            "enum": [
              "any",
              "manufacturer",
              "tradingCompany",
              "verified",
              "goldSupplier"
            ],
            "type": "string",
            "description": "Keep only products from one kind of supplier. Verified suppliers: Alibaba's own Verified Supplier filter (confirmed on the product page when details are on). Gold suppliers: products whose card shows Alibaba's gold supplier badge. Manufacturers / Trading companies: read from the business type on each product's own page, so this option opens every product page and its rows are billed as product details.",
            "default": "any"
          },
          "supplierCountry": {
            "title": "Supplier country",
            "type": "string",
            "description": "Keep only products whose supplier is located in this country: an ISO code or a name (e.g. <code>CN</code>, <code>India</code>, <code>VN</code>, <code>US</code>). Sent to Alibaba's own supplier-location filter and checked on every row. Leave blank for all."
          },
          "minRating": {
            "title": "Min supplier rating",
            "enum": [
              "0",
              "3",
              "3.5",
              "4",
              "4.5"
            ],
            "type": "string",
            "description": "Only keep products whose supplier's product-quality score (the 0-5 rating on the search card, from buyers' reviews of that supplier) is at least this. Drops suppliers without reviews when set.",
            "default": "0"
          },
          "tradeAssuranceOnly": {
            "title": "Trade Assurance only",
            "type": "boolean",
            "description": "Only keep products covered by Alibaba Trade Assurance (order protection). Sent to Alibaba's own Trade Assurance filter; each product's page confirms it, so rows are full product-detail rows, billed as product details.",
            "default": false
          },
          "country": {
            "title": "Localize to country",
            "type": "string",
            "description": "The country Alibaba prices and ships for: an ISO code or a name (e.g. <code>US</code>, <code>GB</code>, <code>Germany</code>, <code>AU</code>). Sets Alibaba's own country and currency setting for the run, so prices come in that country's currency (US: USD, GB: GBP, euro countries: EUR); every row's <code>currency</code> names the currency of its prices, and product detail always also carries the USD ladder prices. A country I do not recognise stops the run before anything is billed.",
            "default": "US"
          },
          "maxProducts": {
            "title": "Max products",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of product records to scrape across all searches / URLs (shared equally between them). Alibaba.com search returns ~48 products per page. In monitor mode this is the watch window: the first Max products of each search are checked every run.",
            "default": 100
          },
          "includeProductDetails": {
            "title": "Include full product detail",
            "type": "boolean",
            "description": "Open each product to add tiered wholesale (FOB) ladder prices, the full SKU/variant matrix, every product attribute/spec, all images & the product video, certifications, packaging & production lead times, category path, customization options, Trade Assurance and the full supplier company profile. Adds one page fetch per product; these rows are billed as product details instead of products.",
            "default": false
          },
          "outputSupplierLeads": {
            "title": "Emit supplier / manufacturer lead records",
            "type": "boolean",
            "description": "In addition to product records, push one deduplicated lead record per unique supplier (type = \"supplier\") with company name, business type, country, years on Alibaba, employees, response time, on-time delivery rate, Gold/Verified/Trade-Assurance status, Alibaba's verified profile figures (verified identity, headcount, factory size, production lines, main markets, 6-month online orders and revenue), contact name, ratings, sample products and a 0-100 lead score. Implies product detail for the richest firmographics. The leads follow the product rows in the dataset. (Alibaba does not publish supplier emails/phones - contact is via the supplier's minisite & the platform.)",
            "default": false
          },
          "deduplicateProducts": {
            "title": "Deduplicate products",
            "type": "boolean",
            "description": "Drop duplicate products that appear in more than one search / page in the same run.",
            "default": true
          },
          "monitorMode": {
            "title": "Monitor mode (only new / changed)",
            "type": "boolean",
            "description": "Remember products across runs in a named key-value store and emit ONLY products that are new OR whose price (by 2% or more) or MOQ changed since the last run (each carries a <code>changeType</code>: new / price_drop / price_rise / moq_change). Each run checks the first Max products of every search, judged on the search card before any product page is opened, so unchanged products are free; the first run of a search also records the next pages, unbilled, as its baseline. Alibaba reshuffles its Best Match results between visits, so <code>new</code> means new to this watch, not newly listed: for a steadier watch paste a search link sorted by sales volume (<code>sortType=prodSold180</code>) into Start URLs. Pair with Apify Schedules for price-drop alerts.",
            "default": false
          },
          "monitorKey": {
            "title": "Monitor key",
            "type": "string",
            "description": "Names the monitor's memory store so you can run several independent monitors (e.g. one per keyword). Reuse the same key to keep tracking the same feed.",
            "default": "default"
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Parallel product-page fetches. Keep low (2-4) so Alibaba's anti-bot doesn't challenge the proxy.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxies to use. The default (Apify Proxy, no group chosen) is the Actor's own plan: Apify datacenter exits, each session primed with a homepage visit, switching to Apify residential exits only when Alibaba keeps refusing datacenter. Any other choice (proxy groups, a country, your own proxy URLs, no proxy) is used exactly as you set it.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}