# Hipages Scraper - Australian Tradie & Home Services Leads (`scrapesage/hipages-scraper`) Actor

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.

- **URL**: https://apify.com/scrapesage/hipages-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Real estate, Automation
- **Stats:** 6 total users, 1 monthly users, 97.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 tradie / business scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Hipages Scraper — Australian Tradie & Home Services Leads (Phones, ABN & Reviews)

Extract **complete tradie & home-service business data from [hipages](https://hipages.com.au)** — Australia's #1 home-improvement marketplace. Get the fields lead lists actually need: **business name, phone & mobile, ABN (with verification link), trade licence flag, service area, star rating & review count, services offered, headline and a 0-100 lead score** — for plumbers, electricians, builders, painters, carpenters, landscapers and 100+ trades, in any Australian suburb.

No login, no API key, no browser — fast JSON extraction straight from the page data.

### Why this hipages scraper?

The biggest home-services directories (Angi, Thumbtack, HomeAdvisor) sit behind anti-bot walls, so most "contractor lead" tools fall back to scraping Google Maps and miss the trade-specific signals. This actor reads hipages' own page data and ships the **richest tradie record in the category**:

| Data | Typical scrapers | This actor |
|---|---|---|
| Business name + profile URL | ✅ | ✅ |
| Phone / mobile number | partial | ✅ |
| **ABN + ABR verification link** | ❌ | ✅ |
| **Trade licence flag** | ❌ | ✅ |
| Star rating + review count | partial | ✅ |
| **Times hired / total ratings** | ❌ | ✅ |
| **Services offered (full list)** | ❌ | ✅ |
| Headline, tagline & highlights | ❌ | ✅ |
| Premium / verified status | ❌ | ✅ |
| Customer reviews (rating + text) | ❌ | ✅ opt-in |
| **Homeowner job requests (demand-side leads)** | ❌ | ✅ opt-in |
| Lead score (0-100) per tradie | ❌ | ✅ |
| Monitoring — only new tradies | ❌ | ✅ |

### Use cases

- **Lead generation** — tradies are high-intent local buyers for job-management & invoicing software (ServiceM8, Tradify, AroFlo, simPRO), payments, marketing, tools, materials and insurance. Score them by reputation and reach (`reviewCount`, `licensed`, `abnValid`, `isPremium`) and contact them by `phone` / `mobile`.
- **Sales territory building** — pull every plumber / electrician / builder in a metro with phone, ABN and service area for route planning and outreach.
- **Market & competitive intelligence** — compare ratings, services and review volumes across trades and suburbs.
- **Demand intelligence** — turn on `includeJobLeads` to capture recent **homeowner job requests** (what work people want done, where) — a unique demand-side signal for tradies and lead vendors.
- **Monitoring** — schedule recurring runs to watch a trade + area for **newly listed** tradies with monitoring mode.
- **Aggregators & directories** — feed apps and CRMs with structured, verified Australian tradie data.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Hipages Scraper**, choose trades and locations (or paste hipages URLs), and click **Start**.
3. Watch tradies stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "categories": ["plumbers", "electricians"],
    "locations": ["Sydney, NSW", "Melbourne, VIC"],
    "maxResults": 200,
    "includeBusinessDetails": true,
    "includeReviews": false,
    "includeJobLeads": false,
    "expandNearbySuburbs": false,
    "monitorMode": false
}
```

- **categories** — trades such as `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 like `plumber`, `sparky`, `aircon`, `removals` are auto-mapped, and any valid hipages category slug also works. Each trade pairs with every location.
- **locations** — Australian `Suburb, STATE` (`Sydney, NSW`, `Bondi, NSW`, `Brisbane, QLD`). A suburb is required (hipages has no state-only listing); a bare state (`NSW`) or capital city (`Perth`) resolves to that capital. States: NSW, VIC, QLD, WA, SA, TAS, ACT, NT.
- **startUrls** — hipages listing URLs (`/find/<trade>/<state>/<suburb>`) or profile URLs (`/connect/<slug>`).
- **maxResults / maxBusinessesPerSearch** — global and per-search caps.
- **minRating / minReviews / withPhoneOnly / licensedOnly / validAbnOnly** — quality & trust filters.
- **includeBusinessDetails** *(default true)* — open each profile for ABN, full rating, services and review texts.
- **includeServices** *(default true)* — the list of services each tradie offers.
- **includeReviews** *(default false)* — output review records (type `review`).
- **includeJobLeads** *(default false)* — output homeowner job-request records (type `job`).
- **expandNearbySuburbs** *(default false)* — follow nearby suburbs for broader coverage (hipages has no deep pagination).
- **monitorMode** *(default false)* — emit only tradies not seen in previous runs.

### Output

One record per tradie (`type: "business"`), plus optional `review` and `job` records:

