Google Local Services Ads Scraper (LSA Leads + Website)
Pricing
from $2.80 / 1,000 provider founds
Google Local Services Ads Scraper (LSA Leads + Website)
Find which plumbers, roofers, lawyers and other pros buy Google Local Services Ads in a city or ZIP: name, website, rating, reviews, years in business, phone and profile link. Feeds Lead Audit. Pay per provider.
Pricing
from $2.80 / 1,000 provider founds
Rating
0.0
(0)
Developer
LatentLark
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
For home-services marketing agencies and lead-gen operators. See which plumbers, roofers, HVAC companies, lawyers, dentists and other pros are paying for Google Local Services Ads (LSA) in any US ZIP code or city: name, website, rating, reviews, years in business, phone and highlights.
Outcome: a ready prospect list of businesses that already spend on Google ads, so your pitch goes to buyers, not tire-kickers.
- 📢 Only LSA advertisers: the sponsored "Google Guaranteed / Google Screened" style pros from Google's Local Services page, in the order Google shows them.
- ⭐ Trust signals: rating, review count, 1–5 star breakdown, years in business, "in business since".
- 📞 Contact: phone number, the public LSA profile link and the business website (found automatically, see below).
- 🧭 Many trades × many ZIPs in one run: every service is searched in every location; duplicates across ZIPs are skipped for free.
- 💸 Pay per provider: $0.004 per provider row. Error and empty rows are free. No login, no Google API key.
Quick start (first run in about 30 seconds)
- Click Try for free (or Start in Console). The form is prefilled with service
plumber, location78701(downtown Austin, TX) and 5 providers max. - Click Start. You get 5 rows in the Output tab for about $0.03 ($0.01 start + 5 × $0.004).
- Add your trades (
roofer,electrician,personal injury lawyer…) and your target ZIPs or cities, and raise Max providers per search to 20.
What you can do with it
- Prospect LSA buyers: businesses running Local Services Ads already have ad budget. Pitch them LSA management, call tracking, review generation or a better website.
- Market sizing: how many pros advertise per trade per metro, how established they are (years, reviews).
- Competitor watch: see who ranks #1–#3 in the LSA box for your client's trade and ZIPs; schedule it weekly.
- "LSA buyers with bad websites": feed the dataset into Google Maps No-Website Leads (Audit & Pitch) to audit each website and get a pitch angle (see Lead Audit pipeline below).
- Straight into a spreadsheet: pipe the dataset to Google Sheets with Google Sheets Export.
Input
| Field | What it does |
|---|---|
services | Trades customers search for, one per line (plumber, roofer, HVAC, personal injury lawyer) |
locations | US ZIP codes or cities, one per line (78701, Austin, TX). 1 search per service × location |
maxProvidersPerSearch | Up to 20 (Google shows about 20 per search). Default 20, prefilled 5 for a cheap test |
maxProviders | Optional hard cap for the whole run |
findWebsites | Look up each pro's own website (default on, no extra charge) |
maxWebsiteLookups | Cap on website lookups per run (default 200, max 1000). Pros beyond the cap get website: null |
dedupe | Skip the same pro found in another ZIP (default on, duplicates are free) |
includeHours | Add weekly opening hours |
language / country | Google hl / gl (default en-US / us) |
proxyConfiguration | Optional. Direct requests work; use RESIDENTIAL (US) only if you get rate-limited on big runs |
Example (3 trades × 2 ZIPs = 6 searches, up to 120 providers):
{ "services": ["plumber", "roofer", "electrician"], "locations": ["78701", "75201"], "maxProvidersPerSearch": 20 }
Output
One dataset item per provider (rowType: "provider"):
{"rowType": "provider","service": "plumber","location": "78701","query": "plumber 78701","searchUrl": "https://www.google.com/localservices/prolist?q=plumber+78701&hl=en-US&gl=us&src=1","position": 1,"name": "Radiant Plumbing, Air Conditioning, & Electrical","category": "Plumbers","serviceArea": "Austin","rating": 4.8,"reviewCount": 18046,"ratingHistogram": {"1": 678,"2": 146,"3": 112,"4": 377,"5": 16733},"yearsInBusiness": 27,"inBusinessSince": 1999,"phone": "+15129671551","website": "https://radiantplumbing.com/","domain": "radiantplumbing.com","websiteMatch": "name","websiteSource": "yahoo","highlights": ["24/7 emergency services","Local business"],"badge": null,"badgeCode": 0,"isSponsored": true,"openNow": "Open","profileUrl": "https://www.google.com/localservices/profile?cs=0&q=Radiant+Plumbing,+Air+Condit…","photoUrl": "https://lh3.googleusercontent.com/BmmoXJOyEXkateM_UvubRWF0PE…","lsaCid": "6779199783","lsaBid": "9140608052","lsaPid": "9999999999","country": "US","scrapedAt": "2026-10-26T18:45:00+00:00"}
position= order in Google's Local Services list for that search (1 = top).website= the pro's own site, ornullif none was found.websiteMatchsays how it was verified:phone(LSA phone found on the homepage),nameOnPage(business name on the homepage and in the domain) orname(domain clearly matches the name). Directories (Yelp, Angi, BBB, Facebook…) are never returned.title,categoryName,city= copies of name / category / service area so the rows plug straight into Lead Audit.badge= the badge Google shows on the card (Google Guaranteed,Google Screened…),nullwhen the card shows none. In late-2026 tests most cards showed no badge;badgeCodekeeps Google's raw value.- A search with no LSA advertisers gives one free
rowType: "empty"row; a blocked search gives one freerowType: "error"row. - Storage → Key-value store → SUMMARY: searches run, providers per search, duplicates skipped, websites found.
- Dataset views: Overview and Lead Audit (name, website, phone, category, city, rating, reviews).
Lead Audit pipeline (LSA → audit → Sheets)
- Run this Actor for your trades and ZIPs (website lookup on).
- Start Local Lead Audit with mapsDatasetId = this run's dataset ID. It reads
title,website,phone,categoryName,city,rating,reviewCountand audits each site (speed, mobile, SSL, contact form…) with a pitch angle. - Send the audit dataset to Google Sheets with Google Sheets Export.
You can chain the steps with Apify Integrations → Run Actor on Run succeeded.
Pricing
Pay per event:
- Actor start: $0.01 per run (per GB of memory; default 256 MB = one start).
- provider: $0.004 per provider row pushed to the dataset (website lookup included, no extra event).
- Volume discount by Apify plan: $0.0036 (Bronze), $0.0032 (Silver), $0.0028 (Gold and above) per provider.
- Duplicates, empty searches and failed searches are free.
Examples: 1 trade × 1 ZIP × 20 providers ≈ $0.09; 3 trades × 10 ZIPs (≈600 rows before de-dup) ≈ $2.40 max. Set Max cost per run in Console to cap spend.
Soft fail (schedules stay green)
Input problems (no service, no location, too many searches, unsupported proxy) end the run SUCCEEDED with one free explanatory row and a clear status message, so scheduled runs and integrations do not break.
How it works and limitations
- Reads Google's public Local Services list page (
google.com/localservices/prolist) for "service + location", the same page behind "More plumbers" in Google Search. No login. - Google Local Services Ads run mainly in the US (some trades in Canada). Non-US locations usually return no providers.
- Google shows about 20 providers per search; for more coverage add more ZIPs (neighbouring ZIPs overlap; duplicates are free).
- The order rotates a little between requests (LSA is an ad auction), so
positionis a snapshot. - LSA cards do not list a website, so the Actor searches the web for
name + city(thenname + phone) and verifies the top results against the homepage. In tests it found the site for about 75–100% of pros; the rest getwebsite: null(never an error). LSA phones are often Google call-tracking numbers, sophonematches are rare andnameOnPageis the usual proof. - Website lookup adds about 2–3 s per pro (3 in parallel). Turn it off (
findWebsites: false) for the fastest runs. - Google no longer shows the Guaranteed/Screened badge on most list cards;
badgeis usuallynull.
FAQ
I got 0 providers. Google shows no LSA ads for that trade there. Try the city (Austin, TX) instead of a ZIP, a common trade name (plumber, not pipe relining), or a US location.
Some pros have no website. No convincing match was found (or the business has no site). We return null rather than guess, and the row is still charged as a normal provider row.
Some searches failed. Google rate-limited the requests. Re-run, lower Parallel searches, or set the proxy to RESIDENTIAL with country US. Failed searches are not charged.
Is this the Google Ads API / LSA API? No. It reads the public listing page, so you see competitors' ads, not your own account data.
More from LatentLark
- Google Maps No-Website Leads (Audit & Pitch): audit the websites of local businesses and get a pitch per lead.
- Google Maps Rank Tracker (Geo-Grid Local SEO Heatmap): where a business ranks on Google Maps across a city.
- Google Sheets Export: send any dataset to Google Sheets.