Manage various data source types

Merchant API supports multiple types of data sources and input methods to provide product-related information in line with your business needs. Data sources can contain different types of data:

  • product
  • inventory
  • promotion
  • review

You can configure data sources using multiple methods, including:

You can combine some data source types that are manageable through the Data sources sub-API (for example products or promotions) with multiple supported input methods (API, file upload, or file fetch). For example, a primary product data source can be any of the following:

  • an API feed
  • a fetched file feed
  • an uploaded file feed
  • an Autofeed

This guide provides examples for managing data sources with various types of data and input methods.

Special considerations

Take into account the following special considerations with some data source types.

  • Read-only data sources: Some data source types are read-only through the Data sources sub-API. That means you can list them and view their details, but you cannot create, update, or delete them using this API. These include:
    • Data sources with products managed directly in the Merchant Center UI (input type UI ).
    • Autofeeds (input type AUTOFEED ). While Autofeeds themselves are read-only within the Data sources sub-API, you can enable or disable the Autofeed feature for your account using the autofeedSettings methods in the Accounts sub-API. For more information, see Configure Autofeed settings section.
  • Feed rules: The Data sources sub-API primarily supports default feed rules for linking supplemental data sources to primary data sources. Complex custom rule creation and management are not supported directly within this API. You can manage the order of supplemental data sources within the default rule to specify in which order attributes from a primary source and supplemental sources are combined.

Set up a local inventory data source with scheduled file fetching

You can create a local inventory data source that automatically fetches a file from a specified URL on a schedule. To create a similar data source for regional inventory, replace the localInventoryDataSource field with regionalInventoryDataSource in the request body.

To create the data source, use the dataSources.create method and provide a fileInput object with fetchSettings configured.

  POST https://merchantapi.googleapis.com/datasources/v1/accounts/ {ACCOUNT_ID} 
/dataSources 
 
  { 
  
 "displayName" 
 : 
  
 "My Scheduled Local Inventory Feed" 
 , 
  
 "localInventoryDataSource" 
 : 
  
 { 
  
 "feedLabel" 
 : 
  
 "US_Stores" 
 , 
  
 "contentLanguage" 
 : 
  
 "en" 
  
 }, 
  
 "fileInput" 
 : 
  
 { 
  
 "fetchSettings" 
 : 
  
 { 
  
 "enabled" 
 : 
  
 true 
 , 
  
 "timeOfDay" 
 : 
  
 { 
  
 "hours" 
 : 
  
 23 
  
 }, 
  
 "timeZone" 
 : 
  
 "America/New_York" 
 , 
  
 "frequency" 
 : 
  
 "FREQUENCY_DAILY" 
 , 
  
 "fetchUri" 
 : 
  
 "https://www.example.com/inventory/local_inventory_feed.csv" 
  
 } 
  
 } 
 } 
 

A successful request returns the created DataSource resource.

  { 
  
 "name" 
 : 
  
 "accounts/ {ACCOUNT_ID} 
/dataSources/ {DATASOURCE_ID} 
" 
 , 
  
 "dataSourceId" 
 : 
  
 " {DATASOURCE_ID} 
" 
 , 
  
 "displayName" 
 : 
  
 "My Scheduled Local Inventory Feed" 
 , 
  
 "localInventoryDataSource" 
 : 
  
 { 
  
 "feedLabel" 
 : 
  
 "US_Stores" 
 , 
  
 "contentLanguage" 
 : 
  
 "en" 
  
 }, 
  
 "input" 
 : 
  
 "FILE" 
 , 
  
 "fileInput" 
 : 
  
 { 
  
 "fetchSettings" 
 : 
  
 { 
  
 "enabled" 
 : 
  
 true 
 , 
  
 "timeOfDay" 
 : 
  
 { 
  
 "hours" 
 : 
  
 23 
  
 }, 
  
 "timeZone" 
 : 
  
 "America/New_York" 
 , 
  
 "frequency" 
 : 
  
 "FREQUENCY_DAILY" 
 , 
  
 "fetchUri" 
 : 
  
 "https://www.example.com/inventory/local_inventory_feed.csv" 
  
 }, 
  
 "fileInputType" 
 : 
  
 "FETCH" 
  
 } 
 } 
 

The following code samples show how to create a local inventory data source with scheduled fetching.

Java

  import 
  
 com.google.api.gax.core.FixedCredentialsProvider 
 ; 
 import 
  
 com.google.auth.oauth2.GoogleCredentials 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.CreateDataSourceRequest 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.DataSource 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.FileInput 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.LocalInventoryDataSource 
 ; 
 import 
  
 shopping.merchant.samples.utils.Authenticator 
 ; 
 import 
  
 shopping.merchant.samples.utils.Config 
 ; 
 /** This class demonstrates how to create a local inventory datasource */ 
 public 
  
 class 
 CreateFileLocalInventoryDataSourceSample 
  
 { 
  
 private 
  
 static 
  
 String 
  
 getParent 
 ( 
 String 
  
 merchantId 
 ) 
  
 { 
  
 return 
  
 String 
 . 
 format 
 ( 
 "accounts/%s" 
 , 
  
 merchantId 
 ); 
  
 } 
  
 private 
  
 static 
  
 FileInput 
  
 setFileInput 
 () 
  
 { 
  
 // If FetchSettings are not set, then this will be an `UPLOAD` file type 
  
 // that you must manually upload via the Merchant Center UI. 
  
 return 
  
 FileInput 
 . 
 newBuilder 
 () 
  
 // FileName is required for `UPLOAD` fileInput type. 
  
 . 
 setFileName 
 ( 
 "British T-shirts Local Inventory Data" 
 ) 
  
 . 
 build 
 (); 
  
 } 
  
 public 
  
 static 
  
 String 
  
 createDataSource 
 ( 
 Config 
  
 config 
 , 
  
 String 
  
 displayName 
 , 
  
 FileInput 
  
 fileInput 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 new 
  
 Authenticator 
 (). 
 authenticate 
 (); 
  
 DataSourcesServiceSettings 
  
 dataSourcesServiceSettings 
  
 = 
  
 DataSourcesServiceSettings 
 . 
 newBuilder 
 () 
  
 . 
 setCredentialsProvider 
 ( 
 FixedCredentialsProvider 
 . 
 create 
 ( 
 credential 
 )) 
  
 . 
 build 
 (); 
  
 String 
  
 parent 
  
 = 
  
 getParent 
 ( 
 config 
 . 
 getAccountId 
 (). 
 toString 
 ()); 
  
 // LocalInventoryDataSources can only be created for a specific `feedLabel` and 
  
 // `contentLanguage` combination. 
  
 LocalInventoryDataSource 
  
 localInventoryDataSource 
  
 = 
  
 LocalInventoryDataSource 
 . 
 newBuilder 
 (). 
 setContentLanguage 
 ( 
 "en" 
 ). 
 setFeedLabel 
 ( 
 "GB" 
 ). 
 build 
 (); 
  
 try 
  
 ( 
 DataSourcesServiceClient 
  
 dataSourcesServiceClient 
  
 = 
  
 DataSourcesServiceClient 
 . 
 create 
 ( 
 dataSourcesServiceSettings 
 )) 
  
 { 
  
 CreateDataSourceRequest 
  
 request 
  
 = 
  
 CreateDataSourceRequest 
 . 
 newBuilder 
 () 
  
 . 
 setParent 
 ( 
 parent 
 ) 
  
 . 
 setDataSource 
 ( 
  
 DataSource 
 . 
 newBuilder 
 () 
  
 . 
 setDisplayName 
 ( 
 displayName 
 ) 
  
 . 
 setLocalInventoryDataSource 
 ( 
 localInventoryDataSource 
 ) 
  
 . 
 setFileInput 
 ( 
 fileInput 
 ) 
  
 . 
 build 
 ()) 
  
 . 
 build 
 (); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Sending Create Local Inventory DataSource request" 
 ); 
  
 DataSource 
  
 response 
  
 = 
  
 dataSourcesServiceClient 
 . 
 createDataSource 
 ( 
 request 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Inserted DataSource Name below" 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 response 
 . 
 getName 
 ()); 
  
 return 
  
 response 
 . 
 getName 
 (); 
  
 } 
  
 catch 
  
 ( 
 Exception 
  
 e 
 ) 
  
 { 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 e 
 ); 
  
 System 
 . 
 exit 
 ( 
 1 
 ); 
  
 return 
  
 null 
 ; 
  
 } 
  
 } 
  
 public 
  
 static 
  
 void 
  
 main 
 ( 
 String 
 [] 
  
 args 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 Config 
  
 config 
  
 = 
  
 Config 
 . 
 load 
 (); 
  
 // The displayed datasource name in the Merchant Center UI. 
  
 String 
  
 displayName 
  
 = 
  
 "British Local Inventory File" 
 ; 
  
 // The file input data that this datasource will receive. 
  
 FileInput 
  
 fileInput 
  
 = 
  
 setFileInput 
 (); 
  
 createDataSource 
 ( 
 config 
 , 
  
 displayName 
 , 
  
 fileInput 
 ); 
  
 } 
 } 
  
 

PHP

  use Google\ApiCore\ApiException; 
 use Google\Shopping\Merchant\DataSources\V1\Client\DataSourcesServiceClient; 
 use Google\Shopping\Merchant\DataSources\V1\CreateDataSourceRequest; 
 use Google\Shopping\Merchant\DataSources\V1\DataSource; 
 use Google\Shopping\Merchant\DataSources\V1\FileInput; 
 use Google\Shopping\Merchant\DataSources\V1\LocalInventoryDataSource; 
 /** 
 * This class demonstrates how to create a local inventory datasource with a 
 * file input. 
 */ 
 class CreateFileLocalInventoryDataSourceSample 
 { 
 private static function getFileInput(): FileInput 
 { 
 // If FetchSettings is not set, then this will be an `UPLOAD` file type 
 // that you must manually upload via the Merchant Center UI. 
 return (new FileInput()) 
 // FileName is required for `UPLOAD` fileInput type. 
 ->setFileName('British T-shirts Local Inventory Data'); 
 } 
 public function createDataSource(string $merchantId, string $displayName, FileInput $fileInput): 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. 
 $dataSourcesServiceClient = new DataSourcesServiceClient($options); 
 $parent = sprintf('accounts/%s', $merchantId); 
 // LocalInventoryDataSources can only be created for a specific `feedLabel` and 
 // `contentLanguage` combination. 
 $localInventoryDataSource = 
 (new LocalInventoryDataSource()) 
 ->setContentLanguage('en') 
 ->setFeedLabel('GB'); 
 try { 
 // Prepare the request message. 
 $request = (new CreateDataSourceRequest()) 
 ->setParent($parent) 
 ->setDataSource( 
 (new DataSource()) 
 ->setDisplayName($displayName) 
 ->setLocalInventoryDataSource($localInventoryDataSource) 
 ->setFileInput($fileInput) 
 ); 
 print('Sending Create Local Inventory DataSource request' . PHP_EOL); 
 $response = $dataSourcesServiceClient->createDataSource($request); 
 print('Inserted DataSource Name below' . PHP_EOL); 
 print($response->getName() . PHP_EOL); 
 } catch (ApiException $ex) { 
 printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage()); 
 } 
 } 
 // Helper to execute the sample. 
 function callSample(): void 
 { 
 $config = Config::generateConfig(); 
 // The Merchant Center Account ID. 
 $merchantId = $config['accountId']; 
 // The displayed datasource name in the Merchant Center UI. 
 $displayName = 'British Primary Inventory File'; 
 $fileInput = self::getFileInput(); 
 $this->createDataSource($merchantId, $displayName, $fileInput); 
 } 
 } 
 $sample = new CreateFileLocalInventoryDataSourceSample(); 
 $sample->callSample();  
 
 

Python

  from 
  
 examples.authentication 
  
 import 
 configuration 
 from 
  
 examples.authentication 
  
 import 
 generate_user_credentials 
 from 
  
 google.shopping.merchant_datasources_v1 
  
 import 
 CreateDataSourceRequest 
 from 
  
 google.shopping.merchant_datasources_v1 
  
 import 
 DataSource 
 from 
  
 google.shopping.merchant_datasources_v1 
  
 import 
 DataSourcesServiceClient 
 from 
  
 google.shopping.merchant_datasources_v1 
  
 import 
 FileInput 
 from 
  
 google.shopping.merchant_datasources_v1 
  
 import 
 LocalInventoryDataSource 
 _ACCOUNT 
 = 
 configuration 
 . 
 Configuration 
 () 
 . 
 read_merchant_info 
 () 
 _PARENT 
 = 
 f 
 "accounts/ 
 { 
 _ACCOUNT 
 } 
 " 
 def 
  
 create_file_local_inventory_data_source 
 (): 
  
 """Creates a `DataSource` resource.""" 
 # Gets OAuth Credentials. 
 credentials 
 = 
 generate_user_credentials 
 . 
 main 
 () 
 # Creates a client. 
 client 
 = 
 DataSourcesServiceClient 
 ( 
 credentials 
 = 
 credentials 
 ) 
 # If FetchSettings are not set, then this will be an `UPLOAD` file type 
 # that you must manually upload via the Merchant Center UI or via SFTP. 
 file_input 
 = 
 FileInput 
 () 
 file_input 
 . 
 file_name 
 = 
 "British T-shirts Local Inventory Data.txt" 
 # Creates a SupplementalProductDataSource. 
 local_inventory_datasource 
 = 
 LocalInventoryDataSource 
 () 
 # LocalInventoryDataSources can only be created for a specific 
 # `feedLabel` and `contentLanguage` combination. 
 local_inventory_datasource 
 . 
 content_language 
 = 
 "en" 
 local_inventory_datasource 
 . 
 feed_label 
 = 
 "GB" 
 # Creates a DataSource and populates its attributes. 
 data_source 
 = 
 DataSource 
 () 
 data_source 
 . 
 display_name 
 = 
 "Example Local Inventory DataSource" 
 data_source 
 . 
 local_inventory_data_source 
 = 
 local_inventory_datasource 
 data_source 
 . 
 file_input 
 = 
 file_input 
 # Creates the request. 
 request 
 = 
 CreateDataSourceRequest 
 ( 
 parent 
 = 
 _PARENT 
 , 
 data_source 
 = 
 data_source 
 ) 
 # Makes the request and catches and prints any error messages. 
 try 
 : 
 response 
 = 
 client 
 . 
 create_data_source 
 ( 
 request 
 = 
 request 
 ) 
 print 
 ( 
 f 
 "DataSource successfully created: 
 { 
 response 
 } 
 " 
 ) 
 except 
 RuntimeError 
 as 
 e 
 : 
 print 
 ( 
 "DataSource creation failed" 
 ) 
 print 
 ( 
 e 
 ) 
 if 
 __name__ 
 == 
 "__main__" 
 : 
 create_file_local_inventory_data_source 
 () 
  
 

cURL

  curl -X POST \ 
 "https://merchantapi.googleapis.com/datasources/v1/accounts/ {ACCOUNT_ID} 
/dataSources" \ 
 -H "Authorization: Bearer <API_TOKEN>" \ 
 -H "Content-Type: application/json" \ 
 -d '{ 
 "displayName": "My Scheduled Local Inventory Feed", 
 "localInventoryDataSource": { 
 "feedLabel": "US_Stores", 
 "contentLanguage": "en" 
 }, 
 "fileInput": { 
 "fetchSettings": { 
 "enabled": true, 
 "timeOfDay": { 
 "hours": 23 
 }, 
 "timeZone": "America/New_York", 
 "frequency": "FREQUENCY_DAILY", 
 "fetchUri": "https://www.example.com/inventory/local_inventory_feed.csv" 
 } 
 } 
 }' 
 

