Google Local Services Ads Scraper: Home Service Leads & Rank
Devansh Tiwari Β· @devanshtiwari365
Find the home service companies advertising in any city, with rank, phone and ratings.
About
Local Services Ads Lead Finder: Home Service Advertisers by City
See which home service companies are advertising in Google's local services results for any trade and city. For every advertiser you get its rank, call-tracking phone number, star rating with the full 1 to 5 breakdown, review count, years in business and weekly opening hours.
Start a 7-day free trial, enter a trade and a list of cities, and have a lead list in seconds. No card is needed for the trial.
π What you get
- A real advertiser list per search. Plumber in Austin, Electrician in Denver, Roofer in 78701. Each search returns the roughly 20 advertisers Google shows for it.
- Many cities in one run. Every trade is crossed with every city, so a 12-search sweep is one run.
- Quality signals for sorting leads. Rating, review count, star breakdown, years in business and founded year are on every row where Google shows them.
- Filters before saving. Keep only advertisers above a rating, review count or years-in-business floor, with a phone number, or open right now.
- One row per advertiser. An advertiser found in several searches is saved once, with the list of searches and ranks it appeared in.
- Optional profile detail. Switch it on to add the verified label when shown, services offered, service-area counties, review topics, recent reviews and Google place identifiers.
- Change tracking. Schedule the same input and later runs report new, updated, reopened and removed advertisers per search.
- Three markets. United States, Canada and United Kingdom.
- Your format. Download Excel, CSV or JSON, or pull the data into your own tools through the API.
π₯ Who it is for
- Home service marketing agencies: "I want to see who is already advertising in a city before I pitch a client there."
- Lead sellers and brokers: "I need fresh lists of active advertisers by trade, with phone numbers and review counts."
- Franchise and multi-location owners: "I check which competitors bid in each of my service areas."
- Market researchers: "I compare advertiser density and ratings across cities for one trade."
π How it works
- Add trades and places. One trade per row (Plumber, Electrician, HVAC, Roofer, Locksmith) and one place per row (Austin, TX, a ZIP code, Toronto, ON, or London).
- Choose filters and depth. Set a rating or review floor, a maximum number of advertisers, and whether you want profile detail.
- Run and export. Read the advertiser table, or schedule the run and follow what changes week to week.
The Actor reads public Google search results. It needs no Google account, login or key.
π₯ Input
| Field | What it does |
|---|---|
| Services | The trades to look up, one per row, as a customer would type them. |
| Locations | Places to search: City, ST for the US and Canada, the city name for the UK, or a ZIP or postal code. |
| Country | United States, United Kingdom or Canada. |
| Strict location check | Reports a search and skips it when Google shows advertisers for a different area than the one you typed. |
| Minimum rating, reviews, years in business | Keep only established advertisers. |
| Only with a phone number, only open now | Narrow the list before it is saved. |
| Add profile details | Opens each advertiser's profile for extra detail. Runs take longer. |
| Change tracking | Off, changes only, or all advertisers with a change status. |
| Maximum advertisers | The most advertisers saved in the run. |
| Passes per search | Extra looks at the same search, merged without duplicates. |
π Output
Each row is one advertiser. Fields Google does not show for an advertiser are left out, never filled with placeholders.
| Field | What it holds |
|---|---|
businessName, category, advertiserId | The advertiser, its listed category and a stable identifier |
service, location, country, rank | The search it appeared in and its position in that look |
queries, searchCount, timesSeen | Every search the advertiser appeared in, with rank in each |
phone | The call-tracking number Google shows for the ad |
rating, reviewCount, ratingBreakdown | Stars, review count and the count of 1 to 5 star reviews |
yearsInBusiness, foundedYear | Business age as shown |
serviceArea, highlights | Area and short highlights such as 24/7 emergency services |
hours, openStatus, openNowText | Weekly hours and the open status at read time |
profileUrl, logoUrl, hasBookingLink, hasMessagingLink | Public profile page, logo, and whether booking and messaging are offered |
scrapedAt, sourceUrl | When and where the row was read |
With profile detail on, rows also carry isVerified and verifiedLabel when shown, servicesOffered, serviceAreaCounties, reviewTopics, recentReviews, attributes, placeId and profileStatus.
π° Pricing
$19 a month after a 7-day free trial. Compute is billed from your prepaid credits during the trial and after it. In our tests, one trade in one city (20 advertisers) used about $0.00015 of compute, and a 12-search sweep returning 232 advertisers used about $0.0003. A US run with profile detail on for 40 advertisers took under a minute and used about $0.0011. A Canada or UK search uses a residential connection and cost about $0.0017 for 19 to 20 advertisers.
π‘ Good to know
- Google shows about 20 advertisers per search, and which 20 rotates a little between looks. To see more of a crowded metro, add neighbouring cities or ZIP codes as extra locations. Results are merged without duplicates.
- Smaller trades and towns can return fewer advertisers, because Google only shows what is advertising there.
- The phone number is Google's call-forwarding number for the ad, which is not always the company's own line.
- Street address, website, license number and guarantee badges are not part of the list data and are not returned.
- Rank is the position in one look and can shift between looks. It is not a stable ranking.
- Only public search pages are read.
- The Actor is independent and not affiliated with Google.
FAQ
- How many advertisers does one search return?
- Google shows about 20 advertisers for a trade and city, so a single search returns up to 20. In our test, Plumber in Austin returned 20, and a sweep of 12 searches across six cities returned 232 distinct advertisers. Smaller towns return fewer. To go deeper in a large metro, add neighbouring cities or ZIP codes as extra locations; results are merged without duplicates.
- Can I search many cities and trades in one run?
- Yes. Every trade you list is searched in every location you list, so two trades and six cities make 12 searches in one run. Each advertiser is saved once with the list of searches and ranks it appeared in. Switch off the one-row-per-advertiser option if you prefer one row per search.
- Is the phone number the company's own line?
- The number is the call-tracking number Google shows on the ad, so it reaches the advertiser through Google and is not always the company's own direct line. Use the optional filter to keep only advertisers that list a phone number.
- Which countries and what location formats work?
- United States, Canada and United Kingdom. Use City, ST for the US and Canada (Austin, TX or Toronto, ON), the city name for the UK (London), or a ZIP or postal code. Choose the matching country in the form, because searches in a different country than the place you typed return nothing.
- Can I track which advertisers are new or gone?
- Yes. Turn on change tracking and schedule the same input. The first run saves a baseline, and later runs report new, updated, reopened and removed advertisers per search. Because Google rotates which advertisers it shows, an advertiser is only reported removed after several runs in a row without it.
Input
Preview of the input form. Rent the Actor to fill it in and start runs from the console.
Pick the services and cities to sweep. Every service is crossed with every city in one run.
servicesTrade or service to look up, one per row, as a customer would type it (for example Plumber, Electrician, HVAC). Every service is searched in every location below, with no per-location fee. Google only lists advertisers for home and local services it runs this program for.
locationsPlaces to search, one per row: City, ST for the United States and Canada (Austin, TX or Toronto, ON), just the city for the United Kingdom (London), or a ZIP or postal code. Each place is searched for every service above. To see more of a crowded metro than the roughly 20 advertisers Google shows per search, add neighbouring cities or ZIP codes: the results are merged without duplicates.
countryMarket to search. Choose United Kingdom or Canada only for cities in those countries; searches outside the United States use a residential connection in the same country, which Google requires for local results there.
strictLocationWhen Google does not recognise a place it quietly shows advertisers for another area. With this on, such a search is reported and not saved. Turn it off to keep results even when the advertisers serve a neighbouring or differently named area (for example a borough shown under the main city).
Narrow the list before it is saved. Advertisers that do not pass are skipped and not saved.
minRatingKeep only advertisers rated at least this many stars. Advertisers with no rating yet are left out when this is above 0. Filtered advertisers are never saved.
minReviewsKeep only advertisers with at least this many Google reviews. Useful to focus on established companies.
minYearsInBusinessKeep only advertisers that show at least this many years in business. Advertisers that do not show a number are left out when this is above 0.
requirePhoneSkip advertisers that list no phone number. The number is Google's call-forwarding number for the ad, not always the company's own line.
openNowOnlyKeep only advertisers shown as open at the moment the search is read.
Optional extras. Both are off by default to keep runs fast.
includeProfileOpen each advertiser's Google profile to add the verified label when shown, services offered, service-area counties, review topics, a few recent reviews and the Google place identifiers. Runs take longer. Reviewer names and ids are public Google review data.
includeActionLinksAdd the Google booking and messaging links when an advertiser offers them. These links belong to the paid ad, so opening them can count as an ad interaction for the advertiser; leave this off unless you need them.
Use the same scope name and the same searches on every scheduled run. Google rotates which advertisers it shows, so an advertiser is only reported removed after several misses in a row.
monitorModeFor scheduled runs. 'Changes only' saves new, updated, reopened and removed advertisers per service and city and skips unchanged ones. 'All with status' saves every advertiser with its change status. The first run saves everything as new.
monitorScopeNames the saved watchlist so different customers or schedules stay separate. Keep it the same for every run of one schedule.
removedAfterMissesHow many complete runs in a row an advertiser must be missing before it is reported as removed. Raise it for crowded cities where the 20 shown advertisers rotate a lot.
resetMonitorIgnore the saved state for this run and treat everything as new, then save it as the new baseline. Switch it off again afterwards.
How deep to look and how to combine results.
maxResultsMost advertisers saved in the whole run, counted after filters. Start small to check your searches, then raise it for a full sweep. Google shows about 20 advertisers per search at a time.
passesLooks at each search this many times with slightly different wording and merges the results. In testing, repeat looks returned almost the same advertisers, so for a bigger picture of a metro prefer adding neighbouring cities or ZIP codes as locations and use change tracking over several days. Each row reports how many passes it appeared in. Passes stop early when Google has nothing more to show.
uniqueOnlySave each advertiser once even if it appears in several searches, with the list of searches, ranks and passes it appeared in. Switch off to get one row per search. Change tracking always reports per search.
Connection settings. Most runs never need to change them.
proxyConfigurationLeave the default. United States searches start with a direct connection and move to a proxy only if Google refuses a request. Searches in other countries use a residential connection in that country automatically. Choose proxy groups or your own proxies to force a specific setup.
API
Bytewells speaks the Apify API. Existing integrations keep working: point apify-client at https://bytewells.com/api and use your Bytewells API token (Console β Settings β API access). The Actor ID is devanshtiwari365/google-local-services-ads-scraper (or devanshtiwari365~google-local-services-ads-scraper in URLs).
JavaScript Β· apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.BYTEWELLS_TOKEN,
baseUrl: 'https://bytewells.com/api',
});
const input = {
"services": [
"Plumber"
],
"locations": [
"Austin, TX"
],
"country": "US",
"strictLocation": true,
"minRating": 0,
"minReviews": 0,
"minYearsInBusiness": 0,
"requirePhone": false,
"openNowOnly": false,
"includeProfile": false,
"includeActionLinks": false,
"monitorMode": "off",
"monitorScope": "default",
"removedAfterMisses": 3,
"resetMonitor": false,
"maxResults": 20,
"passes": 1,
"uniqueOnly": true,
"proxyConfiguration": {
"useApifyProxy": false
}
};
const run = await client.actor('devanshtiwari365/google-local-services-ads-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Python Β· apify-client
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["BYTEWELLS_TOKEN"], api_url="https://bytewells.com/api")
run_input = {
"services": [
"Plumber"
],
"locations": [
"Austin, TX"
],
"country": "US",
"strictLocation": True,
"minRating": 0,
"minReviews": 0,
"minYearsInBusiness": 0,
"requirePhone": False,
"openNowOnly": False,
"includeProfile": False,
"includeActionLinks": False,
"monitorMode": "off",
"monitorScope": "default",
"removedAfterMisses": 3,
"resetMonitor": False,
"maxResults": 20,
"passes": 1,
"uniqueOnly": True,
"proxyConfiguration": {
"useApifyProxy": False
}
}
run = client.actor("devanshtiwari365/google-local-services-ads-scraper").call(run_input=run_input)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)HTTP Β· curl
curl -X POST "https://bytewells.com/api/v2/acts/devanshtiwari365~google-local-services-ads-scraper/runs" \
-H "Authorization: Bearer $BYTEWELLS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"services":["Plumber"],"locations":["Austin, TX"],"country":"US","strictLocation":true,"minRating":0,"minReviews":0,"minYearsInBusiness":0,"requirePhone":false,"openNowOnly":false,"includeProfile":false,"includeActionLinks":false,"monitorMode":"off","monitorScope":"default","removedAfterMisses":3,"resetMonitor":false,"maxResults":20,"passes":1,"uniqueOnly":true,"proxyConfiguration":{"useApifyProxy":false}}'Runs are billed as compute from your credit balance. Paid Actors need an active rental or trial; otherwise the API answers 402 rental-required.
Related
More Actors from the same publisher.

