Stay organized with collectionsSave and categorize content based on your preferences.
You can use Merchant API to keep regional information for your online products
up to date. This includes updating price and availability, and removing regions
a product is no longer sold in.
If you're an ecommerce platform, you can use Merchant API to create an interface
where your clients can update the regional pricing and availability of their
products.
This section explains how to view the regions associated with a product or
account.
By product
Useaccounts.products.regionalInventories.listto list all the regional inventories connected to a specific product in your
account. Use theregionfield to identify the region each regional inventory
refers to.
Here's a sample you can use to list regional inventories for a product:
Java
importcom.google.api.gax.core.FixedCredentialsProvider;importcom.google.auth.oauth2.GoogleCredentials;importcom.google.shopping.merchant.inventories.v1.ListRegionalInventoriesRequest;importcom.google.shopping.merchant.inventories.v1.RegionalInventory;importcom.google.shopping.merchant.inventories.v1.RegionalInventoryServiceClient;importcom.google.shopping.merchant.inventories.v1.RegionalInventoryServiceClient.ListRegionalInventoriesPagedResponse;importcom.google.shopping.merchant.inventories.v1.RegionalInventoryServiceSettings;importshopping.merchant.samples.utils.Authenticator;importshopping.merchant.samples.utils.Config;/** This class demonstrates how to list all the regional inventories on a given product */publicclassListRegionalInventoriesSample{privatestaticStringgetParent(StringaccountId,StringproductId){returnString.format("accounts/%s/products/%s",accountId,productId);}publicstaticvoidlistRegionalInventories(Configconfig,StringproductId)throwsException{GoogleCredentialscredential=newAuthenticator().authenticate();RegionalInventoryServiceSettingsregionalInventoryServiceSettings=RegionalInventoryServiceSettings.newBuilder().setCredentialsProvider(FixedCredentialsProvider.create(credential)).build();Stringparent=getParent(config.getAccountId().toString(),productId);try(RegionalInventoryServiceClientregionalInventoryServiceClient=RegionalInventoryServiceClient.create(regionalInventoryServiceSettings)){// The parent product has the format: accounts/{account}/products/{product}ListRegionalInventoriesRequestrequest=ListRegionalInventoriesRequest.newBuilder().setParent(parent).build();System.out.println("Sending list regional inventory request:");ListRegionalInventoriesPagedResponseresponse=regionalInventoryServiceClient.listRegionalInventories(request);intcount=0;// Iterates over all rows in all pages and prints the regional inventory// in each row.for(RegionalInventoryelement:response.iterateAll()){System.out.println(element);count++;}System.out.print("The following count of elements were returned: ");System.out.println(count);}catch(Exceptione){System.out.println(e);}}publicstaticvoidmain(String[]args)throwsException{Configconfig=Config.load();// An ID assigned to a product by Google. In the format// channel:contentLanguage:feedLabel:offerIdStringproductId="online:en:label:1111111111";listRegionalInventories(config,productId);}}
use Google\ApiCore\ApiException;use Google\ApiCore\PagedListResponse;use Google\Shopping\Merchant\Inventories\V1\RegionalInventory;use Google\Shopping\Merchant\Inventories\V1\Client\RegionalInventoryServiceClient;use Google\Shopping\Merchant\Inventories\V1\ListRegionalInventoriesRequest;/*** Class to list the `RegionalInventory` resources for the given product in your* merchant account. The response might contain fewer items than specified by* `pageSize`. If `pageToken` was returned in previous request, it can be* used to obtain additional results.** `RegionalInventory` resources are listed per product for a given account.*/class ListRegionalInventories{// ENSURE you fill in the merchant account and product ID for the sample to// work.private const PARENT = 'accounts/[INSERT_ACCOUNT_HERE]/products/[INSERT_PRODUCT_HERE]';/*** Lists all the regional inventories of a given product.** @param string $parent The `name` of the parent product to list `RegionalInventory`* resources for.* Format: `accounts/{account}/products/{product}`*/function listRegionalInventoriesSample(string $parent): void{// Gets the OAuth credentials to make the request.$credentials = Authentication::useServiceAccountOrTokenFile();// Creates options config containing credentials for the client to use.$options = ['credentials' => $credentials];// Creates a client.$regionalInventoryServiceClient = new RegionalInventoryServiceClient($options);// Prepare the request message.$request = (new ListRegionalInventoriesRequest())->setParent($parent);// Calls the API and catches and prints any network failures/errors.try {// Page size is set to the default value. If you are returned more// responses than your page size, this code will automatically// re-call the service with the `pageToken` until all responses// are returned.$parameters = ['pageSize' => 25000];/** @var PagedListResponse $response */$response =$regionalInventoryServiceClient->listRegionalInventories($request, $parameters);/** @var RegionalInventory $element */foreach ($response as $element) {printf('RegionalInventory data: %s%s', $element->serializeToJsonString(), PHP_EOL);}} catch (ApiException $ex) {printf('Call failed with message: %s%s', $ex->getMessage(), PHP_EOL);}}// Helper to execute the sample.function callSample(): void{// Lists all the regional inventories of the parent product.$this->listRegionalInventoriesSample($this::PARENT);}}$sample = new ListRegionalInventories();$sample->callSample();
fromexamples.authenticationimportconfigurationfromexamples.authenticationimportgenerate_user_credentialsfromgoogle.shoppingimportmerchant_inventories_v1# ENSURE you fill in the product ID for the sample to# work._ACCOUNT=configuration.Configuration().read_merchant_info()_PRODUCT="[INSERT_PRODUCT_HERE]"_PARENT=f"accounts/{_ACCOUNT}/products/{_PRODUCT}"deflist_regional_inventories():"""Lists the `RegionalInventory` resources for the given product.The response might contain fewer items than specified by`pageSize`. If `pageToken` was returned in previous request, it can beused to obtain additional results.`RegionalInventory` resources are listed per product for a given account."""# Gets OAuth Credentials.credentials=generate_user_credentials.main()# Creates a client.client=merchant_inventories_v1.RegionalInventoryServiceClient(credentials=credentials)# Creates the request.# Page size is set to the default value.request=merchant_inventories_v1.ListRegionalInventoriesRequest(parent=_PARENT,page_size=25000)try:# Makes the request and catch and print any error messages.# If you are returned more responses than your page size, this code# will automatically re-call the service with the `pageToken` until all# responses are returned.page_result=client.list_regional_inventories(request=request)# Print the response.forresponseinpage_result:print(response)exceptRuntimeErrorase:print("List failed")print(e)if__name__=="__main__":list_regional_inventories()
You can use theregions.listmethod in Merchant API to view all the regions for your account.
Remove regions
Here's how to remove regions you no longer sell products in.
From products
If a product is no longer sold in a specific region, you should remove that
regional inventory information from the product. You can useregionalInventories.deleteto remove a specific regional inventory entry from a product.
Here's a sample you can use to remove a regional inventory entry from a product:
Java
importcom.google.api.gax.core.FixedCredentialsProvider;importcom.google.auth.oauth2.GoogleCredentials;importcom.google.shopping.merchant.inventories.v1.DeleteRegionalInventoryRequest;importcom.google.shopping.merchant.inventories.v1.RegionalInventoryName;importcom.google.shopping.merchant.inventories.v1.RegionalInventoryServiceClient;importcom.google.shopping.merchant.inventories.v1.RegionalInventoryServiceSettings;importshopping.merchant.samples.utils.Authenticator;importshopping.merchant.samples.utils.Config;/** This class demonstrates how to delete a regional inventory for a given product */publicclassDeleteRegionalInventorySample{publicstaticvoiddeleteRegionalInventory(Configconfig,StringproductId,StringregionId)throwsException{GoogleCredentialscredential=newAuthenticator().authenticate();RegionalInventoryServiceSettingsregionalInventoryServiceSettings=RegionalInventoryServiceSettings.newBuilder().setCredentialsProvider(FixedCredentialsProvider.create(credential)).build();Stringname=RegionalInventoryName.newBuilder().setAccount(config.getAccountId().toString()).setProduct(productId).setRegion(regionId).build().toString();try(RegionalInventoryServiceClientregionalInventoryServiceClient=RegionalInventoryServiceClient.create(regionalInventoryServiceSettings)){DeleteRegionalInventoryRequestrequest=DeleteRegionalInventoryRequest.newBuilder().setName(name).build();System.out.println("Sending deleteRegionalInventory request");regionalInventoryServiceClient.deleteRegionalInventory(request);// no response returned on successSystem.out.println("Delete successful, note that it may take up to 30 minutes for the delete to update in"+" the system.");}catch(Exceptione){System.out.println(e);}}publicstaticvoidmain(String[]args)throwsException{Configconfig=Config.load();// An ID assigned to a product by Google. In the format// channel:contentLanguage:feedLabel:offerIdStringproductId="online:en:label:1111111111";// The ID uniquely identifying each region.StringregionId="1111111";deleteRegionalInventory(config,productId,regionId);}}
use Google\ApiCore\ApiException;use Google\Shopping\Merchant\Inventories\V1\Client\RegionalInventoryServiceClient;use Google\Shopping\Merchant\Inventories\V1\DeleteRegionalInventoryRequest;/*** Deletes the specified `RegionalInventory` resource from the given product* in your merchant account. It might take up to an hour for the* `RegionalInventory` to be deleted from the specific product.* Once you have received a successful delete response, wait for that* period before attempting a delete again.*/class DeleteRegionalInventory{// ENSURE you fill in the merchant account, product, and region ID for the// sample to work.private const ACCOUNT = 'INSERT_ACCOUNT_ID_HERE';private const PRODUCT = 'INSERT_PRODUCT_ID_HERE';private const REGION = 'INSERT_REGION_ID_HERE';/*** Deletes a specific regional inventory of a given product.** @param string $formattedName The name of the `RegionalInventory` resource* to delete.* Format: `accounts/{account}/products/{product}/regionalInventories/{region}`* Please see {@see RegionalInventoryServiceClient::regionalInventoryName()}* for help formatting this field.*/function deleteRegionalInventorySample(string $formattedName): void{// Gets the OAuth credentials to make the request.$credentials = Authentication::useServiceAccountOrTokenFile();// Creates options config containing credentials for the client to use.$options = ['credentials' => $credentials];// Creates a client.$regionalInventoryServiceClient = new RegionalInventoryServiceClient($options);// Prepare the request message.$request = (new DeleteRegionalInventoryRequest())->setName($formattedName);// Calls the API and catches and prints any network failures/errors.try {$regionalInventoryServiceClient->deleteRegionalInventory($request);print 'Delete call completed successfully.' . PHP_EOL;} catch (ApiException $ex) {printf('Call failed with message: %s%s', $ex->getMessage(), PHP_EOL);}}/*** Helper to execute the sample.*/function callSample(): void{// These variables are defined at the top of the file.$formattedName = RegionalInventoryServiceClient::regionalInventoryName($this::ACCOUNT,$this::PRODUCT,$this::REGION);// Deletes the specific regional inventory of the parent product.$this->deleteRegionalInventorySample($formattedName);}}$sample = new DeleteRegionalInventory();$sample->callSample();
fromexamples.authenticationimportconfigurationfromexamples.authenticationimportgenerate_user_credentialsfromgoogle.shoppingimportmerchant_inventories_v1# ENSURE you fill in the product ID and region ID# for the sample to work._ACCOUNT=configuration.Configuration().read_merchant_info()_PRODUCT="[INSERT_PRODUCT_HERE]"_REGION="[INSERT_REGION_HERE]"_NAME=f"accounts/{_ACCOUNT}/products/{_PRODUCT}/regionalInventories/{_REGION}"defdelete_regional_inventory():"""Deletes the specified `RegionalInventory` resource from the given product.It might take up to an hour for the `RegionalInventory` to be deletedfrom the specific product. Once you have received a successful deleteresponse, wait for that period before attempting a delete again."""# Gets OAuth Credentials.credentials=generate_user_credentials.main()# Creates a client.client=merchant_inventories_v1.RegionalInventoryServiceClient(credentials=credentials)# Creates the request.request=merchant_inventories_v1.DeleteRegionalInventoryRequest(name=_NAME,)# Makes the request and catch and print any error messages.try:client.delete_regional_inventory(request=request)print("Delete successful")exceptRuntimeErrorase:print("Delete failed")print(e)if__name__=="__main__":delete_regional_inventory()
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-07 UTC."],[[["\u003cp\u003eThe Merchant API allows you to manage regional information for your online products, including updating price and availability, and removing regions where a product is no longer sold.\u003c/p\u003e\n"],["\u003cp\u003eEcommerce platforms can leverage the Merchant API to build interfaces for their merchants to update regional pricing and availability of their products.\u003c/p\u003e\n"],["\u003cp\u003eYou can view existing regional information for a specific product or your entire account using the \u003ccode\u003eregionalInventories.list\u003c/code\u003e or \u003ccode\u003eregions.list\u003c/code\u003e methods, respectively.\u003c/p\u003e\n"],["\u003cp\u003eTo remove regional data for a product or your entire account, you can utilize the \u003ccode\u003eregionalInventories.delete\u003c/code\u003e or \u003ccode\u003eregions.delete\u003c/code\u003e methods, respectively.\u003c/p\u003e\n"]]],["The Merchant API enables management of regional product information, including pricing and availability. `regionalInventories.insert` updates this data, requiring all fields. You can list existing regions per product using `accounts.products.regionalInventories.list` or by account via `regions.list`. To remove a region from a product, use `regionalInventories.delete`. Removing regions from an account involves using `accounts.products.regionalInventories.delete`. Changes may take up to 30 minutes to reflect. E-commerce platforms can use the Merchant API to create interfaces that update regional data.\n"],null,[]]