# HomeStars Scraper: Canadian Contractor Leads (`getascraper/homestars-scraper`) Actor

Find and download Canadian contractor profiles from HomeStars.com by city and trade. Get company name, HomeStars score, star rating, review count, verification status, city, province, and profile link. $3.49 per 1,000 records.

- **URL**: https://apify.com/getascraper/homestars-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Lead generation, Developer tools, Automation
- **Features:** Limited permissions
- **Stats:** 6 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.95 / 1,000 leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🍁 HomeStars Scraper: Canadian Contractor Leads

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#FCF2F2;border:1px solid #F2C4C0;border-top:4px solid #D52B1E;color:#1C1917;border-radius:10px 10px 0 0">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Every contractor in a Canadian city and trade, in one spreadsheet.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Enter a city and a trade like plumbing or roofing. Get HomeStars company names, scores, star ratings, review counts, and profile links.</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F2C4C0;border-top:none;vertical-align:top;color:#1C1917;border-radius:0 0 0 10px">
<span style="font-size:15px;font-weight:800;color:#A8221A">🏙️ Any city, any trade</span><br>
<span style="font-size:12px;color:#57534E">Search Toronto plumbers or Calgary roofers with two fields.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F2C4C0;border-top:none;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#A8221A">⭐ Reputation at a glance</span><br>
<span style="font-size:12px;color:#57534E">HomeStars score, star rating, and review count on every row.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F2C4C0;border-top:none;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#A8221A">✅ Verification status</span><br>
<span style="font-size:12px;color:#57534E">See which contractors carry the HomeStars Verified tier.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F2C4C0;border-top:none;border-left:none;vertical-align:top;color:#1C1917;border-radius:0 0 10px 0">
<span style="font-size:15px;font-weight:800;color:#A8221A">📋 Spreadsheet-ready rows</span><br>
<span style="font-size:12px;color:#57534E">Flat fields that open cleanly in Excel or Google Sheets.</span>
</td>
</tr>
</table>

**Get verified contractor profiles from Canada's largest home services directory, ready to download as a spreadsheet.** Search by city and trade category to instantly build a targeted list of plumbers, roofers, electricians, and 200+ other trades across Toronto, Vancouver, Calgary, and every Canadian city. The first 50 results of every run are free, with pricing set at $3.49 per 1,000 results.

***

### 💡 Why use HomeStars Scraper

- **Build outbound lead lists**: Get company names, ratings, review counts, and profile links for every contractor in any city and trade. Feed directly into your CRM or cold outreach tool.
- **Reputation research**: See the HomeStars score and star rating side by side. Spot contractors with hundreds of reviews to benchmark against, or those with thin reputation who need your services.
- **Sales prospecting by trade**: Need every plumber in Calgary or every roofer in Vancouver? Enter the city and category and your list is ready in seconds.
- **Market sizing**: Count how many verified contractors operate in any trade and region before launching a new service.
- **Competitive analysis**: Pull every contractor in your category and city, then compare ratings, verification status, and review volume in a spreadsheet.

***

### 🚀 How to use HomeStars Scraper

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:16px 14px;width:33%;background:#FCF2F2;border:1px solid #F2C4C0;border-radius:10px 0 0 10px;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#D52B1E;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Set your location</span><br>
<span style="font-size:12px;color:#57534E">Enter the city you want, for example toronto or calgary.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FCF2F2;border:1px solid #F2C4C0;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#D52B1E;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick a trade</span><br>
<span style="font-size:12px;color:#57534E">Enter a category such as plumbing, roofing, or handymen.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FCF2F2;border:1px solid #F2C4C0;border-left:none;border-radius:0 10px 10px 0;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#D52B1E;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Download your list</span><br>
<span style="font-size:12px;color:#57534E">Export contractors as Excel, CSV, or JSON from the Output tab.</span>
</td>
</tr>
</table>

1. **Set your location**: Enter the city name you want to target, for example: `toronto`, `vancouver`, or `calgary`.
2. **Set your category**: Enter the trade or service type, for example: `plumbing`, `roofing`, or `handymen`.
3. **Click Start**: The scraper finds every matching contractor and collects their profile details.
4. **Download your results**: Export as Excel, CSV, JSON, or Google Sheets from the Output tab.

***

### ⚙️ Input

| Field | Type | Required | Description |
| --- | --- | :---: | --- |
| `location` | string | Yes | City or region to search, for example: `toronto`, `calgary`, `vancouver`. |
| `category` | string | Yes | Trade or service category, for example: `plumbing`, `roofing`, `handymen`. |
| `maxItems` | integer | No | Maximum number of contractor records to collect. Default: 100. |
| `proxyConfiguration` | object | No | Connection settings to ensure unblocked data collection. |

***

### 📦 Output

Each row in your dataset is one contractor profile. All fields are flat with no nested data, so the file opens cleanly in any spreadsheet program.

Here is a realistic example of an output row:

```json
{
  "query_location": "toronto",
  "query_category": "plumbing",
  "company_name": "New Canadian Drain & Plumbing Ltd",
  "profile_url": "https://www.homestars.com/profile/217845-new-canadian-drain-plumbing-ltd",
  "logo_url": "https://www.homestars.com/images/sp/thumbnail_medium/f0b65181.jpg",
  "verification_status": "Verified",
  "homestars_score": 9.4,
  "overall_rating": 4.7,
  "reviews_count": 1259,
  "city": "Toronto",
  "province": "ON",
  "business_description": "We specialize in drain installation, repairs, clearing clogs, and basement waterproofing.",
  "scraped_at": "2026-06-21T10:00:00.000Z"
}
```