```json
{
    "type": "business",
    "source": "hipages",
    "businessId": "3112625",
    "slug": "hoppysplumbing",
    "name": "Hoppy's Plumbing",
    "profileUrl": "https://hipages.com.au/connect/hoppysplumbing",
    "categoryName": "Plumbers",
    "tradeType": "Plumber",
    "state": "nsw",
    "suburb": "sydney",
    "serviceArea": "Sydney",
    "phone": "0462630927",
    "mobile": "0462630927",
    "abn": "62675918859",
    "abnValid": true,
    "abnVerifyUrl": "https://www.abr.business.gov.au/ABN/View/62675918859",
    "licensed": true,
    "rating": 4.9,
    "totalRatings": 604,
    "totalHired": 895,
    "reviewCount": 653,
    "headline": "We offer a full line of services for all your plumbing, drain cleaning and gas-fitting needs.",
    "highlights": ["Commercial Services", "Top Quality Services", "Plumbing & Gas-Fitting"],
    "isPremium": true,
    "serviceCount": 32,
    "services": ["Plumbers", "Bathroom Resurfacing", "Backflow Services", "New Drain Plumbing"],
    "aggregateRating": { "ratingValue": 5, "ratingCount": 22, "bestRating": 5, "worstRating": 1 },
    "featuredRecommendation": { "comment": "Fixed my toilet within 10 minutes. Very happy.", "author": "Wei", "jobPostcode": 2000 },
    "leadScore": 92,
    "searchCategory": "plumbers",
    "searchLocation": "Sydney, NSW",
    "scrapedAt": "2026-06-15T12:00:00.000Z"
}
```

Review rows carry `businessName`, `rating`, `text`, `author` and `profileUrl`. Job rows carry the homeowner's `description`, `suburb`, `postcode` and `state`.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it daily/weekly to track newly listed tradies in a trade + area; perfect for lead pipelines.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/hipages-scraper').call({
    categories: ['plumbers', 'electricians'],
    locations: ['Sydney, NSW'],
    maxResults: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} tradies`);
```

### Monitoring mode

Turn on **monitorMode** and the actor remembers every business id it has returned (in a named key-value store) and emits **only new tradies** on the next run. It pairs cleanly with [Schedules](https://docs.apify.com/platform/schedules) — the schedule triggers the run; monitoring decides what's new — so you can watch a trade + area for newly listed businesses without conflict or duplicates.

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new tradie leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored search finds new tradies.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find the top-rated licensed plumbers in Sydney with their phone numbers" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **local-business lead-gen stack**:

- **[Houzz Scraper](https://apify.com/scrapesage/houzz-scraper)** — home-improvement pros, contacts and reviews.
- **[Bark Listing Scraper](https://apify.com/scrapesage/bark-listing-scraper)** — service-provider leads from Bark.
- **[Fresha Scraper](https://apify.com/scrapesage/fresha-scraper)** — salon, spa & beauty business leads.
- **[Booksy Scraper](https://apify.com/scrapesage/booksy-scraper)** — beauty & wellness provider leads.
- **[Healthgrades Scraper](https://apify.com/scrapesage/healthgrades-scraper)** — doctors & healthcare providers with reviews.
- **[FindLaw Scraper](https://apify.com/scrapesage/findlaw-scraper)** — lawyers, law firms and contact leads.
- **[Insurance Agent Scraper](https://apify.com/scrapesage/insurance-agent-scraper)** — State Farm & Farmers agent leads.
- **[TaxBuzz Scraper](https://apify.com/scrapesage/taxbuzz-scraper)** — CPA, accountant & tax preparer leads.

### Tips

- **More tradies per city**: each trade + suburb page returns the ~15-20 top-ranked tradies. To go deeper, add more suburbs (`Parramatta, NSW`, `Bondi, NSW`, …) or turn on `expandNearbySuburbs` to follow adjacent suburbs automatically.
- **Best phone coverage**: phone & mobile come straight from the listing data — you get them even without business details.
- **ABN & services**: keep `includeBusinessDetails` on — the ABN number, service catalogue and review texts live on each tradie's profile page.
- **Cost control**: filter with `minRating` / `withPhoneOnly` / `licensedOnly` and cap with `maxResults`. Details, reviews and job leads are all opt-in.

### FAQ

**How do I scrape tradies for a specific suburb?** Put the suburb in `locations` as `Suburb, STATE` (`Bondi, NSW`, `Carlton, VIC`) and pick `categories`. Each trade pairs with each location.

**Which trades are supported?** Plumbers, electricians, carpenters, painters, builders, tilers, plasterers, bricklayers, concreters, fencing, landscaping, roofing, gardening, handyman, gas fitters, cabinet makers, air conditioning, pest control, cleaning, removalists and any other hipages category — friendly words auto-map and raw slugs pass through.

**Where do phone numbers come from?** Phone and mobile come from hipages' own public listing data. hipages keeps tradies on-platform, so there is usually no external website to crawl — the phone is the contact.

**What is the ABN field?** The Australian Business Number — a verified business identifier. The actor includes the number and an [Australian Business Register](https://www.abr.business.gov.au) verification link, so you can confirm and enrich each lead.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I get only new tradies over time?** Turn on `monitorMode` and create a [Schedule](https://docs.apify.com/platform/schedules); each run emits only tradies not seen before.

**A field is null — why?** Some tradies genuinely don't publish a particular detail (e.g. an ABN number, a service list, or a landline). Fields are `null` only when the data doesn't exist, not because the scraper skipped them.

**Is scraping hipages legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (including the Australian Privacy Act / GDPR / CCPA for personal data) and hipages' terms.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `categories` (type: `array`):

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.

## `locations` (type: `array`):

Australian suburb + state, e.g. `Sydney, NSW`, `Bondi, NSW`, `Melbourne, VIC`, `Brisbane, QLD`. A suburb is required (hipages has no state-only listing). A bare state (`NSW`) or a bare capital city (`Perth`) is accepted and resolves to that capital. States: NSW, VIC, QLD, WA, SA, TAS, ACT, NT.

## `startUrls` (type: `array`):

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.

## `maxResults` (type: `integer`):

Global cap on the number of business records emitted in this run, across all searches and Start URLs.

## `maxBusinessesPerSearch` (type: `integer`):

Cap the number of tradies collected per trade + suburb page. Each hipages suburb page lists roughly 15-20 top-ranked tradies.

## `minRating` (type: `number`):

Keep only tradies with an average rating at or above this value (0 = no filter). Rated 1-5.

## `minReviews` (type: `integer`):

Keep only tradies with at least this many recommendations/reviews (0 = no filter).

## `withPhoneOnly` (type: `boolean`):

Keep only tradies that expose a phone or mobile number — best for cold-call / SMS lead lists.

## `licensedOnly` (type: `boolean`):

Keep only tradies flagged by hipages as holding a trade licence.

## `validAbnOnly` (type: `boolean`):

Keep only tradies with a verified Australian Business Number (ABN).

## `includeBusinessDetails` (type: `boolean`):

Visit each tradie's profile page to add the deep fields: ABN number + ABR verification link, full aggregate rating, the service catalogue and review texts. One extra request per tradie. Phone, rating, licence and headline already come from the listing.

## `includeServices` (type: `boolean`):

Include the list of services each tradie offers (from their profile's service catalogue). Requires business details.

## `includeReviews` (type: `boolean`):

Also output review records (type `review`) from each tradie's profile — star rating, review text and author. Requires business details.

## `maxReviewsPerBusiness` (type: `integer`):

How many reviews to emit per tradie when 'Include reviews' is on (profiles expose roughly the 10 most recent).

## `includeJobLeads` (type: `boolean`):

Also output recent homeowner job-request records (type `job`) shown on each listing page — the job description, suburb and postcode. These are demand-side leads (people actively looking to hire a tradie).

## `expandNearbySuburbs` (type: `boolean`):

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).

## `maxNearbySuburbs` (type: `integer`):

When 'Expand into nearby suburbs' is on, how many adjacent suburbs to add per starting suburb.

## `deduplicateBusinesses` (type: `boolean`):

Emit each tradie only once per run (keyed by business id / slug), even if they appear across multiple trades, suburbs or nearby-suburb expansions.

## `monitorMode` (type: `boolean`):

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).

## `monitorStoreName` (type: `string`):

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.

## `maxConcurrency` (type: `integer`):

Maximum parallel requests. Lower it if you hit rate limits on very large runs.

## `proxyConfiguration` (type: `object`):

Proxy settings. hipages serves clean pages, so the default Apify proxy works; for very large or high-frequency runs, switch to Residential with country AU for best consistency.

## Actor input object example

```json
{
  "categories": [
    "plumbers"
  ],
  "locations": [
    "Sydney, NSW"
  ],
  "maxResults": 100,
  "maxBusinessesPerSearch": 60,
  "minRating": 0,
  "minReviews": 0,
  "withPhoneOnly": false,
  "licensedOnly": false,
  "validAbnOnly": false,
  "includeBusinessDetails": true,
  "includeServices": true,
  "includeReviews": false,
  "maxReviewsPerBusiness": 20,
  "includeJobLeads": false,
  "expandNearbySuburbs": false,
  "maxNearbySuburbs": 5,
  "deduplicateBusinesses": true,
  "monitorMode": false,
  "monitorStoreName": "hipages-monitor",
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped records in the default dataset. Business rows carry the full tradie profile, contact, ABN, ratings, services and lead score; review and job rows carry their own fields.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "categories": [
        "plumbers"
    ],
    "locations": [
        "Sydney, NSW"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/hipages-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "categories": ["plumbers"],
    "locations": ["Sydney, NSW"],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/hipages-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "categories": [
    "plumbers"
  ],
  "locations": [
    "Sydney, NSW"
  ]
}' |
apify call scrapesage/hipages-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapesage/hipages-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/OgNxC518Ld8H0HKqn/builds/swD2VDv2xD3zbVwJg/openapi.json
