Location Targeting  |  Google Ads API  |  Google for Developers (2024)

Stay organized with collections Save and categorize content based on your preferences.

This guide describes location targeting, and how you can use the Google Ads API to add,retrieve, and update location targeting for your campaigns.

Why is geo targeting important?

Location targeting lets you serve ads to users in a particular geographicalregion. For example, assume you're advertising for a chain of supermarkets.Without location targeting, your ads would show in all regions worldwide, andyour ads might receive clicks from users in regions where you have nosupermarket locations. This generates cost while providing no possibility of areturn on the investment. With location targeting, your campaigns show ads onlyin regions where you have open supermarkets. This approach also lets youdirectly target customers searching locally for supermarkets.

The Google Ads API lets you target your ads by country, region, or proximityaround a specific geographicalpoint.

Learn more aboutTargeting ads to geographic locations.

Geo target campaigns for a region

You can target campaigns to any geographical region for which Google Adssupports location targeting, for instance, a country, a state, a city, or apostal region. Each targetable location is uniquely identified by a CriterionID. You can look up a criterion ID usingGeoTargetConstantService.SuggestGeoTargetConstants.The resource_name of each GeoTargetConstant isof the form geoTargetConstants/{Criterion ID}. For example, theresource_name value of New York state is geoTargetConstants/21167.

You can add geo targets to your campaigns using theCampaignCriterionService. The followingcode snippet shows how to target your campaign with a criterion ID.

Java

private static CampaignCriterion buildLocationIdCriterion( long locationId, String campaignResourceName) { Builder criterionBuilder = CampaignCriterion.newBuilder().setCampaign(campaignResourceName); criterionBuilder .getLocationBuilder() .setGeoTargetConstant(ResourceNames.geoTargetConstant(locationId)); return criterionBuilder.build();} 

C#

private CampaignCriterion buildLocationCriterion(long locationId, string campaignResourceName){ GeoTargetConstantName location = new GeoTargetConstantName(locationId.ToString()); return new CampaignCriterion() { Campaign = campaignResourceName, Location = new LocationInfo() { GeoTargetConstant = location.ToString() } };} 

PHP

private static function createLocationCampaignCriterionOperation( int $locationId, string $campaignResourceName) { // Constructs a campaign criterion for the specified campaign ID using the specified // location ID. $campaignCriterion = new CampaignCriterion([ // Creates a location using the specified location ID. 'location' => new LocationInfo([ // Besides using location ID, you can also search by location names using // GeoTargetConstantServiceClient::suggestGeoTargetConstants() and directly // apply GeoTargetConstant::$resourceName here. An example can be found // in GetGeoTargetConstantByNames.php. 'geo_target_constant' => ResourceNames::forGeoTargetConstant($locationId) ]), 'campaign' => $campaignResourceName ]); return new CampaignCriterionOperation(['create' => $campaignCriterion]);} 

Python

def create_location_op(client, customer_id, campaign_id, location_id): campaign_service = client.get_service("CampaignService") geo_target_constant_service = client.get_service("GeoTargetConstantService") # Create the campaign criterion. campaign_criterion_operation = client.get_type("CampaignCriterionOperation") campaign_criterion = campaign_criterion_operation.create campaign_criterion.campaign = campaign_service.campaign_path( customer_id, campaign_id ) # Besides using location_id, you can also search by location names from # GeoTargetConstantService.suggest_geo_target_constants() and directly # apply GeoTargetConstant.resource_name here. An example can be found # in get_geo_target_constant_by_names.py. campaign_criterion.location.geo_target_constant = ( geo_target_constant_service.geo_target_constant_path(location_id) ) return campaign_criterion_operation 

Ruby

def create_location(client, customer_id, campaign_id, location_id) client.operation.create_resource.campaign_criterion do |criterion| criterion.campaign = client.path.campaign(customer_id, campaign_id) criterion.location = client.resource.location_info do |li| # Besides using location_id, you can also search by location names from # GeoTargetConstantService.suggest_geo_target_constants() and directly # apply GeoTargetConstant.resource_name here. An example can be found # in get_geo_target_constant_by_names.rb. li.geo_target_constant = client.path.geo_target_constant(location_id) end endend 

Perl

sub create_location_campaign_criterion_operation { my ($location_id, $campaign_resource_name) = @_; # Construct a campaign criterion for the specified campaign using the # specified location ID. my $campaign_criterion = Google::Ads::GoogleAds::V17::Resources::CampaignCriterion->new({ # Create a location using the specified location ID. location => Google::Ads::GoogleAds::V17::Common::LocationInfo->new({ # Besides using location ID, you can also search by location names # using GeoTargetConstantService::suggest() and directly apply # GeoTargetConstant->{resourceName} here. An example can be found # in get_geo_target_constants_by_names.pl. geoTargetConstant => Google::Ads::GoogleAds::V17::Utils::ResourceNames::geo_target_constant( $location_id)} ), campaign => $campaign_resource_name }); return Google::Ads::GoogleAds::V17::Services::CampaignCriterionService::CampaignCriterionOperation ->new({ create => $campaign_criterion });} 

Google may occasionally phase out some location criteria for various reasons:the location may be restructured into smaller or larger areas, geo-politicalchanges, etc. Refer to the status field of aGeoTargetConstant object to determine if a location isENABLED orREMOVAL_PLANNED.Read more abouthow location targets are phased out.

Look up by location name

You can also look up the criterion ID by location name usingGeoTargetConstantService.SuggestGeoTargetConstants.The following code example shows how to look up a location criterion ID bylocation name.

Java

private void runExample(GoogleAdsClient googleAdsClient) { try (GeoTargetConstantServiceClient geoTargetClient = googleAdsClient.getLatestVersion().createGeoTargetConstantServiceClient()) { SuggestGeoTargetConstantsRequest.Builder requestBuilder = SuggestGeoTargetConstantsRequest.newBuilder(); // Locale is using ISO 639-1 format. If an invalid locale is given, 'en' is used by default. requestBuilder.setLocale("en"); // A list of country codes can be referenced here: // https://developers.google.com/google-ads/api/reference/data/geotargets requestBuilder.setCountryCode("FR"); requestBuilder .getLocationNamesBuilder() .addAllNames(ImmutableList.of("Paris", "Quebec", "Spain", "Deutschland")); SuggestGeoTargetConstantsResponse response = geoTargetClient.suggestGeoTargetConstants(requestBuilder.build()); for (GeoTargetConstantSuggestion suggestion : response.getGeoTargetConstantSuggestionsList()) { System.out.printf( "%s (%s,%s,%s,%s) is found in locale (%s) with reach (%d) for search term (%s).%n", suggestion.getGeoTargetConstant().getResourceName(), suggestion.getGeoTargetConstant().getName(), suggestion.getGeoTargetConstant().getCountryCode(), suggestion.getGeoTargetConstant().getTargetType(), suggestion.getGeoTargetConstant().getStatus().name(), suggestion.getLocale(), suggestion.getReach(), suggestion.getSearchTerm()); } }} 

C#

public void Run(GoogleAdsClient client){ // Get the GeoTargetConstantServiceClient. GeoTargetConstantServiceClient geoService = client.GetService(Services.V17.GeoTargetConstantService); // Locale is using ISO 639-1 format. If an invalid locale is given, // 'en' is used by default. string locale = "en"; // A list of country codes can be referenced here: // https://developers.google.com/google-ads/api/reference/data/geotargets string countryCode = "FR"; string[] locations = { "Paris", "Quebec", "Spain", "Deutschland" }; SuggestGeoTargetConstantsRequest request = new SuggestGeoTargetConstantsRequest() { Locale = locale, CountryCode = countryCode, LocationNames = new SuggestGeoTargetConstantsRequest.Types.LocationNames() }; request.LocationNames.Names.AddRange(locations); try { SuggestGeoTargetConstantsResponse response = geoService.SuggestGeoTargetConstants(request); foreach (GeoTargetConstantSuggestion suggestion in response.GeoTargetConstantSuggestions) { Console.WriteLine( $"{suggestion.GeoTargetConstant.ResourceName} " + $"({suggestion.GeoTargetConstant.Name}, " + $"{suggestion.GeoTargetConstant.CountryCode}, " + $"{suggestion.GeoTargetConstant.TargetType}, " + $"{suggestion.GeoTargetConstant.Status}) is found in locale " + $"({suggestion.Locale}) with reach ({suggestion.Reach}) " + $"for search term ({suggestion.SearchTerm})."); } } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; }} 

PHP

public static function runExample( GoogleAdsClient $googleAdsClient, array $locationNames, string $locale, string $countryCode) { $geoTargetConstantServiceClient = $googleAdsClient->getGeoTargetConstantServiceClient(); $response = $geoTargetConstantServiceClient->suggestGeoTargetConstants( new SuggestGeoTargetConstantsRequest([ 'locale' => $locale, 'country_code' => $countryCode, 'location_names' => new LocationNames(['names' => $locationNames]) ]) ); // Iterates over all geo target constant suggestion objects and prints the requested field // values for each one. foreach ($response->getGeoTargetConstantSuggestions() as $geoTargetConstantSuggestion) { /** @var GeoTargetConstantSuggestion $geoTargetConstantSuggestion */ printf( "Found '%s' ('%s','%s','%s',%s) in locale '%s' with reach %d" . " for the search term '%s'.%s", $geoTargetConstantSuggestion->getGeoTargetConstant()->getResourceName(), $geoTargetConstantSuggestion->getGeoTargetConstant()->getName(), $geoTargetConstantSuggestion->getGeoTargetConstant()->getCountryCode(), $geoTargetConstantSuggestion->getGeoTargetConstant()->getTargetType(), GeoTargetConstantStatus::name( $geoTargetConstantSuggestion->getGeoTargetConstant()->getStatus() ), $geoTargetConstantSuggestion->getLocale(), $geoTargetConstantSuggestion->getReach(), $geoTargetConstantSuggestion->getSearchTerm(), PHP_EOL ); }} 

Python

def main(client): gtc_service = client.get_service("GeoTargetConstantService") gtc_request = client.get_type("SuggestGeoTargetConstantsRequest") gtc_request.locale = LOCALE gtc_request.country_code = COUNTRY_CODE # The location names to get suggested geo target constants. gtc_request.location_names.names.extend( ["Paris", "Quebec", "Spain", "Deutschland"] ) results = gtc_service.suggest_geo_target_constants(gtc_request) for suggestion in results.geo_target_constant_suggestions: geo_target_constant = suggestion.geo_target_constant print( f"{geo_target_constant.resource_name} " f"({geo_target_constant.name}, " f"{geo_target_constant.country_code}, " f"{geo_target_constant.target_type}, " f"{geo_target_constant.status.name}) " f"is found in locale ({suggestion.locale}) " f"with reach ({suggestion.reach}) " f"from search term ({suggestion.search_term})." ) 

Ruby

def get_geo_target_constants_by_names # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google::Ads::GoogleAds::GoogleAdsClient.new gtc_service = client.service.geo_target_constant location_names = client.resource.location_names do |ln| ['Paris', 'Quebec', 'Spain', 'Deutschland'].each do |name| ln.names << name end end # Locale is using ISO 639-1 format. If an invalid locale is given, # 'en' is used by default. locale = 'en' # A list of country codes can be referenced here: # https://developers.google.com/google-ads/api/reference/data/geotargets country_code = 'FR' response = gtc_service.suggest_geo_target_constants( locale: locale, country_code: country_code, location_names: location_names ) response.geo_target_constant_suggestions.each do |suggestion| puts sprintf("%s (%s,%s,%s,%s) is found in locale (%s) with reach (%d)" \ " from search term (%s).", suggestion.geo_target_constant.resource_name, suggestion.geo_target_constant.name, suggestion.geo_target_constant.country_code, suggestion.geo_target_constant.target_type, suggestion.geo_target_constant.status, suggestion.locale, suggestion.reach, suggestion.search_term) endend 

Perl

sub get_geo_target_constants_by_names { my ($api_client, $location_names, $locale, $country_code) = @_; my $suggest_response = $api_client->GeoTargetConstantService()->suggest({ locale => $locale, countryCode => $country_code, locationNames => Google::Ads::GoogleAds::V17::Services::GeoTargetConstantService::LocationNames ->new({ names => $location_names })}); # Iterate over all geo target constant suggestion objects and print the requested # field values for each one. foreach my $geo_target_constant_suggestion ( @{$suggest_response->{geoTargetConstantSuggestions}}) { printf "Found '%s' ('%s','%s','%s',%s) in locale '%s' with reach %d" . " for the search term '%s'.\n", $geo_target_constant_suggestion->{geoTargetConstant}{resourceName}, $geo_target_constant_suggestion->{geoTargetConstant}{name}, $geo_target_constant_suggestion->{geoTargetConstant}{countryCode}, $geo_target_constant_suggestion->{geoTargetConstant}{targetType}, $geo_target_constant_suggestion->{geoTargetConstant}{status}, $geo_target_constant_suggestion->{locale}, $geo_target_constant_suggestion->{reach}, $geo_target_constant_suggestion->{searchTerm}; } return 1;} 

Target campaigns for proximity to a location

There are times when you might want to target even more precisely than a city orcountry. For example, you may want to advertise your supermarkets within 10kilometers of your shop location. In such cases, you can useproximity targeting.The code to create a proximity target is similar to adding a location target,except that you have to create a ProximityInfoobject instead of a LocationInfo object.

Java

private static CampaignCriterion buildProximityLocation(String campaignResourceName) { Builder builder = CampaignCriterion.newBuilder().setCampaign(campaignResourceName); ProximityInfo.Builder proximityBuilder = builder.getProximityBuilder(); proximityBuilder.setRadius(10.0).setRadiusUnits(ProximityRadiusUnits.MILES); AddressInfo.Builder addressBuilder = proximityBuilder.getAddressBuilder(); addressBuilder .setStreetAddress("38 avenue de l'Opéra") .setCityName("Paris") .setPostalCode("75002") .setCountryCode("FR"); return builder.build();} 

C#

private CampaignCriterion buildProximityCriterion(string campaignResourceName){ ProximityInfo proximity = new ProximityInfo() { Address = new AddressInfo() { StreetAddress = "38 avenue de l'Opéra", CityName = "Paris", PostalCode = "75002", CountryCode = "FR" }, Radius = 10d, // Default is kilometers. RadiusUnits = ProximityRadiusUnits.Miles }; return new CampaignCriterion() { Campaign = campaignResourceName, Proximity = proximity };} 

PHP

private static function createProximityCampaignCriterionOperation(string $campaignResourceName){ // Constructs a campaign criterion as a proximity. $campaignCriterion = new CampaignCriterion([ 'proximity' => new ProximityInfo([ 'address' => new AddressInfo([ 'street_address' => '38 avenue de l\'Opéra', 'city_name' => 'Paris', 'postal_code' => '75002', 'country_code' => 'FR', ]), 'radius' => 10.0, // Default is kilometers. 'radius_units' => ProximityRadiusUnits::MILES ]), 'campaign' => $campaignResourceName ]); return new CampaignCriterionOperation(['create' => $campaignCriterion]);} 

Python

def create_proximity_op(client, customer_id, campaign_id): campaign_service = client.get_service("CampaignService") # Create the campaign criterion. campaign_criterion_operation = client.get_type("CampaignCriterionOperation") campaign_criterion = campaign_criterion_operation.create campaign_criterion.campaign = campaign_service.campaign_path( customer_id, campaign_id ) campaign_criterion.proximity.address.street_address = "38 avenue de l'Opera" campaign_criterion.proximity.address.city_name = "Paris" campaign_criterion.proximity.address.postal_code = "75002" campaign_criterion.proximity.address.country_code = "FR" campaign_criterion.proximity.radius = 10 # Default is kilometers. campaign_criterion.proximity.radius_units = ( client.enums.ProximityRadiusUnitsEnum.MILES ) return campaign_criterion_operation 

Ruby

def create_proximity(client, customer_id, campaign_id) client.operation.create_resource.campaign_criterion do |criterion| criterion.campaign = client.path.campaign(customer_id, campaign_id) criterion.proximity = client.resource.proximity_info do |proximity| proximity.address = client.resource.address_info do |address| address.street_address = "38 avenue de l'Opéra" address.city_name = "Paris" address.postal_code = "75002" address.country_code = "FR" end proximity.radius = 10 proximity.radius_units = :MILES end endend 

Perl

sub create_proximity_campaign_criterion_operation { my ($campaign_resource_name) = @_; # Construct a campaign criterion as a proximity. my $campaign_criterion = Google::Ads::GoogleAds::V17::Resources::CampaignCriterion->new({ proximity => Google::Ads::GoogleAds::V17::Common::ProximityInfo->new({ address => Google::Ads::GoogleAds::V17::Common::AddressInfo->new({ streetAddress => "38 avenue de l'Opéra", cityName => "cityName", postalCode => "75002", countryCode => "FR" } ), radius => 10.0, # Default is kilometers. radiusUnits => MILES } ), campaign => $campaign_resource_name }); return Google::Ads::GoogleAds::V17::Services::CampaignCriterionService::CampaignCriterionOperation ->new({ create => $campaign_criterion });} 

Retrieve geo targets

You can retrieve the geo targets for a campaign using theGoogleAdsService.SearchStream. You canfilter your results in the WHERE clause.

SELECT campaign_criterion.campaign, campaign_criterion.location.geo_target_constant, campaign_criterion.proximity.geo_point.longitude_in_micro_degrees, campaign_criterion.proximity.geo_point.latitude_in_micro_degrees, campaign_criterion.proximity.radius, campaign_criterion.negativeFROM campaign_criterionWHERE campaign_criterion.campaign = 'customers/{customer_id}/campaigns/{campaign_id}' AND campaign_criterion.type IN (LOCATION, PROXIMITY)

Update geo targets

To update location targets for a campaign, you need to retrieve the list ofexisting geo targets and compare it with the list of new targets. You can thenuse the remove operation to remove the targets you don't need, and thecreate operation to add the new geo targets you need (but are missing in theexisting campaign).

Exclude geo targets

You can also exclude LocationInfo, but notProximityInfo. This feature is most useful if you wantto target a region, but exclude a sub-region (for example, to target the entireUnited States, except for New York City). To exclude a region, set thenegative field in CampaignCriterion to betrue.

Target multiple geographic regions

Using a LocationGroupInfo, you can enable acampaign to target multiple geographic regions. A region is centered on thelocations defined by the location extensions of the campaign.

The radius defined on the LocationGroupInfo ascribes a circular region aroundeach location, and consists of a radius object, length, and radius_units, which can be either meters ormiles (LocationGroupRadiusUnitsEnum).

The locations in a LocationGroupInfo can be filtered by a list of geotargetingcriterion IDs prescribed in thegeo_target_constant field. If defined, no locations that exist outside ofthe given critera IDs will be targeted.

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2024-06-07 UTC.

Location Targeting  |  Google Ads API  |  Google for Developers (2024)

FAQs

Can Google Ads be targeted by location? ›

Google Ads location targeting allows your ads to appear in the geographic locations that you select: countries, areas within a country, a radius around a location, or location groups, which can include places of interest, your business locations, or tiered demographics.

How do I change the location in my Google Ads account? ›

Click Campaigns. Click the Settings tab. Check the box next to any campaigns you want to change. From the Edit menu, select Change locations.

How to target a specific geographic location? ›

There are several ways to geo-target:
  1. City: Make sure to pick relevant cities in which you want to promote your service or product!
  2. Zip code: Target by zip code to be more specific about what areas you want to advertise in.
  3. Radius: ...
  4. Bulk locations:

What is target ad based on location? ›

Location targeting is a form of digital marketing that allows businesses to target ads to users based on their physical location. This can be done by using GPS coordinates or IP addresses to determine a user's location.

How do I dynamically add a location to Google Ads? ›

In the ad text, select the option for dynamic location insertion. A small box will pop up when you click on the option. Here, you select which type of location you want to highlight: City, State or Country. In case a specific location can't be displayed, you should enter the default text.

How do I filter Google Ads by location? ›

Filter you addresses from Business Profile
  1. In your Google Ads account, click the Campaigns icon .
  2. Click the Assets drop down in the section menu.
  3. Click Assets.
  4. Click on the plus button and select Location assets.
  5. Select “Campaign” or “Ad group” depending on whether you want to filter addresses to a campaign or ad group.

How is geo targeting different from location-based targeting? ›

Geofencing and geotargeting are both a part of location-based marketing, but they serve different purposes. While geofencing is simply drawing a virtual fence around a particular geographic location, geotargeting involves using various factors (often including geofencing) to reach specific users!

What is an example of location targeting? ›

For example, if a user visits a gym then one could serve ads to the customer at a later point in time based on their current location (i.e proximity to their gym or a competitor gym or at a time they think the customer is likely to convert (e.g. after the work day).

What is targets location strategy? ›

Design and location plus ease, inspiration and relevance: Target has a proven strategy to build stores that work in and for the community. We set that formula in motion across a variety of neighborhoods and building footprints in 2022, from Wyoming to Florida, city centers to suburban hubs.

How to geofence Google Ads? ›

Geofencing Location Targeting
  1. Sign in to your Google Ads account and navigate to the campaign for which you want to set up geofencing.
  2. Click on the “Settings” tab for the selected campaign on Google Ads.
  3. Under “Locations,” click on the “Edit” button to add a new location for your Google Ads campaign.

How to geo target ads? ›

Determine which location you want to focus on first, and then do your research to create relevant ads for that specific area. It's important to create relevant content for your users based on the city that they live in so you can send the right message and encourage users to support your business.

Can you target Google Ads by zip code? ›

Ads in your Google Ads campaigns are eligible to display in any location around the world. If you want your ads to appear only in specific locations, you can select the city, province, or region by specifying geo codes or postal codes and adjusting bids for the area.

Why are Google Ads showing to people outside of your target locations? ›

Google Ads defaults to targeting people who are in, regularly in, or who've shown interest in your target location. If you don't change this setting to only people in or regularly in your targeted locations, you're more likely to see impressions and clicks from external markets.

Top Articles
Latest Posts
Article information

Author: Corie Satterfield

Last Updated:

Views: 6348

Rating: 4.1 / 5 (62 voted)

Reviews: 85% of readers found this page helpful

Author information

Name: Corie Satterfield

Birthday: 1992-08-19

Address: 850 Benjamin Bridge, Dickinsonchester, CO 68572-0542

Phone: +26813599986666

Job: Sales Manager

Hobby: Table tennis, Soapmaking, Flower arranging, amateur radio, Rock climbing, scrapbook, Horseback riding

Introduction: My name is Corie Satterfield, I am a fancy, perfect, spotless, quaint, fantastic, funny, lucky person who loves writing and wants to share my knowledge and understanding with you.