# HomeStars Scraper | Canadian Contractor Phones (`lentic_clockss/homestars-scraper`) Actor

Scrape HomeStars.com city and trade directories plus public contractor profiles. Export company names, guest-visible phones, websites, ratings, and city. Guest pages only — no Get in touch. CSV, Excel, or JSON.

- **URL**: https://apify.com/lentic\_clockss/homestars-scraper.md
- **Developed by:** [kane liu](https://apify.com/lentic_clockss) (community)
- **Categories:** Lead generation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.20 / 1,000 results

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

**HomeStars scraper** for public [HomeStars.com](https://www.homestars.com/) Canadian pages. Extract **HVAC contractors, plumbers, electricians, roofers, and renovation companies** from city directories, trade lists, and public pro profiles. Export **company names, public phones, websites, ratings, and city** to **CSV, Excel, or JSON**. Guest HTML / `__NEXT_DATA__` only.

This Actor is built for no-code operators first: pick a **city slug** (for example `edmonton` or `calgary-alberta`), set `maxResults`, click **Start**, and download the Dataset. Developers can call the same Actor from the Apify API, Make, n8n, Zapier, LangChain, or a schedule.

> Thin Apify Actor + managed worker. The worker owns **Canadian residential egress**. You do not send cookies, Get in touch POSTs, or `proxyUrl`. This Actor does **not** hit `/search` (that path is **404**). Product host is **`www.homestars.com`** — `homestars.ca` has no DNS.

***

### What is HomeStars Scraper?

**HomeStars Scraper** is a HomeStars.com data extraction tool for **Canadian home-service leads**. It collects **guest-visible listings and contact fields** that a logged-out visitor can already see on Canada's largest home-services review platform.

Give it a city slug, a trade (electrician, HVAC / air-conditioning repair), or a live `/profile/` URL. The Actor:

1. Validates the input (`searchType`, `city`, optional `cluster` / `trade`)
2. Calls a managed worker that fetches HomeStars `__NEXT_DATA__` / `_next/data` JSON
3. Parses opened surfaces into Dataset rows (`name`, phones, emails, address, person/org)
4. Enriches list cards by opening `/profile/` (merchant **phones are already in the page JSON**)
5. Dedupes by **slug** and caps output with `maxResults` / `maxPages`
6. Writes `INPUT_ECHO`, `RUN_SUMMARY`, and (on failure) `ERROR_SUMMARY` to the key-value store

Typical users:

- **B2B sales** selling to Canadian trades (SaaS, insurance, fleet, financing, marketing)
- **Lead-gen** building HVAC / electrician / plumber lists by metro
- **Recruiting** for skilled trades
- **Market research** on ratings and review density by city

#### What can this HomeStars scraper do?

| Mode (`searchType`) | What you scrape | Required input |
| --- | --- | --- |
| `city-list` | `/find-professionals/{city}` | `city` (`calgary-alberta`, `edmonton`, `montreal`). Pagination is **`?page=`** |
| `trade-city` | `/{cluster}/{trade}-pros/{city}` | `cluster` + `trade` + `city` |
| `national-trade` | `/{cluster}/{trade}-pros` | `cluster` + `trade` (e.g. `electricity` / `electrician`, `air-conditioning` / `air-conditioning-repair`) |
| `profile` | `/profile/{numeric}-{slug}` | `detailUrls` or `profileSlug` |
| `all-cities` | Merge `/all-cities` + hub + home | none (hub omits some QC slugs like `montreal` — those still work as `city-list`) |
| `all-trades` | Harvest live `/{cluster}/{trade}-pros` pairs | none |
| `privacy` | HomeStars Inc. street + privacy officer email | none |
| `about` / `home` | About has no merchant leads; home has platform support tel | none |

`enrichDetails` defaults **on**. City/trade **list cards have no merchant phone** — the worker must open the public profile.

#### Honest limits (read this before you buy)

- **No keyword `/search`.** `https://www.homestars.com/search` is 404. The homepage box is a job funnel, not a SERP.
- **No Get in touch / `/send-request-to`.** That path is a write/lead form, not a public read.
- **Merchant email and street are usually absent** on guest profiles. Rows still include `leadAbsences`. Platform `service@homestars.com` / `877-549-0757` are **not** shop contacts.
- **Person names** only when Ask-a-pro / a reply shows a **full name**. Review `firstName` is not a merchant contact.
- **`/all-cities` is incomplete.** `montreal` / `gatineau` still work as `city-list`.
- **City slugs are not always the short name.** Bare `calgary` is a hub with 0 cards; the live list is `calgary-alberta`.
- **Slug prefix ≠ `ServicePro.id`.** Dedup by the full `/profile/` slug.
- **Do not guess trade URLs.** Invented paths such as `/heating/heating-pros` redirect to the hub. Use `all-trades` or a live pair.

***

### What HomeStars data can I extract?

| Field | What you get |
| --- | --- |
| `name` / `org.name` | Company name on the card / profile |
| `kind` | `list`, `profile`, `privacy` |
| `url` | Live `https://www.homestars.com/profile/…` |
| `phones` | `{ value, type, e164 }` from `serviceProPublicProfile.phone` |
| `emails` | Usually empty + `leadAbsences` on merchants; privacy officer on `privacy` |
| `address` | City / locality on profiles; **street** only on the HomeStars Inc. privacy page |
| `web.website` | Merchant site from `links[WEBSITE]` |
| `rating` / `reviewCount` | Public ratings when present |
| `listingTier` | `premium` vs organic on lists |
| `workArea.localities` | Service area cities on profiles |
| `leadSource` / `leadReveal` / `leadAbsences` | How the contact was (or was not) obtained |

**You do not get:** quote-request inboxes, logged-in-only phones, invented emails, or sitemap-wide national dumps in one click (cap with `maxResults`).

Export scraped HomeStars data as **JSON, CSV, Excel, or JSONL**. Schedule runs, monitor them, or pull results through the **Apify Dataset API**.

***

### How does this compare to other HomeStars scrapers?

Other Store Actors also scrape HomeStars. This one is a **dedicated `www.homestars.com` guest parser** with **pay-per-event** pricing and **platform usage included**.

| Need | This Actor | Typical other HomeStars Actor |
| --- | --- | --- |
| Product host | **`www.homestars.com`** (`homestars.ca` has no DNS) | Often marketed as HomeStars.ca |
| Keyword search | **Not available** (`/search` is 404) | Some crawl sitemaps instead |
| Public profile phone | **Yes** (in NEXT\_DATA; E.164) | Yes |
| Merchant email | **Usually not on the page** (`leadAbsences`) | Usually not (behind Get in touch) |
| Merchant street | **Usually not on the page** | Sometimes in a long bio |
| Social / badges / full review text | Not the primary output | Some extract badges / social |
| Pricing | **$3.00 / 1,000 results** (FREE/BRONZE), start **$0.005** | Often extra per-profile events + **you pay proxies** |
| Platform usage | **Included** (User pays platform usage costs = **No**) | Often billed separately |
| Proxies | Worker-owned **CA residential** — do not send `proxyUrl` | You typically configure Apify Proxy |

If you need **US Angi / Angie's List** contractors, use [Angi Scraper](https://apify.com/lentic_clockss/angi-scraper). If you need **Google Maps** places, use [Google Maps Scraper](https://apify.com/lentic_clockss/google-maps-scraper). For a generic protected URL, use [Stealth Web Scraper](https://apify.com/lentic_clockss/stealth-web-scraper) only when no dedicated Actor exists.

***

### More Actors like this

Need US Angi contractors, Care.com caregivers, Google Maps local businesses, or a generic protected-page scrape? Use a **dedicated Actor** below for structured fields. Use **this** Actor for **HomeStars.com** Canadian HVAC, electrician, plumber, and renovation directories plus public profile phones.

#### Similar home-service & local-lead scrapers

- [Angi Scraper](https://apify.com/lentic_clockss/angi-scraper) — Angi.com / Angie's List US contractors, nearme streets
- [Care.com Scraper](https://apify.com/lentic_clockss/care-scraper) — US caregivers, day care, jobs, About/contact phones
- [Google Maps Scraper](https://apify.com/lentic_clockss/google-maps-scraper) — local businesses, ratings, Maps places
- [Phone Number Intelligence](https://apify.com/lentic_clockss/phone-number-intelligence) — validate / enrich phones from any list
- [Email Risk Validator](https://apify.com/lentic_clockss/email-risk-validator) — score emails before you import a CRM
- [Stealth Web Scraper](https://apify.com/lentic_clockss/stealth-web-scraper) — generic protected pages (prefer a dedicated Actor when one exists)

#### Prefer a dedicated site scraper?

If your target has a specialized Actor below, use that first — usually cheaper and more structured than a generic URL scrape.

**Local services & lead gen**

- [Angi Scraper](https://apify.com/lentic_clockss/angi-scraper)
- [Care.com Scraper](https://apify.com/lentic_clockss/care-scraper)
- [HomeStars Scraper](https://apify.com/lentic_clockss/homestars-scraper)
- [Google Maps Scraper](https://apify.com/lentic_clockss/google-maps-scraper)

**Real Estate**

- [Zoopla UK Scraper](https://apify.com/lentic_clockss/zoopla-scraper)
- [Rightmove Scraper](https://apify.com/lentic_clockss/rightmove-property-scraper)
- [Zillow & Zumper Scraper](https://apify.com/lentic_clockss/us-real-estate-scraper)
- [Realtor.com Scraper](https://apify.com/lentic_clockss/realtor-com-scraper)
- [Apartments.com Rental Scraper](https://apify.com/lentic_clockss/apartments-com-rental-scraper)
- [Idealista Scraper](https://apify.com/lentic_clockss/idealista-scraper)
- [realestate.com.au Scraper](https://apify.com/lentic_clockss/realestate-com-au-scraper)
- [Properati LATAM Scraper](https://apify.com/lentic_clockss/properati-scraper)

**Jobs & Freelance**

- [LinkedIn Jobs Scraper](https://apify.com/lentic_clockss/linkedin-jobs-scraper)
- [Indeed Jobs Scraper](https://apify.com/lentic_clockss/indeed-jobs-scraper)
- [Upwork Jobs Scraper](https://apify.com/lentic_clockss/upwork-jobs-scraper)
- [Glassdoor Scraper](https://apify.com/lentic_clockss/glassdoor-scraper)
- [Fiverr Gigs Scraper](https://apify.com/lentic_clockss/fiverr-programming-tech-gigs-scraper)
- [Bayt Jobs Scraper](https://apify.com/lentic_clockss/bayt-scraper)

**E-commerce**

- [Walmart Product Scraper](https://apify.com/lentic_clockss/walmart-scraper)
- [Amazon Search Scraper](https://apify.com/lentic_clockss/amazon-search-results-collector)
- [Shopee Search Scraper](https://apify.com/lentic_clockss/shopee-search-scraper)
- [Etsy Scraper](https://apify.com/lentic_clockss/etsy-scraper)
- [SHEIN Product Scraper](https://apify.com/lentic_clockss/shein-scraper)
- [Temu Product Scraper](https://apify.com/lentic_clockss/temu-scraper)
- [Target Product Scraper](https://apify.com/lentic_clockss/target-scraper)
- [Allegro Scraper](https://apify.com/lentic_clockss/allegro-scraper)

**Travel & Stays**

- [Booking.com Hotels Scraper](https://apify.com/lentic_clockss/booking-hotels-scraper)
- [Airbnb Listings Scraper](https://apify.com/lentic_clockss/airbnb-listings-scraper)
- [Expedia Scraper](https://apify.com/lentic_clockss/expedia-scraper)
- [TripAdvisor Scraper](https://apify.com/lentic_clockss/tripadvisor-scraper)

**Social & Content**

- [YouTube Research Scraper](https://apify.com/lentic_clockss/youtube-research-scraper)
- [TikTok Scraper](https://apify.com/lentic_clockss/tiktok-scraper)
- [Reddit Scraper](https://apify.com/lentic_clockss/reddit-scraper)
- [YouTube Shorts Scraper](https://apify.com/lentic_clockss/youtube-shorts-scraper)

**Ads Intelligence**

- [Facebook Ad Library Scraper](https://apify.com/lentic_clockss/facebook-ad-library-scraper)
- [TikTok Ads Scraper](https://apify.com/lentic_clockss/tiktok-ads-top-ads-actor)

**General tools**

- [Stealth Web Scraper](https://apify.com/lentic_clockss/stealth-web-scraper)
- [Email Risk Validator](https://apify.com/lentic_clockss/email-risk-validator)
- [Phone Number Intelligence](https://apify.com/lentic_clockss/phone-number-intelligence)

→ See the full catalog in [Related Actors](#related-actors) below, or browse [apify.com/lentic\_clockss](https://apify.com/lentic_clockss).

Need a **custom site** (listing + detail, your field list)? [Submit a custom scraper request](https://custom-scraper-intake-977720205770.us-central1.run.app/).

***

### How to scrape HomeStars.com (no code required)

1. Create a free [Apify](https://apify.com/) account
2. Open [HomeStars Scraper](https://apify.com/lentic_clockss/homestars-scraper)
3. Choose **searchType**: `city-list`, `trade-city`, `national-trade`, `profile`, `all-cities`, `all-trades`, or `privacy`
4. For a city directory, enter a live **city slug** (`edmonton`, `calgary-alberta`, `montreal`, `ottawa`, `winnipeg`)
5. For a trade, set **cluster** + **trade** (electrician = `electricity` / `electrician`; HVAC repair = `air-conditioning` / `air-conditioning-repair`)
6. Click **Start** and download the Dataset as JSON, CSV, Excel, or JSONL

Start with `maxResults: 3–5` to verify the city and trade, then scale up. Empty `{}` lists Calgary (`calgary-alberta`) so the platform auto-test succeeds — for real jobs, pass a fresh city or trade.

#### Scrape HomeStars contractors by city

**In plain English:** pick `city-list` + a city slug → get a table of HomeStars pros in that metro, then enrich public profile phones.

**You give:** `searchType=city-list`, `city=edmonton`, `maxResults=20`, `enrichDetails=true`.

#### Scrape electricians or HVAC nationally

**In plain English:** pick `national-trade` + a live cluster/trade pair. Do not invent `/heating/heating-pros`.

**You give:** `searchType=national-trade`, `cluster=electricity`, `trade=electrician`.

#### Scrape a trade in one city

**In plain English:** `trade-city` walks `/{cluster}/{trade}-pros/{city}` with `?page=` pagination.

**You give:** `searchType=trade-city`, `cluster=air-conditioning`, `trade=air-conditioning-repair`, `city=ottawa`.

#### Pull one public profile or HomeStars Inc. contact

**In plain English:** paste a live `https://www.homestars.com/profile/{id}-{slug}` URL into `detailUrls`. Use `privacy` for the company street + privacy-officer email (not a merchant inbox).

#### Feed AI agents and automations

**In plain English:** start the Actor from Make, n8n, Zapier, LangChain, or the Apify API → Dataset rows are structured JSON (`name`, `url`, `phones`, `address`, `leadAbsences`).

***

### How much does it cost to scrape HomeStars?

This Actor uses **pay-per-event** pricing. You are charged for:

| Event | Price |
| --- | --- |
| Actor Start (`apify-actor-start`) | **$0.005** per start |
| Result (`apify-default-dataset-item`) | **$3.00 / 1,000** results (**$0.003** each on FREE/BRONZE) |

**Platform usage costs are included** — you do **not** pay separate Apify compute/proxy usage for this Actor on top of the event prices above (**User pays platform usage costs = No**).

#### Volume discount tiers (per result)

| Tier | $/1,000 | per result |
| --- | ---: | ---: |
| FREE\* | $3.00 | $0.003 |
| BRONZE | $3.00 | $0.003 |
| SILVER | $2.60 | $0.0026 |
| GOLD | $2.20 | $0.0022 |
| PLATINUM | $2.00 | $0.002 |
| DIAMOND | $1.60 | $0.0016 |

\*FREE matches BRONZE for this Actor.

#### Example cost estimates (FREE/BRONZE)

| Results collected | Approx. event cost\* |
| --- | ---: |
| 100 | ~$0.31 |
| 1,000 | ~$3.01 |
| 10,000 | ~$30.01 |

\*Assumes one Actor start at default memory billing for start events, plus `$0.003` per Dataset item. Exact start billing can scale with allocated memory (one start event per GB, minimum one). Default memory is **1024 MB**.

Empty / failed runs that write **zero** default-dataset rows are not billed as results (you still pay Actor Start).

#### Free plan limits

On a **free Apify plan**, this Actor enforces developer limits of **10 runs** and **200 results per run**. Upgrade to a paid Apify plan for unlimited runs (event prices still apply).

#### Is scraping HomeStars free?

You can try the Actor on Apify's free plan subject to the run/result caps above. After that you pay per start and per Dataset row — not per compute unit.

***

### Input examples

#### City directory (Edmonton)

```json
{
  "searchType": "city-list",
  "city": "edmonton",
  "maxResults": 20,
  "enrichDetails": true
}
```

#### National electricians

```json
{
  "searchType": "national-trade",
  "cluster": "electricity",
  "trade": "electrician",
  "maxResults": 15,
  "maxPages": 1,
  "enrichDetails": true
}
```

#### HVAC repair in Ottawa

```json
{
  "searchType": "trade-city",
  "cluster": "air-conditioning",
  "trade": "air-conditioning-repair",
  "city": "ottawa",
  "maxResults": 10,
  "enrichDetails": true
}
```

#### Montreal city list (Quebec)

```json
{
  "searchType": "city-list",
  "city": "montreal",
  "maxResults": 10,
  "enrichDetails": true
}
```

#### HomeStars Inc. privacy / company contact

```json
{
  "searchType": "privacy"
}
```

***

### Output

Each Dataset row is a lead-shaped object: `name`, `kind`, `url`, `phones[]`, `emails[]`, `address` (`street`, `locality`, `region`, `postalCode`, `country`, `full`), `person`, `org`, `web.website`, `leadSource`, `leadReveal`, `leadAbsences`.

List rows without `enrichDetails` have **empty merchant phones** plus `leadAbsences` — that is expected, not a parse bug. Turn enrich on to open `/profile/` and collect `serviceProPublicProfile.phone`. Merchant **email and street** are usually still absent; do not treat platform support numbers as shop contacts.

Key-value store: `INPUT_ECHO`, `RUN_SUMMARY`, `ERROR_SUMMARY`.

***

### FAQ

#### Do I need a HomeStars account or API key?

No. This Actor reads **guest** `www.homestars.com` pages. You do not log in, and you do not pass a HomeStars developer key.

#### Can I get every contractor's email and street address?

Usually **no**. HomeStars hides merchant email behind **Get in touch**. Guest profiles typically expose **phone + website + city**, not a shop inbox or civic street. This Actor records that as `leadAbsences` instead of inventing fields. Use `privacy` only for HomeStars Inc. itself.

#### Why isn't there a search box / keyword mode?

`/search` and `/s` return **404**. The homepage "what do you need done?" box is a **quote funnel**, not a directory SERP. Use city lists, trade directories, or a live profile URL.

#### Which cities and trades are supported?

Any live directory slug on `www.homestars.com`. Examples that work: `edmonton`, `calgary-alberta`, `montreal`, `ottawa`, `winnipeg`, `hamilton`. Trade examples: `electricity` / `electrician`, `air-conditioning` / `air-conditioning-repair`. Run `all-trades` / `all-cities` to harvest live pairs (caps still apply). Bare `calgary` is a hub with **0 cards**.

#### Can I scrape HomeStars.ca or the UK site?

**No.** `homestars.ca` has no DNS. `m.homestars.com/` is 404. `homestars.co.uk` fails TLS. There is no French language switch. The product is **`www.homestars.com`**.

#### Why not Get in touch?

Submitting Get in touch is a **write** to HomeStars, not a public read. This Actor never POSTs `/send-request-to`.

#### Is scraping HomeStars legal?

This Actor collects publicly reachable guest pages. You are responsible for how you use the data (including Canadian privacy rules). This is an unofficial third-party tool. Follow [HomeStars' terms](https://www.homestars.com/) and your own compliance review.

#### Is this affiliated with HomeStars?

No.

#### Do I need to bring proxies?

No. Do not send `proxyUrl`. The worker provides **Canadian residential** egress.

#### What if a run returns 0 rows or a challenge page?

Retry with another opened city / trade, or use `searchType=privacy` to confirm the worker is healthy. Check `ERROR_SUMMARY` in the key-value store. Space large harvests — rapid sequential crawls can hit a challenge page. If a city returns the hub with 0 cards, try the province suffix (`calgary-alberta`).

#### Can I use it from Make, n8n, Zapier, or LangChain?

Yes. Actor ID `lentic_clockss/homestars-scraper`. See [Connect to your tools](#connect-to-your-tools).

***

### Input reference

| Parameter | Type | Description |
| --- | --- | --- |
| `searchType` | string | `city-list`, `trade-city`, `national-trade`, `profile`, `all-cities`, `all-trades`, `privacy`, `about`, `home`. `search` / `map` / `quote` / `login` are out of scope |
| `city` | string | Live city slug (`edmonton`, `calgary-alberta`, `montreal`). Not always the short name |
| `cluster` | string | URL first segment (`electricity`, `air-conditioning`) |
| `trade` | string | Trade **without** `-pros` (`electrician`, `air-conditioning-repair`) |
| `profileSlug` | string | Live `/profile/{numeric}-{name}` slug |
| `detailUrls` | array | Live `https://www.homestars.com/profile/…` URLs |
| `market` | string | `ca` (only opened market) |
| `enrichDetails` | boolean | Follow `/profile/` for phones (default on) |
| `maxResults` | integer | Cap Dataset rows (free plan ≤ 200; worker hard cap 200) |
| `maxPages` | integer | `?page=N` pages (worker hard cap 50) |
| `workerBaseUrl` | string | Optional HTTPS override. Production source of truth is Actor env |

Do **not** send `proxyUrl`, cookies, Get in touch payloads, or guessed `/search` URLs.

Full output schema is on the Dataset tab. Key-value store: `INPUT_ECHO`, `RUN_SUMMARY`, `ERROR_SUMMARY`.

***

### Connect to your tools

| Platform | How to connect |
| --- | --- |
| Make.com | Search "Apify" → "Run Actor" → Actor ID `lentic_clockss/homestars-scraper` |
| n8n | Add Apify node → "Run Actor" → same Actor ID |
| Zapier | Apify integration → "Run Actor" |
| LangChain | `ApifyActorsTool("lentic_clockss/homestars-scraper")` |
| Python / Node.js | Apify SDK or direct HTTPS call |

#### API call example

```bash
curl "https://api.apify.com/v2/acts/lentic_clockss~homestars-scraper/runs" \
  -X POST \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchType":"city-list","city":"edmonton","maxResults":10,"enrichDetails":true}'
```

Results come back in JSON via the Apify Dataset API:

```text
GET https://api.apify.com/v2/datasets/{datasetId}/items?format=json
```

***

### Related Actors

All public Actors from [lentic\_clockss](https://apify.com/lentic_clockss). Click a name to open the Store detail page.

#### Local services & lead gen

- [Angi Scraper](https://apify.com/lentic_clockss/angi-scraper)
- [Care.com Scraper](https://apify.com/lentic_clockss/care-scraper)
- [HomeStars Scraper](https://apify.com/lentic_clockss/homestars-scraper)
- [Google Maps Scraper](https://apify.com/lentic_clockss/google-maps-scraper)
- [Phone Number Intelligence](https://apify.com/lentic_clockss/phone-number-intelligence)
- [Email Risk Validator](https://apify.com/lentic_clockss/email-risk-validator)

#### Developer / Open source / AI

- [Hugging Face Scraper](https://apify.com/lentic_clockss/huggingface-scraper)
- [GitHub Scraper](https://apify.com/lentic_clockss/github-scraper)
- [Apple App Store Scraper](https://apify.com/lentic_clockss/apple-app-store-scraper)
- [Hacker News Scraper](https://apify.com/lentic_clockss/hacker-news-scraper)
- [Stealth Web Scraper](https://apify.com/lentic_clockss/stealth-web-scraper)

#### Jobs & Freelance

- [LinkedIn Jobs Scraper](https://apify.com/lentic_clockss/linkedin-jobs-scraper)
- [Bayt Jobs Scraper](https://apify.com/lentic_clockss/bayt-scraper)
- [Fiverr Gigs Scraper](https://apify.com/lentic_clockss/fiverr-programming-tech-gigs-scraper)
- [Freelancer.com Scraper](https://apify.com/lentic_clockss/freelancer-scraper)
- [Glassdoor Scraper](https://apify.com/lentic_clockss/glassdoor-scraper)
- [Himalayas Jobs Scraper](https://apify.com/lentic_clockss/himalayas-jobs-scraper)
- [Indeed Jobs Scraper](https://apify.com/lentic_clockss/indeed-jobs-scraper)
- [Jobicy Remote Jobs Scraper](https://apify.com/lentic_clockss/jobicy-remote-jobs-scraper)
- [RemoteOK Jobs Scraper](https://apify.com/lentic_clockss/remoteok-all-jobs-scraper)
- [SEEK Jobs Scraper](https://apify.com/lentic_clockss/seek-scraper)
- [Upwork Jobs Scraper](https://apify.com/lentic_clockss/upwork-jobs-scraper)

#### Real Estate

- [Zoopla UK Scraper](https://apify.com/lentic_clockss/zoopla-scraper)
- [Zillow & Zumper Scraper](https://apify.com/lentic_clockss/us-real-estate-scraper)
- [Realtor.com Scraper](https://apify.com/lentic_clockss/realtor-com-scraper)
- [99.co Scraper](https://apify.com/lentic_clockss/ninetynine-co-sg-scraper)
- [Realtor.com Agents Scraper](https://apify.com/lentic_clockss/realtor-com-agents-scraper)
- [Apartments.com Rental Scraper](https://apify.com/lentic_clockss/apartments-com-rental-scraper)
- [Bayut Scraper](https://apify.com/lentic_clockss/bayut-uae-scraper)
- [Craigslist Housing Scraper](https://apify.com/lentic_clockss/craigslist-housing-scraper)
- [Daft.ie Scraper](https://apify.com/lentic_clockss/daft-property-scraper)
- [Dot Property Scraper](https://apify.com/lentic_clockss/dot-property-th-scraper)
- [FINN.no Scraper](https://apify.com/lentic_clockss/finn-scraper)
- [Funda Scraper](https://apify.com/lentic_clockss/funda-scraper)
- [Hepsiemlak Scraper](https://apify.com/lentic_clockss/hepsiemlak-scraper)
- [Idealista Scraper](https://apify.com/lentic_clockss/idealista-scraper)
- [Immobiliare.it Scraper](https://apify.com/lentic_clockss/immobiliare-property-scraper)
- [ImmoScout24 Scraper](https://apify.com/lentic_clockss/immobilienscout24-scraper)
- [Naver Land Scraper](https://apify.com/lentic_clockss/naver-land-scraper)
- [OpenSooq Scraper](https://apify.com/lentic_clockss/opensooq-real-estate-scraper)
- [Otodom Scraper](https://apify.com/lentic_clockss/otodom-scraper)
- [Properati LATAM Scraper](https://apify.com/lentic_clockss/properati-scraper)
- [Property Finder Scraper](https://apify.com/lentic_clockss/property-finder-uae-scraper)
- [PropertyGuru Scraper](https://apify.com/lentic_clockss/propertyguru-sg-scraper)
- [realestate.com.au Scraper](https://apify.com/lentic_clockss/realestate-com-au-scraper)
- [Realtor.ca Scraper](https://apify.com/lentic_clockss/realtor-ca-scraper)
- [Rightmove Scraper](https://apify.com/lentic_clockss/rightmove-property-scraper)
- [SeLoger Scraper](https://apify.com/lentic_clockss/seloger-property-scraper)
- [SUUMO Scraper](https://apify.com/lentic_clockss/suumo-property-scraper)
- [Zillow Group Scraper](https://apify.com/lentic_clockss/zillow-group-scraper)

#### E-commerce

- [Shopee Search Scraper](https://apify.com/lentic_clockss/shopee-search-scraper)
- [E-commerce Scraper](https://apify.com/lentic_clockss/ecommerce-scraper)
- [1688 Global Product Search Scraper](https://apify.com/lentic_clockss/1688-global-scraper)
- [Allegro Scraper](https://apify.com/lentic_clockss/allegro-scraper)
- [Amazon Search Scraper](https://apify.com/lentic_clockss/amazon-search-results-collector)
- [ASOS Product Scraper](https://apify.com/lentic_clockss/asos-scraper)
- [Cdiscount Product Scraper](https://apify.com/lentic_clockss/cdiscount-scraper)
- [Costco Product Scraper](https://apify.com/lentic_clockss/costco-scraper)
- [Coupang Product Scraper](https://apify.com/lentic_clockss/coupang-scraper)
- [Etsy Scraper](https://apify.com/lentic_clockss/etsy-scraper)
- [Lazada Scraper](https://apify.com/lentic_clockss/lazada-ph-search-results-collector)
- [MercadoLibre Scraper](https://apify.com/lentic_clockss/mercadolibre-scraper)
- [Mercari Japan Scraper](https://apify.com/lentic_clockss/mercari-scraper)
- [Rakuten Japan Scraper](https://apify.com/lentic_clockss/rakuten-scraper)
- [SHEIN Product Scraper](https://apify.com/lentic_clockss/shein-scraper)
- [Target Product Scraper](https://apify.com/lentic_clockss/target-scraper)
- [Temu Product Scraper](https://apify.com/lentic_clockss/temu-scraper)
- [Walmart Product Scraper](https://apify.com/lentic_clockss/walmart-scraper)
- [Watsons Product Scraper](https://apify.com/lentic_clockss/watsons-scraper)

#### Travel & Stays

- [Booking.com & Airbnb Scraper](https://apify.com/lentic_clockss/booking-airbnb-scraper)
- [Agoda Scraper](https://apify.com/lentic_clockss/agoda-scraper)
- [Airbnb Listings Scraper](https://apify.com/lentic_clockss/airbnb-listings-scraper)
- [Booking.com Hotels Scraper](https://apify.com/lentic_clockss/booking-hotels-scraper)
- [Despegar Scraper](https://apify.com/lentic_clockss/despegar-scraper)
- [Expedia Scraper](https://apify.com/lentic_clockss/expedia-scraper)
- [Traveloka Scraper](https://apify.com/lentic_clockss/traveloka-scraper)
- [Travelstart Flights Scraper](https://apify.com/lentic_clockss/travelstart-scraper)
- [Trip.com Scraper](https://apify.com/lentic_clockss/trip-com-scraper)
- [TripAdvisor Scraper](https://apify.com/lentic_clockss/tripadvisor-scraper)

#### Social & Content

- [TikTok Scraper](https://apify.com/lentic_clockss/tiktok-scraper)
- [Reddit Scraper](https://apify.com/lentic_clockss/reddit-scraper)
- [YouTube Shorts Scraper](https://apify.com/lentic_clockss/youtube-shorts-scraper)
- [YouTube Research Scraper](https://apify.com/lentic_clockss/youtube-research-scraper)

#### Ads Intelligence

- [Facebook Ad Library Scraper](https://apify.com/lentic_clockss/facebook-ad-library-scraper)
- [Google Ads Transparency VN](https://apify.com/lentic_clockss/google-ads-transparency-center-vn)
- [TikTok Ads Scraper](https://apify.com/lentic_clockss/tiktok-ads-top-ads-actor)

#### Local & Maps

- [Google Maps Scraper](https://apify.com/lentic_clockss/google-maps-scraper)

→ Browse the full profile: [apify.com/lentic\_clockss](https://apify.com/lentic_clockss)

***

### Changelog

- **0.1.3** — Store README / SEO rewrite; pay-per-event pricing (Actor Start $0.005, result $3.00/1,000 with volume tiers); platform usage included.
- **0.1.2** — `all-trades` harvest; skip `/all-cities` on every city-list; listingTier / workArea fields.
- **0.1.1** — Thin Actor + Cloud Run worker for `www.homestars.com` city, trade, and public profile phones.

# Actor input Schema

## `searchType` (type: `string`):

Opened: city-list, trade-city, national-trade, profile, all-cities, all-trades, privacy, about, home. search/map/login/quote/contact are 未验证 or out of scope.

## `city` (type: `string`):

Live /all-cities slug such as calgary-alberta or edmonton. Bare calgary is a hub with 0 cards. Do not use toronto/vancouver as smoke canaries.

## `cluster` (type: `string`):

URL first segment for trades, e.g. electricity, heating, roofing. plumbing is recon-verified but reserved as a canary — prefer electricity for smoke.

## `trade` (type: `string`):

Trade without -pros (electrician → /electricity/electrician-pros). Do not smoke plumber.

## `profileSlug` (type: `string`):

Live /profile/{numeric}-{name}. Prefix digits are not ServicePro.id. Do not invent slugs without a numeric prefix.

## `market` (type: `string`):

ca is opened (www.homestars.com). homestars.ca has no DNS.

## `enrichDetails` (type: `boolean`):

Fetch /profile/ pages so phones and websites populate. Default on. List cards have no merchant contact.

## `maxResults` (type: `integer`):

Cap emitted rows. Pagination uses ?page= + internalNavigation=true. Worker hard cap 200.

## `maxPages` (type: `integer`):

Directory pages via ?page=N. Hard cap 50 (national plumber is hundreds of pages).

## `detailUrls` (type: `array`):

Optional live www.homestars.com /profile/ or privacy URLs. Do not send /search or /send-request-to.

## `workerBaseUrl` (type: `string`):

HTTPS only. Production source of truth is Actor env WORKER\_BASE\_URL.

## Actor input object example

```json
{
  "searchType": "city-list",
  "city": "calgary-alberta",
  "cluster": "electricity",
  "trade": "electrician",
  "profileSlug": "",
  "market": "ca",
  "enrichDetails": true,
  "maxResults": 3,
  "maxPages": 1
}
```

# Actor output Schema

## `listings` (type: `string`):

Dataset of HomeStars pro list/profile rows (phones, emails, address, person)

# 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 = {
    "searchType": "city-list",
    "city": "calgary-alberta",
    "cluster": "electricity",
    "trade": "electrician",
    "profileSlug": "",
    "market": "ca",
    "enrichDetails": true,
    "maxResults": 3,
    "maxPages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("lentic_clockss/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 = {
    "searchType": "city-list",
    "city": "calgary-alberta",
    "cluster": "electricity",
    "trade": "electrician",
    "profileSlug": "",
    "market": "ca",
    "enrichDetails": True,
    "maxResults": 3,
    "maxPages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("lentic_clockss/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 '{
  "searchType": "city-list",
  "city": "calgary-alberta",
  "cluster": "electricity",
  "trade": "electrician",
  "profileSlug": "",
  "market": "ca",
  "enrichDetails": true,
  "maxResults": 3,
  "maxPages": 1
}' |
apify call lentic_clockss/homestars-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lentic_clockss/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/9lUejHHIvvbw6vYHw/builds/cZETZglYAdTRMh5ia/openapi.json
