{
  "openapi": "3.0.1",
  "info": {
    "title": "Made-in-China Product Search Scraper",
    "description": "Search Made-in-China.com by keyword and export product listings with prices, minimum order quantities, specifications and supplier details.",
    "version": "0.1",
    "x-build-id": "2zgJx4u2MqZ2bygjx"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datacach~made-in-china-product-search/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datacach-made-in-china-product-search",
        "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/datacach~made-in-china-product-search/runs": {
      "post": {
        "operationId": "runs-sync-datacach-made-in-china-product-search",
        "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/datacach~made-in-china-product-search/run-sync": {
      "post": {
        "operationId": "run-sync-datacach-made-in-china-product-search",
        "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",
        "required": [
          "searchTerms"
        ],
        "properties": {
          "searchTerms": {
            "title": "🔍 Search terms",
            "type": "array",
            "description": "Keywords to search for on Made-in-China.com. Each term is searched separately and the results are combined into one dataset. Use the words a buyer would type, for example <code>led light</code> or <code>solar panel</code>.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Maximum products",
            "minimum": 1,
            "type": "integer",
            "description": "Total number of products to collect across all search terms. Duplicates are removed first, so you get this many <i>distinct</i> products. Free plan users are limited to 10.",
            "default": 50
          },
          "startPage": {
            "title": "Start from page",
            "minimum": 1,
            "type": "integer",
            "description": "Skip ahead to this results page. Useful for collecting a second batch without repeating products you already have — set it past the pages a previous run covered.",
            "default": 1
          },
          "startIndex": {
            "title": "Start index (skip already-collected results)",
            "minimum": 0,
            "type": "integer",
            "description": "Skip this many results from the <b>start of each search term</b> before saving any. Use it to continue where a previous run stopped: if you already have the first 500, set <b>500</b> to begin from result 501 instead of paying for them again. Combined with <b>Maximum products</b>, the saved range is [startIndex, startIndex + maxResults).<br><br>⚠️ <b>Two caveats.</b> It does <b>not</b> make the run faster — results are found by crawling, so the Actor still walks up to that point; it only changes which results are <i>saved</i>. And Made-in-China.com reorders its results between requests, so index N is not perfectly reproducible — for guaranteed no-repeats use <b>Exclude already-collected products</b> instead, which does not depend on order. Ignored on the free plan.",
            "default": 0
          },
          "excludeUrls": {
            "title": "Exclude already-collected products",
            "type": "array",
            "description": "Products you already have — these are <b>never saved again</b>, whatever order the site returns them in. Paste either the <code>url</code> or the <code>productId</code> column from a previous export; both are recognised. Unlike <b>Start index</b> this is order-independent, which makes it the reliable way to collect only what is new. Applied after Start index. Free plan runs may list at most one entry here.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxPagesPerTerm": {
            "title": "Maximum pages per search term",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Safety limit on how deep each keyword is searched. <b>This is what ends the run.</b> Made-in-China.com never reports a last page — it keeps returning increasingly loosely related products indefinitely — so without this cap a run would continue until it timed out. Raise it only if you want results well beyond the closest matches.",
            "default": 20
          },
          "resultsPerPage": {
            "title": "Products per page request",
            "enum": [
              "50",
              "30",
              "10"
            ],
            "type": "string",
            "description": "How many products to request per page. Larger pages mean fewer requests, so the run is faster and less likely to be rate limited. Leave at 50 unless you are debugging.",
            "default": "50"
          },
          "minPrice": {
            "title": "Minimum price (US$)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return products whose FOB price starts at or above this amount. Leave empty for no lower bound."
          },
          "maxPrice": {
            "title": "Maximum price (US$)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return products whose FOB price reaches at most this amount. Leave empty for no upper bound."
          },
          "maxMinOrder": {
            "title": "Maximum minimum order quantity",
            "minimum": 1,
            "type": "integer",
            "description": "Only return products a supplier will sell in quantities at or below this number. Set it low to find suppliers willing to take small orders."
          },
          "businessTypes": {
            "title": "Supplier business type",
            "type": "array",
            "description": "Restrict results to these kinds of supplier. Choose <b>Manufacturer/Factory</b> to skip resellers and buy closer to the source.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "4",
                "8"
              ],
              "enumTitles": [
                "Manufacturer / Factory",
                "Trading Company",
                "Group Corporation",
                "Other"
              ]
            },
            "default": []
          },
          "rdCapabilities": {
            "title": "Customisation capability",
            "type": "array",
            "description": "Restrict results to suppliers offering these production arrangements — for example <b>OEM</b> to make a product to your own specification, or <b>ODM</b> to rebrand an existing design.",
            "items": {
              "type": "string",
              "enum": [
                "4",
                "5",
                "6",
                "99"
              ],
              "enumTitles": [
                "OEM — made to your specification",
                "ODM — existing design, your brand",
                "Own Brand",
                "Others"
              ]
            },
            "default": []
          },
          "auditedSupplierOnly": {
            "title": "Audited suppliers only",
            "type": "boolean",
            "description": "Only return products from suppliers inspected by an independent third party.",
            "default": false
          },
          "securedTradingOnly": {
            "title": "Secured Trading Service only",
            "type": "boolean",
            "description": "Only return products covered by Made-in-China.com's payment protection scheme.",
            "default": false
          },
          "leadingFactoryOnly": {
            "title": "Leading factories only",
            "type": "boolean",
            "description": "Only return products from suppliers Made-in-China.com has assessed as leading manufacturers.",
            "default": false
          },
          "sampleAvailableOnly": {
            "title": "Samples available only",
            "type": "boolean",
            "description": "Only return products the supplier will send as a sample before a full order.",
            "default": false
          },
          "attributeFilter": {
            "title": "Product attribute keyword",
            "maxLength": 140,
            "type": "string",
            "description": "Extra keyword matched against product specifications, for example <code>waterproof</code>. Plain English only — other alphabets are ignored by the site."
          },
          "includeSponsored": {
            "title": "Include sponsored listings",
            "type": "boolean",
            "description": "Sponsored products are genuine listings that suppliers paid to promote. They are included by default and flagged with <code>isSponsored</code> so you can filter them later. Turn this off to exclude them entirely.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy used for requests. Apify Proxy is recommended. For large runs, switching to <b>Residential</b> proxies reduces the chance of being blocked.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Maximum concurrent requests",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "How many pages to request at once. The default of 5 is the highest rate verified to run cleanly against this site. Raising it speeds up multi-keyword runs but increases the risk of being blocked.",
            "default": 5
          },
          "minDelayMs": {
            "title": "Delay between requests",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Pause between requests, randomised slightly around this value to avoid a machine-like pattern.",
            "default": 250
          },
          "maxRequestRetries": {
            "title": "Request retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry a page that fails before giving up on it.",
            "default": 3
          },
          "requestTimeoutSecs": {
            "title": "Request timeout",
            "minimum": 5,
            "maximum": 180,
            "type": "integer",
            "description": "How long to wait for a page before treating it as failed. Search pages are large, so allow a generous timeout.",
            "default": 45
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}