The Merchant API service lets you use Merchant API in Apps Script, to upload products and manage Merchant Center accounts.
For detailed information about Merchant API, see the reference documentation . Like all advanced services in Apps Script, the Merchant API service uses the same objects, methods, and parameters as the public API.
Merchant API is a collection of sub-APIs - groups of related services and resources. Here's the list of sub-APIs .
To use the Merchant API service in Apps Script, follow these steps:
-
Make sure that your Apps Script project is linked to a standard Google Cloud project. For information, see Use a different standard Cloud project .
-
Enable the Apps Script Advanced service, as described in this document:
- Enable
appsscript.json
for new projects. - Enable Apps Script for existing projects.
- Enable
-
Register your standard Google Cloud project with your Merchant Center account, as described in the Merchant API quickstart guide.
Enable Apps Script Advanced service
You can enable the Apps Script service using either of the following two methods:
Enable APIs in appsscript.json
The following example shows an appsscript.json
file that enables the Products,
Accounts, Reports, and Data sources sub-APIs.
-
In the Apps Script editor, select Project Settings .
-
Enable the Show "appsscript.json" manifest file in editoroption.
-
In the editor, select the
appsscript.json
file. -
Replace the contents of your
appsscript.json
file with the following:{ "dependencies" : { "enabledAdvancedServices" : [ { "userSymbol" : "MerchantApiAccounts" , "version" : "accounts_v1" , "serviceId" : "merchantapi" }, { "userSymbol" : "MerchantApiDataSources" , "version" : "datasources_v1" , "serviceId" : "merchantapi" }, { "userSymbol" : "MerchantApiProducts" , "version" : "products_v1" , "serviceId" : "merchantapi" }, { "userSymbol" : "MerchantApiReports" , "version" : "reports_v1" , "serviceId" : "merchantapi" } ] }, "exceptionLogging" : "STACKDRIVER" , "runtimeVersion" : "V8" }
-
Click Save.
-
You can now refer to the following sub-APIs within your code as:
a.
MerchantApiAccounts
b.
MerchantApiDataSources
c.
MerchantApiProducts
d.
MerchantApiReports
Enable Apps Script for additional sub-APIs or existing projects
To enable sub-APIs in existing projects, do the following:
-
Open your Apps Script project.
-
At the left, click Editor < >.
-
At the left, next to Services, click Add a service +.
-
Select the sub-API you want to enable within the version selector.
-
Append the identifier with name of your sub-API. For example, to enable the Inventories sub-API, select version
inventories_v1
and change the identifier toMerchantApiInventories
. -
You can now refer to Inventories sub-API within your code as
MerchantApiInventories
.
Sample code
This section explains how to use Merchant API for selected features.
List the products
This example demonstrates how to list the products for a given Merchant Center account.
/**
*
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
);
}
}
Filter disapproved products
This example demonstrates how to filter disapproved products in a Merchant Center account.
/**
*
Demonstrates
how
to
filter
disapproved
products
using
the
Merchant
API
Reports
service
.
*/
function
filterDisapprovedProducts
()
{
//
IMPORTANT
:
//
Enable
the
Merchant
API
Reports
sub
-
API
Advanced
Service
and
call
it
//
"MerchantApiReports"
//
Enable
the
Merchant
API
Products
sub
-
API
Advanced
Service
and
call
it
//
"MerchantApiProducts"
//
Replace
this
with
your
Merchant
Center
ID
.
const
accountId
=
'<INSERT_MERCHANT_CENTER_ID>'
;
//
Construct
the
parent
name
const
parent
=
'accounts/'
+
accountId
;
try
{
console
.
log
(
'Sending search Report request'
);
//
Set
pageSize
to
the
maximum
value
(
default
:
1000
)
let
pageSize
=
1000
;
let
pageToken
;
//
The
query
below
is
an
example
of
a
query
for
the
productView
that
gets
product
informations
//
for
all
disapproved
products
.
let
query
=
'SELECT offer_id,'
+
'id,'
+
'price,'
+
'title'
+
' FROM product_view'
+
' WHERE aggregated_reporting_context_status = "NOT_ELIGIBLE_OR_DISAPPROVED"'
;
//
Call
the
Reports
.
search
API
method
.
Use
the
pageToken
to
iterate
through
//
all
pages
of
results
.
do
{
response
=
MerchantApiReports
.
Accounts
.
Reports
.
search
({
query
,
pageSize
,
pageToken
},
parent
);
for
(
const
reportRow
of
response
.
results
)
{
console
.
log
(
"Printing data from Product View:"
);
console
.
log
(
reportRow
);
//
OPTIONALLY
,
you
can
get
the
full
product
details
by
calling
the
GetProduct
method
.
let
productName
=
parent
+
"/products/"
+
reportRow
.
getProductView
()
.
getId
();
product
=
MerchantApiProducts
.
Accounts
.
Products
.
get
(
productName
);
console
.
log
(
product
);
}
pageToken
=
response
.
nextPageToken
;
}
while
(
pageToken
);
//
Exits
when
there
is
no
next
page
token
.
}
catch
(
e
)
{
console
.
log
(
'ERROR!'
);
console
.
log
(
'Error message:'
+
e
.
message
);
}
}
Retrieve a report for a given account
This example demonstrates how to retrieve a report for a given Merchant Center account.
/**
*
Searches
a
report
for
a
given
Merchant
Center
account
.
*/
function
searchReport
()
{
//
IMPORTANT
:
//
Enable
the
Merchant
API
Reports
sub
-
API
Advanced
Service
and
call
it
//
"MerchantApiReports"
//
Replace
this
with
your
Merchant
Center
ID
.
const
accountId
=
'<MERCHANT_CENTER_ID>'
;
//
Construct
the
parent
name
const
parent
=
'accounts/'
+
accountId
;
try
{
console
.
log
(
'Sending search Report request'
);
//
Set
pageSize
to
the
maximum
value
(
default
:
1000
)
let
pageSize
=
1000
;
let
pageToken
;
//
Uncomment
the
desired
query
from
below
.
Documentation
can
be
found
at
//
https
:
//
developers
.
google
.
com
/
merchant
/
api
/
reference
/
rest
/
reports_v1beta
/
accounts
.
reports
#ReportRow
//
The
query
below
is
an
example
of
a
query
for
the
product_view
.
let
query
=
'SELECT offer_id,'
+
'id,'
+
'price,'
+
'gtin,'
+
'item_issues,'
+
'channel,'
+
'language_code,'
+
'feed_label,'
+
'title,'
+
'brand,'
+
'category_l1,'
+
'product_type_l1,'
+
'availability,'
+
'shipping_label,'
+
'thumbnail_link,'
+
'click_potential'
+
' FROM product_view'
;
/*
//
The
query
below
is
an
example
of
a
query
for
the
price_competitiveness_product_view
.
let
query
=
"SELECT offer_id,"
+
"id,"
+
"benchmark_price,"
+
"report_country_code,"
+
"price,"
+
"title,"
+
"brand,"
+
"category_l1,"
+
"product_type_l1"
+
" FROM price_competitiveness_product_view"
+
" WHERE date BETWEEN '2023-03-03' AND '2025-03-10'"
;
*/
/*
//
The
query
below
is
an
example
of
a
query
for
the
price_insights_product_view
.
let
query
=
"SELECT offer_id,"
+
"id,"
+
"suggested_price,"
+
"price,"
+
"effectiveness,"
+
"title,"
+
"brand,"
+
"category_l1,"
+
"product_type_l1,"
+
"predicted_impressions_change_fraction,"
+
"predicted_clicks_change_fraction,"
+
"predicted_conversions_change_fraction"
+
" FROM price_insights_product_view"
;
*/
/*
//
The
query
below
is
an
example
of
a
query
for
the
product_performance_view
.
let
query
=
"SELECT offer_id,"
+
"conversion_value,"
+
"marketing_method,"
+
"customer_country_code,"
+
"title,"
+
"brand,"
+
"category_l1,"
+
"product_type_l1,"
+
"custom_label0,"
+
"clicks,"
+
"impressions,"
+
"click_through_rate,"
+
"conversions,"
+
"conversion_rate"
+
" FROM product_performance_view"
+
" WHERE date BETWEEN '2023-03-03' AND '2025-03-10'"
;
*/
//
Call
the
Reports
.
search
API
method
.
Use
the
pageToken
to
iterate
through
//
all
pages
of
results
.
do
{
response
=
MerchantApiReports
.
Accounts
.
Reports
.
search
({
query
,
pageSize
,
pageToken
},
parent
);
for
(
const
reportRow
of
response
.
results
)
{
console
.
log
(
reportRow
);
}
pageToken
=
response
.
nextPageToken
;
}
while
(
pageToken
);
//
Exits
when
there
is
no
next
page
token
.
}
catch
(
e
)
{
console
.
log
(
'ERROR!'
);
console
.
log
(
e
);
console
.
log
(
'Error message:'
+
e
.
message
);
if
(
e
.
stack
)
{
console
.
log
(
'Stack trace:'
+
e
.
stack
);
}
}
}
List all data sources
This example demonstrates how to list all the data sources in a given Merchant Center account.
/**
*
Lists
all
data
sources
for
a
given
Merchant
Center
account
.
*/
function
listDataSources
()
{
//
IMPORTANT
:
//
Enable
the
Merchant
API
DataSources
sub
-
API
Advanced
Service
and
call
it
//
"MerchantApiDataSources"
//
Replace
this
with
your
Merchant
Center
ID
.
const
accountId
=
'<MERCHANT_CENTER_ID>'
;
//
Construct
the
parent
name
const
parent
=
'accounts/'
+
accountId
;
let
dataSources
=
[];
let
primaryDataSources
=
[];
try
{
console
.
log
(
'Sending list DataSources request'
);
let
pageToken
;
let
pageSize
=
10
;
//
Call
the
DataSources
.
list
API
method
.
Use
the
pageToken
to
iterate
through
//
all
pages
of
results
.
do
{
response
=
MerchantApiDataSources
.
Accounts
.
DataSources
.
list
(
parent
,
{
pageSize
,
pageToken
});
for
(
const
datasource
of
response
.
dataSources
)
{
dataSources
.
push
(
datasource
);
if
(
datasource
.
primaryProductDataSource
)
{
primaryDataSources
.
push
(
datasource
);
}
}
pageToken
=
response
.
nextPageToken
;
}
while
(
pageToken
);
//
Exits
when
there
is
no
next
page
token
.
console
.
log
(
'Retrieved '
+
dataSources
.
length
+
' data sources.'
);
console
.
log
(
'There were '
+
primaryDataSources
.
length
+
' primary product data sources.'
);
}
catch
(
e
)
{
console
.
log
(
'ERROR!'
);
console
.
log
(
e
);
}
}