HomeStars Scraper | Canadian Contractor Phones avatar

HomeStars Scraper | Canadian Contractor Phones

Pricing

from $2.20 / 1,000 results

Go to Apify Store
HomeStars Scraper | Canadian Contractor Phones

HomeStars Scraper | Canadian Contractor Phones

Collect Canadian HomeStars contractors by city, trade, or public profile. Export names, available phones, websites, ratings, and optional reviews. Pay per delivered row plus a start fee.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Features

Limited permissions

Share

HomeStars Scraper

Extract Canadian HomeStars contractor names, public contact details, ratings, and optional reviews as rows you can export.

  • Find contractors by city or trade, or supply public profile URLs.
  • Get available phones, websites, locality, ratings, and review counts.
  • Discover city and trade directories before choosing an input.
  • Add reviews as separate, individually billed rows.
  • Pay $3.00 per 1,000 delivered rows on the Free plan, plus a start fee.

What does HomeStars Scraper do?

HomeStars Scraper collects public information from www.homestars.com in Canada. Use it to build contractor lists, compare local services, or review customer feedback. It does not submit contact forms or quote requests.

  • Contractors: city-list, trade-city, national-trade, and profile return business rows.
  • Directory discovery: all-cities and all-trades return directory entries, not contractors.
  • Company pages: privacy, about, and home return HomeStars company information, not merchant contacts.
  • Reviews: includeReviews is off by default. When enabled, each review is a separate rowType=review row, billed at the same rate and sharing the contractor's row allowance.

What data can you extract from HomeStars?

Fields depend on the page and what HomeStars publishes. The tables show illustrative values, not guaranteed results.

Contractor directory rows: rowType=list

FieldDescriptionExample
rowTypeRow categorylist
idExact profile slugdeo-tech
entityIdTyped identity across contractor row typesservicePro:deo-tech
serviceProIdSeparate numeric contractor identifier, when availablenull
nameBusiness nameExample Contracting
urlHomeStars profile addresshttps://www.homestars.com/profile/deo-tech
ratingPublished rating4.8
reviewCountPublished review count42
phonesAvailable public phone objects[{"value":"+1 555 0100"}]
web.websitePublic business websitehttps://example.com
address.localityCity or localityCalgary
listingTierListing category, when availablenull

Contractor profile rows: rowType=profile

Profiles also carry the contractor identity and rating fields above.

FieldDescriptionExample
rowTypeRow categoryprofile
idExact profile slugdeo-tech
nameBusiness nameExample Contracting
phonesAvailable public phones[{"value":"+1 555 0100"}]
emailsPublic emails; commonly empty[]
address.localityBusiness localityCalgary
web.websitePublic business websitehttps://example.com
professionsPublished trade information[]
workArea.localitiesListed service areas["Calgary"]
leadAbsencesReasons contact fields are absent{}

Review rows: rowType=review

FieldDescriptionExample
rowTypeRow categoryreview
reviewIdPublished review identifierexample-review
parentIdContractor's profile slugdeo-tech
parentNameContractor's nameExample Contracting
parentUrlContractor's profilehttps://www.homestars.com/profile/deo-tech
ratingReview rating5
textReview bodyExample review text.
reviewerPublished reviewer; absent for anonymous reviewsJane Doe
replyContractor reply, when presentnull
createdAtPublished review timestamp2026-10-01T12:00:00Z

City rows: rowType=city

FieldDescriptionExample
rowTypeRow categorycity
nameCity nameCalgary
slugDirectory city slugcalgary-alberta
urlCity directoryhttps://www.homestars.com/find-professionals/calgary-alberta

Trade rows: rowType=trade

FieldDescriptionExample
rowTypeRow categorytrade
nameTrade nameElectrician
clusterDirectory categoryelectricity
tradeTrade slugelectrician
urlTrade directoryhttps://www.homestars.com/electricity/electrician-pros

Privacy-page rows: rowType=privacy

FieldDescriptionExample
rowTypeRow categoryprivacy
namePlatform companyHomeStars Inc.
emailsPublished company contact[{"value":"name@example.com"}]
address.streetPublished company street123 Example Street

About-page rows: rowType=about

FieldDescriptionExample
rowTypeRow categoryabout
namePlatform nameHomeStars
phonesNo merchant phone from this page[]

Homepage rows: rowType=home

FieldDescriptionExample
rowTypeRow categoryhome
namePlatform companyHomeStars Inc.
phonesPlatform support phone, not a contractor[{"value":"+1 555 0100","type":"support"}]

How to scrape HomeStars

  1. Open HomeStars Scraper in Apify Console.
  2. Enter a city such as edmonton, or choose another search type below.
  3. Set maxResults to 3 for a small first run.
  4. Click Start and wait for completion.
  5. Download the dataset or read its rows through the API.

Empty input {} starts the form's example: up to 3 contractors from calgary-alberta. Normal event prices apply. A city alone uses city-list. Supported addresses in detailUrls identify their page type automatically; a profileSlug alone does not select profile mode, so also set searchType to profile.

