{
  "openapi": "3.0.1",
  "info": {
    "title": "Singapore Industrial & MRO Product Scraper for Eezee.sg",
    "description": "Scrape Eezee.sg, Singapore's B2B industrial & MRO marketplace: products, prices in 9 currencies, bulk tiers, MOQ, lead time, stock, spec tables and supplier e-mail leads. Search, browse or sweep the whole catalogue; monitor prices. Independent tool, not affiliated with Eezee.",
    "version": "0.1",
    "x-build-id": "fdlfdGJRTMflzGxdQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~eezee-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-eezee-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~eezee-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-eezee-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~eezee-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-eezee-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": "Product words to search Eezee for, one per line. Each runs as its own search (the same results, in the same order, as the search box on eezee.sg) and the result cap is shared fairly between them. Use product words or model numbers, for example <code>safety gloves</code>, <code>cordless drill</code>, <code>cable ties</code>, <code>3025XL10</code>.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Eezee page links",
            "type": "array",
            "description": "Links from eezee.sg. A <b>product page</b> returns that product; a <b>category</b>, <b>brand</b> or <b>search results</b> page returns its products, with the page's own filters and sort. Add links one by one, upload a text file or link one.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "urlsFromFile": {
            "title": "Import links from a file",
            "type": "string",
            "description": "Paste eezee.sg links (one per line), or paste a single link to a .txt or .csv file or a Google Sheet that holds them."
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Limit the search to these Eezee categories, or browse them when no keyword is given. Use the name or the part of the category link after <code>/categories/</code>: a main category such as <code>safety</code> or <code>power-tools</code> covers all of its sub-categories; a sub-category such as <code>cotton-gloves</code> covers just that one. A value that matches no Eezee category stops the run before anything is billed.",
            "items": {
              "type": "string"
            }
          },
          "brands": {
            "title": "Brands",
            "type": "array",
            "description": "Limit the search to these brands, or browse them when no keyword is given. Brand names as shown on Eezee, for example <code>3M</code>, <code>Bosch</code>, <code>Makita</code>, <code>RS Pro</code>. A brand Eezee does not carry stops the run before anything is billed.",
            "items": {
              "type": "string"
            }
          },
          "shopNumbers": {
            "title": "Supplier shop numbers",
            "type": "array",
            "description": "Return the products of these supplier shops (the <code>shopNumber</code> field in the output). Combine with keywords, categories or brands to narrow a shop's range.",
            "items": {
              "type": "string"
            }
          },
          "wholeCatalogue": {
            "title": "Whole catalogue",
            "type": "boolean",
            "description": "Scrape the entire Eezee catalogue instead of a search. With a result cap up to 10,000 you get the catalogue's top products in Eezee's own order; with a larger cap (or 0 = no limit) the actor walks every sub-category. Ignored when a keyword, category, brand, shop or link is given.",
            "default": false
          },
          "currency": {
            "title": "Price currency",
            "enum": [
              "SGD",
              "MYR",
              "THB",
              "IDR",
              "PHP",
              "USD",
              "AUD",
              "CNY",
              "INR"
            ],
            "type": "string",
            "description": "Currency of the headline <code>price</code> and <code>priceFormatted</code> and of the price filters below. Every product also carries <code>priceByCurrency</code> with all nine currencies.",
            "default": "SGD"
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Only products at or above this price, in the currency above. 0 = no minimum.",
            "default": 0
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Only products at or below this price, in the currency above. 0 = no maximum.",
            "default": 0
          },
          "enquiryType": {
            "title": "Buy now or request a quote",
            "enum": [
              "all",
              "buy_now",
              "quote"
            ],
            "type": "string",
            "description": "Keep all products, only those you can buy straight away, or only request-a-quote products.",
            "default": "all"
          },
          "withSupplierEmailOnly": {
            "title": "Only products with a supplier e-mail",
            "type": "boolean",
            "description": "Keep only products that carry the supplier's own e-mail address (products listed by Eezee's own team have none). Useful for B2B lead lists; the actor reads further into the results to fill your cap.",
            "default": false
          },
          "includeInactive": {
            "title": "Include temporarily unavailable products",
            "type": "boolean",
            "description": "By default only products that can be ordered now are returned. Turn on to also keep products a supplier has paused or suspended; the <code>availability</code> field says which.",
            "default": false
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "relevance",
              "priceLowToHigh",
              "priceHighToLow"
            ],
            "type": "string",
            "description": "Order of the results, as on eezee.sg.",
            "default": "relevance"
          },
          "maxResults": {
            "title": "Max products",
            "minimum": 0,
            "type": "integer",
            "description": "How many products to deliver in total across all searches (0 = no limit). Leave empty for 100."
          },
          "maxPagesPerQuery": {
            "title": "Max pages per search",
            "minimum": 1,
            "maximum": 166,
            "type": "integer",
            "description": "Optional depth limit: stop each search after this many result pages of 60 products. Leave empty to read as deep as your product cap needs (Eezee serves up to 10,000 results per search)."
          },
          "includeSpecifications": {
            "title": "Include specification tables",
            "type": "boolean",
            "description": "Add each product's specification table (for example coating material, cut level, size) where Eezee has one for its category.",
            "default": true
          },
          "monitorMode": {
            "title": "Monitor mode: only new products and price changes",
            "type": "boolean",
            "description": "The first run returns the current results and starts the monitor. Later runs return only products listed on Eezee after that, plus price drops and increases on products you already received, tagged in <code>monitorStatus</code> with the <code>previousPrice</code>. Pair it with an Apify Schedule.",
            "default": false
          },
          "dedupStoreName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name of the storage that remembers what a monitor already delivered. Use a different name for each monitor you run (letters, digits and dashes).",
            "default": "eezee-scraper-state"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "The default Apify proxy works. If it is ever refused, the actor retries through Singapore residential proxies automatically.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}