***

### 📊 Data table

| Field | Type | Description |
| --- | :---: | --- |
| `query_location` | string | The city or region you searched. |
| `query_category` | string | The trade or service category you searched. |
| `company_name` | string | Official business name of the contractor. |
| `profile_url` | string | Direct link to the contractor's HomeStars profile page. |
| `logo_url` | string | Profile logo image URL. |
| `verification_status` | string | HomeStars verification tier: Verified or Standard. |
| `homestars_score` | number | HomeStars reputation score out of 10. |
| `overall_rating` | number | Average star rating out of 5. |
| `reviews_count` | number | Total number of published customer reviews. |
| `city` | string | City where the contractor is based. |
| `province` | string | Canadian province code, for example: ON, BC, AB. |
| `business_description` | string | Short description of the business and its services. |
| `scraped_at` | string | Timestamp of when this record was collected. |

***

### 💰 Pricing

**$3.49 per 1,000 contractors. The first 50 results of every run are completely free.** No monthly subscriptions and no minimum commits.

The scraper collects data without launching a browser, keeping compute costs near zero. A typical run of 100 contractors completes in under 5 seconds. You only pay for the results you collect.

***

### ⭐ Enjoying HomeStars Scraper?

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:20px 24px 14px;background:#FCF2F2;border:1px solid #FCF2F2;border-left:5px solid #D52B1E;border-radius:10px 10px 0 0;color:#1C1917">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Build a targeted list of verified plumbers, roofers, or electricians in any Canadian city in seconds.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other sales teams and researchers find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#D52B1E;border:1px solid #D52B1E;border-left:5px solid #D52B1E;border-top:none;border-radius:0 0 10px 10px;text-align:center;color:#FFFFFF">
<a href="https://apify.com/getascraper/homestars-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

***

### ✨ Tips and optimization

- **Use lowercase city names**: Enter city names in lowercase exactly as HomeStars uses them, for example: `toronto` not `Toronto, ON`.
- **Run one category at a time**: If you need plumbers and roofers, run two separate jobs and merge the files afterwards.
- **Schedule weekly runs**: Set up a schedule in the Apify Console to refresh your contractor list automatically. New businesses join HomeStars regularly.
- **Filter by verification after download**: Filter the `verification_status` column to keep only Verified contractors for higher-quality outreach.

***

### ❓ FAQ

**Is it legal to collect this data?**
This scraper collects publicly visible business information that anyone can see on HomeStars.com without logging in. You are responsible for ensuring your use complies with HomeStars' terms of service and applicable laws.

**Why are some fields empty?**
Not every contractor fills in all details on their HomeStars profile. Fields such as `business_description` and `logo_url` may be empty if the contractor has not added them.

**Can I scrape multiple cities at once?**
Run one job per city and combine the exports in your spreadsheet. This gives you a clear record of which city each batch came from.

**How current is the data?**
The scraper pulls live data directly from HomeStars.com at the time you run it. Schedule regular runs to keep your list fresh.

***

### 🛡️ Disclaimers and support

- **Disclaimer**: This scraper retrieves publicly available business listings from HomeStars.com. It is not affiliated with, endorsed by, or sponsored by HomeStars. Ensure your use complies with applicable laws and the site's terms of service.
- **Support**: For bug reports, missing fields, or feature requests, open a ticket under the **Issues** tab.

### 🔗 Other actors

- [FastExpert Scraper](https://apify.com/getascraper/fastexpert-scraper) ↗ - collects real estate agent profiles and performance data.
- [Serchen Scraper](https://apify.com/getascraper/serchen-scraper) ↗ - pulls B2B software reviews and directory leads.
- [CA State Bar Attorney Scraper](https://apify.com/getascraper/ca-state-bar-attorney-scraper) ↗ - extracts licensed California attorney profiles and standing status.
- [BusinessesForSale Scraper](https://apify.com/getascraper/businessesforsale-scraper) ↗ - collects business-for-sale listings for acquisition and market research.
- [Google Maps List Scraper](https://apify.com/getascraper/google-maps-list-scraper) ↗ - extracts contact and location details from public Google Maps shared lists.

# Actor input Schema

## `location` (type: `string`):

The city or region to scrape contractors from (for example: toronto, vancouver, calgary).

## `category` (type: `string`):

The trade or service category to search (for example: plumbing, roofing, handymen).

## `maxItems` (type: `integer`):

The maximum number of contractors to retrieve.

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

Enable proxies to avoid being blocked by regional security firewalls.

## Actor input object example

```json
{
  "location": "toronto",
  "category": "plumbing",
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "location": "toronto",
    "category": "plumbing",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/homestars-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 = {
    "location": "toronto",
    "category": "plumbing",
    "proxyConfiguration": { "useApifyProxy": True },
}

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

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

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

```

## CLI example

```bash
echo '{
  "location": "toronto",
  "category": "plumbing",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/homestars-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/homestars-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/J6ntjTdrdEymyx3nh/builds/b2Ch5nvl8EHp52i2W/openapi.json
