HiPages Scraper - Business Listings, Contacts & Reviews
Pricing
from $1.50 / 1,000 results
HiPages Scraper - Business Listings, Contacts & Reviews
Scrape business listings from HiPages Australia by category, location, or URL. Extract business names, contact details, ratings, customer reviews, images, service areas, and other structured business information.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
30
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Share
hipages Business Scraper: Contacts, Ratings and Profiles for Australian Tradespeople
This scraper turns hipages into a queryable directory of Australian tradespeople and service businesses. Search by service category and suburb, or paste hipages search result URLs, to collect contact details, star ratings, licence and ABN status, highlights and photos for each listing, with optional profile depth covering services offered, business description and every customer recommendation. Export to JSON, CSV or Excel, or pull results straight into your app through the API.
Why This Scraper?
- Two ways to find businesses. Search by category, state and suburb, or paste hipages search result URLs directly. No need to build URLs by hand.
- 140+ service categories. Electricians, plumbers, builders, landscapers, pool builders and more, across all eight Australian states and territories.
- Contact details and trust signals on every record. Phone, mobile, service area, licence and ABN status, star rating, total hires and recommendation count.
- Optional profile depth. Switch on business details for ABN, email, description, services offered, licences, the full rating breakdown and photo galleries, plus every customer recommendation, and pay only for what you use.
- Built for monitoring. Resume continues one interrupted run without re scraping, and Incremental mode tracks a recurring search itself, returning only new, updated, reappeared or expired businesses.
- Export straight into your apps. Pipe a summary of every business into Notion, Linear, Airtable or Apify through Integrations, on top of the full dataset.
Use Cases
- Lead generation: pull contactable tradespeople by category and suburb for outreach, partnerships or supplier lists.
- Vetting a contractor before hiring: check star rating, total hires, licence and ABN status before committing to a quote.
- Market research: compare listing counts, ratings and trust signals for a trade category across suburbs or states.
- Reputation monitoring: schedule a recurring search with Incremental mode and get only the businesses whose rating, reviews or listing actually changed.
- Directories and dashboards: feed business profiles, images and contact details into your own site or app.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
businessId | "123456" |
name | "Sample Excavation Co" |
title | "Excavation and earthworks specialists" |
key | "sample-excavation-co" |
phone / mobile | "03 9999 9999" / "0400 000 000" |
serviceArea | "Clayton" |
highlights | ["Free quotes", "Fully insured"] |
hasLicense / hasValidAbn | true / true |
starRating | { "rating": 4.9, "totalHired": 42, "totalRatings": 18 } |
totalRecommendations | 18 |
latestRecommendation | comment, reviewer name, job category and postcode (when the business has one) |
brandColor / theme | "#1B5E20" / "classic" |
thumbnailUrl / bannerUrl | profile photo and banner image links |
galleryImages | uploaded project photos, each with an id, title and URL |
profilePageUrl / profilePagePath | link to the hipages business profile |
listingType | "local" (also "servicing" for a promoted listing) |
position / distance | search rank and distance in kilometres from the searched suburb |
searchContext | category, state and suburb (or source URL) used to find this record |
detailedInfo | ABN, email, description, services, licences, rating breakdown, images and recommendations, only when Scrape Business Details is on |
changeType / changedFields / firstSeenAt / lastSeenAt | "UPDATED" / ["starRating"] / timestamps, only in Incremental mode |
How to Use
- Pick a mode:
search(category, state, suburb) orurl(paste hipages search result links). - Fill in the fields for that mode, and switch on business details or recommendations if you need them.
- Set Maximum Businesses to control run size and cost, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it through the API.
Search a category and suburb:
{"mode": "search","category": "electricians","state": "nsw","suburb": "parramatta","maxBusinesses": 25}
Search with full profile details and recommendations:
{"mode": "search","category": "plumbers","state": "vic","suburb": "clayton","maxBusinesses": 10,"scrapeDetails": true,"scrapeRecommendations": true}
Paste a hipages search URL:
{"mode": "url","urls": [{ "url": "https://hipages.com.au/find/excavation/vic/clayton" }],"maxBusinesses": 25}
Recurring monitoring of one search:
{"mode": "search","category": "builders","state": "qld","suburb": "brisbane","incrementalMode": true,"stateKey": "brisbane-builders-watch"}
A hipages search URL must be a search results page in the /find/<category>/<state>/<suburb> or /find/<category>/<state> (state wide, no suburb) shape. A hipages business profile page is not a search URL and is not supported in URL mode.
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/hipages-business-scraper").call(run_input={"mode": "search", "category": "electricians", "state": "nsw", "suburb": "parramatta"})for business in client.dataset(run["defaultDatasetId"]).iterate_items():print(business["name"], business.get("phone"))
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/hipages-business-scraper').call({ mode: 'search', category: 'electricians', state: 'nsw', suburb: 'parramatta' });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the actor skips every business already collected there, so this run returns only the new ones (a delta). Combine both runs' datasets for the full set. - Incremental mode (
incrementalMode) is for a search you run repeatedly on a schedule. It remembers the previous run of the SAME search itself, so you never paste an id, and classifies every business asNEW,UPDATED(withchangedFields),UNCHANGED(suppressed and not billed unlessemitUnchangedis on),REAPPEARED, orEXPIRED(only after a run that scanned the search to completion, and only withemitExpired).stateKeynames or shares the stored baseline; leave it blank to auto derive one from category, state, suburb and detail settings. With Incremental mode off, output is exactly as before.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human readable summary of each business, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (category, state, suburb) or url (paste hipages search URLs). |
category | string | excavation | Service category to search for. Used in search mode. |
state | string | vic | Australian state code (nsw, vic, qld, sa, wa, tas, nt, act). Used in search mode. |
suburb | string | clayton | Suburb name. Used in search mode. |
urls | array | [] | hipages search result URLs. Used only in URL mode. |
maxBusinesses | integer | 5 | Maximum number of businesses to scrape. |
pageLimit | integer | 10 | Number of results requested per page from the search API (max 10). |
scrapeDetails | boolean | false | Scrape detailed information from each business profile page. |
scrapeRecommendations | boolean | false | Extract all customer recommendations from each profile (requires scrapeDetails). |
proxy | object | Apify Proxy | Connection settings. |
resumeFromRunId | string | (none) | ID of a previous run or dataset to continue one interrupted crawl (a delta). |
incrementalMode | boolean | false | Track a recurring search and return only new, updated, reappeared or expired businesses. |
stateKey | string | (none) | Name or share the Incremental mode baseline. Leave empty to auto derive one from the search. |
emitUnchanged | boolean | false | Incremental mode only: also return (and bill) unchanged businesses. |
emitExpired | boolean | false | Incremental mode only: also return (and bill) businesses no longer found after a complete scan. |
mcpConnectors | array | (none) | Optional: send a summary of each business to apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which item pages are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"businessId": "123456","name": "Sample Excavation Co","title": "Excavation and earthworks specialists","key": "sample-excavation-co","phone": "03 9999 9999","mobile": "0400 000 000","serviceArea": "Clayton","highlights": ["Free quotes", "Fully insured", "20+ years experience"],"hasLicense": true,"hasValidAbn": true,"starRating": {"rating": 4.9,"totalHired": 42,"totalRatings": 18},"totalRecommendations": 18,"latestRecommendation": {"comment": "Great job, arrived on time and left the site clean.","userName": "Sample Customer","jobCategoryId": 42,"jobPostcode": "3168"},"brandColor": "#1B5E20","theme": "classic","thumbnailUrl": "https://example.com/thumbnail.jpg","bannerUrl": "https://example.com/banner.jpg","galleryImages": [{ "galleryId": "1", "imageId": "1001", "title": "Completed driveway excavation", "url": "https://example.com/gallery/1001.jpg" }],"profilePageUrl": "https://hipages.com.au/connect/sample-excavation-co","profilePagePath": "/connect/sample-excavation-co","listingType": "local","position": 3,"distance": 2.4,"searchContext": {"mode": "search","category": "excavation","state": "vic","suburb": "clayton"}}
Plan Requirement
This actor uses Apify Proxy by default, which is enough for search results in both modes with Scrape Business Details off. When Scrape Business Details is switched on, the actor automatically requests a residential connection for hipages profile pages, no separate proxy input is needed. If a residential connection is not available on your account, profile enrichment is skipped and each business is returned with detailsSkipped set instead of failing the run; the core search fields are unaffected either way.
FAQ
How much does it cost?
You pay per business record returned. Optional profile details and recommendations do not add a separate line item beyond the record itself. The Pricing tab shows the current rates. Use Maximum Businesses to cap the cost of any run.
Is it legal to scrape hipages?
This actor collects only publicly available business listing data. You are responsible for how you use it: follow hipages' terms and the laws that apply to you, and get legal advice if you plan commercial redistribution of contact details or reviews.
Can I get only new or changed businesses on a schedule?
Yes. Schedule the actor on the same category, state and suburb and turn on Incremental mode. Each business is classified NEW, UPDATED, REAPPEARED, UNCHANGED or EXPIRED against the previous run for that search, and UNCHANGED businesses are neither returned nor billed unless you turn on Emit unchanged businesses.
What is the difference between Resume and Incremental mode?
Resume (resumeFromRunId) continues ONE interrupted crawl: paste its run or dataset id and this run skips businesses already collected there, returning only the delta. Incremental mode is for a search you run repeatedly on a schedule: it remembers state itself between runs, so you never paste an id, and it adds change tracking to every business.
Why did my run fail instead of returning an empty dataset?
The run fails outright only in specific cases: URL mode with no supported hipages search URL, a resumeFromRunId that cannot be resolved, or turning on Incremental mode together with resumeFromRunId while that search already has saved state. A search that simply matches no businesses, or a temporary problem reaching hipages mid run, returns whatever could be collected (possibly an empty dataset) with a warning in the log, rather than failing.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push a summary of results into Notion, Linear or Airtable when the run finishes.
🔗 Want more leads data?
Pair this actor with these related scrapers from the same team:
| 📇 PagesJaunes FR From $0.8/1K. Scrapes business listings from PagesJaunes.fr (French Yellow Pages)... | 📇 Yellow Pages AU From $1/1K. Scrape business listings from Yellow Pages Australia by type and location... |
| 📇 Yellow Pages NZ From $0.8/1K. Scrapes business listings from Yellow.co.nz (New Zealand Yellow Pages)... | ✈️ Fuel Prices AU Scraper Scrapes petrol and fuel prices data across Australia and New Zealand. Search by address... |
| 📇 TrueLocal AU Directory Listings & Reviews Scraper Scrape TrueLocal.com.au business listings by keyword, location, or URL. Extract names... | 📇 BizQuest Scraper From $1/1K. Extract business-for-sale, franchise, and asset listings from BizQuest... |
💬 Support & custom scrapers
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.