Hipages Business Extractor helps you find top-rated local tradespeople and export their business profiles into clean, structured data you can sort, filter, and analyze. It turns category + location searches into actionable results—ideal for building lead lists, auditing local service markets, or comparing providers by rating and recommendations. If you need hipages business data at scale, this project keeps the workflow simple and consistent.
Created by Bitbash, built to showcase our approach to Scraping and Automation!
If you are looking for hipages-business-extractor you've just found your team — Let’s Chat. 👆👆
This project collects business listings for specific trade categories in a target area and returns profile-level details such as contact info, service coverage, license flags, ratings, and customer recommendations.
It solves the problem of manually browsing dozens of listings, copying details by hand, and losing track of which providers are actually best-rated.
It’s built for:
- marketers and growth teams building targeted outreach lists
- homeowners and researchers comparing local contractors
- analysts who want filterable data for reporting and benchmarking
- Searches across a wide range of service categories (e.g., plumbers, electricians, builders, air conditioning)
- Targets specific suburbs/areas using postcodes for localized results
- Supports sorting by reputation signals like star rating, hired count, and recommendations
- Extracts business highlights, specialties, and available profile metadata for quick comparisons
- Designed for repeatable runs so datasets stay consistent across locations and categories
| Feature | Description |
|---|---|
| Category selection | Query specific service categories to focus results on the exact trade you need. |
| Location targeting | Use postcodes to discover businesses in a precise service area or suburb. |
| Smart sorting | Rank results by star rating, hired count, or total recommendations to surface top providers fast. |
| Profile enrichment | Collect contact details, service area, license/ABN flags, headline, highlights, and profile URLs. |
| Review extraction | Capture customer recommendation content and job postcodes when available. |
| Resilient runs | Retries transient failures and handles missing fields without breaking the dataset. |
| Consistent output | Produces flat, analysis-friendly JSON ready for spreadsheets, dashboards, or pipelines. |
| Field Name | Field Description |
|---|---|
| name | Business name displayed in the listing/profile. |
| hasLicense | Indicates whether the business claims to have a license (boolean/int flag). |
| hasValidAbn | Indicates whether a valid ABN is present (boolean/int flag). |
| serviceArea | The advertised service area/suburb coverage. |
| totalRecommendations | Total count of customer recommendations. |
| phone | Primary contact phone (when available). |
| mobile | Mobile number (when available). |
| headline | Short business headline or summary statement. |
| highlights | Key selling points and specialties as a list of strings. |
| recommendations.comment | Customer recommendation text content. |
| recommendations.jobPostcode | Postcode associated with the reviewed job (when provided). |
| recommendations.userName | Display name of the reviewer (when provided). |
| starRating.rating | Star rating score (e.g., 5). |
| starRating.totalHired | Number of hires attributed to the profile. |
| starRating.totalRatings | Count of rating entries behind the score. |
| profilePageFullUrl | Full URL to the business profile page. |
[
{
"name": "Frost Tech",
"hasLicense": 1,
"hasValidAbn": 1,
"serviceArea": "EAST HILLS",
"totalRecommendations": 4,
"phone": "0420616337",
"mobile": "0420616337",
"headline": "Professional local Air Conditioning business with over a decades experience.",
"highlights": [
"Quality Workmanship Guaranteed",
"Commercial & Residential",
"Competitive Quotes"
],
"recommendations": {
"comment": "Tradie best price and did extra services without charge. Easy to deal with too. His work was amazing. You cannot tell that someone changed the aircon unit. He left the place clean, treated everyone with respect and my agent is so impressed by his work. He's now my agent's preferred air con supplier. He also was on time and finish the work on time.",
"jobPostcode": 2017,
"userName": "Han"
},
"starRating": {
"rating": 5,
"totalHired": 4,
"totalRatings": 3
},
"profilePageFullUrl": "https://hipages.com.au/connect/frosttech2"
}
]
Hipages Business Extractor/
├── src/
│ ├── main.py
│ ├── runner.py
│ ├── cli.py
│ ├── core/
│ │ ├── fetcher.py
│ │ ├── parser.py
│ │ ├── normalizer.py
│ │ ├── validators.py
│ │ └── errors.py
│ ├── extractors/
│ │ ├── categories.py
│ │ ├── listings.py
│ │ ├── profiles.py
│ │ └── reviews.py
│ ├── outputs/
│ │ ├── schema.py
│ │ ├── exporters.py
│ │ └── writers.py
│ ├── config/
│ │ ├── settings.py
│ │ └── settings.example.json
│ └── utils/
│ ├── logging.py
│ ├── retry.py
│ └── text.py
├── data/
│ ├── inputs.sample.json
│ └── sample.output.json
├── tests/
│ ├── test_parser.py
│ ├── test_normalizer.py
│ └── test_validators.py
├── scripts/
│ └── run_local.sh
├── .env.example
├── .gitignore
├── pyproject.toml
├── requirements.txt
├── LICENSE
└── README.md
- [Homeowners] use it to shortlist top-rated tradespeople by postcode, so they can hire faster with more confidence.
- [Marketing teams] use it to build category-specific lead lists, so they can run localized outreach with higher relevance.
- [Competitive analysts] use it to benchmark providers across suburbs, so they can spot market gaps and positioning opportunities.
- [Operations teams] use it to standardize supplier discovery, so they can create repeatable vendor sourcing workflows.
- [Researchers] use it to study service quality signals, so they can analyze ratings vs. recommendations at scale.
You provide:
- a category name (e.g., "Air Conditioning")
- a postcode (e.g., 2213)
- a sort mode (e.g., "Total Hired")
If a category or postcode is invalid, the runner falls back to a safe default configuration so the run still completes.
Results are capped to a maximum of 110 businesses per search. Some profiles may have incomplete details depending on what the business has publicly provided, so fields like phone, license flags, or highlights may be missing for certain listings.
The system retries network failures with backoff, logs structured error details, and continues processing where possible. If the upstream response changes or certain fields disappear, the normalizer will keep output consistent by filling missing values safely.
Yes. The input loader supports batching so you can supply multiple category/postcode pairs and produce a single unified dataset, while keeping each record tagged with the originating query parameters for traceability.
Primary Metric: Average extraction speed of ~35–70 businesses/minute per category+postcode query (varies by sorting mode and profile completeness).
Reliability Metric: 96–99% successful runs on stable connections with automatic retries handling transient failures.
Efficiency Metric: Typical memory usage stays under ~250MB for a full 110-result run, with incremental writes to avoid large in-memory payloads.
Quality Metric: 90–98% field completeness for core profile fields (name, serviceArea, rating signals, profile URL), with optional contact/recommendation fields varying by profile availability.
