{
  "openapi": "3.0.1",
  "info": {
    "title": "ECER Scraper & API - China Suppliers, Products, MOQ & Prices",
    "description": "ECER scraper and API for Chinese B2B suppliers and products by keyword. One result = one product + supplier: price, MOQ, payment terms, supply ability, lead time, specs, business type, revenue, employees, year founded, address, certificates. No login, no start fee. $1.00 per 1,000.",
    "version": "1.0",
    "x-build-id": "qtiUlhAbeqNH8EO4j"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rel8ble~ecer-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rel8ble-ecer-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/rel8ble~ecer-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rel8ble-ecer-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/rel8ble~ecer-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rel8ble-ecer-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": "Products (keywords or ECER URLs)",
            "type": "array",
            "description": "Provide at least one. English product keywords, e.g. \"yoga mat\", \"led strip light\", \"cnc machine\", or ecer.com URLs: a search (https://www.ecer.com/china-yoga-mat), a category (https://www.ecer.com/21011000-led-batten.html), one product (https://www.ecer.com/corp/details-....html) or a supplier showroom (https://www.ecer.com/corp/uuu4wff-gymequipment-parts.html) to export that supplier's catalog. Default [\"yoga mat\"] (demo).",
            "default": [
              "yoga mat"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerSearch": {
            "title": "Max results per search",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Products saved per keyword / URL, integer >= 0. Default 20; 0 = everything. ECER shows roughly 100 to 1,000+ products per keyword (20 per page); turn on \"Continue with related keywords\" to go further. You pay per row.",
            "default": 20
          },
          "scrapeDetails": {
            "title": "Read product pages (trade terms, specs, supplier card)",
            "type": "boolean",
            "description": "Default true. Reads each product page and adds payment terms, supply ability, delivery time, packaging, brand, model, certification, origin, all specs, description, images, category and the supplier card (business type, annual revenue, employees, year established, address, certificates, website). Off = fastest card-only export (name, price, MOQ, supplier, verified badge, year established).",
            "default": true
          },
          "expandRelatedKeywords": {
            "title": "Continue with related keywords",
            "type": "boolean",
            "description": "Optional. When a keyword runs out of results before \"Max results per search\", keep going with the related keywords ECER lists on the first results page (e.g. \"yoga mat\" -> \"heat yoga mat\", \"big play mat\"). Default false.",
            "default": false
          },
          "uniqueSuppliers": {
            "title": "One row per supplier",
            "type": "boolean",
            "description": "Optional. true = keep only the first product of each supplier (a supplier lead list). Default false = one row per product.",
            "default": false
          },
          "verifiedOnly": {
            "title": "Verified suppliers only",
            "type": "boolean",
            "description": "Optional. Keep only \"Verified Supplier\" members. Default false.",
            "default": false
          },
          "manufacturersOnly": {
            "title": "Manufacturers only",
            "type": "boolean",
            "description": "Optional. Keep only suppliers whose business type says manufacturer / factory (reads the product page). Default false.",
            "default": false
          },
          "minYearsInBusiness": {
            "title": "Minimum years in business",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Keep only companies established at least this many years ago. Default 0.",
            "default": 0
          },
          "onlyWithPrice": {
            "title": "Only products with a price",
            "type": "boolean",
            "description": "Optional. Skip products quoted as \"Negotiable\" with no number. Default false.",
            "default": false
          },
          "maxPrice": {
            "title": "Max unit price",
            "minimum": 0,
            "type": "number",
            "description": "Optional. Skip products whose lowest listed unit price is above this (in the listed currency, nearly always USD). Products without a price are kept unless \"Only products with a price\" is on."
          },
          "maxMoq": {
            "title": "Max MOQ",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Skip products whose minimum order quantity is above this number, e.g. 100 for small-batch buying. Products without a listed MOQ are kept."
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Optional, advanced. Parallel requests, 1-20. Default 8.",
            "default": 8
          },
          "maxRequestRetries": {
            "title": "Max retries per request",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Optional, advanced. Retries per failed request (each on a new proxy session), 0-20. Default 8.",
            "default": 8
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional, advanced. Default Apify Proxy (datacenter), which works for ECER. Switch to {\"useApifyProxy\": true, \"apifyProxyGroups\": [\"RESIDENTIAL\"]} only if the log shows repeated blocks.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}