List products

  • This content provides code samples in Java, PHP, and Python demonstrating how to list all products within a Merchant Center account using the Merchant API.

  • Each code sample includes the necessary authentication steps to access the Merchant Center account using OAuth credentials, through service accounts or token files.

  • The code samples in each language create a request object to list the products, send the request to the Products Service, and handle the response by iterating through and printing the products data returned, as well as displaying error messages when they occur.

  • The provided code dynamically determines the account from which the products should be listed from.

  • Each code example also references where the code can be found in the public GitHub repository for the Google merchant API samples.

Merchant API code sample to list products.

AppsScript

  // 
  
 Copyright 
  
 2025 
  
 Google 
  
 LLC 
 // 
 // 
  
 Licensed 
  
 under 
  
 the 
  
 Apache 
  
 License 
 , 
  
 Version 
  
 2.0 
  
 ( 
 the 
  
 "License" 
 ); 
 // 
  
 you 
  
 may 
  
 not 
  
 use 
  
 this 
  
 file 
  
 except 
  
 in 
  
 compliance 
  
 with 
  
 the 
  
 License 
 . 
 // 
  
 You 
  
 may 
  
 obtain 
  
 a 
  
 copy 
  
 of 
  
 the 
  
 License 
  
 at 
 // 
 // 
  
 https 
 : 
 // 
 www 
 . 
 apache 
 . 
 org 
 / 
 licenses 
 / 
 LICENSE 
 - 
 2.0 
 // 
 // 
  
 Unless 
  
 required 
  
 by 
  
 applicable 
  
 law 
  
 or 
  
 agreed 
  
 to 
  
 in 
  
 writing 
 , 
  
 software 
 // 
  
 distributed 
  
 under 
  
 the 
  
 License 
  
 is 
  
 distributed 
  
 on 
  
 an 
  
 "AS IS" 
  
 BASIS 
 , 
 // 
  
 WITHOUT 
  
 WARRANTIES 
  
 OR 
  
 CONDITIONS 
  
 OF 
  
 ANY 
  
 KIND 
 , 
  
 either 
  
 express 
  
 or 
  
 implied 
 . 
 // 
  
 See 
  
 the 
  
 License 
  
 for 
  
 the 
  
 specific 
  
 language 
  
 governing 
  
 permissions 
  
 and 
 // 
  
 limitations 
  
 under 
  
 the 
  
 License 
 . 
 /** 
  
 * 
  
 Lists 
  
 all 
  
 products 
  
 for 
  
 a 
  
 given 
  
 Merchant 
  
 Center 
  
 account 
 . 
  
 */ 
 function 
  
 productList 
 () 
  
 { 
  
 // 
  
 IMPORTANT 
 : 
  
 // 
  
 Enable 
  
 the 
  
 Merchant 
  
 API 
  
 Products 
  
 sub 
 - 
 API 
  
 Advanced 
  
 Service 
  
 and 
  
 call 
  
 it 
  
 // 
  
 "MerchantApiProducts" 
  
 // 
  
 Replace 
  
 this 
  
 with 
  
 your 
  
 Merchant 
  
 Center 
  
 ID 
 . 
  
 const 
  
 accountId 
  
 = 
  
 '<MERCHANT_CENTER_ID>' 
 ; 
  
 // 
  
 Construct 
  
 the 
  
 parent 
  
 name 
  
 const 
  
 parent 
  
 = 
  
 'accounts/' 
  
 + 
  
 accountId 
 ; 
  
 try 
  
 { 
  
 console 
 . 
 log 
 ( 
 'Sending list Products request' 
 ); 
  
 let 
  
 pageToken 
 ; 
  
 // 
  
 Set 
  
 the 
  
 page 
  
 size 
  
 to 
  
 1000. 
  
 This 
  
 is 
  
 the 
  
 maximum 
  
 allowed 
  
 page 
  
 size 
 . 
  
 let 
  
 pageSize 
  
 = 
  
 1000 
 ; 
  
 console 
 . 
 log 
 ( 
 'Retrieved products below:' 
 ); 
  
 // 
  
 Call 
  
 the 
  
 Products 
 . 
 list 
  
 API 
  
 method 
 . 
  
 Use 
  
 the 
  
 pageToken 
  
 to 
  
 iterate 
  
 through 
  
 // 
  
 all 
  
 pages 
  
 of 
  
 results 
 . 
  
 do 
  
 { 
  
 response 
  
 = 
  
 MerchantApiProducts 
 . 
 Accounts 
 . 
 Products 
 . 
 list 
 ( 
 parent 
 , 
  
 { 
 pageToken 
 , 
  
 pageSize 
 }); 
  
 console 
 . 
 log 
 ( 
 response 
 ); 
  
 pageToken 
  
 = 
  
 response 
 . 
 nextPageToken 
 ; 
  
 } 
  
 while 
  
 ( 
 pageToken 
 ); 
  
 // 
  
 Exits 
  
 when 
  
 there 
  
 is 
  
 no 
  
 next 
  
 page 
  
 token 
 . 
  
 } 
  
 catch 
  
 ( 
 e 
 ) 
  
 { 
  
 console 
 . 
 log 
 ( 
 'ERROR!' 
 ); 
  
 console 
 . 
 log 
 ( 
 e 
 ); 
  
 } 
 } 
  
 

