Access the Google Merchant Center API with managed OAuth authentication. Manage products, inventories, promotions, data sources, and reports for Google Shopping.
Reference
Sub-API Structure
The Merchant API is organized into sub-APIs:
| Sub-API | Purpose | Version |
|---|---|---|
products | Product catalog management | v1 |
accounts | Account settings and users | v1 |
datasources | Data source configuration | v1 |
reports | Analytics and reporting | v1 |
promotions | Promotional offers (requires enrollment) | v1 |
inventories | Local and regional inventory | v1 |
notifications | Webhook subscriptions | v1 |
conversions | Conversion tracking | v1 |
List Accounts
GET /google-merchant/accounts/v1/accountsReturns all Merchant Center accounts accessible with your OAuth credentials. Use this to find your account ID.
Get Account
GET /google-merchant/accounts/v1/accounts/{accountId}List Sub-accounts
GET /google-merchant/accounts/v1/accounts/{accountId}:listSubaccountsNote: This endpoint only works for multi-client accounts (MCAs). Standard merchant accounts will receive a 403 error.
Get Business Info
GET /google-merchant/accounts/v1/accounts/{accountId}/businessInfoUpdate Business Info
PATCH /google-merchant/accounts/v1/accounts/{accountId}/businessInfo?updateMask=customerService
Content-Type: application/json
{
"customerService": {
"email": "support@example.com"
}
}Get Homepage
GET /google-merchant/accounts/v1/accounts/{accountId}/homepageGet Shipping Settings
GET /google-merchant/accounts/v1/accounts/{accountId}/shippingSettingsInsert Shipping Settings
POST /google-merchant/accounts/v1/accounts/{accountId}/shippingSettings:insert
Content-Type: application/json
{
"services": [
{
"serviceName": "Standard Shipping",
"deliveryCountries": ["US"],
"currencyCode": "USD",
"deliveryTime": {
"minTransitDays": 3,
"maxTransitDays": 7,
"minHandlingDays": 0,
"maxHandlingDays": 1
},
"rateGroups": [
{
"singleValue": {
"flatRate": {
"amountMicros": "0",
"currencyCode": "USD"
}
}
}
],
"active": true
}
]
}List Users
GET /google-merchant/accounts/v1/accounts/{accountId}/usersGet User
GET /google-merchant/accounts/v1/accounts/{accountId}/users/{email}List Programs
GET /google-merchant/accounts/v1/accounts/{accountId}/programsList Regions
GET /google-merchant/accounts/v1/accounts/{accountId}/regionsList Account Issues
GET /google-merchant/accounts/v1/accounts/{accountId}/issuesList Online Return Policies
GET /google-merchant/accounts/v1/accounts/{accountId}/onlineReturnPoliciesList Products
GET /google-merchant/products/v1/accounts/{accountId}/productsQuery parameters:
pageSize(integer): Maximum results per pagepageToken(string): Pagination token
Get Product
GET /google-merchant/products/v1/accounts/{accountId}/products/{productId}Product ID format: contentLanguage~feedLabel~offerId (e.g., en~US~sku123)
Insert Product Input
POST /google-merchant/products/v1/accounts/{accountId}/productInputs:insert?dataSource=accounts/{accountId}/dataSources/{dataSourceId}
Content-Type: application/json
{
"offerId": "sku123",
"contentLanguage": "en",
"feedLabel": "US",
"productAttributes": {
"title": "Product Title",
"description": "Product description",
"link": "https://example.com/product",
"imageLink": "https://example.com/image.jpg",
"availability": "in_stock",
"price": {
"amountMicros": "19990000",
"currencyCode": "USD"
},
"condition": "new"
}
}Note: Products can only be inserted into data sources with input: "API" type. Create an API data source first if needed.
Delete Product Input
DELETE /google-merchant/products/v1/accounts/{accountId}/productInputs/{productId}?dataSource=accounts/{accountId}/dataSources/{dataSourceId}List Local Inventories
GET /google-merchant/inventories/v1/accounts/{accountId}/products/{productId}/localInventoriesNote: Local inventories are only available for products with LOCAL channel. Use a product ID like local~en~US~sku123.
Insert Local Inventory
POST /google-merchant/inventories/v1/accounts/{accountId}/products/{productId}/localInventories:insert
Content-Type: application/json
{
"storeCode": "store123"
}Note: The storeCode must be a valid store code configured in your Merchant Center account. Additional inventory attributes may be available - refer to the Google Merchant API Reference for the complete field list.
List Regional Inventories
GET /google-merchant/inventories/v1/accounts/{accountId}/products/{productId}/regionalInventoriesList Data Sources
GET /google-merchant/datasources/v1/accounts/{accountId}/dataSourcesGet Data Source
GET /google-merchant/datasources/v1/accounts/{accountId}/dataSources/{dataSourceId}Create Data Source
POST /google-merchant/datasources/v1/accounts/{accountId}/dataSources
Content-Type: application/json
{
"displayName": "API Data Source",
"primaryProductDataSource": {
"feedLabel": "US",
"contentLanguage": "en"
}
}Response:
{
"name": "accounts/123456/dataSources/789",
"dataSourceId": "789",
"displayName": "API Data Source",
"primaryProductDataSource": {
"feedLabel": "US",
"contentLanguage": "en"
},
"input": "API"
}Update Data Source
PATCH /google-merchant/datasources/v1/accounts/{accountId}/dataSources/{dataSourceId}?updateMask=displayName
Content-Type: application/json
{
"displayName": "Updated Name"
}Delete Data Source
DELETE /google-merchant/datasources/v1/accounts/{accountId}/dataSources/{dataSourceId}Fetch Data Source (trigger immediate refresh)
POST /google-merchant/datasources/v1/accounts/{accountId}/dataSources/{dataSourceId}:fetchNote: Fetch only works for data sources with FILE input type. API and UI data sources cannot be fetched.
Search Reports
POST /google-merchant/reports/v1/accounts/{accountId}/reports:search
Content-Type: application/json
{
"query": "SELECT offer_id, title, clicks, impressions FROM product_performance_view WHERE date BETWEEN '2026-01-01' AND '2026-01-31'"
}Example: Query product_view (requires id field):
{
"query": "SELECT id, offer_id, title, item_issues FROM product_view LIMIT 10"
}Note: The product_view table requires the id field in the SELECT clause.
Available report tables:
product_performance_view- Clicks, impressions, CTR by productproduct_view- Current inventory with attributes and issues (requiresidin SELECT)price_competitiveness_product_view- Pricing vs competitors (requires Market Insights)price_insights_product_view- Suggested pricingbest_sellers_product_cluster_view- Best sellers by category (requires Market Insights)competitive_visibility_competitor_view- Competitor visibility
Note: Promotions require your Merchant Center account to be enrolled in the Promotions program. You'll receive a 403 error if not enrolled.
List Promotions
GET /google-merchant/promotions/v1/accounts/{accountId}/promotionsGet Promotion
GET /google-merchant/promotions/v1/accounts/{accountId}/promotions/{promotionId}Insert Promotion
POST /google-merchant/promotions/v1/accounts/{accountId}/promotions:insert
Content-Type: application/json
{
"promotionId": "promo123",
"contentLanguage": "en",
"targetCountry": "US",
"redemptionChannel": ["ONLINE"],
"attributes": {
"longTitle": "20% off all products",
"promotionEffectiveDates": "2026-02-01T00:00:00Z/2026-02-28T23:59:59Z"
}
}List Notification Subscriptions
GET /google-merchant/notifications/v1/accounts/{accountId}/notificationsubscriptionsCreate Notification Subscription
POST /google-merchant/notifications/v1/accounts/{accountId}/notificationsubscriptions
Content-Type: application/json
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"callBackUri": "https://example.com/webhook",
"allManagedAccounts": true
}Note: You must specify either allManagedAccounts: true OR targetAccount: "accounts/{accountId}" to indicate which accounts the subscription applies to.
Alternative with targetAccount:
{
"registeredEvent": "PRODUCT_STATUS_CHANGE",
"callBackUri": "https://example.com/webhook",
"targetAccount": "accounts/123456789"
}Delete Notification Subscription
DELETE /google-merchant/notifications/v1/accounts/{accountId}/notificationsubscriptions/{subscriptionId}List Conversion Sources
GET /google-merchant/conversions/v1/accounts/{accountId}/conversionSourcesCreate Conversion Source
POST /google-merchant/conversions/v1/accounts/{accountId}/conversionSources
Content-Type: application/json
{
"merchantCenterDestination": {
"displayName": "My Conversion Source",
"destination": "SHOPPING_ADS",
"currencyCode": "USD",
"attributionSettings": {
"attributionLookbackWindowDays": 30,
"attributionModel": "CROSS_CHANNEL_LAST_CLICK"
}
}
}Delete Conversion Source
DELETE /google-merchant/conversions/v1/accounts/{accountId}/conversionSources/{conversionSourceId}