City directory

Use city-list and city. Copy the slug from a directory URL; calgary-alberta is not interchangeable with the bare calgary hub.

Trade in a city

Use trade-city, city, cluster, and trade. For electricians, the pair is electricity and electrician.

National trade

Use national-trade with cluster and trade. No city is required; row and page limits still apply.

Contractor profile

Use profile with profileSlug, or put profile URLs in detailUrls. Preserve the site's exact slug, including any numeric prefix.

All cities

Use all-cities to get city directory entries. This does not collect every contractor in those cities.

All trades

Use all-trades to get trade entries with directory links. Use their cluster and trade values in a later contractor run.

Privacy page

Use privacy for HomeStars company contact information, not contractor email addresses.

About page

Use about for a HomeStars company row. This page does not supply merchant contacts.

Homepage

Use home for available platform contact information. A support phone belongs to HomeStars, not a contractor.

What to fill in

FieldWhat to enterDefault
searchTypeA supported mode listed abovecity-list
cityCity directory slugcalgary-alberta when omitted
detailUrlsArray of supported HomeStars page URLsEmpty
profileSlugExact slug with searchType=profileEmpty
clusterFirst segment of a trade directory URLelectricity
tradeTrade slug without -proselectrician
marketca, the only supported marketca
maxResultsRow allowance per input, from 1 to 20070; example uses 3
maxPagesDirectory page limit, from 1 to 501
enrichDetailsInclude available profile contact detailstrue
includeReviewsAdd separately billed review rowsfalse
cursorReturned nextCursor for the same single input and modeEmpty

City directory input

{"searchType":"city-list","city":"edmonton","maxResults":3}

Trade-city input

{"searchType":"trade-city","city":"calgary-alberta","cluster":"electricity","trade":"electrician","maxResults":3}

National-trade input

{"searchType":"national-trade","cluster":"electricity","trade":"electrician","maxResults":3}

Profile input

{"searchType":"profile","detailUrls":["https://www.homestars.com/profile/deo-tech"],"maxResults":3}

City-discovery input

{"searchType":"all-cities","maxResults":3}

Trade-discovery input

{"searchType":"all-trades","maxResults":3}

Privacy input

{"searchType":"privacy","maxResults":1}

About input

{"searchType":"about","maxResults":1}

Homepage input

{"searchType":"home","maxResults":1}

maxItems and limit are aliases for maxResults. urls, startUrls, and profileUrls mean detailUrls; slug means profileSlug. Close field-name misspellings can be corrected; other unknown fields are ignored with a note. Check INPUT_REPORT in the default key-value store for filled, corrected, or ignored fields and example-run status. INPUT_ECHO records the applied settings.

Invalid input fails before rows are charged, with a field-specific explanation such as INVALID_INPUT: market must be ca. Numeric limits can be adjusted into range and reported. Do not invent a cursor or combine one with several detailUrls entries.

Output example

Illustrative profile row; business and contact values below are placeholders.

{
"rowType": "profile",
"id": "example-contractor",
"slug": "example-contractor",
"entityId": "servicePro:example-contractor",
"serviceProId": null,
"name": "Example Contracting",
"url": "https://www.homestars.com/profile/example-contractor",
"phones": [{"value": "+1 555 0100", "type": "landline", "e164": null}],
"emails": [],
"address": {"street": null, "locality": "Calgary", "region": "Alberta", "country": "CA"},
"web": {"website": "https://example.com", "socials": []},
"rating": 4.8,
"reviewCount": 42,
"workArea": {"localities": ["Calgary"]}
}

Export the dataset as JSON, CSV, Excel, XML, RSS, or an HTML table. Filter by rowType when combining contractors and reviews.

Why use this HomeStars scraper?

  • Pay per delivered row. Attempts that produce no dataset rows incur no row charge; the start fee still applies.
  • Keep partial results. Rows returned before a collection stop or deadline are delivered when available; rows already in the dataset remain there.
  • Inspect failures. Input errors identify the field; ERROR_SUMMARY and RUN_SUMMARY provide run details.
  • Keep missing information visible. Unavailable contact fields stay empty rather than becoming guessed contacts.
  • Use several inputs. Supply several supported URLs in detailUrls instead of starting a separate run for each.
  • Avoid setup. You do not need to set up proxies or supply a HomeStars account.

How much does it cost to scrape HomeStars?

The Actor uses pay-per-event pricing. Platform usage is included in these prices.

Apify planStart eventPrice per rowPrice per 1,000 rows
Free$0.005$0.003$3.00
Starter$0.005$0.003$3.00
Scale$0.005$0.0026$2.60
Business$0.005$0.0022$2.20

Start billing is one event per GB of allocated memory, with a minimum of one. The default 512 MB allocation incurs one $0.005 start event. Every delivered row type costs the same, including reviews and directory entries.

maxResults applies to each input, defaults to 70, and supports up to 200. Several URLs can therefore produce more than 70 rows in one run. Reviews consume the same allowance, leaving fewer contractor rows. Actual output may be lower because of availability or maxPages.

Free-plan runs are capped at 200 rows across all inputs, with a 10-run allowance for this Actor. The whole run also stops at your Maximum cost per run (maxTotalChargeUsd in the API).

Example: one city input delivering 3 rows on the Free plan at 512 MB costs 3 × $0.003 + $0.005 = $0.014. A run delivering zero rows has no row charge, but the start fee remains.

What happens when the run timeout is too short

When automatic resumption is accepted and collection needs more time, the run pauses with a message such as "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." It temporarily shows ABORTED; that pause is not itself a failed collection.

When results are ready, the same run resumes, writes to the same dataset, and finishes as SUCCEEDED if delivery succeeds. A resumed delivery can show "Resumed: delivering N rows." Previously delivered rows are skipped, so they are not delivered or charged twice. No manual restart is needed for this automatic pause.

Automatic resumption is capped at 3 attempts. Keep the default timeout of 3600 seconds to reduce interruptions. Other failures or manual aborts do not guarantee recovery.

Synchronous endpoints (run-sync, run-sync-get-dataset-items) wait at most 300 seconds and can return an empty dataset while the run is paused. Start larger runs asynchronously, then read the dataset after SUCCEEDED, or use a webhook for the succeeded event.

Use with AI agents and the API

Apify MCP server

Add this remote tool to Claude, ChatGPT, Cursor, VS Code, or another compatible MCP client:

https://mcp.apify.com?tools=lentic_clockss/homestars-scraper

Sign in with Apify using OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool returns run and dataset IDs; read the rows with get-dataset-items.

Clients without remote support can use npx @apify/actors-mcp-server --tools lentic_clockss/homestars-scraper with APIFY_TOKEN configured.

Example prompt: "Run HomeStars Scraper for Edmonton with a limit of 3 rows. Return company names, public phones, and profile URLs."

Apify API

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/homestars-scraper").call(
run_input={"city": "edmonton", "maxResults": 3}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lentic_clockss/homestars-scraper')
.call({ city: 'edmonton', maxResults: 3 });
const { items: rows } = await client.dataset(run.defaultDatasetId).listItems();
console.log(rows);

For asynchronous HTTP access, send the input as JSON to POST https://api.apify.com/v2/acts/lentic_clockss~homestars-scraper/runs with an Authorization: Bearer <YOUR_APIFY_TOKEN> header. After completion, fetch GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.

Integrations

Use the Integrations tab to connect Google Sheets, Make, Zapier, n8n, Slack, Airtable, or your own webhook. Use Apify Schedules for recurring runs.

FAQ

The Actor collects public data. You are responsible for complying with HomeStars' terms and applicable data-protection law. Processing personal data needs a lawful basis. This third-party tool is not affiliated with HomeStars.

Why did my run end as ABORTED?

Check the status message. An automatic-resumption message means the same run will restart when results are ready. A manual abort or another failure is different; inspect the run details before restarting.

How many results can I get?

Request 1–200 rows per input; the default is 70. Free-plan runs stop at 200 total rows. Availability, page limits, optional reviews, and your maximum charge can reduce delivery.

Why are some fields empty?

Public profiles may omit phones, emails, websites, or street addresses. leadAbsences explains missing contact fields; some explanations are returned in Chinese. Disabling enrichDetails leaves directory contact fields empty.

Do I need a HomeStars account?

No. The Actor reads public information without a HomeStars login or developer key. You need an Apify account to run it.

Which city and trade names should I enter?

Copy slugs from supported directory URLs, or use all-cities and all-trades to discover them. City slugs can include a province suffix. Trade values omit -pros.

Can I collect merchant emails through Get in touch?

No. The Actor does not submit contact forms or quote requests. Privacy-page emails belong to HomeStars, not contractors. Keyword search, map search, login, quote, and contact modes do not return contractor rows.

What should I check when no rows arrive?

Check the mode, exact slug, INPUT_REPORT, and run summaries. An unsupported page or an unavailable profile may produce no rows. If RUN_SUMMARY.status is QUEUE_FULL, try later; no rows were collected or billed, although the start fee applies.

Limitations

  • Only Canadian www.homestars.com pages are supported; other country sites are outside scope.
  • A high row limit does not guarantee full city or national coverage. maxPages defaults to one.
  • Reviews are optional and limited, not a promise to retrieve every review.
  • Use the exact profile slug for id and URLs. Its numeric prefix is not necessarily serviceProId; use serviceProId when reconciling older exports with differently formatted IDs.
  • Resume a cursor only with its original mode and single input. Do not manufacture a nextCursor or reuse it across cities.
  • Contact availability and source-page changes can cause empty fields, partial results, or failed runs.

More local services and lead generation scrapers from the same publisher:

Browse all of our scrapers at apify.com/lentic_clockss.

Support

Report problems or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.