{
  "openapi": "3.0.1",
  "info": {
    "title": "Made-in-China Scraper - Suppliers, Products & B2B Leads",
    "description": "Scrape Made-in-China.com B2B suppliers & products: company profiles (business type, certifications, year, employees, markets, location), product specs, FOB prices & MOQ. The clean, no-browser Alibaba alternative for sourcing & lead gen, with monitoring.",
    "version": "0.1",
    "x-build-id": "FD23aJDfulJrW9bpX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~made-in-china-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-made-in-china-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~made-in-china-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-made-in-china-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~made-in-china-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-made-in-china-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": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "searchProducts",
              "searchSuppliers",
              "productDetails",
              "supplierDetails"
            ],
            "type": "string",
            "description": "searchProducts = find products by keyword (price, MOQ, specs, supplier). searchSuppliers = find manufacturers/suppliers by keyword as B2B lead profiles. productDetails = full data for specific product URLs. supplierDetails = full company profiles for specific supplier storefronts. Start URLs override the mode.",
            "default": "searchProducts"
          },
          "searchKeywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keywords to search on Made-in-China.com for searchProducts / searchSuppliers mode. Examples: <code>cnc machine</code>, <code>solar panel</code>, <code>led light</code>, <code>industrial machinery</code>. Each keyword runs separately.",
            "items": {
              "type": "string"
            }
          },
          "productUrls": {
            "title": "Product URLs",
            "type": "array",
            "description": "Made-in-China product page URLs (<code>https://&lt;supplier&gt;.en.made-in-china.com/product/&hellip;.html</code>). Primary input for productDetails mode.",
            "items": {
              "type": "string"
            }
          },
          "supplierUrls": {
            "title": "Supplier storefront URLs",
            "type": "array",
            "description": "Made-in-China supplier storefront URLs or subdomains (<code>https://camelmachinery.en.made-in-china.com/</code> or just <code>camelmachinery</code>). Primary input for supplierDetails mode.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (auto-routed)",
            "type": "array",
            "description": "Paste any Made-in-China URLs - product pages, supplier storefronts, <code>/multi-search/</code> product searches, or <code>/manufacturers/</code> supplier directories. Each is auto-detected and routed to the right handler.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max records (total)",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Total cap on records emitted across all keywords/URLs in this run.",
            "default": 100
          },
          "maxPages": {
            "title": "Max search pages per keyword",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many search-result pages to crawl per keyword (each product page lists ~30 products; each supplier directory page lists ~30 suppliers).",
            "default": 5
          },
          "fetchProductDetails": {
            "title": "Fetch full product details (searchProducts)",
            "type": "boolean",
            "description": "For searchProducts mode, open every product page to extract the full spec table, description, all images, brand, HS code, packaging, ports and payment terms (JSON-LD). Adds one request per product.",
            "default": false
          },
          "fetchSupplierProfile": {
            "title": "Attach supplier profile to products (searchProducts)",
            "type": "boolean",
            "description": "For searchProducts mode, fetch each unique supplier's storefront and attach their company name, business type, years on platform, audited status and location to every product. Deduplicated per supplier.",
            "default": false
          },
          "includeCompanyProfile": {
            "title": "Include company profile page",
            "type": "boolean",
            "description": "For supplier records, also fetch the supplier's <code>/company-profile.html</code> to add main markets, terms of payment, average lead time, OEM/ODM, export year and nearest port. One extra request per supplier.",
            "default": true
          },
          "includeContactPage": {
            "title": "Include contact page",
            "type": "boolean",
            "description": "For supplier records, also fetch the supplier's <code>/contact-info.html</code> for contact person and full address. (Note: Made-in-China hides phone/email/fax behind login - those fields are null unless publicly shown.) One extra request per supplier.",
            "default": true
          },
          "auditedOnly": {
            "title": "Only audited suppliers",
            "type": "boolean",
            "description": "Emit only suppliers flagged as Audited Supplier on Made-in-China (third-party verified).",
            "default": false
          },
          "minLeadScore": {
            "title": "Minimum lead score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Emit only supplier records with at least this 0–100 lead score (based on audited/diamond status, tenure, age, certifications, markets and contactability).",
            "default": 0
          },
          "monitorMode": {
            "title": "Monitor mode (only new records)",
            "type": "boolean",
            "description": "Remember products/suppliers seen in previous runs (in a named key-value store) and emit only NEW ones. Pair with Apify Schedules to watch a keyword for newly listed products or suppliers. Does not conflict with scheduling.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named key-value store that holds the 'already seen' keys for monitor mode. Use a distinct name per saved task so their histories stay separate.",
            "default": "made-in-china-monitor"
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Maximum parallel requests.",
            "default": 8
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings. Keep the default: supplier and product pages go through the Apify proxy chosen here, and Made-in-China's own search and directory pages, which refuse most datacenter addresses, go through Apify's unblocker automatically at no extra charge to you. Switching the Apify proxy off (or using your own proxy URLs) turns that off too.",
            "default": {
              "useApifyProxy": true
            }
          },
          "urlsFromFile": {
            "title": "Import URLs from a file",
            "type": "string",
            "description": "Paste a list of URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Lets you import many Start URLs at once instead of typing each. Google Sheet/Drive share links are handled automatically."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}