---
title: Hourly Google Merchant Center Price and Availability Updates
description: Complement your native Shopware product feed with hourly price and availability updates through a supplemental Google Merchant Center XML source and SFTP.
---

Keep your native Shopware product feed as the main source of product information in Google Merchant Center. In the workflow described here, Shopware generates the XML file and Google fetches that primary data source once every 24 hours. Even if Shopware updates the file sooner, price and stock changes may not reach Merchant Center until Google's next scheduled fetch.

With **Improved Import, Export & Mass Actions**, you can upload a separate XML file with product numbers, prices, and availability directly to Google through SFTP every hour. This additional automation workflow supplies supplemental updates between Google's daily fetches of the main feed. You continue to use the native Shopware feed for product names, descriptions, images, and other catalog information.

## How the Two Sources Work Together

| Source | Purpose | Example schedule |
| --- | --- | --- |
| Native Shopware feed — primary source | Provides complete product information and determines which products are submitted | Google fetches the XML file every 24 hours |
| App's Google Merchant Center XML feed — supplemental source | Updates prices and availability for matching existing products | The app uploads an XML file through SFTP every hour |

:::caution[Use a supplemental source only]
Register this three-field file as a **supplemental data source**, linked to your existing primary source. Do not register it as a primary source or overwrite your main product-feed file. It does not contain the information needed for a complete product listing.

Follow Google's [instructions for configuring a supplemental data source](https://support.google.com/merchants/answer/14990942?hl=en#supplementaldatasource).
:::

Uploading through SFTP does not make a file supplemental automatically. You configure its source type and connection to the primary source in Merchant Center.

## 1. Prepare Google Merchant Center

1. Confirm that your native Shopware feed is already configured as a primary source.
2. Check that its product IDs exactly match the Shopware product numbers you will export. This includes each variant's own product number.
3. Enable **Advanced data source management** in Merchant Center if the **Supplemental sources** tab is not visible.
4. Create a file-based supplemental source and link it to your primary source. Match the product IDs, language, and feed label as described in Google's guide.
5. Choose a separate, fixed filename, such as `google-price-availability.xml`. Use the same name in the app's SFTP settings.
6. Configure attribute rules so that supplemental updates are used for price and availability. Google documents the **Take latest** rule for this workflow; review the result against your primary-source rules.
7. Activate your Merchant Center SFTP account and obtain its username and generated password. See [Google's SFTP submission instructions](https://support.google.com/merchants/answer/13813117?hl=en).

## 2. Configure the Export Profile

Create a profile using the [export configuration workflow](/export/overview/).

1. Select **Products** as the entity.
2. Select **XML** as the file type.
3. In the **Template** dropdown beside the file type, select **Google Merchant Center**.
4. Complete the settings that appear:

| Setting | What to enter |
| --- | --- |
| **Store URL** | Your storefront's full HTTP(S) URL, such as `https://www.example-shop.de` |
| **Currency** | The uppercase three-letter code of your Shopware default price currency, such as `EUR` |
| **Feed title** | A descriptive title; initially **Price and Availability Update** |
| **Feed description** | A short description; initially **Hourly price and availability update** |

The app checks that the currency matches the default product-price currency. This setting does **not** convert prices. The feed uses the product's default gross price; verify that this is the price shown to customers, especially if your storefront uses rule-based or advanced pricing.

Selecting **Default** instead of **Google Merchant Center** uses the normal XML export format.

## 3. Review the Predefined Mapping

The Google template includes three required mappings. Their output names are fixed, and default-value inputs are not available for these fields.

| Shopware value | XML attribute | Example |
| --- | --- | --- |
| Product number (`product_number`) | `g:id` | `93.1200053` |
| Gross price (`price_gross`) | `g:price` | `49.99 EUR` |
| Stock (`stock`) | `g:availability` | `in_stock` |

Stock is converted to an availability status:

- Greater than zero: `in_stock`.
- Zero or below: `out_of_stock`.

The file contains **availability, not the numeric stock quantity**. If your shop allows purchases when stock is zero, check whether this stock-based rule matches your storefront before using the feed.

### Variants and Inherited Prices

For the Google template, variants without their own price use the inherited parent price even when the generic inherited-value export option is disabled. A variant's own price takes precedence.

Each variant must have its own matching `g:id`. Sending a parent product's ID does not update all its variants, and a parent SKU used as `item_group_id` in the primary feed is not a variant's product ID.

If the native primary feed excludes parent products but this supplemental file contains them, unmatched parent rows do **not** create new products. Supplemental sources cannot add or remove products. Matching the product selection of your primary feed still avoids unnecessary rows and makes troubleshooting easier.

## 4. Configure SFTP Delivery

Select **SFTP** as the output source and complete the existing connection form:

| Setting | Value |
| --- | --- |
| Host | `partnerupload.google.com` |
| Port | `19321` |
| Username and password | The SFTP credentials generated in Merchant Center, not your Google sign-in password |
| Remote path | The upload directory for your Google SFTP connection; upload to its root rather than inventing a subfolder |
| Custom filename | The exact filename registered for the supplemental source, including `.xml` |

Test the connection. Use a fixed filename without `[timestamp]` or `[datetime]` placeholders so each upload updates the same registered file. Keep it different from your primary feed's filename.

See [Custom Export File Name (FTP/SFTP)](/automation/ftp-custom-filename/) for the filename setting and overwrite behavior.

## 5. Test and Enable Hourly Updates

1. Review your product filters and save the profile.
2. Run a manual export first and check the export log for generation or upload errors.
3. In Merchant Center, check the supplemental source's processing results. Confirm that product IDs match and that the expected prices and availability are applied.
4. Enable the profile's schedule and select **Every hour**. Choose the minute and timezone in the scheduler, then save the profile. Available scheduling options depend on your plan.
5. Keep the native Shopware primary feed running on its existing schedule.

:::note
An hourly schedule controls when the app generates and uploads the file. Google processes uploads separately, so a successful SFTP upload does not mean the changes are immediately visible in Merchant Center or Shopping results.
:::

## Example XML

```xml
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
  <channel>
    <title>Price and Availability Update</title>
    <link>https://www.example-shop.de</link>
    <description>Hourly price and availability update</description>
    <item>
      <g:id>93.1200053</g:id>
      <g:price>49.99 EUR</g:price>
      <g:availability>in_stock</g:availability>
    </item>
  </channel>
</rss>
```

## Troubleshooting

| Problem | What to check |
| --- | --- |
| Upload succeeds, but products are not updated | Confirm the supplemental source is linked to the correct primary source. Check exact IDs, language, feed label, processing results, and price/availability rules. |
| Parent rows have no matching product | This is expected if the linked primary source excludes them. They do not create new products. |
| Currency validation fails | Enter the store's default price currency. Changing the code does not convert the amount. |
| Price or currency data is missing | Check the product's price and, for a variant, its parent's price. Google exports resolve inherited prices, but cannot invent a price missing from both products. Review the export log. |
| Availability differs from the storefront | The template uses the stock rule above. Review products that can be purchased at zero stock. |
| SFTP connection fails | Check the Google host, port `19321`, and Merchant Center SFTP credentials. Google notes that newly activated credentials may take several hours to work. |

For general export issues, see [Troubleshooting](/troubleshooting/).
