{
  "openapi": "3.0.1",
  "info": {
    "title": "Hipages Scraper - Australian Tradie & Home Services Leads",
    "description": "Scrape hipages tradies & home-service businesses by trade and suburb, or from profile URLs. Get name, phone & mobile, ABN, licence flag, star rating & reviews, services, headline and a lead score. Monitoring, no login, no key, no browser. Independent tool, not affiliated with hipages.",
    "version": "0.1",
    "x-build-id": "c4Baqzy5cy3zt79RP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~hipages-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-hipages-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~hipages-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-hipages-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~hipages-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-hipages-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": {
          "categories": {
            "title": "Trades / categories",
            "type": "array",
            "description": "Trade categories to search: e.g. plumbers, electricians, carpenters, painters, builders, tilers, plasterers, bricklayers, concreting, fencing, landscaping, roofing, gardening, handyman, gas_fitters, cabinet_makers, air_conditioning, pest_control, cleaning, removalists. Friendly words (plumber, sparky, aircon, removals) auto-map; any valid hipages category slug also works. Each category is combined with every location.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations (Suburb, STATE)",
            "type": "array",
            "description": "Australian suburb + state, e.g. `Sydney, NSW`, `Bondi, NSW`, `Melbourne, VIC`, `Brisbane, QLD`. Forgiving: `Sydney NSW` (no comma), full state names, postcodes and `Australia` suffixes, bare major cities (`Newcastle`, `Gold Coast`) and bare states (`NSW` = its capital) all work; a bare suburb with no state is auto-probed across every state. States: NSW, VIC, QLD, WA, SA, TAS, ACT, NT.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (listing or profile pages)",
            "type": "array",
            "description": "Paste hipages listing URLs (`https://hipages.com.au/find/<trade>/<state>/<suburb>`) or tradie profile URLs (`https://hipages.com.au/connect/<slug>`). Processed in addition to the categories + locations above.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max results (whole run)",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Global cap on the number of business records emitted in this run, across all searches and Start URLs.",
            "default": 100
          },
          "maxBusinessesPerSearch": {
            "title": "Max businesses per search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap the number of tradies collected per trade + suburb page. Each hipages suburb page lists roughly 15-20 top-ranked tradies.",
            "default": 60
          },
          "minRating": {
            "title": "Minimum star rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Keep only tradies with an average rating at or above this value (0 = no filter). Rated 1-5.",
            "default": 0
          },
          "minReviews": {
            "title": "Minimum review count",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only tradies with at least this many recommendations/reviews (0 = no filter).",
            "default": 0
          },
          "withPhoneOnly": {
            "title": "Only tradies with a phone number",
            "type": "boolean",
            "description": "Keep only tradies that publish a phone or mobile number (read from their profile) - best for cold-call / SMS lead lists.",
            "default": false
          },
          "licensedOnly": {
            "title": "Only licensed tradies",
            "type": "boolean",
            "description": "Keep only tradies flagged by hipages as holding a trade licence.",
            "default": false
          },
          "validAbnOnly": {
            "title": "Only tradies with a valid ABN",
            "type": "boolean",
            "description": "Keep only tradies with a verified Australian Business Number (ABN).",
            "default": false
          },
          "includeBusinessDetails": {
            "title": "Open each profile for full details",
            "type": "boolean",
            "description": "Visit each tradie's profile to add the contact and deep fields: phone, mobile, email, website, address, ABN + ABR verification link, licences, rating breakdown, Google rating, services and review texts. One small extra request per tradie. Since hipages' 2026 rebuild the listing no longer carries phone numbers, so keep this on for a lead list.",
            "default": true
          },
          "includeServices": {
            "title": "Include services list",
            "type": "boolean",
            "description": "Include the list of services each tradie offers (the trades listed on their profile). Requires business details.",
            "default": true
          },
          "includeReviews": {
            "title": "Include reviews",
            "type": "boolean",
            "description": "Also output review records (type `review`) from each tradie's profile: star rating, review text, author, date, source (hipages or Google) and the verified-hire flag. Requires business details.",
            "default": false
          },
          "maxReviewsPerBusiness": {
            "title": "Max reviews per tradie",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many reviews to emit per tradie when 'Include reviews' is on (profiles expose roughly the 10 most recent).",
            "default": 20
          },
          "includeJobLeads": {
            "title": "Include homeowner job requests (demand-side leads)",
            "type": "boolean",
            "description": "Homeowner job-request records (type `job`). Since its 2026 rebuild hipages no longer puts these in its pages (the browser loads them from an API that its robots.txt disallows), so this currently returns none and nothing is billed for it; it stays so saved inputs keep working.",
            "default": false
          },
          "expandNearbySuburbs": {
            "title": "Expand into nearby suburbs",
            "type": "boolean",
            "description": "hipages has no deep page-by-page pagination, so coverage comes from breadth. Turn this on to automatically follow the 'nearby suburbs' on each listing and collect tradies from them too (same trade).",
            "default": false
          },
          "maxNearbySuburbs": {
            "title": "Max nearby suburbs per search",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "When 'Expand into nearby suburbs' is on, how many adjacent suburbs to add per starting suburb.",
            "default": 5
          },
          "deduplicateBusinesses": {
            "title": "Deduplicate businesses",
            "type": "boolean",
            "description": "Emit each tradie only once per run (keyed by business id / slug), even if they appear across multiple trades, suburbs or nearby-suburb expansions.",
            "default": true
          },
          "monitorMode": {
            "title": "Monitoring mode - only new tradies",
            "type": "boolean",
            "description": "Remember tradies already returned and emit ONLY ones not seen in previous runs. Pairs with Apify Schedules to track newly listed tradies in an area over time (no conflict - the schedule triggers the run, monitoring decides what's new).",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named key-value store that holds the 'already seen' business ids for monitoring mode. Use a different name per tracked search to keep histories separate.",
            "default": "hipages-monitor"
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum parallel requests. Lower it if you hit rate limits on very large runs.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Keep the default (Apify Proxy, no group): the actor tries datacenter IPs first and switches to Australian residential IPs when hipages refuses them. Any other choice is used exactly as given; a group your account can't use falls back to the default.",
            "default": {
              "useApifyProxy": true
            }
          },
          "urlsFromFile": {
            "title": "Import URLs from a file",
            "type": "string",
            "description": "Paste a list of URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Lets you import many Start URLs at once instead of typing each. Google Sheet/Drive share links are handled automatically."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}