HiPages Scraper at a glance
HiPages Scraper is a ready-to-run Apify actor from abotapi for collecting lead generation data. Its documented output includes business name, change type (incremental mode), phone, mobile and service area, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Lead Generation, Automation, Developer Tools
- Pricing
- $2.20 per 1,000 results (Free plan), from $1.50 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 21 options
- Run success
- 98.9% of completed public runs in the last 30 days
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.
What HiPages Scraper can do
- 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.
Choose what to collect
These inputs let you configure HiPages Scraper - Business Listings, Contacts & Reviews. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Choose search mode to enter category and location, or URL mode to paste HiPages search URLs. |
categorystring | Service category to search for. Used in search mode. |
statestring | Australian state code. Used in search mode. |
suburbstring | Suburb name. Used in search mode. Examples: Clayton, Glen Waverley, or 'Clayton VIC 3168' (the state in the text is used when State is not set). |
postcodeinteger | Optional Australian postcode, e.g. 2213. Used in search mode: when set, results are filtered by postcode and State/Suburb are ignored. |
sortBystring | Optional. Sorts the collected businesses best-first by Rating, Total Hired or Total Recommendations. The site returns its own order, so up to 1000 businesses of the search are collected and sorted here before Max Businesses is applied. Empty keeps the site order. |
urlsarray | Paste HiPages search result URLs: a suburb (https://hipages.com.au/find/excavation/vic/clayton), a whole state (https://hipages.com.au/find/excavation/vic) or a whole category across Australia (https://hipages.com.au/find/excavation). A business profile page is not a search URL and is not supported. A ?page= parameter is ignored (results start from the first page). Used only in URL mode. |
Show 14 more inputs
| Input | What it controls |
|---|---|
maxBusinessesinteger | Maximum number of businesses to scrape |
pageLimitinteger | Number of results per API request (max 10) |
scrapeDetailsboolean | If enabled, scrape detailed information from each business profile page (slower but more comprehensive) Each delivered business whose profile page is read is charged as one detail-page event on top of the per-result charge; businesses whose profile page is refused, and businesses incremental mode suppresses as unchanged, are not charged. |
scrapeRecommendationsboolean | If enabled (requires scrapeDetails to be true), extract all customer recommendations and reviews from each business profile page The recommendations read folds into the per-business detail-page event unit (see Scrape Business Details). |
maxRecommendationsinteger | Used with Scrape All Recommendations: the most recommendations returned per business, newest first. Higher values take longer. |
resumeFromRunIdstring | Optional. ID of a previous run of this actor (or a dataset ID) to continue ONE interrupted crawl. Businesses already in that dataset are skipped, so this run returns only NEW businesses (a delta). Combine both runs' datasets for the full set. For a search you run on a RECURRING schedule, use Incremental mode below instead, it remembers state itself so you don't paste an id every time. |
incrementalModeboolean | For a search you run repeatedly on a schedule. When ON, the actor remembers the previous run of the SAME search itself (see Resume above instead for a one-off continuation by id) and adds changeType (NEW/UPDATED/REAPPEARED/EXPIRED/UNCHANGED) + changedFields/firstSeenAt/lastSeenAt to every business. A business counts as UPDATED when any returned field changes (name, phone, service area, star rating, recommendation counts and latest recommendation, gallery, licence flags, distance, and the detailed info / recommendations when those are scraped). The search position is excluded because it shifts whenever other businesses move, and any fields you list under 'Ignore fields when detecting changes' are excluded too; excluded fields still appear in the output but never trigger UPDATED or appear in changedFields. UNCHANGED businesses are neither pushed nor billed unless 'Emit unchanged businesses' is on. Off by default, existing schedules and output are unaffected. |
stateKeystring | Only used when Incremental mode is on. Name this monitoring campaign so its baseline is tracked separately from any other search. Leave empty to auto-derive a key from category/state/suburb/postcode and detail settings, two differently-configured searches never share a baseline either way. |
emitUnchangedboolean | Only used when Incremental mode is on. When ON, businesses with no change since the last run are still pushed to the dataset (changeType=UNCHANGED) and billed like any other row. Off by default, so a recurring run returns and bills only what actually changed. |
emitExpiredboolean | Only used when Incremental mode is on. When ON, and this run scans the tracked search to completion, businesses that were previously tracked but no longer appear are pushed once with changeType=EXPIRED (and billed). Off by default. Never fires on a capped, resumed, or otherwise partial run. |
ignoreFieldsForChangesarray | Only used when Incremental mode is on. Field names to leave out when deciding whether a business changed, so noisy fields do not turn a business into UPDATED. Supports nested paths with dots and wildcards, for example phone, starRating.totalRatings, detailedInfo. or searchContext.. Ignored fields are still returned in the output, just not compared and never listed in changedFields. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
nameBusiness Name (text)changeTypeChange Type (Incremental mode) (text)phonePhone (text)mobileMobile (text)serviceAreaService Area (text)starRating.ratingRating (number)starRating.totalHiredTimes Hired (number)starRating.totalRatingsTotal Ratings (number)totalRecommendationsRecommendations (number)profilePageUrlProfile (link)searchContext.categoryCategory (text)searchContext.stateState (text)Show 23 more fields
searchContext.suburbSuburb (text)changedFieldsChanged Fields (Incremental mode) (json)firstSeenAtFirst Seen At (Incremental mode) (date)lastSeenAtLast Seen At (Incremental mode) (date)detailFetcheddetailFetcheddetailedInfo.businessNameFull Name (text)detailedInfo.abnABN (text)detailedInfo.memberSinceMember Since (text)detailedInfo.descriptionDescription (text)detailedInfo.servicesServices (json)detailedInfo.totalRecommendationsTotal Recommendations (number)recommendations.dateDate (text)recommendations.commentComment (text)recommendations.categoryCategory (text)recommendations.consumerDisplayNameReviewer (text)recommendations.isVerifiedVerified (boolean)recommendations.isHiredHired (boolean)recommendations.suburbNameSuburb (text)recommendations.stateNameState (text)thumbnailUrlThumbnail (image)bannerUrlBanner (image)galleryImagesGallery (json)detailedInfo.galleryImagesGallery (Detailed) (json)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"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"
}
}Ways to use this data
- 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.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does HiPages Scraper return?
The documented output for HiPages Scraper includes business name, change type (incremental mode), phone, mobile, service area, rating, times hired and total ratings. Availability of each field depends on the source page and the selected mode.
How much does HiPages Scraper cost?
It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
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.
