Google Local Services Ads Scraper — Leads avatar

Google Local Services Ads Scraper — Leads

Pricing

$3.00 / 1,000 per business returneds

Go to Apify Store
Google Local Services Ads Scraper — Leads

Google Local Services Ads Scraper — Leads

Scrape Google Local Services Ads advertisers - the vetted pros above the map pack - for any trade in any US metro: business name, type, city, phone, star rating, review count and breakdown, opening hours, highlights and Google's stable business IDs. No login.

Pricing

$3.00 / 1,000 per business returneds

Rating

0.0

(0)

Developer

Scrapers Delight

Scrapers Delight

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

🛠️ Google Local Services Ads Scraper — vetted local pros, with phone numbers

Scrape the Local Services Ads that sit above the map pack — the vetted home-service and professional pros Google puts at the very top for "plumbers near me". One row per advertiser: business name, trade, city, phone, star rating, review count and full star breakdown, opening hours, highlights and Google's stable business IDs.

These are businesses already paying Google per lead — the highest-intent local-business list there is.

What does this actor do?

  • 🏢 name, businessType, city — e.g. Radiant Plumbing, Air Conditioning, & Electrical · Plumbers · Austin
  • 📞 phone — in international format, ready to dial
  • rating, reviewCount plus starBreakdown (how many 1★ through 5★)
  • 🕐 hours — the full weekly table, e.g. {"Tuesday": "Open 24 hours", …}
  • highlights — e.g. 24/7 emergency services · Local business
  • 🆔 cid, bid — Google's stable identifiers (verified identical across repeat runs), so you can re-run and diff over time. pid is also returned but Google fills it with the placeholder 9999999999 for about 70% of advertisers — key your diffs on cid.
  • 🔗 profileUrl, bookingUrl, messagingUrl

Example input

{
"services": ["plumber", "electrician", "roofer", "hvac"],
"cities": ["Austin TX", "Denver CO", "Phoenix AZ"],
"requirePhone": true,
"minRating": 4,
"maxItems": 500
}

Every service is crossed with every city — 4 × 3 = 12 queries, up to 20 advertisers each.

Read this: the proxy setting is the whole mechanism

Google decides Local Services inventory from the requesting IP's location. Measured on the same URL in the same second:

LaneResponseAdvertisers returned
Developer's home IP (non-US)200, 1,111 KB0
Datacenter proxy200, 1,111 KB0
Residential US200, 1,747 KB20

A non-US or datacenter IP does not error and does not get blocked — it gets a perfectly valid page containing an empty result list. That is why the proxy default here is residential US, and why you should not change it. If a run returns nothing, the log says so explicitly rather than pretending the city has no plumbers.

Field coverage — measured

Measured across eight repeat runs of the same query (plumber, Austin TX):

FieldFill
name, businessType, city, phone, rating, reviewCount, starBreakdown, highlights, hours, cid, bid, profileUrl, searchQuery, scrapedAt100%
messagingUrl85-100% across repeat runs
bookingUrl65-80% across repeat runs — only advertisers with online booking wired up

Nothing below 65%. Measured across eight repeats of the same query — the two link fields move run to run because Google rotates which advertisers show a booking/messaging button.

Who is this for?

Agencies and SaaS selling to home-service and legal SMBs (an LSA advertiser has a proven ad budget), lead-gen businesses, local-SEO teams tracking who holds the top slots, and market researchers comparing provider density and ratings across metros.

Honest limits

  • 20 advertisers per query. That is what Google returns per service+city; there is no deeper pagination. Volume comes from more service × city combinations, and the actor de-duplicates by business ID across the whole run.
  • US only. This actor pins every request to hl=en-US&gl=us behind a US residential IP, so it returns US metros only.
  • Google rate-limits. A burst of queries can draw a 429. The actor backs off hard and retries on a fresh IP, and reports how many it absorbed. Very large runs pace themselves and take longer.
  • No "Google Guaranteed" / "Google Screened" badge field. The badge text is not present in the data the page ships, so it is not returned rather than guessed. Every advertiser in this surface is by definition a vetted Local Services advertiser.
  • Ratings are Google's, aggregated across the business's reviews.

Pricing

WhatPrice
Per business returned$0.003

A 1,000-business multi-metro list costs $3. Filtered rows cost nothing.

FAQ

How many results per city? Up to 20 per service+city query. Use several trades and several cities for a bigger list.

Why did I get zero results? Almost always the proxy. Local Services results depend on a US IP — keep the residential US default.

Can I use my own proxy? Yes, but it must be residential US or Google returns an empty list.

What trades work? Anything Google runs Local Services for: plumber, electrician, HVAC, roofer, locksmith, garage door, house cleaning, pest control, lawn care, movers, and professional services like lawyers and realtors.

Are the phone numbers direct? They are the numbers Google publishes on the ad, in international format.

Can I track a competitor over time? Yes — cid and bid are stable, so re-run on a schedule and diff rating and review count. There is no position/rank field; rows arrive in Google's order but that order is not stamped on the row, and the advertiser set itself rotates (13 of 20 businesses recurred between two runs a day apart).

Is there a badge field? No. The badge text is not in the page data, so nothing is invented. Presence in this list already means the business is a vetted Local Services advertiser.

Does it need a browser? No. The advertiser list is server-rendered into the page, so this is a plain HTTP fetch — fast and cheap.

Data source and fair use

Data comes from Google's public Local Services results pages. No login, no paywall and no private API is involved. The actor paces itself — 1.8 s between queries, and a hard back-off on a fresh IP if Google returns a 429. You are responsible for lawful outreach to the businesses returned.