Exhibitor List Scraper: Trade Show & Messe Aussteller Leads
Devansh Tiwari Β· @devanshtiwari365
Scrape trade show and Messe exhibitor lists: company, website, email, phone, booth and contacts. 148 shows, 30 platforms, one format. Excel, CSV, JSON.
Lead generationMarketingAutomation$19/mo7-day free trial
Mercari US Scraper: Active & Sold Listings, Price & Seller Data
Devansh Tiwari Β· @devanshtiwari365
Scrape Mercari US active and sold listings by keyword or link: USD price, condition, brand, category, likes and seller sales, plus a sold-price summary.
E-commerceMarketingLead generation$19/mo7-day free trial
Amazon KDP Book Niche Analyzer: Self Publishing Niche Research
Devansh Tiwari Β· @devanshtiwari365
Amazon KDP niche research: real Best Sellers Rank, prices, ratings and competition for each Kindle book per keyword, plus an evidence-based opportunity score.
E-commerceMarketingSEO tools$19/mo7-day free trial
Kick Scraper: Channels, Live Streams, VODs, Clips & Monitoring
Devansh Tiwari Β· @devanshtiwari365
Collect Kick.com channel profiles, live streams, VODs and clips. Watch creators, search live now, filter by viewers and language, and track changes.
Social mediaMarketing$19/mo7-day free trial
Pikabu Scraper ΠΠΈΠΊΠ°Π±Ρ: Posts, Tags, Communities, Users & Search
Devansh Tiwari Β· @devanshtiwari365
Collect Pikabu posts by keyword, tag, community, user or main feed, with rating, votes, comments and text. Filter by rating and date, monitor new posts.
Social mediaNewsMarketing$19/mo7-day free trial
Bulk Image Downloader: Crawl Sites, Dedupe Photos, Export ZIP
Devansh Tiwari Β· @devanshtiwari365
Download every image from a public page or a list of image links: bounded crawl, SHA-256 dedupe, EXIF strip, format conversion and a status row per image.
Developer toolsAutomation$19/mo7-day free trial