{
  "openapi": "3.0.1",
  "info": {
    "title": "Made-in-China Product & Supplier Scraper (Reverse Image Search)",
    "description": "[UPDATED] Find Made-in-China products and unique suppliers using keyword or reverse-image search. Extract prices, MOQ, product links, audit badges, business details, and supplier profiles into clean, MCP-ready datasets and CSV files.",
    "version": "0.0",
    "x-build-id": "YgX40wJPX6yHUjiin"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ozer-studio~Made-in-China-Scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ozer-studio-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/ozer-studio~Made-in-China-Scraper/runs": {
      "post": {
        "operationId": "runs-sync-ozer-studio-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/ozer-studio~Made-in-China-Scraper/run-sync": {
      "post": {
        "operationId": "run-sync-ozer-studio-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",
        "required": [
          "searchMode"
        ],
        "properties": {
          "searchMode": {
            "title": "Search mode",
            "enum": [
              "keyword",
              "image"
            ],
            "type": "string",
            "description": "Choose Keyword search for product terms or Image search for uploaded files and public image URLs.",
            "default": "keyword"
          },
          "searchTerms": {
            "title": "Product keywords",
            "maxItems": 20,
            "type": "array",
            "description": "Used only in Keyword search. Add one specific product query per row, such as stainless steel glass shower hinge. Image searches ignore this field.",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "maxUniqueSuppliersPerKeyword": {
            "title": "Maximum suppliers per keyword",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of unique suppliers collected separately for each keyword. This is not a limit for the whole batch.",
            "default": 10
          },
          "maxPagesText": {
            "title": "Maximum pages per keyword",
            "minimum": 1,
            "maximum": 99,
            "type": "integer",
            "description": "Maximum Made-in-China result pages processed for each keyword. The Actor stops sooner when the supplier target is reached; higher values take more time.",
            "default": 1
          },
          "uploadedImages": {
            "title": "Product images",
            "maxItems": 20,
            "type": "array",
            "description": "Used only in Image search. Upload up to 20 clear JPG, PNG, WebP, GIF, or BMP product images. Each image is searched separately. WebP and GIF files are converted automatically. To use public web images, add them below.",
            "items": {
              "type": "string"
            }
          },
          "imageUrls": {
            "title": "Public product image URLs",
            "maxItems": 20,
            "type": "array",
            "description": "Used only in Image search and recommended for MCP/API clients. Add one direct, publicly accessible HTTP or HTTPS image URL per row. Uploaded files and URLs share a combined limit of 20 images.",
            "items": {
              "type": "string",
              "pattern": "^https?://"
            }
          },
          "maxUniqueSuppliersPerImage": {
            "title": "Maximum suppliers per image",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of unique suppliers collected separately for each uploaded image or public image URL. This is not a limit for the whole batch.",
            "default": 10
          },
          "maxPagesImage": {
            "title": "Maximum result batches per image",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Maximum image-result batches processed separately for each image. Each batch contains up to 20 products and the website currently provides at most five batches. The Actor stops sooner when the supplier target is reached.",
            "default": 1
          },
          "useApifyProxy": {
            "title": "Use Apify Proxy",
            "type": "boolean",
            "description": "Recommended, especially for larger keyword or image batches, because Made-in-China may limit or challenge direct traffic.",
            "default": true
          },
          "includeSupplierDetails": {
            "title": "Include supplier profile details",
            "type": "boolean",
            "description": "Visit every accepted public supplier profile to add business type, main products, location, establishment information, employee count, address, member history, rating, response time, and company description. Disable for faster listing-only runs.",
            "default": true
          },
          "skipFailedImages": {
            "title": "Skip failed images",
            "type": "boolean",
            "description": "Used only in Image search. Continue with remaining images when one image cannot be downloaded, converted, uploaded, or searched. Disable to fail immediately.",
            "default": true
          },
          "failOnNoResults": {
            "title": "Strict failure mode",
            "type": "boolean",
            "description": "Enable for automations that should fail when the full run produces no usable supplier rows. Leave disabled to finish with a warning, keep successful inputs, and save diagnostics.",
            "default": false
          },
          "saveCsvFile": {
            "title": "Save CSV files",
            "type": "boolean",
            "description": "Save CSV files in the run's key-value store. Enabled by default so every run creates a named file in addition to the structured Apify dataset. The CSV settings below are ignored when this is disabled.",
            "default": true
          },
          "csvOutputMode": {
            "title": "CSV output mode",
            "enum": [
              "combined",
              "separate",
              "both"
            ],
            "type": "string",
            "description": "Used only when Save CSV files is enabled. Choose one combined file, one file per keyword or image, or both.",
            "default": "combined"
          },
          "csvFilename": {
            "title": "Combined CSV filename",
            "minLength": 1,
            "maxLength": 160,
            "type": "string",
            "description": "Used only for Combined CSV or Combined and separate files. Separate-only exports use filenames derived from each keyword or image.",
            "default": "made_in_china_results.csv"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}