CSharp

  // Copyright 2025 Google LLC 
 // 
 // Licensed under the Apache License, Version 2.0 (the "License"); 
 // you may not use this file except in compliance with the License. 
 // You may obtain a copy of the License at 
 // 
 //     https://www.apache.org/licenses/LICENSE-2.0 
 // 
 // Unless required by applicable law or agreed to in writing, software 
 // distributed under the License is distributed on an "AS IS" BASIS, 
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 // See the License for the specific language governing permissions and 
 // limitations under the License. 
 using 
  
 System 
 ; 
 using 
  
 static 
  
 MerchantApi 
 . 
 Authenticator 
 ; 
 using 
  
 Google.Api.Gax 
 ; 
 using 
  
 Google.Apis.Auth.OAuth2 
 ; 
 using 
  
 Google.Apis.Auth.OAuth2.Flows 
 ; 
 using 
  
 Google.Apis.Auth.OAuth2.Responses 
 ; 
 using 
  
 Google.Apis.Http 
 ; 
 using 
  
 Newtonsoft.Json 
 ; 
 using 
  
 Google.Shopping.Merchant.Products.V1 
 ; 
 namespace 
  
 MerchantApi 
 { 
  
 public 
  
 class 
  
 ListProductsSample 
  
 { 
  
 public 
  
 void 
  
 ListProducts 
 ( 
 string 
  
 merchantId 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "=================================================================" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 "Listing all Products" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 "=================================================================" 
 ); 
  
 // Authenticate using either oAuth or service account 
  
 ICredential 
  
 auth 
  
 = 
  
 Authenticator 
 . 
 Authenticate 
 ( 
  
 MerchantConfig 
 . 
 Load 
 (), 
  
 ProductsServiceClient 
 . 
 DefaultScopes 
 [ 
 0 
 ]); 
  
 // Create client 
  
 ProductsServiceSettings 
  
 productsServiceSettings 
  
 = 
  
 ProductsServiceSettings 
 . 
 GetDefault 
 (); 
  
 // Create the ProductsServiceClient with the credentials 
  
 ProductsServiceClientBuilder 
  
 productsServiceClientBuilder 
  
 = 
  
 new 
  
 ProductsServiceClientBuilder 
  
 { 
  
 Credential 
  
 = 
  
 auth 
  
 }; 
  
 ProductsServiceClient 
  
 client 
  
 = 
  
 productsServiceClientBuilder 
 . 
 Build 
 (); 
  
 // Initialize the parent 
  
 // The parent has the format: accounts/{account} 
  
 AccountName 
  
 parent 
  
 = 
  
 AccountName 
 . 
 FromAccount 
 ( 
 merchantId 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 $"Listing products for account: {parent}" 
 ); 
  
 // Initialize request argument(s) 
  
 ListProductsRequest 
  
 request 
  
 = 
  
 new 
  
 ListProductsRequest 
  
 { 
  
 Parent 
  
 = 
  
 parent 
 . 
 ToString 
 (), 
  
 PageSize 
  
 = 
  
 1000 
  
 // Optional: specify the maximum number of products to return per page 
  
 }; 
  
 // List all products in the account 
  
 // Note: The API may return fewer than 1000 products 
  
 PagedEnumerable<ListProductsResponse 
 , 
  
 Product 
>  
 response 
  
 = 
  
 client 
 . 
 ListProducts 
 ( 
 request 
 ); 
  
 // Print the paginated results. This automatically handles pagination 
  
 // and retrieves all products in the account. 
  
 foreach 
  
 ( 
 ListProductsResponse 
  
 page 
  
 in 
  
 response 
 . 
 AsRawResponses 
 ()) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "A page of results:" 
 ); 
  
 foreach 
  
 ( 
 Product 
  
 item 
  
 in 
  
 page 
 ) 
  
 { 
  
 // Pretty print the products 
  
 Console 
 . 
 WriteLine 
 ( 
 JsonConvert 
 . 
 SerializeObject 
 ( 
 item 
 , 
  
 Formatting 
 . 
 Indented 
 )); 
  
 } 
  
 } 
  
 } 
  
 internal 
  
 static 
  
 void 
  
 Main 
 ( 
 string 
 [] 
  
 args 
 ) 
  
 { 
  
 var 
  
 config 
  
 = 
  
 MerchantConfig 
 . 
 Load 
 (); 
  
 string 
  
 merchantId 
  
 = 
  
 config 
 . 
 MerchantId 
 . 
 Value 
 . 
 ToString 
 (); 
  
 var 
  
 sample 
  
 = 
  
 new 
  
 ListProductsSample 
 (); 
  
 sample 
 . 
 ListProducts 
 ( 
 merchantId 
 ); 
  
 } 
  
 } 
 } 
  
 

