> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nekt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Google Local Services as a data source

> Bring Google Local Services Ads performance and lead data to Nekt.

Google Local Services Ads (LSA) helps local service businesses — plumbers, electricians, locksmiths, and more — appear at the top of Google Search and connect with nearby customers. Advertisers pay per lead rather than per click, and Google surfaces verified providers with ratings and reviews. This connector brings your Local Services account performance and lead-level data into Nekt.

## Configuring Google Local Services as a Source

In the [Sources](https://app.nekt.ai/sources) tab, click on the "Add source" button located on the top right of your screen. Then, select the Google Local Services option from the list of connectors.

Click **Next** and you'll be prompted to add your access.

### 1. Add account access

You'll need to authorize Nekt to access your Local Services data. Using the UI, you can click on the `Google Authorization` button and log in with the Google account that has read access to your Local Services manager account. Alternatively, you can configure your own OAuth app credentials.

The following configurations are available:

* **Manager customer ID**: (Required) The Google Ads manager (MCC) customer ID that owns the linked Local Services accounts. Use digits only, without dashes.
* **Customer ID filter**: (Optional) Restrict the reports to a single linked Local Services customer ID. Use digits only, without dashes.
* **Start date**: (Optional) The earliest lead creation date to sync for the detailed lead reports stream. Defaults to one year ago.

Once you're done, click **Next**.

### 2. Select streams

Choose which data streams you want to sync. The following streams are available:

* **account\_reports**: Performance and metrics for each linked Local Services account, comparing the current period against the previous one (charged leads, phone calls, cost, ratings, and reviews).
* **detailed\_lead\_reports**: Lead-level detail for each linked account, including lead type, category, geography, charge status, and per-lead-type contact information.

> Tip: The stream can be found more easily by typing its name.

Select the streams and click **Next**.

### 3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data), and the type of sync.

* **Layer**: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
* **Folder**: a folder can be created inside the selected layer to group all tables being created from this new data source.
* **Table name**: we suggest a name, but feel free to customize it. You have the option to add a **prefix** to all tables at once and make this process faster.
* **Sync Type**: you can choose between INCREMENTAL and FULL\_TABLE.
  * Incremental: every time the extraction happens, we'll get only the new data, which is useful when you want to keep historical records.
  * Full table: every time the extraction happens, we'll get the current state of the data, which is useful when you do not want deleted records in your catalog.

Once you are done configuring, click **Next**.

### 4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters.

To define your [Trigger](https://docs.nekt.com/runs/scheduling-and-triggers), consider how frequently you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times).

Optionally, you can define some additional settings:

* Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource [here](https://docs.nekt.com/get-started/core-concepts/resource-control).
* Determine when to execute an **Additional [Full Sync](https://docs.nekt.com/get-started/core-concepts/types-of-sync#additional-full-sync)**. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.

Once you are ready, click **Next** to finalize the setup.

### 5. Check your new source

You can view your new source on the [Sources](https://app.nekt.ai/sources) page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.

<Warning>For you to be able to see it on your [Catalog](https://app.nekt.ai/catalog), you need at least one successful source run.</Warning>

# Streams and Fields

Below you'll find the available data streams from Google Local Services and their corresponding fields:

<AccordionGroup>
  <Accordion title="Account Reports">
    Stream for retrieving performance and metrics for each linked Local Services account. Each row compares the current period against the previous period of equal length.

    **Sync behavior:**

    * Primary key: `account_id`
    * Replication: Full table

    | Field                                   | Type    | Description                                                         |
    | :-------------------------------------- | :------ | :------------------------------------------------------------------ |
    | `account_id`                            | String  | Unique identifier of the Local Services account.                    |
    | `business_name`                         | String  | Business name of the account.                                       |
    | `currency_code`                         | String  | Currency code of the account.                                       |
    | `average_weekly_budget`                 | Number  | Average weekly budget in the local currency.                        |
    | `average_five_star_rating`              | Number  | Average review rating (1–5 stars).                                  |
    | `total_review`                          | Integer | Total number of reviews.                                            |
    | `impressions_last_two_days`             | Integer | Impressions in the last two days.                                   |
    | `phone_lead_responsiveness`             | Number  | Phone lead responsiveness (0–1).                                    |
    | `current_period_charged_leads`          | Integer | Charged leads in the current period.                                |
    | `current_period_phone_calls`            | Integer | Phone calls in the current period.                                  |
    | `current_period_connected_phone_calls`  | Integer | Connected phone calls in the current period.                        |
    | `current_period_total_cost`             | Number  | Total cost in the current period.                                   |
    | `previous_period_charged_leads`         | Integer | Charged leads in the previous period.                               |
    | `previous_period_phone_calls`           | Integer | Phone calls in the previous period.                                 |
    | `previous_period_connected_phone_calls` | Integer | Connected phone calls in the previous period.                       |
    | `previous_period_total_cost`            | Number  | Total cost in the previous period.                                  |
    | `aggregator_provider_id`                | String  | Aggregator provider ID, if the account is managed by an aggregator. |
  </Accordion>

  <Accordion title="Detailed Lead Reports">
    Stream for retrieving lead-level detail for each linked Local Services account. Per-lead-type fields are populated according to the `lead_type` (phone, message, or booking).

    **Sync behavior:**

    * Primary key: `lead_id`
    * Replication key: `lead_creation_timestamp` (incremental sync supported)

    | Field                                                | Type     | Description                                          |
    | :--------------------------------------------------- | :------- | :--------------------------------------------------- |
    | `lead_id`                                            | String   | Unique identifier of the lead.                       |
    | `account_id`                                         | String   | Local Services account that received the lead.       |
    | `google_ads_lead_id`                                 | String   | Google Ads lead ID.                                  |
    | `business_name`                                      | String   | Business name of the account.                        |
    | `lead_creation_timestamp`                            | Datetime | Timestamp the lead was created.                      |
    | `lead_type`                                          | String   | Lead type: MESSAGE, PHONE\_CALL, or BOOKING.         |
    | `lead_category`                                      | String   | Category of the service for the lead.                |
    | `geo`                                                | String   | Geographic region of the lead.                       |
    | `currency_code`                                      | String   | Currency code of the lead price.                     |
    | `lead_price`                                         | Number   | Price charged for the lead.                          |
    | `charge_status`                                      | String   | Charge status: CHARGED or NOT\_CHARGED.              |
    | `dispute_status`                                     | String   | Dispute status of the lead.                          |
    | `aggregator_provider_id`                             | String   | Aggregator provider ID, if applicable.               |
    | `timezone_id`                                        | String   | IANA timezone ID of the account.                     |
    | `timezone_version`                                   | String   | IANA timezone database version.                      |
    | `phone_lead_charged_call_timestamp`                  | Datetime | Timestamp of the charged phone call.                 |
    | `phone_lead_charged_connected_call_duration_seconds` | String   | Duration of the connected charged call (e.g. `65s`). |
    | `phone_lead_consumer_phone_number`                   | String   | Consumer phone number for the phone lead.            |
    | `message_lead_consumer_phone_number`                 | String   | Consumer phone number for the message lead.          |
    | `message_lead_customer_name`                         | String   | Customer name for the message lead.                  |
    | `message_lead_job_type`                              | String   | Job type for the message lead.                       |
    | `message_lead_postal_code`                           | String   | Postal code for the message lead.                    |
    | `booking_lead_booking_appointment_timestamp`         | Datetime | Appointment timestamp for the booking lead.          |
    | `booking_lead_consumer_email`                        | String   | Consumer email for the booking lead.                 |
    | `booking_lead_consumer_phone_number`                 | String   | Consumer phone number for the booking lead.          |
    | `booking_lead_customer_name`                         | String   | Customer name for the booking lead.                  |
    | `booking_lead_job_type`                              | String   | Job type for the booking lead.                       |
  </Accordion>
</AccordionGroup>

## Implementation Notes

### Data behavior considerations

* **Account reports** are a full-table snapshot. Each run reports a rolling 30-day current period alongside the equivalent previous period, so the table always reflects recent performance rather than historical rows.
* **Detailed lead reports** support true incremental sync on `lead_creation_timestamp`. The Local Services API limits each query to a 31-day range, so the connector automatically splits the sync window (from your start date or last bookmark up to today) into ≤30-day chunks.
* The per-lead-type fields (`phone_lead_*`, `message_lead_*`, `booking_lead_*`) are only populated for leads of the matching `lead_type`; the others will be empty.

### API access & credentials

* The connector authenticates with Google OAuth using the `https://www.googleapis.com/auth/adwords` scope, against the Local Services API (`localservices.googleapis.com`).
* The manager account must run Local Services Ads, and Local Services API access may need to be enabled/approved by Google. If reports come back empty, confirm the account has API access and that the manager customer ID is correct.
* Google has marked the `detailedLeadReports` endpoint as deprecated in favor of the Google Ads API. It remains functional today; account reports are unaffected.

## Skills for agents

<Snippet file="agent-skills-intro.mdx" />

<Card title="Download Google Local Services skills file" icon="wand-magic-sparkles" href="/sources/google-local-services.md">
  Google Local Services connector documentation as plain markdown, for use in AI agent contexts.
</Card>
