{
  "openapi": "3.0.1",
  "info": {
    "title": "HardwareZone Scraper – SG Forum Threads, Replies & Monitoring",
    "description": "Scrape HardwareZone, Singapore's biggest forum, without an API or login: board thread listings with keyword filtering, main posts and all replies, with author, reply count, view count and timestamps. Schedule daily runs for SG brand monitoring. Export JSON/CSV/Excel for social listening.",
    "version": "1.0",
    "x-build-id": "3lv1L6CXBHM6EvveK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/claude_code_reviewer~hardwarezone-scraper-en/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-claude_code_reviewer-hardwarezone-scraper-en",
        "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/claude_code_reviewer~hardwarezone-scraper-en/runs": {
      "post": {
        "operationId": "runs-sync-claude_code_reviewer-hardwarezone-scraper-en",
        "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/claude_code_reviewer~hardwarezone-scraper-en/run-sync": {
      "post": {
        "operationId": "run-sync-claude_code_reviewer-hardwarezone-scraper-en",
        "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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "🎯 Mode",
            "enum": [
              "forum",
              "thread"
            ],
            "type": "string",
            "description": "What do you want to scrape? Pick a mode and fill in the matching fields below.",
            "default": "forum"
          },
          "forumIds": {
            "title": "📋 Board IDs",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "HardwareZone board IDs (numeric, the `{id}` in the URL forums/{slug}.{id}/), e.g. 16 (Eat-Drink-Man-Woman), 234 (Chill-out/Happenings), 9 (Mobile Communication Technology). Find more boards at forums.hardwarezone.com.sg. Used by board thread mode.",
            "items": {
              "type": "string"
            }
          },
          "threadIds": {
            "title": "💬 Thread IDs",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "HardwareZone thread IDs (numeric, the `{id}` in the URL threads/{slug}.{id}/), e.g. 7166857. Used by full thread mode.",
            "items": {
              "type": "string"
            }
          },
          "threadUrls": {
            "title": "💬 Thread URLs",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Full HardwareZone thread URLs, e.g. https://forums.hardwarezone.com.sg/threads/official-blood-donation-thread-give-blood-save-lives.7166857/. The thread ID is extracted automatically.",
            "items": {
              "type": "string"
            }
          },
          "bulkInput": {
            "title": "📋 Bulk paste",
            "type": "string",
            "description": "**One item per line** (press Enter for a new line, no quotes or commas). Treated as board IDs, thread IDs, or thread URLs depending on the current mode, and merged into the matching field above at runtime. Fastest way is to copy a whole column from Google Sheets / Excel."
          },
          "keywords": {
            "title": "🔍 Title keyword filter",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "(Optional) Board thread mode: only keep items whose title contains at least one keyword. Leave empty for no filtering.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "📊 Max items",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Board thread mode: max items per board. Full thread mode: max threads to scrape (replies per thread are not limited by this). Maximum 2000.",
            "default": 50
          },
          "dateFrom": {
            "title": "📅 Only items since this time (optional)",
            "type": "string",
            "description": "Applies to board thread mode, based on thread post time or last reply time (whichever is newer). Formats: relative 3d (last 3 days), 12h (last 12 hours), 2w (last 2 weeks), or an absolute date MM/DD/YY. Leave empty for no filtering. When set, paging also stops early (pinned threads are exempt from this filter and early-stop check), which keeps scheduled monitoring cheap."
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy (Apify datacenter proxy on by default)",
            "type": "object",
            "description": "Apify datacenter proxy is on by default: without a proxy your run shares the platform's egress IPs with every other run, so the forum site rate-limits you (429s, missing pages). HTML responses are small, so proxy bandwidth cost is negligible. Turn it off only for local testing or your own proxy.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}