Java

  // Copyright 2024 Google LLC 
 // 
 // Licensed under the Apache License, Version 2.0 (the "License"); 
 // you may not use this file except in compliance with the License. 
 // You may obtain a copy of the License at 
 // 
 //     https://www.apache.org/licenses/LICENSE-2.0 
 // 
 // Unless required by applicable law or agreed to in writing, software 
 // distributed under the License is distributed on an "AS IS" BASIS, 
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 // See the License for the specific language governing permissions and 
 // limitations under the License. 
 package 
  
 shopping.merchant.samples.products.v1 
 ; 
 import 
  
 com.google.api.gax.core.FixedCredentialsProvider 
 ; 
 import 
  
 com.google.auth.oauth2.GoogleCredentials 
 ; 
 import 
  
 com.google.shopping.merchant.products.v1.ListProductsRequest 
 ; 
 import 
  
 com.google.shopping.merchant.products.v1.Product 
 ; 
 import 
  
 com.google.shopping.merchant.products.v1.ProductsServiceClient 
 ; 
 import 
  
 com.google.shopping.merchant.products.v1.ProductsServiceClient.ListProductsPagedResponse 
 ; 
 import 
  
 com.google.shopping.merchant.products.v1.ProductsServiceSettings 
 ; 
 import 
  
 shopping.merchant.samples.utils.Authenticator 
 ; 
 import 
  
 shopping.merchant.samples.utils.Config 
 ; 
 /** This class demonstrates how to list all the products for a given merchant center account */ 
 public 
  
 class 
 ListProductsSample 
  
 { 
  
 private 
  
 static 
  
 String 
  
 getParent 
 ( 
 String 
  
 accountId 
 ) 
  
 { 
  
 return 
  
 String 
 . 
 format 
 ( 
 "accounts/%s" 
 , 
  
 accountId 
 ); 
  
 } 
  
 public 
  
 static 
  
 void 
  
 listProducts 
 ( 
 Config 
  
 config 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 // Obtains OAuth token based on the user's configuration. 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 new 
  
 Authenticator 
 (). 
 authenticate 
 (); 
  
 // Creates service settings using the credentials retrieved above. 
  
 ProductsServiceSettings 
  
 productsServiceSettings 
  
 = 
  
 ProductsServiceSettings 
 . 
 newBuilder 
 () 
  
 . 
 setCredentialsProvider 
 ( 
 FixedCredentialsProvider 
 . 
 create 
 ( 
 credential 
 )) 
  
 . 
 build 
 (); 
  
 // Creates parent to identify the account from which to list all products. 
  
 String 
  
 parent 
  
 = 
  
 getParent 
 ( 
 config 
 . 
 getAccountId 
 (). 
 toString 
 ()); 
  
 // Calls the API and catches and prints any network failures/errors. 
  
 try 
  
 ( 
 ProductsServiceClient 
  
 productsServiceClient 
  
 = 
  
 ProductsServiceClient 
 . 
 create 
 ( 
 productsServiceSettings 
 )) 
  
 { 
  
 // The parent has the format: accounts/{account} 
  
 // Page size is set to the maximum 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. 
  
 ListProductsRequest 
  
 request 
  
 = 
  
 ListProductsRequest 
 . 
 newBuilder 
 (). 
 setParent 
 ( 
 parent 
 ). 
 setPageSize 
 ( 
 1000 
 ). 
 build 
 (); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Sending list products request:" 
 ); 
  
 ListProductsPagedResponse 
  
 response 
  
 = 
  
 productsServiceClient 
 . 
 listProducts 
 ( 
 request 
 ); 
  
 int 
  
 count 
  
 = 
  
 0 
 ; 
  
 // Iterates over all rows in all pages and prints the datasource in each row. 
  
 // Automatically uses the `nextPageToken` if returned to fetch all pages of data. 
  
 for 
  
 ( 
 Product 
  
 product 
  
 : 
  
 response 
 . 
 iterateAll 
 ()) 
  
 { 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 product 
 ); 
  
 // The product includes the `productStatus` field 
  
 // That shows approval and disapproval information. 
  
 count 
 ++ 
 ; 
  
 } 
  
 System 
 . 
 out 
 . 
 print 
 ( 
 "The following count of products were returned: " 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 count 
 ); 
  
 } 
  
 catch 
  
 ( 
 Exception 
  
 e 
 ) 
  
 { 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "An error has occured: " 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 e 
 ); 
  
 } 
  
 } 
  
 public 
  
 static 
  
 void 
  
 main 
 ( 
 String 
 [] 
  
 args 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 Config 
  
 config 
  
 = 
  
 Config 
 . 
 load 
 (); 
  
 listProducts 
 ( 
 config 
 ); 
  
 } 
 } 
  
 

Node.js

  // Copyright 2025 Google LLC 
 // 
 // Licensed under the Apache License, Version 2.0 (the "License"); 
 // you may not use this file except in compliance with the License. 
 // You may obtain a copy of the License at 
 // 
 //     https://www.apache.org/licenses/LICENSE-2.0 
 // 
 // Unless required by applicable law or agreed to in writing, software 
 // distributed under the License is distributed on an "AS IS" BASIS, 
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 // See the License for the specific language governing permissions and 
 // limitations under the License. 
 'use strict' 
 ; 
 const 
  
 fs 
  
 = 
  
 require 
 ( 
 'fs' 
 ); 
 const 
  
 authUtils 
  
 = 
  
 require 
 ( 
 '../../authentication/authenticate.js' 
 ); 
 const 
  
 { 
 ProductsServiceClient 
 } 
  
 = 
  
 require 
 ( 
 '@google-shopping/products' 
 ). 
 v1 
 ; 
 /** 
 * Lists all products for a given merchant. 
 */ 
 async 
  
 function 
  
 main 
 () 
  
 { 
  
 try 
  
 { 
  
 const 
  
 config 
  
 = 
  
 authUtils 
 . 
 getConfig 
 (); 
  
 // Read merchant_id from merchant-info.json 
  
 const 
  
 merchant_info 
  
 = 
  
 JSON 
 . 
 parse 
 ( 
 fs 
 . 
 readFileSync 
 ( 
 config 
 . 
 merchantInfoFile 
 , 
  
 'utf8' 
 )); 
  
 const 
  
 merchant_id 
  
 = 
  
 merchant_info 
 . 
 merchantId 
 ; 
  
 // Construct parent. Parent is in the format of accounts/{merchant_id} 
  
 const 
  
 parent 
  
 = 
  
 'accounts/' 
  
 + 
  
 merchant_id 
 ; 
  
 // Get credentials 
  
 const 
  
 authClient 
  
 = 
  
 await 
  
 authUtils 
 . 
 getOrGenerateUserCredentials 
 (); 
  
 // Create options object for the client 
  
 const 
  
 options 
  
 = 
  
 { 
 'authClient' 
  
 : 
  
 authClient 
 }; 
  
 // Create client 
  
 const 
  
 productsClient 
  
 = 
  
 new 
  
 ProductsServiceClient 
 ( 
 options 
 ); 
  
 // Construct request. Set the page size to the maximum value. 
  
 const 
  
 request 
  
 = 
  
 { 
  
 parent 
 : 
  
 parent 
 , 
  
 pageSize 
 : 
  
 1000 
  
 }; 
  
 // Run request 
  
 const 
  
 iterable 
  
 = 
  
 productsClient 
 . 
 listProductsAsync 
 ( 
 request 
 ); 
  
 for 
  
 await 
  
 ( 
 const 
  
 response 
  
 of 
  
 iterable 
 ) 
  
 { 
  
 console 
 . 
 log 
 ( 
 response 
 ); 
  
 } 
  
 } 
  
 catch 
  
 ( 
 error 
 ) 
  
 { 
  
 console 
 . 
 error 
 ( 
 error 
 . 
 message 
 ); 
  
 } 
 } 
 main 
 (); 
  
 

PHP

 < ?php 
 /** 
 * Copyright 2024 Google LLC 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *     https://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License. 
 */ 
 require_once __DIR__ . '/../../../vendor/autoload.php'; 
 require_once __DIR__ . '/../../Authentication/Authentication.php'; 
 require_once __DIR__ . '/../../Authentication/Config.php'; 
 use Google\ApiCore\ApiException; 
 use Google\ApiCore\PagedListResponse; 
 use Google\Shopping\Merchant\Products\V1\ListProductsRequest; 
 use Google\Shopping\Merchant\Products\V1\Product; 
 use Google\Shopping\Merchant\Products\V1\Client\ProductsServiceClient; 
 /** 
 * This class demonstrates how list all products in your Merchant Center account. 
 */ 
 class ListProducts 
 { 
 /** 
 * A helper function to create the parent string. 
 * 
 * @param array $accountId 
 *      The account that owns the product. 
 * 
 * @return string The parent has the format: `accounts/{account_id}` 
 */ 
 private static function getParent($accountId) 
 { 
 return sprintf("accounts/%s", $accountId); 
 } 
 /** 
 * Lists all products in your Merchant Center account. 
 * 
 * @param array $config 
 *      The configuration data used for authentication and getting the acccount 
 *      ID. 
 */ 
 public static function listProductsSample($config) 
 { 
 // Obtains OAuth token based on the user's configuration. 
 $credentials = Authentication::useServiceAccountOrTokenFile(); 
 // Creates options config containing credentials for the client to use. 
 $options = ['credentials' => $credentials]; 
 // Creates a client. 
 $productsServiceClient = new ProductsServiceClient($options); 
 // Creates parent to identify the account from which to list all products. 
 $parent = self::getParent($config['accountId']); 
 // Creates the request. 
 // Page size is set to the maximum 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. 
 $request = new ListProductsRequest(['parent' => $parent, 'page_size' => 1000]); 
 // Calls the API and catches and prints any network failures/errors. 
 try { 
 echo "Sending list products request:\n"; 
 /** 
 * Call the listProducts service and get back a response object 
 * with all products. 
 * 
 * @var PagedListResponse $response 
 */ 
 $response = $productsServiceClient->listProducts($request); 
 /** 
 * Loop through every product and print out its data. 
 * 
 * @var Product $product 
 */ 
 foreach ($response as $product) { 
 // The product includes the `productStatus` field that shows approval 
 // and disapproval information. 
 printf( 
 'Product data: %s%s', 
 $product->serializeToJsonString(), PHP_EOL 
 ); 
 } 
 } catch (ApiException $e) { 
 printf('Call failed with message: %s%s', $e->getMessage(), PHP_EOL); 
 } 
 } 
 /** 
 * Helper to execute the sample. 
 * 
 * @return void 
 */ 
 public function callSample(): void 
 { 
 $config = Config::generateConfig(); 
 self::listProductsSample($config); 
 } 
 } 
 // Run the script 
 $sample = new ListProducts(); 
 $sample->callSample();  
 
 

Python

  # -*- coding: utf-8 -*- 
 # Copyright 2024 Google LLC 
 # 
 # Licensed under the Apache License, Version 2.0 (the "License"); 
 # you may not use this file except in compliance with the License. 
 # You may obtain a copy of the License at 
 # 
 #     http://www.apache.org/licenses/LICENSE-2.0 
 # 
 # Unless required by applicable law or agreed to in writing, software 
 # distributed under the License is distributed on an "AS IS" BASIS, 
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 # See the License for the specific language governing permissions and 
 # limitations under the License. 
 """A module to list Products.""" 
 from 
  
 examples.authentication 
  
 import 
 configuration 
 from 
  
 examples.authentication 
  
 import 
 generate_user_credentials 
 from 
  
 google.shopping 
  
 import 
 merchant_products_v1 
 _ACCOUNT 
 = 
 configuration 
 . 
 Configuration 
 () 
 . 
 read_merchant_info 
 () 
 _PARENT 
 = 
 f 
 "accounts/ 
 { 
 _ACCOUNT 
 } 
 " 
 def 
  
 list_products 
 (): 
  
 """Lists the `Product` resources for a given account.""" 
 # Gets OAuth Credentials. 
 credentials 
 = 
 generate_user_credentials 
 . 
 main 
 () 
 # Creates a client. 
 client 
 = 
 merchant_products_v1 
 . 
 ProductsServiceClient 
 ( 
 credentials 
 = 
 credentials 
 ) 
 # Creates the request. Set the page size to the maximum value. 
 request 
 = 
 merchant_products_v1 
 . 
 ListProductsRequest 
 ( 
 parent 
 = 
 _PARENT 
 , 
 page_size 
 = 
 1000 
 ) 
 # Makes the request and catches and prints any error messages. 
 try 
 : 
 response 
 = 
 client 
 . 
 list_products 
 ( 
 request 
 = 
 request 
 ) 
 for 
 product 
 in 
 response 
 : 
 print 
 ( 
 product 
 ) 
 print 
 ( 
 "List request successful!" 
 ) 
 except 
 RuntimeError 
 as 
 e 
 : 
 print 
 ( 
 "List request failed" 
 ) 
 print 
 ( 
 e 
 ) 
 if 
 __name__ 
 == 
 "__main__" 
 : 
 list_products 
 () 
  
 
Design a Mobile Site
View Site in Mobile | Classic
Share by: