Add regional information to online products

You can use the Inventories sub-API to indicate that your product information varies by region. For example, you might sell different products in different places, or charge different prices for the same products based on where they're purchased.

See Regional availability and pricing for more information.

Regional information is for products you sell online. See Add in-store information to your local products for details on in-store products.

Here are the steps to add regional information to your online products:

Create regions

Before you can add regional information to a product, you need to set up regions for your Merchant Center account. You can use Merchant API regions resource to create new regions.

See the Regions guide for a code sample, and more information on managing your regions.

Verify you have online products

If you need to add online products to your account, use Merchant API to insert new products , or create a data source .

Insert regional information

After you have online products in your Merchant Center account, you can add regional information like region , price , and availability .

Here's a sample you can use to add regional information to a product with regionalInventories.insert :

Java

  import 
  
 com.google.api.gax.core.FixedCredentialsProvider 
 ; 
 import 
  
 com.google.auth.oauth2.GoogleCredentials 
 ; 
 import 
  
 com.google.shopping.merchant.inventories.v1.InsertRegionalInventoryRequest 
 ; 
 import 
  
 com.google.shopping.merchant.inventories.v1.RegionalInventory 
 ; 
 import 
  
 com.google.shopping.merchant.inventories.v1.RegionalInventoryAttributes 
 ; 
 import 
  
 com.google.shopping.merchant.inventories.v1.RegionalInventoryAttributes.Availability 
 ; 
 import 
  
 com.google.shopping.merchant.inventories.v1.RegionalInventoryServiceClient 
 ; 
 import 
  
 com.google.shopping.merchant.inventories.v1.RegionalInventoryServiceSettings 
 ; 
 import 
  
 com.google.shopping.type.Price 
 ; 
 import 
  
 shopping.merchant.samples.utils.Authenticator 
 ; 
 import 
  
 shopping.merchant.samples.utils.Config 
 ; 
 /** This class demonstrates how to insert a regional inventory for a given product */ 
 public 
  
 class 
 InsertRegionalInventorySample 
  
 { 
  
 private 
  
 static 
  
 String 
  
 getParent 
 ( 
 String 
  
 accountId 
 , 
  
 String 
  
 productId 
 ) 
  
 { 
  
 return 
  
 String 
 . 
 format 
 ( 
 "accounts/%s/products/%s" 
 , 
  
 accountId 
 , 
  
 productId 
 ); 
  
 } 
  
 public 
  
 static 
  
 void 
  
 insertRegionalInventory 
 ( 
 Config 
  
 config 
 , 
  
 String 
  
 productId 
 , 
  
 String 
  
 regionId 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 new 
  
 Authenticator 
 (). 
 authenticate 
 (); 
  
 RegionalInventoryServiceSettings 
  
 regionalInventoryServiceSettings 
  
 = 
  
 RegionalInventoryServiceSettings 
 . 
 newBuilder 
 () 
  
 . 
 setCredentialsProvider 
 ( 
 FixedCredentialsProvider 
 . 
 create 
 ( 
 credential 
 )) 
  
 . 
 build 
 (); 
  
 String 
  
 parent 
  
 = 
  
 getParent 
 ( 
 config 
 . 
 getAccountId 
 (). 
 toString 
 (), 
  
 productId 
 ); 
  
 try 
  
 ( 
 RegionalInventoryServiceClient 
  
 regionalInventoryServiceClient 
  
 = 
  
 RegionalInventoryServiceClient 
 . 
 create 
 ( 
 regionalInventoryServiceSettings 
 )) 
  
 { 
  
 Price 
  
 price 
  
 = 
  
 Price 
 . 
 newBuilder 
 (). 
 setAmountMicros 
 ( 
 33_450_000 
 ). 
 setCurrencyCode 
 ( 
 "USD" 
 ). 
 build 
 (); 
  
 InsertRegionalInventoryRequest 
  
 request 
  
 = 
  
 InsertRegionalInventoryRequest 
 . 
 newBuilder 
 () 
  
 . 
 setParent 
 ( 
 parent 
 ) 
  
 . 
 setRegionalInventory 
 ( 
  
 RegionalInventory 
 . 
 newBuilder 
 () 
  
 . 
 setRegion 
 ( 
 regionId 
 ) 
  
 . 
 setRegionalInventoryAttributes 
 ( 
  
 RegionalInventoryAttributes 
 . 
 newBuilder 
 () 
  
 . 
 setAvailability 
 ( 
 Availability 
 . 
 OUT_OF_STOCK 
 ) 
  
 . 
 setPrice 
 ( 
 price 
 ) 
  
 . 
 build 
 ()) 
  
 . 
 build 
 ()) 
  
 . 
 build 
 (); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Sending insert RegionalInventory request" 
 ); 
  
 RegionalInventory 
  
 response 
  
 = 
  
 regionalInventoryServiceClient 
 . 
 insertRegionalInventory 
 ( 
 request 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Inserted RegionalInventory Name below" 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 response 
 . 
 getName 
 ()); 
  
 } 
  
 catch 
  
 ( 
 Exception 
  
 e 
 ) 
  
 { 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 e 
 ); 
  
 } 
  
 } 
  
 public 
  
 static 
  
 void 
  
 main 
 ( 
 String 
 [] 
  
 args 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 Config 
  
 config 
  
 = 
  
 Config 
 . 
 load 
 (); 
  
 // An ID assigned to a product by Google. In the format 
  
 // channel:contentLanguage:feedLabel:offerId 
  
 String 
  
 productId 
  
 = 
  
 "online:en:label:1111111111" 
 ; 
  
 // The ID uniquely identifying each region. 
  
 String 
  
 regionId 
  
 = 
  
 "1111111" 
 ; 
  
 insertRegionalInventory 
 ( 
 config 
 , 
  
 productId 
 , 
  
 regionId 
 ); 
  
 } 
 } 
  
 

