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
32
Total users
3
Monthly active users
5 days ago
Last modified
Categories
Features
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"}
URL mode accepts these hipages search URL shapes. The urls field ships with three examples as its default (suburb, state wide and whole category), each returning its own rows, so a URL-mode run with the field left untouched scrapes those three instead of nothing. The trailing slash and www forms are accepted but resolve to the same search as the plain suburb URL, so they are not part of the default.
| Shape | Example |
|---|---|
| Suburb search | https://hipages.com.au/find/excavation/vic/clayton |
| State wide search | https://hipages.com.au/find/excavation/vic |
| Whole category across Australia (no state) | https://hipages.com.au/find/excavation |
| Trailing slash | https://hipages.com.au/find/excavation/vic/clayton/ |
www host | http://www.hipages.com.au/find/excavation/vic/clayton |
A ?page= parameter is ignored by hipages: the URL is accepted, a warning is logged, the search starts from the first page and counts as partial scope for expired detection. With maxRecommendations at its default of 20, a business returns its 20 most recent recommendations; raise it for more. A hipages business profile page is not a search URL and is not supported in URL mode.
In search mode, category also accepts a plain name such as Air Conditioning (an unknown name stops the run with a clear error), and suburb accepts text such as Clayton VIC 3168 (the state in the text is used when state is not set).
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). A business isUPDATEDwhen any returned field changes (name, phone, service area, star rating, recommendation counts and latest recommendation, gallery, licence flags, distance, and the detailed info or recommendations when scraped). The searchpositionand any fields listed inignoreFieldsForChangesare excluded from the comparison and fromchangedFieldsbut still appear in the output.stateKeynames or shares the stored baseline; leave it blank to auto derive one from category, state, suburb, postcode 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 | the three example URLs above | 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. Each delivered business whose profile page is read is charged as one detail-page event on top of the per-result charge. |
scrapeRecommendations | boolean | false | Extract all customer recommendations from each profile (requires scrapeDetails). The recommendations read folds into the same detail-page event unit. |
proxy | object | Apify Proxy | Connection settings. |
resumeFromRunId | string | (none) | ID of a previous run or dataset to continue one interrupted crawl (a delta). |
maxRecommendations | integer | 20 | With Scrape All Recommendations, the most recommendations returned per business (1 to 5000). Previously every recommendation was returned, so raise this to keep the old behaviour; with Incremental mode, the stored and the new recommendations are both compared on the first maxRecommendations entries only (API order), so lowering the limit from a previous run does not mark a business as UPDATED by itself. |
postcode | integer | none | Search mode: filter by a 4-digit Australian postcode (for example 2213). Uses the site's own postcode filter; State and Suburb are ignored when set. |
sortBy | string | none | Sort best-first by Rating, Total Hired or Total Recommendations. The site has no sort option, so up to 1000 businesses of the search are collected and sorted by this actor before Max Businesses is applied. |
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 (category, state, suburb, postcode and detail settings). |
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. |
ignoreFieldsForChanges | array | [] | Incremental mode only: fields (dotted nested paths and * wildcards allowed, e.g. starRating.totalRatings, detailedInfo.*) left out when deciding whether a business changed. They stay in the output. |
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. |
Additional output fields: headline (the business tagline), profilePageFullUrl (same value as profilePageUrl) and, with Scrape All Recommendations, a top-level recommendations list (same list as detailedInfo.recommendations). In Incremental mode these three fields are returned but not compared, so adding them does not mark existing businesses as UPDATED.
Dataset views
The dataset has five views: Business Overview, Detailed Business Info, Customer Recommendations (one row per recommendation), Business Images, and Changes (Incremental mode).
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
Search results and recommendations are loaded through Apify Proxy, which is on by default. Measured against hipages: search and recommendation requests work on the default Apify datacenter connection. Business profile pages are refused on some datacenter exits, so with Scrape Business Details on the actor rotates to a fresh exit and, if hipages keeps refusing, moves to a residential connection when your Apify plan includes one; otherwise those businesses are still returned, marked detailsSkipped. No separate proxy input is needed. Apify free plans do not include residential proxies. On a free plan the run prints this once and continues on the backup connection:
The selected connection is unavailable to this run. Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable.
When a backup connection serves data the log says Served over the backup connection (the default connection was unavailable). With Scrape Business Details on, profile enrichment may be skipped for some businesses; each such business is still returned, marked detailsSkipped or detailedInfo.error, and the core search fields are unaffected.
The run ends as failed, never as an empty result, when no page can be loaded at all. The status message then reads one of:
- The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required.
- No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested HiPages pages.
- Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search. Please try again later.
FAQ
How much does it cost?
Billing is pay per event: one start event per run and one result event per business record returned. Optional profile details and recommendations do not add a separate line item beyond the record itself, and unchanged or expired businesses in Incremental mode are only billed when you ask for them. 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:
| ๐ Yellow Pages AU Scrape business listings from Yellow Pages Australia by type and location. Get names... | ๐ Yellow Pages NZ Scrapes business listings from Yellow.co.nz (New Zealand Yellow Pages). Extract... |
| ๐ PagesJaunes FR Scrapes business listings from PagesJaunes.fr (French Yellow Pages). Extract... | ๐ TrueLocal AU Directory Listings & Reviews Scraper Scrape TrueLocal.com.au business listings by keyword, location, or URL. Extract names... |
| ๐ Real Estate AU Agents Scraper Scrape Australian real estate agent and agency profiles by suburb or profile URLs... | ๐ ProductReview.com.au Scraper Scrape ProductReview.com.au products, businesses and customer reviews. Search by... |
๐ Browse all abotapi scrapers
๐ฌ Support
- ๐ 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 contact@abotapi.com.
- โญ Enjoying it? A quick review on the actor page helps other users find it.