Establish a promotion data source using the API

Promotion data sources let you submit promotional offers for your products. You can create an API-based data source for your promotions, which lets you send promotion data directly without needing to manage files.

Use the dataSources.create method and specify promotionDataSource . For an API feed, omit the fileInput field.

  POST https://merchantapi.googleapis.com/datasources/v1/accounts/ {ACCOUNT_ID} 
/dataSources 
 
  { 
  
 "displayName" 
 : 
  
 "My API Promotions Source" 
 , 
  
 "promotionDataSource" 
 : 
  
 { 
  
 "targetCountry" 
 : 
  
 "US" 
 , 
  
 "contentLanguage" 
 : 
  
 "en" 
  
 } 
 } 
 

A successful request returns the newly-created DataSource resource.

  { 
  
 "name" 
 : 
  
 "accounts/ {ACCOUNT_ID} 
/dataSources/ {DATASOURCE_ID} 
" 
 , 
  
 "dataSourceId" 
 : 
  
 " {DATASOURCE_ID} 
" 
 , 
  
 "displayName" 
 : 
  
 "My API Promotions Source" 
 , 
  
 "promotionDataSource" 
 : 
  
 { 
  
 "targetCountry" 
 : 
  
 "US" 
 , 
  
 "contentLanguage" 
 : 
  
 "en" 
  
 }, 
  
 "input" 
 : 
  
 "API" 
 } 
 

The following code samples show how to create an API-based promotion data source.

Java

  import 
  
 com.google.api.gax.core.FixedCredentialsProvider 
 ; 
 import 
  
 com.google.auth.oauth2.GoogleCredentials 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.CreateDataSourceRequest 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.DataSource 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.PromotionDataSource 
 ; 
 import 
  
 shopping.merchant.samples.utils.Authenticator 
 ; 
 import 
  
 shopping.merchant.samples.utils.Config 
 ; 
 /** This class demonstrates how to create a promotion datasource. */ 
 public 
  
 class 
 CreatePromotionDataSourceSample 
  
 { 
  
 private 
  
 static 
  
 String 
  
 getParent 
 ( 
 String 
  
 merchantId 
 ) 
  
 { 
  
 return 
  
 String 
 . 
 format 
 ( 
 "accounts/%s" 
 , 
  
 merchantId 
 ); 
  
 } 
  
 public 
  
 static 
  
 String 
  
 createDataSource 
 ( 
 Config 
  
 config 
 , 
  
 String 
  
 displayName 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 new 
  
 Authenticator 
 (). 
 authenticate 
 (); 
  
 DataSourcesServiceSettings 
  
 dataSourcesServiceSettings 
  
 = 
  
 DataSourcesServiceSettings 
 . 
 newBuilder 
 () 
  
 . 
 setCredentialsProvider 
 ( 
 FixedCredentialsProvider 
 . 
 create 
 ( 
 credential 
 )) 
  
 . 
 build 
 (); 
  
 String 
  
 parent 
  
 = 
  
 getParent 
 ( 
 config 
 . 
 getAccountId 
 (). 
 toString 
 ()); 
  
 try 
  
 ( 
 DataSourcesServiceClient 
  
 dataSourcesServiceClient 
  
 = 
  
 DataSourcesServiceClient 
 . 
 create 
 ( 
 dataSourcesServiceSettings 
 )) 
  
 { 
  
 CreateDataSourceRequest 
  
 request 
  
 = 
  
 CreateDataSourceRequest 
 . 
 newBuilder 
 () 
  
 . 
 setParent 
 ( 
 parent 
 ) 
  
 . 
 setDataSource 
 ( 
  
 DataSource 
 . 
 newBuilder 
 () 
  
 . 
 setDisplayName 
 ( 
 displayName 
 ) 
  
 // PromotionDataSources 
  
 // can only be created for a specific `targetCountry` and `contentLanguage` 
  
 // combination. 
  
 . 
 setPromotionDataSource 
 ( 
  
 PromotionDataSource 
 . 
 newBuilder 
 () 
  
 . 
 setContentLanguage 
 ( 
 "en" 
 ) 
  
 . 
 setTargetCountry 
 ( 
 "GB" 
 ) 
  
 . 
 build 
 ()) 
  
 . 
 build 
 ()) 
  
 . 
 build 
 (); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Sending Create Promotion DataSource request" 
 ); 
  
 DataSource 
  
 response 
  
 = 
  
 dataSourcesServiceClient 
 . 
 createDataSource 
 ( 
 request 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Inserted DataSource Name below" 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 response 
 . 
 getName 
 ()); 
  
 return 
  
 response 
 . 
 getName 
 (); 
  
 } 
  
 catch 
  
 ( 
 Exception 
  
 e 
 ) 
  
 { 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 e 
 ); 
  
 System 
 . 
 exit 
 ( 
 1 
 ); 
  
 return 
  
 null 
 ; 
  
 } 
  
 } 
  
 public 
  
 static 
  
 void 
  
 main 
 ( 
 String 
 [] 
  
 args 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 Config 
  
 config 
  
 = 
  
 Config 
 . 
 load 
 (); 
  
 // The displayed datasource name in the Merchant Center UI. 
  
 String 
  
 displayName 
  
 = 
  
 "British Promotions" 
 ; 
  
 createDataSource 
 ( 
 config 
 , 
  
 displayName 
 ); 
  
 } 
 } 
  
 

PHP

  use Google\ApiCore\ApiException; 
 use Google\Shopping\Merchant\DataSources\V1\Client\DataSourcesServiceClient; 
 use Google\Shopping\Merchant\DataSources\V1\CreateDataSourceRequest; 
 use Google\Shopping\Merchant\DataSources\V1\DataSource; 
 use Google\Shopping\Merchant\DataSources\V1\PromotionDataSource; 
 /** 
 * This class demonstrates how to create a promotion datasource. 
 */ 
 class CreatePromotionDataSource 
 { 
 /** 
 * Creates a new PromotionDataSource. 
 * 
 * @param int    $merchantId The Merchant Center account ID. 
 * @param string $displayName The displayed datasource name in the Merchant Center UI. 
 * @return string The name of the newly created PromotionDataSource. 
 */ 
 function createPromotionDataSourceSample(int $merchantId, string $displayName): string 
 { 
 // 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. 
 $dataSourcesServiceClient = new DataSourcesServiceClient($options); 
 $parent = sprintf('accounts/%s', $merchantId); 
 // Creates the data source. 
 $dataSource = (new DataSource()) 
 ->setDisplayName($displayName) 
 ->setPromotionDataSource( 
 (new PromotionDataSource()) 
 ->setContentLanguage('en') 
 ->setTargetCountry('GB') 
 ); 
 // Creates the request. 
 $request = (new CreateDataSourceRequest()) 
 ->setParent($parent) 
 ->setDataSource($dataSource); 
 // Sends the request to the API. 
 try { 
 print('Sending Create Promotion DataSource request' . PHP_EOL); 
 $response = $dataSourcesServiceClient->createDataSource($request); 
 print('Inserted DataSource Name below' . PHP_EOL); 
 print($response->getName() . PHP_EOL); 
 return $response->getName(); 
 } catch (ApiException $ex) { 
 printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage()); 
 return ''; 
 } 
 } 
 // Helper to execute the sample. 
 public function callSample(): void 
 { 
 $config = Config::generateConfig(); 
 // The Merchant Center Account ID. 
 $merchantId = $config['accountId']; 
 // The displayed datasource name in the Merchant Center UI. 
 $displayName = 'British Promotions'; 
 $this->createPromotionDataSourceSample($merchantId, $displayName); 
 } 
 } 
 $sample = new CreatePromotionDataSource(); 
 $sample->callSample();  
 
 

Python

  from 
  
 examples.authentication 
  
 import 
 configuration 
 from 
  
 examples.authentication 
  
 import 
 generate_user_credentials 
 from 
  
 google.shopping 
  
 import 
 merchant_datasources_v1 
 _ACCOUNT 
 = 
 configuration 
 . 
 Configuration 
 () 
 . 
 read_merchant_info 
 () 
 _PARENT 
 = 
 f 
 "accounts/ 
 { 
 _ACCOUNT 
 } 
 " 
 def 
  
 create_promotion_data_source 
 (): 
  
 """Creates a `DataSource` resource.""" 
 # Gets OAuth Credentials. 
 credentials 
 = 
 generate_user_credentials 
 . 
 main 
 () 
 # Creates a client. 
 client 
 = 
 merchant_datasources_v1 
 . 
 DataSourcesServiceClient 
 ( 
 credentials 
 = 
 credentials 
 ) 
 # Creates a PromotionDataSource. 
 # PromotionDataSources 
 # can only be created for a specific `targetCountry` and `contentLanguage` 
 # combination. 
 promotion_datasource 
 = 
 merchant_datasources_v1 
 . 
 PromotionDataSource 
 () 
 promotion_datasource 
 . 
 target_country 
 = 
 "CH" 
 promotion_datasource 
 . 
 content_language 
 = 
 "fr" 
 # Creates a DataSource and populates its attributes. 
 data_source 
 = 
 merchant_datasources_v1 
 . 
 DataSource 
 () 
 data_source 
 . 
 display_name 
 = 
 "Example DataSource" 
 data_source 
 . 
 promotion_data_source 
 = 
 promotion_datasource 
 # Creates the request. 
 request 
 = 
 merchant_datasources_v1 
 . 
 CreateDataSourceRequest 
 ( 
 parent 
 = 
 _PARENT 
 , 
 data_source 
 = 
 data_source 
 ) 
 # Makes the request and catches and prints any error messages. 
 try 
 : 
 response 
 = 
 client 
 . 
 create_data_source 
 ( 
 request 
 = 
 request 
 ) 
 print 
 ( 
 f 
 "DataSource successfully created: 
 { 
 response 
 } 
 " 
 ) 
 except 
 RuntimeError 
 as 
 e 
 : 
 print 
 ( 
 "DataSource creation failed" 
 ) 
 print 
 ( 
 e 
 ) 
 if 
 __name__ 
 == 
 "__main__" 
 : 
 create_promotion_data_source 
 () 
  
 

cURL

  curl -X POST \ 
 "https://merchantapi.googleapis.com/datasources/v1/accounts/ {ACCOUNT_ID} 
/dataSources" \ 
 -H "Authorization: Bearer <API_TOKEN>" \ 
 -H "Content-Type: application/json" \ 
 -d '{ 
 "displayName": "My API Promotions Source", 
 "promotionDataSource": { 
 "targetCountry": "US", 
 "contentLanguage": "en" 
 } 
 }' 
 

Create a product review data source for file uploads

Use product review data sources to submit customer reviews for your products. You can configure a data source to accept manually-uploaded files for product reviews.

Use the dataSources.create method, specify productReviewDataSource , and include a fileInput with a designated fileName .

  POST https://merchantapi.googleapis.com/datasources/v1/accounts/ {ACCOUNT_ID} 
/dataSources 
 
  { 
  
 "displayName" 
 : 
  
 "My Product Reviews Upload Feed" 
 , 
  
 "productReviewDataSource" 
 : 
  
 {}, 
  
 "fileInput" 
 : 
  
 { 
  
 "fileName" 
 : 
  
 "product_reviews.xml" 
  
 } 
 } 
 

A successful request returns the newly created DataSource resource.

  { 
  
 "name" 
 : 
  
 "accounts/ {ACCOUNT_ID} 
/dataSources/ {DATASOURCE_ID} 
" 
 , 
  
 "dataSourceId" 
 : 
  
 " {DATASOURCE_ID} 
" 
 , 
  
 "displayName" 
 : 
  
 "My Product Reviews Upload Feed" 
 , 
  
 "productReviewDataSource" 
 : 
  
 {}, 
  
 "input" 
 : 
  
 "FILE" 
 , 
  
 "fileInput" 
 : 
  
 { 
  
 "fileName" 
 : 
  
 "product_reviews.xml" 
 , 
  
 "fileInputType" 
 : 
  
 "UPLOAD" 
  
 } 
 } 
 

To create a data source for merchant reviews, you can use a similar request, replacing the productReviewDataSource object with an empty merchantReviewDataSource object.

The following code samples show how to create a product review data source for manual file uploads.

Java

  import 
  
 com.google.api.gax.core.FixedCredentialsProvider 
 ; 
 import 
  
 com.google.auth.oauth2.GoogleCredentials 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.CreateDataSourceRequest 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.DataSource 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings 
 ; 
 import 
  
 com.google.shopping.merchant.datasources.v1.ProductReviewDataSource 
 ; 
 import 
  
 java.io.IOException 
 ; 
 import 
  
 shopping.merchant.samples.utils.Authenticator 
 ; 
 import 
  
 shopping.merchant.samples.utils.Config 
 ; 
 /** This class demonstrates how to create a product review data source. */ 
 public 
  
 class 
 CreateProductReviewsDataSourceSample 
  
 { 
  
 private 
  
 static 
  
 void 
  
 createProductReviewsDataSource 
 ( 
 String 
  
 accountId 
 ) 
  
 throws 
  
 IOException 
  
 { 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 new 
  
 Authenticator 
 (). 
 authenticate 
 (); 
  
 DataSourcesServiceSettings 
  
 dataSourcesServiceSettings 
  
 = 
  
 DataSourcesServiceSettings 
 . 
 newBuilder 
 () 
  
 . 
 setCredentialsProvider 
 ( 
 FixedCredentialsProvider 
 . 
 create 
 ( 
 credential 
 )) 
  
 . 
 build 
 (); 
  
 try 
  
 ( 
 DataSourcesServiceClient 
  
 dataSourcesServiceClient 
  
 = 
  
 DataSourcesServiceClient 
 . 
 create 
 ( 
 dataSourcesServiceSettings 
 )) 
  
 { 
  
 CreateDataSourceRequest 
  
 request 
  
 = 
  
 CreateDataSourceRequest 
 . 
 newBuilder 
 () 
  
 . 
 setParent 
 ( 
 String 
 . 
 format 
 ( 
 "accounts/%s" 
 , 
  
 accountId 
 )) 
  
 . 
 setDataSource 
 ( 
  
 DataSource 
 . 
 newBuilder 
 () 
  
 . 
 setDisplayName 
 ( 
 "Product Reviews Data Source" 
 ) 
  
 . 
 setProductReviewDataSource 
 ( 
 ProductReviewDataSource 
 . 
 newBuilder 
 (). 
 build 
 ()) 
  
 . 
 build 
 ()) 
  
 . 
 build 
 (); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Creating product reviews data source..." 
 ); 
  
 DataSource 
  
 dataSource 
  
 = 
  
 dataSourcesServiceClient 
 . 
 createDataSource 
 ( 
 request 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
  
 String 
 . 
 format 
 ( 
 "Datasource created successfully: %s" 
 , 
  
 dataSource 
 . 
 getName 
 ())); 
  
 } 
  
 catch 
  
 ( 
 Exception 
  
 e 
 ) 
  
 { 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 e 
 ); 
  
 System 
 . 
 exit 
 ( 
 1 
 ); 
  
 } 
  
 } 
  
 public 
  
 static 
  
 void 
  
 main 
 ( 
 String 
 [] 
  
 args 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 Config 
  
 config 
  
 = 
  
 Config 
 . 
 load 
 (); 
  
 createProductReviewsDataSource 
 ( 
 config 
 . 
 getAccountId 
 (). 
 toString 
 ()); 
  
 } 
 } 
  
 

cURL

  curl -X POST \ 
 "https://merchantapi.googleapis.com/datasources/v1/accounts/ {ACCOUNT_ID} 
/dataSources" \ 
 -H "Authorization: Bearer <API_TOKEN>" \ 
 -H "Content-Type: application/json" \ 
 -d '{ 
 "displayName": "My Product Reviews Upload Feed", 
 "productReviewDataSource": {}, 
 "fileInput": { 
 "fileName": "product_reviews.xml" 
 } 
 }' 
 

Configure Autofeed settings

Automated data sources automatically create product data based on your website's content. While the Autofeed data source itself is read-only within the Data sources sub-API, you can enable or disable the Autofeed feature for your account using the autofeedSettings.updateAutofeedSettings method in the Accounts sub-API.

This example enables product crawling through Autofeed for the account.

  PATCH https://merchantapi.googleapis.com/accounts/v1/accounts/ {ACCOUNT_ID} 
/autofeedSettings?updateMask=enableProducts 
 
  { 
  
 "name" 
 : 
  
 "accounts/ {ACCOUNT_ID} 
/autofeedSettings" 
 , 
  
 "enableProducts" 
 : 
  
 true 
 } 
 

A successful request returns the updated AutofeedSettings resource.

  { 
  
 "name" 
 : 
  
 "accounts/ {ACCOUNT_ID} 
/autofeedSettings" 
 , 
  
 "enableProducts" 
 : 
  
 true 
 , 
  
 "eligible" 
 : 
  
 true 
 } 
 

The following code samples show how to enable Autofeed settings for an account.

Java

  import 
  
 com.google.api.gax.core.FixedCredentialsProvider 
 ; 
 import 
  
 com.google.auth.oauth2.GoogleCredentials 
 ; 
 import 
  
 com.google.protobuf.FieldMask 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.AutofeedSettings 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.AutofeedSettingsName 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.AutofeedSettingsServiceClient 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.AutofeedSettingsServiceSettings 
 ; 
 import 
  
 com.google.shopping.merchant.accounts.v1.UpdateAutofeedSettingsRequest 
 ; 
 import 
  
 shopping.merchant.samples.utils.Authenticator 
 ; 
 import 
  
 shopping.merchant.samples.utils.Config 
 ; 
 /** This class demonstrates how to update AutofeedSettings to be enabled. */ 
 public 
  
 class 
 UpdateAutofeedSettingsSample 
  
 { 
  
 public 
  
 static 
  
 void 
  
 updateAutofeedSettings 
 ( 
 Config 
  
 config 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 new 
  
 Authenticator 
 (). 
 authenticate 
 (); 
  
 AutofeedSettingsServiceSettings 
  
 autofeedSettingsServiceSettings 
  
 = 
  
 AutofeedSettingsServiceSettings 
 . 
 newBuilder 
 () 
  
 . 
 setCredentialsProvider 
 ( 
 FixedCredentialsProvider 
 . 
 create 
 ( 
 credential 
 )) 
  
 . 
 build 
 (); 
  
 // Creates AutofeedSettings name to identify AutofeedSettings. 
  
 String 
  
 name 
  
 = 
  
 AutofeedSettingsName 
 . 
 newBuilder 
 () 
  
 . 
 setAccount 
 ( 
 config 
 . 
 getAccountId 
 (). 
 toString 
 ()) 
  
 . 
 build 
 () 
  
 . 
 toString 
 (); 
  
 // Create AutofeedSettings with the updated fields. 
  
 AutofeedSettings 
  
 autofeedSettings 
  
 = 
  
 AutofeedSettings 
 . 
 newBuilder 
 (). 
 setName 
 ( 
 name 
 ). 
 build 
 (); 
  
 FieldMask 
  
 fieldMask 
  
 = 
  
 FieldMask 
 . 
 newBuilder 
 (). 
 addPaths 
 ( 
 "*" 
 ). 
 build 
 (); 
  
 try 
  
 ( 
 AutofeedSettingsServiceClient 
  
 autofeedSettingsServiceClient 
  
 = 
  
 AutofeedSettingsServiceClient 
 . 
 create 
 ( 
 autofeedSettingsServiceSettings 
 )) 
  
 { 
  
 UpdateAutofeedSettingsRequest 
  
 request 
  
 = 
  
 UpdateAutofeedSettingsRequest 
 . 
 newBuilder 
 () 
  
 . 
 setAutofeedSettings 
 ( 
 autofeedSettings 
 ) 
  
 . 
 setUpdateMask 
 ( 
 fieldMask 
 ) 
  
 . 
 build 
 (); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Sending Update AutofeedSettings request" 
 ); 
  
 AutofeedSettings 
  
 response 
  
 = 
  
 autofeedSettingsServiceClient 
 . 
 updateAutofeedSettings 
 ( 
 request 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Updated AutofeedSettings 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 
 (); 
  
 updateAutofeedSettings 
 ( 
 config 
 ); 
  
 } 
 } 
  
 

PHP

  use Google\ApiCore\ApiException; 
 use Google\Protobuf\FieldMask; 
 use Google\Shopping\Merchant\Accounts\V1\AutofeedSettings; 
 use Google\Shopping\Merchant\Accounts\V1\Client\AutofeedSettingsServiceClient; 
 use Google\Shopping\Merchant\Accounts\V1\UpdateAutofeedSettingsRequest; 
 /** 
 * This class demonstrates how to update AutofeedSettings to be enabled. 
 */ 
 class UpdateAutofeedSettingsSample 
 { 
 /** 
 * Update AutofeedSettings to be enabled. 
 * 
 * @param array $config The configuration data for authentication and account ID. 
 * @return void 
 */ 
 public static function updateAutofeedSettingsSample(array $config): void 
 { 
 // Get OAuth credentials. 
 $credentials = Authentication::useServiceAccountOrTokenFile(); 
 // Create options for the client. 
 $options = ['credentials' => $credentials]; 
 // Create a client. 
 $autofeedSettingsServiceClient = new AutofeedSettingsServiceClient($options); 
 // Create the AutofeedSettings name. 
 $name = "accounts/" . $config['accountId'] . "/autofeedSettings"; 
 // Create AutofeedSettings object. 
 $autofeedSettings = (new AutofeedSettings()) 
 ->setName($name); 
 // Create FieldMask. 
 $fieldMask = (new FieldMask()) 
 ->setPaths(["*"]); 
 // Call the API. 
 try { 
 // Prepare the request. 
 $request = (new UpdateAutofeedSettingsRequest()) 
 ->setAutofeedSettings($autofeedSettings) 
 ->setUpdateMask($fieldMask); 
 print "Sending Update AutofeedSettings request\n"; 
 $response = $autofeedSettingsServiceClient->updateAutofeedSettings($request); 
 print "Updated AutofeedSettings Name below\n"; 
 print $response->getName() . "\n"; 
 } catch (ApiException $e) { 
 print $e->getMessage(); 
 } 
 } 
 /** 
 * Helper to execute the sample. 
 * 
 * @return void 
 */ 
 public function callSample(): void 
 { 
 $config = Config::generateConfig(); 
 self::updateAutofeedSettingsSample($config); 
 } 
 } 
 // Run the script 
 $sample = new UpdateAutofeedSettingsSample(); 
 $sample->callSample();  
 
 

Python

  from 
  
 examples.authentication 
  
 import 
 configuration 
 from 
  
 examples.authentication 
  
 import 
 generate_user_credentials 
 from 
  
 google.protobuf 
  
 import 
 field_mask_pb2 
 from 
  
 google.shopping.merchant_accounts_v1 
  
 import 
 AutofeedSettings 
 from 
  
 google.shopping.merchant_accounts_v1 
  
 import 
 AutofeedSettingsServiceClient 
 from 
  
 google.shopping.merchant_accounts_v1 
  
 import 
 UpdateAutofeedSettingsRequest 
 _ACCOUNT 
 = 
 configuration 
 . 
 Configuration 
 () 
 . 
 read_merchant_info 
 () 
 def 
  
 update_autofeed_settings 
 (): 
  
 """Updates the AutofeedSettings of a Merchant Center account.""" 
 # Gets OAuth Credentials. 
 credentials 
 = 
 generate_user_credentials 
 . 
 main 
 () 
 # Creates a client. 
 client 
 = 
 AutofeedSettingsServiceClient 
 ( 
 credentials 
 = 
 credentials 
 ) 
 # Creates name to identify the AutofeedSettings. 
 name 
 = 
 "accounts/" 
 + 
 _ACCOUNT 
 + 
 "/autofeedSettings" 
 # Create AutofeedSettings with the updated fields. 
 autofeed_settings 
 = 
 AutofeedSettings 
 ( 
 name 
 = 
 name 
 , 
 enable_products 
 = 
 False 
 ) 
 # Create the field mask. 
 field_mask 
 = 
 field_mask_pb2 
 . 
 FieldMask 
 ( 
 paths 
 = 
 [ 
 "enable_products" 
 ]) 
 # Creates the request. 
 request 
 = 
 UpdateAutofeedSettingsRequest 
 ( 
 autofeed_settings 
 = 
 autofeed_settings 
 , 
 update_mask 
 = 
 field_mask 
 ) 
 # Makes the request and catches and prints any error messages. 
 try 
 : 
 response 
 = 
 client 
 . 
 update_autofeed_settings 
 ( 
 request 
 = 
 request 
 ) 
 print 
 ( 
 "Updated AutofeedSettings Name below" 
 ) 
 print 
 ( 
 response 
 . 
 name 
 ) 
 except 
 RuntimeError 
 as 
 e 
 : 
 print 
 ( 
 "Update AutofeedSettings request failed" 
 ) 
 print 
 ( 
 e 
 ) 
 if 
 __name__ 
 == 
 "__main__" 
 : 
 update_autofeed_settings 
 () 
  
 

cURL

  curl -X PATCH \ 
 "https://merchantapi.googleapis.com/accounts/v1/accounts/ {ACCOUNT_ID} 
/autofeedSettings?updateMask=enableProducts" \ 
 -H "Authorization: Bearer <API_TOKEN>" \ 
 -H "Content-Type: application/json" \ 
 -d '{ 
 "name": "accounts/ {ACCOUNT_ID} 
/autofeedSettings", 
 "enableProducts": true 
 }' 
 
Design a Mobile Site
View Site in Mobile | Classic
Share by: