[Local Services campaigns](https://support.google.com/localservices/answer/6224841) let you advertise
your business on Google and receive leads directly from potential customers.
This guide summarizes the supported operations and restrictions in the Google Ads API.

## Supported operations

The Google Ads API supports the following operations for Local Services campaigns.

### Retrieve Local Services campaigns and budgets

Local Services campaigns and budgets can be retrieved using the
[`GoogleAdsService.Search`](https://developers.google.com/google-ads/api/reference/rpc/v26/GoogleAdsService/Search) or
[`GoogleAdsService.SearchStream`](https://developers.google.com/google-ads/api/reference/rpc/v26/GoogleAdsService/SearchStream)
method to query for [`Campaign`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign) resources where
`advertising_channel_type = 'LOCAL_SERVICES'`. Here is an example:

    SELECT
      campaign.id,
      campaign.status,
      campaign_budget.id,
      campaign_budget.period,
      campaign_budget.amount_micros,
      campaign_budget.type
    FROM campaign
    WHERE campaign.advertising_channel_type = 'LOCAL_SERVICES'

> [!NOTE]
> **Note:** Starting in **`v24`** , you can retrieve and update existing Local Services Performance Max campaigns (`advertising_channel_type = 'PERFORMANCE_MAX'` and `campaign.pmax_campaign_settings.local_services_enabled = true`) created in the UI by accounts on the allowlist. Starting in **`v26`** , you can also [create new Local Services Performance Max campaigns](https://developers.google.com/google-ads/api/docs/campaigns/local-service-campaigns#create-campaign) through the API. See [Local Services Performance Max campaigns](https://developers.google.com/google-ads/api/docs/campaigns/local-service-campaigns#pmax-campaigns), the [Performance Max for pay-per-lead goals guide](https://developers.google.com/google-ads/api/performance-max/pay-per-lead), and the [Performance Max campaign level performance guide](https://developers.google.com/google-ads/api/performance-max/campaign-reporting#pmax-local-services) for details.

### Edit Local Services campaigns

You can update the campaign's [`status`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign#status) and the
associated campaign budget's
[`amount_micros`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignBudget#amount_micros) fields.

### Set the bidding strategy

You can set the following bidding strategies as the standard bidding strategy
of Local Services campaigns:

- [`ManualCpa`](https://developers.google.com/google-ads/api/reference/rpc/v26/ManualCpa) by setting the field
  [`manual_cpa`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign#manual_cpa)

  You can set the bids of `ManualCpa` through
  [`LocalServicesCampaignSettings.category_bids`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.LocalServicesCampaignSettings#category_bids%5B%5D).
  You can retrieve and set `LocalServicesCampaignSettings` of Local Services
  campaigns through
  [`Campaign.local_services_campaign_settings`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign#local_services_campaign_settings).
- [`MaximizeConversions`](https://developers.google.com/google-ads/api/reference/rpc/v26/MaximizeConversions) by setting the
  field [`maximize_conversions`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign#maximize_conversions)

### Set an ad schedule as a campaign criterion

You can set an ad schedule for a Local Services campaign as a campaign
criterion.

Create an [`AdScheduleInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdScheduleInfo) and set it to the
[`ad_schedule`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignCriterion#ad_schedule) of the
`CampaignCriterion` that is sent to the Google Ads API, using
[`CampaignCriterionService.MutateCampaignCriteria`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignCriterionService/MutateCampaignCriteria).

### Set location targeting

To enable location targeting for a Local Services campaign, add a
[`LocationInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocationInfo) and set it to the
[`location`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignCriterion#location) field of the
`CampaignCriterion` that is sent to the Google Ads API, using
[`CampaignCriterionService.MutateCampaignCriteria`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignCriterionService/MutateCampaignCriteria).
For more details, see [Location
targeting](https://developers.google.com/google-ads/api/docs/targeting/location-targeting).

### Target specific service types

To enable targeting for a specific service type, create a
[`LocalServiceIdInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServiceIdInfo) with one of the
[Local Services category IDs](https://developers.google.com/google-ads/api/data/codes-formats#local_services_ids), set it on the
[`local_service_id`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignCriterion#local_service_id) field of
a [`CampaignCriterion`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignCriterion), and submit it using
[`CampaignCriterionService.MutateCampaignCriteria`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignCriterionService/MutateCampaignCriteria).

You should use a service ID that matches your campaign's targeting
[location](https://developers.google.com/google-ads/api/reference/rpc/v26/LocationInfo) and
[category](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign#local_services_campaign_settings).

### Submit lead feedback

Use the [`ProvideLeadFeedback`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesLeadService/ProvideLeadFeedback) method of the
[`LocalServicesLeadService`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesLeadService) to submit
rating and feedback for a lead. You can also inspect the
[`lead_feedback_submitted`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesLead#lead_feedback_submitted) field of the
[`LocalServicesLead`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesLead) to help determine
whether a lead was rated and feedback was submitted.

## Unsupported operations

The following table lists unsupported operations for standalone Local Services
campaigns (`advertising_channel_type = 'LOCAL_SERVICES'`).

| Unsupported operations ||
|---|---|
| Create and remove campaigns | The Google Ads API blocks the creation and removal of standalone Local Services campaigns (`advertising_channel_type = 'LOCAL_SERVICES'`). Starting in **`v26`** , you can create new Local Services Performance Max campaigns (`advertising_channel_type = 'PERFORMANCE_MAX'`) by setting `pmax_campaign_settings.local_services_enabled = true`; see [Create Local Services Performance Max campaigns](https://developers.google.com/google-ads/api/docs/campaigns/local-service-campaigns#create-campaign). |
| Operations on sub-entities in a campaign | For standalone Local Services campaigns (`advertising_channel_type = 'LOCAL_SERVICES'`), the Google Ads API does not support the creation, modification, removal, or retrieval of ad groups, ads, or criteria other than the campaign criteria listed in [Supported operations](https://developers.google.com/google-ads/api/docs/campaigns/local-service-campaigns#supported-operations). For Local Services Performance Max campaigns, use [asset groups](https://developers.google.com/google-ads/api/performance-max/asset-groups#local-services-pmax) and [campaign criteria](https://developers.google.com/google-ads/api/docs/targeting/criteria). |

## Local Services resources

Some data from [Local Services Ads](https://ads.google.com/local-services-ads)
are exposed directly in the Google Ads API through the following **read-only** report
resources:

- [`local_services_lead`](https://developers.google.com/google-ads/api/fields/v26/local_services_lead)
- [`local_services_lead_conversation`](https://developers.google.com/google-ads/api/fields/v26/local_services_lead_conversation)
- [`local_services_verification_artifact`](https://developers.google.com/google-ads/api/fields/v26/local_services_verification_artifact)
- [`local_services_employee`](https://developers.google.com/google-ads/api/fields/v26/local_services_employee)

In order for these resources to return data, there must be a Local Services
campaign or Local Services Performance Max campaign in the client account
making the request. The
[`local_services_lead.campaign`](https://developers.google.com/google-ads/api/fields/v26/local_services_lead#local_services_lead.campaign)
field links lead records back to their associated campaign (including
Performance Max for pay-per-lead goals campaigns where
`campaign.advertising_channel_type = 'PERFORMANCE_MAX'` and
`campaign.pmax_campaign_settings.local_services_enabled = true`). To identify
the campaign that these resources are affiliated with, use the following
query:

    SELECT
      campaign.id,
      campaign.advertising_channel_type,
      campaign.pmax_campaign_settings.local_services_enabled
    FROM campaign
    WHERE campaign.advertising_channel_type IN ('LOCAL_SERVICES', 'PERFORMANCE_MAX')

### Local Services lead

[`LocalServicesLead`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesLead) exposes the details of
a lead that are generated when a consumer calls, messages, books a service, or
uses a coupon from the advertiser.

The lead type is defined by
[`LocalServicesLeadType`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesLeadTypeEnum.LeadType).
Starting in **`v26`** , `COUPON` is supported to enable coupon lead types across
Local Services and Local Services Performance Max campaigns.

The [`campaign`](https://developers.google.com/google-ads/api/fields/v26/local_services_lead#local_services_lead.campaign)
field links the lead record back to its associated campaign. In addition to
selecting attributed `campaign` fields (such as `campaign.id` and
`campaign.name`), you can filter lead queries by campaign resource name
(`WHERE local_services_lead.campaign = ...`) or by advertising channel type
(`WHERE campaign.advertising_channel_type = ...`) to segment leads by campaign
type.

Local Services lead data can be retrieved from the
[`local_services_lead`](https://developers.google.com/google-ads/api/fields/v26/local_services_lead) resource. Here's an
example query:

    SELECT
      local_services_lead.lead_type,
      local_services_lead.category_id,
      local_services_lead.service_id,
      local_services_lead.contact_details,
      local_services_lead.lead_status,
      local_services_lead.creation_date_time,
      local_services_lead.locale,
      local_services_lead.lead_charged,
      local_services_lead.credit_details.credit_state,
      local_services_lead.credit_details.credit_state_last_update_date_time,
      local_services_lead.campaign
    FROM local_services_lead

#### Limitations

- The `contact_details` field is null if `lead_status` equals `WIPED_OUT`.
- Starting in **`v25`** , `ContactDetails.email` is removed and [`ContactDetails.phone_number_extension`](https://developers.google.com/google-ads/api/reference/rpc/v26/ContactDetails#phone_number_extension) is available on the [`ContactDetails`](https://developers.google.com/google-ads/api/reference/rpc/v26/ContactDetails) message returned by `local_services_lead.contact_details`.
- Data from leads where the `category_id` is part of a healthcare category are not available.

### Local Services lead conversation

[`LocalServicesLeadConversation`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesLeadConversation)
exposes the details of conversations that have taken place as part of a
`LocalServicesLead`. There is a one-to-many relationship with
`LocalServicesLead`, where one lead can have many conversations. The resource
name for the related lead can be found in the `lead` field.

Conversation data can be retrieved from the
[`local_services_lead_conversation`](https://developers.google.com/google-ads/api/fields/v26/local_services_lead_conversation)
resource. Here's an example query that filters for results that are phone
calls:

    SELECT
      local_services_lead_conversation.id,
      local_services_lead_conversation.conversation_channel,
      local_services_lead_conversation.participant_type,
      local_services_lead_conversation.lead,
      local_services_lead_conversation.event_date_time,
      local_services_lead_conversation.phone_call_details.call_duration_millis,
      local_services_lead_conversation.phone_call_details.call_recording_url,
      local_services_lead_conversation.message_details.text,
      local_services_lead_conversation.message_details.attachment_urls
    FROM local_services_lead_conversation
    WHERE local_services_lead_conversation.conversation_channel = 'PHONE_CALL'

You can use the
[`LocalServicesLeadService.AppendLeadConversation`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesLeadService/AppendLeadConversation)
method to append
[`LocalServicesLeadConversation`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesLeadConversation)
resources to a `LocalServicesLead`.

#### Limitations

- To access the call recording URL, you must sign in with an email address that has at least read-only access to the Google Ads client account that owns the campaign that the lead is associated with.
- Requesting all conversations at once can be a time-consuming request, so
  you should filter conversations by lead, for example:

      SELECT
        local_services_lead_conversation.id,
        local_services_lead_conversation.event_date_time,
        local_services_lead_conversation.message_details.text
      FROM local_services_lead_conversation
      WHERE local_services_lead_conversation.lead = 'customers/CUSTOMER_ID/localServicesLeads/LEAD_ID'

### Verification artifacts

[`LocalServicesVerificationArtifact`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesVerificationArtifact)
exposes verification data for advertisers' businesses. Note that these
verifications are at the business level and don't include verifications for
employees. The data includes the following:

- License verifications
- Insurance verifications
- Background check verifications
- Business registration verifications

Any time a verification request is submitted to Local Services Ads, a new
verification artifact instance is created for it in the Google Ads API, and each
verification artifact represents a single verification request. Each
verification artifact might contain some of the following information,
depending on what type of verification request it represents:

- Status of each verification artifact
- Background check URL to be used for background check verification
- Background check adjudication time (if applicable)
- Insurance document URL to view the already-submitted Insurance information
- Insurance rejection reason (if applicable)
- License details (type, number, first, last names)
- License rejection reason (if applicable)
- License document URL to view already submitted license image (if applicable)
- Business registration details (check ID, registration number)
- Business registration rejection reason (if applicable)
- Business registration document URL to view already submitted registration image (if applicable)

Verification artifact data can be retrieved from the
[`local_services_verification_artifact`](https://developers.google.com/google-ads/api/fields/v26/local_services_verification_artifact)
resource. Here's an example query that retrieves data for all the
license-related verification artifacts for a given client account:

    SELECT
      local_services_verification_artifact.id,
      local_services_verification_artifact.creation_date_time,
      local_services_verification_artifact.status,
      local_services_verification_artifact.artifact_type,
      local_services_verification_artifact.license_verification_artifact.license_type,
      local_services_verification_artifact.license_verification_artifact.license_number,
      local_services_verification_artifact.license_override_artifact.licensee_first_name,
      local_services_verification_artifact.license_verification_artifact.licensee_last_name,
      local_services_verification_artifact.license_verification_artifact.rejection_reason
    FROM local_services_verification_artifact
    WHERE local_services_verification_artifact.artifact_type = 'LICENSE'

### Geographic and categorical verification data

To programmatically determine the status of verification requests by geographic
location (specifically, [geo target code](https://developers.google.com/google-ads/api/data/geotargets)) and
[Local Services category
ID](https://developers.google.com/google-ads/api/data/codes-formats#local_services_ids), you can use the
[`local_services_settings`](https://developers.google.com/google-ads/api/reference/rpc/v26/Customer#local_services_settings)
field on the [`customer`](https://developers.google.com/google-ads/api/fields/v26/customer) resource, which has the type
[`LocalServicesSettings`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesSettings).

This field exposes a high-level summary of the status of license and insurance
verification requests by location and category. Here's an example query that
retrieves all such data:

    SELECT
      customer.local_services_settings.granular_license_statuses,
      customer.local_services_settings.granular_insurance_statuses
    FROM customer

### Local service employee

[`LocalServicesEmployee`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesEmployee) exposes the data
about local service employees that the advertisers have uploaded their ad
profile into our systems.

Here's an example query that retrieves data for all the local service employees
for a given client account:

    SELECT
      local_services_employee.status,
      local_services_employee.type,
      local_services_employee.university_degrees,
      local_services_employee.residencies,
      local_services_employee.fellowships,
      local_services_employee.job_title,
      local_services_employee.year_started_practicing,
      local_services_employee.languages_spoken,
      local_services_employee.first_name,
      local_services_employee.middle_name,
      local_services_employee.last_name
    FROM local_services_employee

## Local Services Performance Max campaigns

[Performance Max campaigns](https://developers.google.com/google-ads/api/performance-max) support Local Services-related settings
starting in `v24`. These settings let you configure and identify a
Performance Max campaign that serves Local Services Ads (GLS PMax).

### Create Local Services Performance Max campaigns

Starting in **`v26`** , the Google Ads API supports both creating and updating Local
Services Performance Max campaigns. You can create new Local Services
Performance Max campaigns through the API by creating a Performance Max
campaign (`advertising_channel_type = 'PERFORMANCE_MAX'`) and setting
`local_services_enabled = true` on
[`pmax_campaign_settings`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign#pmax_campaign_settings) (immutable after creation).
When creating a Local Services Performance Max campaign, both
[`country_code`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.LocalServicesPmaxCampaignSettings#country_code) and [`listing_id`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.LocalServicesPmaxCampaignSettings#listing_id) are required in
[`local_services_pmax_campaign_settings`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.PmaxCampaignSettings#local_services_pmax_campaign_settings). In `v24` and `v25`,
the API supports **updates only** for existing Local Services Performance Max
campaigns created in the UI by accounts on the allowlist. For end-to-end
instructions on configuring prerequisites and creating campaigns atomically,
see the [Performance Max for pay-per-lead goals guide](https://developers.google.com/google-ads/api/performance-max/pay-per-lead).

### Identify Local Services Performance Max campaigns

To identify whether a Performance Max campaign is a Local Services campaign,
check the [`local_services_enabled`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.PmaxCampaignSettings#local_services_enabled) field on
the campaign's [`pmax_campaign_settings`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign#pmax_campaign_settings). This field is
an immutable (`CREATE ONLY`) boolean set to `true` at campaign creation.

### Configure settings

For campaigns where `local_services_enabled` is `true`, configure the settings
under the
[`local_services_pmax_campaign_settings`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.PmaxCampaignSettings#local_services_pmax_campaign_settings)
field:

- [`listing_id`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.LocalServicesPmaxCampaignSettings#listing_id): The Google Business Profile listing ID linked to the campaign. Starting in **`v26`** , this field is required and immutable during Local Services Performance Max campaign creation. The listing ID must be linked to the account as an enabled `LOCATION` asset; otherwise, the API returns a [`CampaignError.INVALID_LOCAL_SERVICES_PERFORMANCE_MAX_LISTING_ID`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignErrorEnum.CampaignError#invalid_local_services_performance_max_listing_id) error. Because `listing_id` is marked `IMMUTABLE`, attempting to update this field after campaign creation fails with [`RequestError.IMMUTABLE_FIELD`](https://developers.google.com/google-ads/api/reference/rpc/v26/RequestErrorEnum.RequestError#immutable_field). Developers can discover or verify linked listing IDs by querying the [`Asset`](https://developers.google.com/google-ads/api/reference/rpc/v26/Asset) resource for enabled `LOCATION` assets (inspecting `location_asset.business_profile_locations`). For more information, see [Location assets](https://developers.google.com/google-ads/api/docs/assets/location-assets).
- [`navigational_query_leads_enabled`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.LocalServicesPmaxCampaignSettings#navigational_query_leads_enabled): Whether to use a navigational query filter.
- [`founding_year`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.LocalServicesPmaxCampaignSettings#founding_year): The founding year of the business.
- [`country_code`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.LocalServicesPmaxCampaignSettings#country_code): The country code of the Local Services Ad. Starting in **`v26`** , this field is required and immutable, set once during campaign creation. It is an uppercase, two-letter [country code](https://developers.google.com/google-ads/api/data/codes-formats#country_codes) (currently, only `US` is supported for Local Services Performance Max campaigns), used to determine verification requirements and validate location criterion selection.
- [`phone_numbers`](https://developers.google.com/google-ads/api/reference/rpc/v26/Campaign.LocalServicesPmaxCampaignSettings#phone_numbers%5B%5D): A list of phone numbers associated with the provider, represented by [`LocalServicesPhoneNumber`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesPhoneNumber) messages. If omitted, the call number defaults to the phone number on the linked Google Business Profile listing, and is required if the Business Profile listing does not have a phone number.

### Phone numbers

Each entry in the `phone_numbers` repeated field uses the
[`LocalServicesPhoneNumber`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesPhoneNumber) message type with the
following fields:

- [`phone_number`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesPhoneNumber#phone_number): The phone number.
- [`country_code`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesPhoneNumber#country_code): Uppercase, two-letter [country code](https://developers.google.com/google-ads/api/data/codes-formats#country_codes).
- [`phone_number_type`](https://developers.google.com/google-ads/api/reference/rpc/v26/LocalServicesPhoneNumber#phone_number_type): The type of phone number, defined by [`GlsPhoneNumberTypeEnum.GlsPhoneNumberType`](https://developers.google.com/google-ads/api/reference/rpc/v26/GlsPhoneNumberTypeEnum.GlsPhoneNumberType). Supported types include:
  - `DESTINATION_PHONE_NUMBER_FOR_ADS`: Destination number to use for calls from a Local Services ad unit (for call leads, default).
  - `DESTINATION_PHONE_NUMBER_FOR_SMS_ONLY`: Destination number that supports SMS (optional, for message lead SMS notifications).
  - `DESTINATION_PHONE_NUMBER_FOR_WHATSAPP_ONLY`: Destination number for a provider's WhatsApp account.