cURL

  curl --location 
 'https://merchantapi.googleapis.com/inventories/v1/accounts/987654321/products/en~US~12345/regionalInventories:insert' \ 
 --header 'Content-Type: application/json' \ 
 --header 'Authorization: Bearer <API_TOKEN>' \ 
 --data '{ 
 "region": "123456", 
 "regionalInventoryAttributes": { 
 "price": { 
 "amountMicros": "33450000", 
 "currencyCode": "USD" 
 }, 
 "availability": "OUT_OF_STOCK" 
 } 
 }' 
 

PHP

  use Google\ApiCore\ApiException; 
 use Google\Shopping\Merchant\Inventories\V1\RegionalInventory; 
 use Google\Shopping\Merchant\Inventories\V1\Client\RegionalInventoryServiceClient; 
 use Google\Shopping\Merchant\Inventories\V1\InsertRegionalInventoryRequest; 
 use Google\Shopping\Merchant\Inventories\V1\RegionalInventoryAttributes; 
 use Google\Shopping\Merchant\Inventories\V1\RegionalInventoryAttributes\Availability; 
 use Google\Shopping\Type\Price; 
 /** 
 * Class to insert a `RegionalInventory` to a given product in your 
 * merchant account. 
 * 
 * Replaces the full `RegionalInventory` resource if an entry with the same 
 * [`region`] 
 * [google.shopping.merchant.inventories.v1beta.RegionalInventory.region] 
 * already exists for the product. 
 * 
 * It might take up to 30 minutes for the new or updated `RegionalInventory` 
 * resource to appear in products. 
 */ 
 class InsertRegionalInventory 
 { 
 // 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]'; 
 // ENSURE you fill in region ID for the sample to work. 
 private const REGIONAL_INVENTORY_REGION = 'INSERT_REGION_HERE'; 
 /** 
 * Inserts a regional inventory underneath the parent product. 
 * 
 * @param string $parent The account and product where this inventory will be inserted. 
 *     Format: `accounts/{account}/products/{product}` 
 * @param string $regionalInventoryRegion 
 *     ID of the region for this 
 *     `RegionalInventory` resource. See the [Regional availability and 
 *     pricing](https://support.google.com/merchants/answer/9698880) for more details. 
 */ 
 public function insertRegionalInventorySample(string $parent, string $regionalInventoryRegion): 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); 
 // Creates a price object. 
 $price = new Price( 
 [ 
 'currency_code' => "USD", 
 'amount_micros' => 33450000, 
 ] 
 ); 
 // Creates a new regional inventory object. 
 $regionalInventory = (new RegionalInventory()) 
 ->setRegion($regionalInventoryRegion) 
 ->setRegionalInventoryAttributes((new RegionalInventoryAttributes()) 
 ->setAvailability(Availability::IN_STOCK) 
 ->setPrice($price)); 
 $request = (new InsertRegionalInventoryRequest()) 
 ->setParent($parent) 
 ->setRegionalInventory($regionalInventory); 
 // Calls the API and catches and prints any network failures/errors. 
 try { 
 /** @var RegionalInventory $response */ 
 $response = $regionalInventoryServiceClient->insertRegionalInventory($request); 
 printf('Response data: %s%s', $response->serializeToJsonString(), PHP_EOL); 
 } catch (ApiException $ex) { 
 printf('Call failed with message: %s%s', $ex->getMessage(), PHP_EOL); 
 } 
 } 
 /** 
 * Helper to execute the sample. 
 */ 
 public function callSample(): void 
 { 
 // Makes the call to insert the regional inventory to the parent product 
 // for the given region. 
 $this->insertRegionalInventorySample($this::PARENT, $this::REGIONAL_INVENTORY_REGION); 
 } 
 } 
 $sample = new InsertRegionalInventory(); 
 $sample->callSample();  
 
 

Python

  from 
  
 examples.authentication 
  
 import 
 configuration 
 from 
  
 examples.authentication 
  
 import 
 generate_user_credentials 
 from 
  
 google.shopping 
  
 import 
 merchant_inventories_v1 
 from 
  
 google.shopping.merchant_inventories_v1.types 
  
 import 
 RegionalInventoryAttributes 
 # ENSURE you fill in the product ID and region ID for the sample to 
 # work. 
 _ACCOUNT 
 = 
 configuration 
 . 
 Configuration 
 () 
 . 
 read_merchant_info 
 () 
 # ENSURE you fill in the product ID for the sample to work. 
 _PRODUCT 
 = 
 "PRODUCT_ID" 
 _PARENT 
 = 
 f 
 "accounts/ 
 { 
 _ACCOUNT 
 } 
 /products/ 
 { 
 _PRODUCT 
 } 
 " 
 # ENSURE you fill in region ID for the sample to work. 
 _REGION 
 = 
 "REGION_ID" 
 def 
  
 insert_regional_inventory 
 (): 
  
 """Inserts a `RegionalInventory` to a given product. 
 Replaces the full `RegionalInventory` resource if an entry with the same 
 `region` already exists for the product. 
 It might take up to 30 minutes for the new or updated `RegionalInventory` 
 resource to appear in products. 
 """ 
 # Gets OAuth Credentials. 
 credentials 
 = 
 generate_user_credentials 
 . 
 main 
 () 
 # Creates a client. 
 client 
 = 
 merchant_inventories_v1 
 . 
 RegionalInventoryServiceClient 
 ( 
 credentials 
 = 
 credentials 
 ) 
 # Creates a regional inventory and populate its attributes. 
 regional_inventory 
 = 
 merchant_inventories_v1 
 . 
 RegionalInventory 
 () 
 regional_inventory 
 . 
 region 
 = 
 _REGION 
 regional_inventory 
 . 
 regional_inventory_attributes 
 . 
 availability 
 = 
 ( 
 RegionalInventoryAttributes 
 . 
 Availability 
 . 
 IN_STOCK 
 ) 
 regional_inventory 
 . 
 regional_inventory_attributes 
 . 
 price 
 = 
 { 
 "currency_code" 
 : 
 "USD" 
 , 
 "amount_micros" 
 : 
 33450000 
 , 
 } 
 # Creates the request. 
 request 
 = 
 merchant_inventories_v1 
 . 
 InsertRegionalInventoryRequest 
 ( 
 parent 
 = 
 _PARENT 
 , 
 regional_inventory 
 = 
 regional_inventory 
 , 
 ) 
 # Makes the request and catch and print any error messages. 
 try 
 : 
 response 
 = 
 client 
 . 
 insert_regional_inventory 
 ( 
 request 
 = 
 request 
 ) 
 print 
 ( 
 "Insert successful" 
 ) 
 print 
 ( 
 response 
 ) 
 except 
 RuntimeError 
 as 
 e 
 : 
 print 
 ( 
 "Insert failed" 
 ) 
 print 
 ( 
 e 
 ) 
 if 
 __name__ 
 == 
 "__main__" 
 : 
 insert_regional_inventory 
 () 
  
 

This call returns exactly the same values you submit, and might not fully represents the final inventory data.

It might take up to 30 minutes for the new RegionalInventory to appear in the product.

For more ways to add regional inventory information, see the Regional product inventory data sourcessection at the end of Create a product data source .

To list your products for free on Google, set up free product listings . After you set up free listings, eligible products with RegionalInventory can show on Google's Shopping tab, based on the regional information you provide.

Create a Mobile Website
View Site in Mobile | Classic
Share by: