# Google Local Services Ads Scraper: Home Service Leads & Rank (`getascraper/google-local-services-ads-scraper`) Actor

Find the home service advertisers Google Local Services shows for any trade and city. Get rank, phone, rating, review breakdown, years in business and weekly hours, search many cities in one run with no per-city fee, and track new and removed advertisers on a schedule.

- **URL**: https://apify.com/getascraper/google-local-services-ads-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Lead generation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.88 / 1,000 advertiser listings

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

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🏠 Google Local Services Ads Scraper: Home Service Leads & Rank

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed;margin-bottom:0">
<tr>
<td colspan="3" style="padding:14px 18px;background:#F1F8F3;border:none;border-top:3px solid #137333;border-left:1px solid #CFE5D5;border-right:1px solid #CFE5D5;color:#1C1917;border-radius:10px 10px 0 0">
<span style="font-size:16px;font-weight:700;color:#1C1917">See any local market on Google three ways.</span> <span style="font-size:15px;color:#57534E">Export the places in a shared Maps list, see which businesses keep posting updates, and find the home-service firms paying for Local Services ads.</span>
</td>
</tr>
<tr>
<td colspan="3" style="padding:10px 14px;background:#137333;border:none;border-left:1px solid #CFE5D5;border-right:1px solid #CFE5D5;color:#FFFFFF">
<span style="color:#FFFFFF;font-size:14px;font-weight:700;letter-spacing:0.5px">GOOGLE LOCAL BUSINESS DATA</span>
<span style="color:#FFFFFF;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Lists, posts and paid service ads for the local businesses you sell to.</span>
</td>
</tr>
<tr>
<td style="padding:10px 12px;border:none;border-left:1px solid #CFE5D5;border-bottom:1px solid #CFE5D5;vertical-align:top;width:33.3%;background:#FFFFFF;color:#1C1917">
<span style="overflow-wrap:break-word;word-break:break-word"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/jNDbFabbVxMhnQNb4-actor-Ls2qguz0d0xLlCyll-cgMOfy5UGZ-images_%286%29.jpeg" width="20" height="20" style="vertical-align:middle;border-radius:4px">&nbsp;<a href="https://apify.com/getascraper/google-maps-list-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Maps List</a></span><br>
<span style="color:#57534E;font-size:11px">Every place in a shared list, 30+ fields.</span>
</td>
<td style="padding:10px 12px;border:none;border-left:1px solid #CFE5D5;border-bottom:1px solid #CFE5D5;vertical-align:top;width:33.3%;background:#FFFFFF;color:#1C1917">
<span style="overflow-wrap:break-word;word-break:break-word"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/jNDbFabbVxMhnQNb4-actor-eppF0yXbgpmD0g060-AhWxegcRuz-google-maps-logo250x250.png" width="20" height="20" style="vertical-align:middle;border-radius:4px">&nbsp;<a href="https://apify.com/getascraper/google-maps-business-posts-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Maps Posts</a></span><br>
<span style="color:#57534E;font-size:11px">Business posts plus a posting-activity leaderboard.</span>
</td>
<td style="padding:10px 12px;border:none;border-left:1px solid #CFE5D5;border-right:1px solid #CFE5D5;border-bottom:1px solid #CFE5D5;vertical-align:top;width:33.3%;background:#F1F8F3;color:#1C1917">
<span style="overflow-wrap:break-word;word-break:break-word"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/jNDbFabbVxMhnQNb4-actor-wVoMUagGTvWM4IbOO-N8hIlybgqw-images_%2879%29.png" width="20" height="20" style="vertical-align:middle;border-radius:4px">&nbsp;<a href="https://apify.com/getascraper/google-local-services-ads-scraper" style="color:#137333;text-decoration:none;font-weight:700;font-size:13px">Local Services Ads</a></span><br>
<span style="color:#137333;font-size:11px;font-weight:700">&#10148; You are here</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0;margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#F1F8F3;border:1px solid #CFE5D5;border-top:none;color:#1C1917">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">See who is paying for the top spots in every city you serve, and know the day that changes.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Pick your services and cities. Get every advertiser Google Local Services shows, with rank, phone, rating, reviews, years in business and hours, in one clean list.</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #CFE5D5;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 0 10px">
<span style="font-size:15px;font-weight:800;color:#0B5A27">🗺️ Many cities, one run</span><br>
<span style="font-size:12px;color:#57534E">Cross any services with any cities. No fee per city.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #CFE5D5;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#0B5A27">🏆 Rank and reviews</span><br>
<span style="font-size:12px;color:#57534E">Position, rating, star breakdown and review count on every row.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #CFE5D5;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#0B5A27">🔔 Change tracking</span><br>
<span style="font-size:12px;color:#57534E">Schedule it and get new, updated and removed advertisers only.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #CFE5D5;border-left:none;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 10px 0">
<span style="font-size:15px;font-weight:800;color:#0B5A27">🎯 Filters that save money</span><br>
<span style="font-size:12px;color:#57534E">Skip weak leads before they are saved or charged.</span>
</td>
</tr>
</table>

Google Local Services shows a short list of paid home service advertisers at the top of search for trades like plumbers, electricians and HVAC. This Actor reads that list for every service and city you give it. Each advertiser comes back as one row with its rank, phone number, rating, review breakdown, years in business, service area, weekly hours and highlights. Run it once for a market snapshot, or schedule it to see who enters and leaves each city.

### 👥 Why use it

- **Local marketing agencies:** "I need to show a prospect who already advertises in their city, how they rank and how many reviews they have, before the sales call."
- **Lead generation sellers:** "I want a fresh list of established home service companies with phone numbers, filtered by rating and years in business."
- **Franchises and multi-location brands:** "I want to watch competitors in every market I serve and see when a new one starts advertising."
- **Market researchers:** "I need advertiser counts and review levels per trade and city, repeated on a schedule."

### 🔍 What does Google Local Services Ads Scraper do?

- Searches every service in every city you list, in one run.
- Returns rank, name, category, phone, rating, star breakdown, review count, years in business, founding year, service area, weekly hours, open status, highlights and profile link.
- Supports the United States, the United Kingdom and Canada.
- Keeps each advertiser once across all your searches and tells you every search it appeared in.
- Tracks changes between scheduled runs: new, updated, reopened and removed advertisers per service and city, with rank, rating and review movement.
- Filters by minimum rating, reviews and years in business, phone number and open now. Advertisers that fail a filter are never saved or charged.
- Optionally adds profile detail (a paid add-on, off by default): the verified label when shown, services offered, areas served, review topics and recent reviews.
- Explains every search in a run summary, including searches with no results, unrecognised places and searches Google did not answer.

### 🚀 How to use it

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:16px 14px;width:33%;background:#F1F8F3;border:1px solid #CFE5D5;border-radius:10px 0 0 10px;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#137333;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Add services and cities</span><br>
<span style="font-size:12px;color:#57534E">Type a trade like Plumber and a place like Austin, TX.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F1F8F3;border:1px solid #CFE5D5;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#137333;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Set filters and limits</span><br>
<span style="font-size:12px;color:#57534E">Choose how many advertisers to keep and what quality you want.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F1F8F3;border:1px solid #CFE5D5;border-left:none;border-radius:0 10px 10px 0;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#137333;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run or schedule</span><br>
<span style="font-size:12px;color:#57534E">Download the list, or schedule it to get only what changed.</span>
</td>
</tr>
</table>

Google shows about 20 advertisers per search. For a crowded metro, add neighbouring cities or ZIP codes as extra locations: the results are merged and duplicates are removed.

### ⚙️ Input

| Field | Type | Required | Description |
|---|---|---|---|
| Services | array of text | No | Trades to look up, such as Plumber, Electrician or HVAC. Every service is searched in every location. |
| Locations | array of text | No | Cities as City, ST (Austin, TX), just the city for the United Kingdom, or ZIP and postal codes. |
| Country | enum | No | United States, United Kingdom or Canada. |
| Strict location check | boolean | No | Reports and skips a search when Google answers for a different area than the one you typed. |
| Minimum rating | number | No | Keep only advertisers with at least this star rating. |
| Minimum reviews | integer | No | Keep only advertisers with at least this many reviews. |
| Minimum years in business | integer | No | Keep only advertisers showing at least this many years. |
| Only advertisers with a phone number | boolean | No | Skip advertisers that list no phone. |
| Only advertisers open right now | boolean | No | Keep only advertisers shown as open when the search is read. |
| Add profile details | boolean | No | Paid add-on. Adds verified label, services, areas served, review topics and recent reviews for each advertiser whose profile could be read. Slower. |
| Include booking and message links | boolean | No | Adds the booking and messaging links when offered. These belong to the paid ad. |
| Change tracking | enum | No | Off, changes only, or all advertisers with change status. |
| Watchlist name | text | No | Keeps one schedule's saved state apart from another. |
| Removed after missed runs | integer | No | How many complete runs in a row an advertiser must be missing before it counts as removed. |
| Start the watchlist over | boolean | No | Treats everything as new and saves a fresh baseline. |
| Maximum advertisers | integer | No | Most advertisers saved in the run, counted after filters. |
| Passes per search | integer | No | Looks again with different wording and merges the results. Adds little in most cities. |
| One row per advertiser | boolean | No | Saves each advertiser once across searches, or one row per search when off. |
| Proxy configuration | proxy | No | Leave the default. The Actor picks the connection it needs. |

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| advertiserId | text | Stable id for the advertiser, usable to join runs. |
| businessName | text | Business name as shown in the ad. |
| category | text | Service category, for example Plumbers. |
| service, location, country | text | The search that found the advertiser. |
| rank | integer | Position in the list Google returned. The order changes between looks, so compare within one run. |
| phone | text | Phone number on the ad, in international format. It is Google's forwarding number for the ad. |
| rating, reviewCount | number | Average star rating and number of reviews. |
| ratingBreakdown | object | Reviews per star level, 1 to 5. |
| yearsInBusiness, foundedYear | integer | Years in business and founding year as shown. |
| serviceArea | text | Area served as shown. |
| hours, openStatus, openNowText | object, text | Weekly hours and the open or closed status when read. |
| highlights | array of text | Highlights such as 24/7 emergency service. |
| profileUrl, logoUrl | text | Profile link and logo image. |
| queries, searchCount | array, integer | Every search the advertiser appeared in (one row per advertiser mode). |
| timesSeen, seenInPasses | integer, array | How often it appeared across passes. |
| changeType, changedFields | text, array | Change status and changed fields when change tracking is on. |
| rankChange, ratingChange, reviewCountChange | number | Movement since the previous run. |
| firstSeenAt, lastSeenAt | date | When the advertiser was first and last seen in the watchlist. |
| isVerified, verifiedLabel | boolean, text | Verified label from the profile, only when profile details are on and Google shows it. |
| servicesOffered, serviceAreaCounties, reviewTopics, recentReviews, attributes | arrays | Profile detail, only when profile details are on. |
| scrapedAt | date | When the search was read. |

Fields Google does not show for an advertiser are left out, never filled with placeholders. The list does not carry a Google Guaranteed or Google Screened badge, street address, licence or website, so those are not returned.

Example row:

```json
{
  "advertiserId": "264203903-2509568154",
  "businessName": "Roto-Rooter Plumbing & Water Cleanup",
  "category": "Plumbers",
  "service": "Plumber",
  "location": "Austin, TX",
  "country": "US",
  "rank": 2,
  "phone": "+15123626777",
  "rating": 4.8,
  "reviewCount": 3465,
  "ratingBreakdown": { "1": 148, "2": 31, "3": 32, "4": 95, "5": 3159 },
  "yearsInBusiness": 91,
  "foundedYear": 1935,
  "serviceArea": "Austin",
  "highlights": ["24/7 emergency service", "Same-day service available"],
  "openStatus": "Open",
  "openNowText": "Open 24 hours"
}
```

### 💰 Pricing

Pay per result. You pay for each advertiser saved to your dataset. Advertisers removed by your filters, unchanged advertisers in change-only mode, and runs that find nothing cost nothing. Profile details are a separate paid add-on, charged only for advertisers whose profile was read; if your spend limit cannot cover it, the profile detail is left out and the advertiser is still saved. There are no subscriptions. Free plan runs are limited to 100 advertisers per run and 10 runs per day.

### ⭐ Enjoying Google Local Services Ads Scraper?

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:20px 24px 14px;background:#F1F8F3;border:1px solid #CFE5D5;border-left:5px solid #137333;border-radius:10px 10px 0 0;color:#1C1917">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Turned a whole market of local advertisers into one list in minutes?</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other agencies and lead generation teams find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#137333;border:1px solid #137333;border-left:5px solid #137333;border-top:none;color:#FFFFFF;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/google-local-services-ads-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ FAQ

**Why do I get about 20 advertisers per search?**
Google shows around 20 advertisers per search and changes the mix over time. For a bigger picture of a metro, add neighbouring cities or ZIP codes as locations, and schedule change tracking to see who comes and goes over several days.

**How do I find Google Local Services advertisers near me or in any city?**
Add the trade and the city, for example Plumber and Austin, TX, and run it. The list matches what a customer searching in that city sees.

**Does it return the Google Guaranteed badge?**
No. The advertiser list does not carry a badge, so none is invented. With profile details on, the verified label is returned when Google shows it.

**Why is the phone number different from the company website number?**
Local Services ads use a forwarding number set up by Google for the ad. It rings the company, but it is not always their own listed line.

**Can I track when a competitor starts or stops advertising?**
Yes. Turn on change tracking and schedule the run. An advertiser is reported as removed only after it has been missing from several complete runs in a row, because Google rotates which advertisers it shows.

### 🔗 Other actors

- [Google Maps Posts Scraper: Track Posts & Rank Local Competitors](https://apify.com/getascraper/google-maps-business-posts-scraper) ↗ - follow local competitors' Google Maps posts.
- [Google Maps List Scraper: 30+ Fields Per Place](https://apify.com/getascraper/google-maps-list-scraper) ↗ - collect places from curated Google Maps lists.
- [Google Shopping Ads Scraper: Live Paid Ads, Prices & Merchants](https://apify.com/getascraper/google-shopping-ads-scraper) ↗ - see who pays for product ads on Google.
- [Blue Book Contractor Scraper: US Leads by State, Trade and City](https://apify.com/getascraper/thebluebook-contractor-directory) ↗ - contractor leads by state, trade and city.
- [Contractor License Verification: Multi-State](https://apify.com/getascraper/multistate-contractor-license-verifier) ↗ - check contractor licences across states.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/google-local-services-ads-scraper/changelog.md

# Actor input Schema

## `services` (type: `array`):

Trade 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.

## `locations` (type: `array`):

Places 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.

## `country` (type: `string`):

Market 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.

## `strictLocation` (type: `boolean`):

When 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).

## `minRating` (type: `number`):

Keep 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, so they cost nothing.

## `minReviews` (type: `integer`):

Keep only advertisers with at least this many Google reviews. Useful to focus on established companies.

## `minYearsInBusiness` (type: `integer`):

Keep 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.

## `requirePhone` (type: `boolean`):

Skip advertisers that list no phone number. The number is Google's call-forwarding number for the ad, not always the company's own line.

## `openNowOnly` (type: `boolean`):

Keep only advertisers shown as open at the moment the search is read.

## `includeProfile` (type: `boolean`):

Open 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. This is a paid add-on: each advertiser whose profile is read is billed separately, on top of the normal result. Profiles that cannot be read are never billed. Runs take longer. Reviewer names and ids are public Google review data.

## `includeActionLinks` (type: `boolean`):

Add 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.

## `monitorMode` (type: `string`):

For 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.

## `monitorScope` (type: `string`):

Names the saved watchlist so different customers or schedules stay separate. Keep it the same for every run of one schedule.

## `removedAfterMisses` (type: `integer`):

How 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.

## `resetMonitor` (type: `boolean`):

Ignore the saved state for this run and treat everything as new, then save it as the new baseline. Switch it off again afterwards.

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

Most 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.

## `passes` (type: `integer`):

Looks 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.

## `uniqueOnly` (type: `boolean`):

Save 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.

## `proxyConfiguration` (type: `object`):

Leave 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.

## Actor input object example

```json
{
  "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
  }
}
```

# Actor output Schema

## `advertisers` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "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 the Actor and wait for it to finish
const run = await client.actor("getascraper/google-local-services-ads-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 = {
    "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 the Actor and wait for it to finish
run = client.actor("getascraper/google-local-services-ads-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 '{
  "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
  }
}' |
apify call getascraper/google-local-services-ads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/google-local-services-ads-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/wVoMUagGTvWM4IbOO/builds/bYTN152FAVdmnefCb/openapi.json
