---
title: "Google Merchant Feed"
description: "The Google Merchant Feed app generates a live product feed in the format Google Merchant Center expects."
url: "https://docs.j2commerce.com/v6/apps-and-extensions/apps/app_googlemerchantfeed"
markdown_url: "https://docs.j2commerce.com/v6/apps-and-extensions/apps/app_googlemerchantfeed.md"
last_updated: "2026-11-06T14:31:00+00:00"
version: "J2Commerce 6"
breadcrumbs:
  - title: "Home"
    url: "https://docs.j2commerce.com/"
  - title: "J2Commerce 6"
    url: "https://docs.j2commerce.com/v6"
  - title: "Apps and Extensions"
    url: "https://docs.j2commerce.com/v6/apps-and-extensions"
  - title: "Apps"
    url: "https://docs.j2commerce.com/v6/apps-and-extensions/apps"
  - title: "Google Merchant Feed"
    url: "https://docs.j2commerce.com/v6/apps-and-extensions/apps/app_googlemerchantfeed"
---

# Google Merchant Feed

The Google Merchant Feed app sends your J2Commerce catalog to Google Merchant Center so your products can appear in Google Shopping results, Google Search product panels and Performance Max campaigns. Google can fetch a live product feed from your store, or the app can push products to Merchant Center through the Merchant API.

The app also adds a Merchant Center dashboard with Google figures, charts and insights, Connection and Sync screens, and Google checkout links that take shoppers from a listing to your cart or checkout page.

## Requirements

- PHP 8.3.0+
- Joomla! 6.x
- J2Commerce 6.x

## Purchase and Download

**Step 1:** Go to the [J2Commerce website](https://www.j2commerce.com/extensions) **->** **Apps**

**Step 2:** Locate **Google Merchant Feed** **->** click **View Details** **->** **Add to Cart** **->** **Checkout**

**Step 3:** Go to your **My Downloads** section under your profile button at the top right corner and search for the app. Click **Available Versions** **->** **View Files** **->** **Download Now** to save the ZIP file to your computer.

## Install the App

In the Joomla Administrator, go to **System** **->** **Install** **->** **Extensions**.

Upload the plugin `app_googlemerchantfeed.zip` file or use the Install from URL option.

![Joomla System Dashboard with System in the sidebar and the Install Extensions link highlighted to open the extension installer](https://docs.j2commerce.com/images/docs/shared/install.webp)

## Enable the App

The plugin installs and enables itself automatically. No separate enable step is needed. However, it's important to know where to go to enable or disable it in the future .

There are **two** ways to reach the Apps list.

**Option A:** Go to the **J2Commerce** icon at the top right corner **-> Apps**

**Option B:** Go to **Components** on the left sidebar **-> J2Commerce -> Apps**

![Joomla admin navigation to J2Commerce Apps: Components, J2Commerce, Apps in the sidebar and Apps in the J2Commerce menu highlighted, above the list of apps](https://docs.j2commerce.com/images/docs/shared/gift-wrap-apps.webp)

To help you narrow down the list, you can do a search for **Google Merchant Feed**, click the **X,** and it will turn into a green checkmark. It is now enabled and ready for setup.

![J2Commerce Apps list searched for "google", with the search box and the Google Merchant Feed enabled status icon highlighted](https://docs.j2commerce.com/images/docs/shared/google-merchant_enable.webp)

## Configure the App

Click the **Google Merchant Feed** title (next to the green checkmark) to open the settings screen.

> **Tip:** Click the **Toggle Inline Help** button on any app you install to see a description below each field directly in the admin panel.

![Google Merchant Feed plugin settings with the Toggle Inline Help button highlighted and the Feed URL help text shown below the field](https://docs.j2commerce.com/images/docs/shared/google-merchant_toggle.webp)

### Basic Settings Tab

![Google Merchant Feed plugin, Plugin tab highlighted: Feed URL with Copy button, Default Condition New, Taxonomy Cache TTL 168, Excluded Products, Feed Cache 60](https://docs.j2commerce.com/images/docs/shared/google-merchant_basic.webp)

**Feed URL:** The field displays the unique link that Google uses to fetch your product data. This is a read-only field: copy it using the **Copy** button next to the URL.

You will paste this URL into Google Merchant Center when setting up your data source (see [Register the Feed in Google Merchant Center](https://docs.j2commerce.com/v6/apps-and-extensions/apps/app_googlemerchantfeed#register-the-feed) below).

**Feed Title Override:** Overrides the title that appears inside the feed XML. Leave blank to use the store name from J2Commerce settings.

**Default Condition:** The product condition reported in the feed for every product that does not have its own condition set.

- New
- Refurbished
- Used

Most stores sell new products, so **New** is the right default. If your store sells pre-owned or restored goods, change this to match.

**Default Google Category:** The fallback Google product taxonomy category applied to any product or category that does not have its own category selected. Type at least two characters and pick from the matches, which are ranked by relevance. The field searches Google's official product category list and saves the numeric category ID.

Use **Refresh Taxonomy** on the dashboard to download the list again.

Google requires a category for Shopping ads. Setting a sensible default here means your products are always categorized, even if you have not set categories on individual items.

See [Category Resolution Order](https://docs.j2commerce.com/v6/apps-and-extensions/apps/app_googlemerchantfeed#category-resolution-order) below for details on how product-level and category-level overrides work.

**Taxonomy Cache TTL (hours):** How long the plugin stores a local copy of Google's product taxonomy before refreshing it. Google updates the taxonomy periodically; one week (168 hours) is a sensible refresh interval.

**Excluded Products:** A product selector where you can pick individual products to leave out of the feed entirely. Use this for internal test products, gift cards, or anything you do not want listed on Google.

**Include Unpublished:** Controls whether products that are unpublished in Joomla are included in the generated feed.

Leave this set to **No** in almost all cases. Set to **Yes** only if you need to preview feed entries for products that are not yet live on your site.

**Feed Cache (minutes):** How long the generated feed XML is cached on the server. Google typically fetches feeds once a day, so caching for 60 minutes is a good balance between performance and freshness. Set to `0` to disable caching and always generate the feed fresh on every request.

**Feed Access Token:** An optional secret token that restricts who can access the feed URL. When you enter a token here, the feed URL will only respond correctly when `&token=YOUR_TOKEN` is appended to it. Leave blank to allow anyone with the URL to fetch the feed.

If you set a token, the Feed URL field at the top of the screen updates to show the full URL including the token parameter. Copy that updated URL and use it in Google Merchant Center.

> **Tip:** Google Merchant Center will send the token on every scheduled fetch, so the feed remains private from casual browsers while still working correctly for Google.

**Description Mode:** How product descriptions are prepared for the feed. **Strip Shortcodes (Recommended)** removes `{shortcode}` tokens. **Raw** sends the description exactly as stored.

**Backorder Lead Time (days):** The number of days until a backordered item becomes available. Leave it blank to report backordered items as out of stock, because Google requires an availability date for a backorder status.

**Store URL:** The public https address of your storefront, used to build product links and image URLs in the feed and the sync. Joomla's `live_site` setting is used when it is empty. With neither set, the sync is paused and the XML feed is generated fresh on every request.

> **Warning:** Set **Store URL** before you push products to Google. Without a Store URL or a `live_site` value, nothing is pushed (see [Sync Does Not Start](https://docs.j2commerce.com/v6/apps-and-extensions/apps/app_googlemerchantfeed#sync-does-not-start)).

**Delivery Mode:** How products reach Google.

- **XML Feed Only** (default): Google reads the feed URL. The Merchant API is never contacted.
- **Merchant API:** products are pushed through the API and the Sync screen becomes active.
- **Both (Transition):** runs the API push next to the XML feed. Use it only as a short transition.

**Sync Log Retention (days):** How long per-offer sync log entries are kept before the scheduled cleanup removes them. The default is 30. The allowed range is 7 to 180.

### Shipping Defaults Tab

![Google Merchant Feed plugin, Shipping Defaults tab highlighted: a shipping rule for United States in US Dollar (USD) with empty Service Name and Shipping Price](https://docs.j2commerce.com/images/docs/shared/google-merchant_shipping.webp)

The **Shipping Defaults** tab lets you declare flat-rate shipping costs that Google includes in your product listings. Google uses this information to show estimated shipping costs on Shopping ads and in free listings.

Click **Add Item** to create a shipping rule. Each rule has four fields:

**Country:** The destination country for this shipping rule. Select from the countries enabled in your store. **Example:** `US`

**Service Name:** A label describing the shipping method shown to Google (and optionally in search results). **Example:** `US`

**Currency:** The currency for this shipping price. Select from the currencies published in your store. **Example:** `USD`

**Shipping Price:** The flat shipping cost for this rule, as a decimal number. Enter `0` for free shipping. **Example:** `4.99`

You can add one rule per country, or multiple rules for the same country with different service names (for example, Standard and Express).

> **Tip:** If shipping cost varies by product weight or order total, set up your shipping rules in Google Merchant Center directly using its shipping settings rather than relying on flat rates here. The flat rates in this tab are a simpler alternative for stores with a single shipping price.

### Apparel Defaults Tab

Store-wide values for the Google clothing attributes, applied to products that have no category-level or product-level value: **Default Gender**, **Default Age Group**, **Default Size Type** and **Default Size System**. Each one defaults to None.

### Checkout Links Tab

Checkout links let shoppers on mobile and tablet go from a Google listing straight to your cart or checkout page. Choose one method only. The other fields appear after you pick a method.

| Setting | What It Does | Default | Options |
| --- | --- | --- | --- |
| **Checkout Link** | Picks the method. **Account Level** sends one URL template for every product. **Product Level** sends a unique link per product variant in the product data. | Off | Off, Account Level (Method 1), Product Level (Method 2) |
| **Link Destination** | Where the link takes the shopper after the item is added. | Cart Page | Cart Page, Checkout Page |
| **Account-Level URL Template** | Account Level only. Must contain `{id}`, which Google replaces with the product ID. Leave it blank to use this app's own checkout link. Do not add tracking parameters such as `utm_` or `gclid`. The domain must match your store. | Blank | A full http or https address of up to 2,000 ASCII characters |
| **Eligible Destinations** | Where Google shows the checkout link. Send this choice to Merchant Center with **Push Checkout Settings**. | Free Listings, Shopping Ads | Free Listings, Shopping Ads |
| **Include on All Products** | Product Level only. Sends a checkout link for every product unless the product is set to exclude it. | Yes | Yes, No |

The app's own checkout link works for simple, variable and flexivariable products. See [Checkout Links](https://docs.j2commerce.com/v6/apps-and-extensions/apps/app_googlemerchantfeed#checkout-links) for the full setup.

## Register the Feed in Google Merchant Center

After configuring the plugin, you need to tell Google Merchant Center where to find your feed:

1. Copy the **Feed URL** from the top of the plugin settings screen (use the **Copy** button).
2. Log in to [Google Merchant Center](https://merchants.google.com/).
3. Go to **Products** -> **Data sources** -> **Add data source**.
4. Choose **Scheduled fetch** as the method.
5. Paste the Feed URL into the URL field.
6. Set a fetch frequency (daily is recommended).
7. Save the data source. Google will fetch the feed on its next scheduled run.

> **Info:** Google must be able to reach your feed URL from the public internet. A URL on a local development server (such as `localhost` or a private IP address) will not work for a live fetch. During development, you can download the feed XML manually by visiting the URL in your browser and uploading the file to Merchant Center as a manual upload.

Once Google has fetched your feed successfully, your products will appear in the **Products** section of Merchant Center, where you can review any warnings or errors and fix them before your products go live.

## Push Products With the Merchant API

Instead of waiting for Google to fetch the feed, the app can push products to Merchant Center through the Merchant API. This needs a Google service account, a Merchant Center account and a primary API data source. Set **Delivery Mode** to **Merchant API** (or **Both**) and set **Store URL** on the Basic Settings tab.

### Open the Screens

Open the app's settings screen (see Configure the App). The toolbar has three buttons next to the standard ones: **Dashboard**, **Connection** and **Google Merchant Sync**. The Connection and Sync screens also have a **Dashboard** button in their toolbars.

### Connection Screen

The Connection screen has two tabs.

- **Account Information:** **Merchant Center Account ID** (shown in Merchant Center's top-right account menu), **Developer Contact Email** (optional, must be a Gmail or Google Workspace address and not the service-account email), **Service-Account JSON Key File** and **Primary API Data Source**.
- **Connection Status:** **Connected**, **Service-Account Email**, **Key ID**, **Registered with Google** and **Last Test Result**, followed by the Checkout Links panel.

The toolbar groups related actions into dropdown menus.

| Toolbar Item | What It Does |
| --- | --- |
| **Save** | Saves the account ID and developer contact email. If you chose a key file in **Service-Account JSON Key File** first, Save uploads it too. |
| **Test Connection** | Runs these checks: the key decrypts, an access token is obtained from Google, the Merchant Center account is reachable, the selected data source is a primary API data source, quota usage is readable, Store URL matches the Merchant Center homepage, and Store URL or `live_site` is set. When no key is stored, the first result reads "Service-account key is uploaded" and fails. |
| **Service Account Key** menu | **Upload Key** stores the JSON key file you downloaded from Google Cloud Console. The key is encrypted on upload and never shown again. **Remove Key** asks for confirmation, then deletes the stored key, account ID and developer registration, and syncing stops until you upload a key again. |
| **Google Setup** menu | **Register Developer** registers the connection with Google. **Create Data Source** creates a primary API data source. |
| **Checkout Links** menu | **Push Checkout Settings**, **Test URL Structure** and **Remove Checkout Settings**. See [Checkout Links](https://docs.j2commerce.com/v6/apps-and-extensions/apps/app_googlemerchantfeed#checkout-links). |
| **Dashboard** | Opens the Google Merchant Dashboard. |

Upload Key, Remove Key, Register Developer, Create Data Source, Push Checkout Settings and Remove Checkout Settings need the J2Commerce **Configure ACL & Options** permission. Test URL Structure needs the **Access Administration Interface** permission.

#### Connect Your Account

1. Enter the **Merchant Center Account ID** and click **Save**.
2. Select the service-account JSON key file (16 KB or smaller) in **Service-Account JSON Key File**, then click **Save**, which uploads it. Choosing **Service Account Key** -> **Upload Key** does the same.
3. Choose **Google Setup** -> **Register Developer**. The service account needs Admin access in Merchant Center.
4. Choose **Google Setup** -> **Create Data Source**, then select it in **Primary API Data Source**. Only primary API data sources can be selected.
5. Click **Test Connection** and confirm every check passes.

### Sync Screen

The **Google Merchant Sync** screen pushes your catalog and shows where each offer stands. It has two tabs.

- **Sync Status:** **Local Sync Status** (Pending, Synced, Error, Failed (Gave Up), Excluded, Total) and **Google Status** (Approved, Limited, Disapproved, Pending, Not Yet Checked).
- **Recent Sync Runs:** a table with Routine, Started, Status, Pushed, Skipped, Failed and Stop Reason. Routines are Delta Sync and Full Reconcile.

Toolbar buttons:

- **Sync Now:** pushes your catalog to Google.
- **Refresh Status:** reads the current status of your offers back from Google.
- **Retry Failed:** tries the offers that failed again.
- **Dashboard:** opens the dashboard.

The scheduled routines need the separate **Task - Google Merchant Sync** plugin, which adds these scheduled task types in Joomla's Scheduled Tasks: **Google Merchant: Delta Sync**, **Google Merchant: Full Reconcile**, **Google Merchant: Status Refresh**, **Google Merchant: Warm Report Cache** and **Google Merchant: Log Cleanup**.

Without an enabled task, sync only runs when you click **Sync Now**. Google expires offers about 30 days after their last update, so keep Delta Sync and Full Reconcile scheduled. Products Status and Sync Log list every tracked offer and every push, update and deletion, with search, filters and sorting.

### Google Merchant Dashboard

The dashboard shows how your catalog and account are doing at Google. The start and end dates and the date range presets control the figures that depend on a period, and a "Data as of" line shows when the figures were last loaded. When Google limits requests, the dashboard shows recent cached results and says so.

- **Catalog and Account Health:** KPI cards including Approved Products, Disapproved / Limited and Sync Health.
- **Search Performance and Sync:** impressions, click-through rate and conversion value follow the date range. Sync Health is a live snapshot.
- **Chart tabs:** Clicks and Impressions, Product Status by Destination, Sync Activity and Offer Status Trend, with Status Mix, Top Issues, Price Competitiveness, Account Issues and Checkout Links on the side.
- **Insights:** plain-language notices, such as a missing Store URL, a disapproved offer, a homepage that is not claimed or a quota above 90%.
- **Cards and tables:** Connection, Sync and Merchant API Quota status, Top Item-Level Issues, Top Products by Clicks, Recent Sync Failures, Best Sellers, Programs, Data Sources and Manage a Single Offer.

| Dashboard Action | What It Does |
| --- | --- |
| **Sync Now**, **Retry Failed** | Same as on the Sync screen. |
| **Refresh Stats** | Reloads every figure from Google. A second click within 20 seconds is refused. |
| **Claim Homepage** | Asks Google to claim your homepage in Merchant Center. Store URL must match the Merchant Center homepage and the site must be verified. Google can take a few minutes to verify the claim. |
| **Merchant Center** | Opens Merchant Center account issues in a new tab. |
| **Refresh Taxonomy** | Downloads Google's product category list again. |
| **Test Connection** | Runs the same checks as on the Connection screen. |
| **Options** | Opens the app settings. |
| **Enable** / **Disable** (Programs card) | Turns a Google program on or off for the account. Programs listed: Checkout, Loyalty, Product Ratings, YouTube Affiliate and YouTube Shopping Checkout. Disabling asks for confirmation. |
| **Fetch Now** (Data Sources card) | Asks Google to fetch a data source again. Only data sources with a file input can be fetched. |
| **Re-Push Offer**, **Remove from Google** (Manage a Single Offer card) | Enter an offer ID in **Offer ID** (product ID and variant ID joined by a dash, for example `123-456`). Re-Push Offer sends that offer again, and starts tracking an eligible offer that has not been synced yet. An offer for a product that is unpublished, excluded or without a price is refused. Remove from Google deletes it after confirmation, and it returns on the next sync unless you exclude the product in the app settings. Remove from Google appears only for users with the **Configure ACL & Options** permission. |
| **Retry**, **Re-Push Offer** (Recent Sync Failures card) | Retries or re-sends one failed offer. |

Some buttons only appear for users with the matching permission. Sync Now, Retry Failed and Re-Push Offer need **Access Administration Interface**. Claim Homepage, Merchant Center and Test Connection need **Configure ACL & Options**.

## Checkout Links

A Google checkout link adds the product to the shopper's cart and sends them to your cart page or checkout page. Choose one method on the Checkout Links tab of the app settings.

- **Account Level (Method 1):** one URL template for the whole account. Leave **Account-Level URL Template** blank to use the app's own checkout link, or enter your own address containing `{id}`.
- **Product Level (Method 2):** a unique link for each product variant, sent with the product data. On a product's **Apps** tab, set **Checkout Link** to **Use Global**, **Include** or **Exclude** to override **Include on All Products** for that product.

> **Note:** The Merchant API v1 has no dedicated field for a per-product checkout link, so Product Level links are sent as a custom attribute named `checkout_link_template`. The account-level URL template is the field Google formally recognizes.

### Set Up Checkout Links

1. Set **Store URL** on the Basic Settings tab.
2. On the Checkout Links tab, choose the method, the destination and the eligible destinations, then save.
3. On the Connection screen, choose **Checkout Links** -> **Push Checkout Settings**. With Account Level, your URL template is sent to Merchant Center. With Product Level, the URL is left blank, because links come from the product data.
4. Choose **Checkout Links** -> **Test URL Structure**. It opens a sample link for one of your products in a new tab. If your browser blocks the tab, the screen shows the link to open yourself.
5. Sync your products so Product Level links reach Google.

To stop using checkout links, set **Checkout Link** to **Off**, choose **Checkout Links** -> **Remove Checkout Settings** (it asks for confirmation) and sync, so no product keeps a link.

The Checkout Links panel on the Connection Status tab and on the dashboard shows the method, your URL template, the Google enrollment (Enrolled, Inactive, Opted Out, In Review, Unknown), the Google URL review, the template and destinations held by Google, a sample link and notes. A note appears when Merchant Center still has an account-level URL while Product Level is on, when checkout links are off but Merchant Center is still enrolled, when the template in Merchant Center differs from the one saved here, or when the template domain differs from the Store URL.

Product Level links work for simple, variable and flexivariable products. A shopper who opens a link for an unavailable product, or one that cannot be added from the link alone, lands on your site with a message: "Sorry, that product is not available right now." or "That product could not be added to your cart. Please choose your options on the product page."

## Product Saves and Subscription Products

Saving a product queues it for the next sync. Click **Sync Now** or wait for the scheduled Delta Sync to send it.

### Offer Details Sent to Google

- **Subscription term:** a subscription offer with a yearly term gets a title ending "- N Year Subscription", such as "Product Name - 1 Year Subscription".
- **Variants:** each offer of a product with more than one variant links to the product page with that variant pre-selected.
- **Digital products:** downloadable and subscription products with no GTIN are sent with `identifier_exists` set to false.

> **Warning:** Google allows only prepaid yearly subscription terms. Offers with any other period may be disapproved.

For intangible products such as software, Google recommends a shipping row with a price of `0` (see the Shipping Defaults tab) and the category **Software > Computer Software** (313) or one of its subcategories.

## Category Resolution Order

The plugin uses a three-level hierarchy to assign a Google product category to each product in the feed:

1. **Product-level override**: If a Google category is set directly on an individual product, that category is used. This is the highest priority.
2. **Category-level override**: If no product-level category is set, the plugin checks whether the Joomla content category the product belongs to has a Google category assigned.
3. **Plugin default**: If neither the product nor its category has a Google category, the **Default Google Category** from the plugin settings is used.

### Setting a Category Override on a Product

![Product edit, Apps tab highlighted: Google Merchant Feed section expanded with the Google Product Category search field overriding the plugin default](https://docs.j2commerce.com/images/docs/shared/google-merchant_app.webp)

1. Go to **J2Commerce** -> **Catalog** -> **Products**.
2. Open the product you want to edit.
3. Click the **J2Commerce** tab, then the **Apps** tab.
4. Locate the **Google Product Category** field and start typing to search and select a category.

With Product Level checkout links, the same **Apps** tab has a **Checkout Link** field (Use Global, Include or Exclude) for that product. See [Checkout Links](https://docs.j2commerce.com/v6/apps-and-extensions/apps/app_googlemerchantfeed#checkout-links).

### Setting a Category Override on a Content Category

1. Go to **Content** -> **Categories**.
2. Open the category you want to edit.
3. Click the **J2Commerce** tab (or the tab where J2Commerce fields appear).
4. Locate the **Google Product Category** field and select a category.

## How It Works

When Google (or any visitor with the feed URL) requests the feed:

1. The plugin checks whether a cached feed XML exists and is still within the **Feed Cache** window. If so, it serves the cached version immediately.
2. If no valid cache exists, the plugin queries your J2Commerce product catalog, applying the **Excluded Products** filter and the **Include Unpublished** setting.
3. For each product, the plugin resolves the Google category using the three-level hierarchy described above.
4. The plugin outputs a valid RSS 2.0 XML document using Google's Merchant Center namespace, including titles, descriptions, prices, images, product IDs, condition, availability, and any shipping rules you have configured.
5. The output is cached for **Feed Cache** minutes before the next regeneration.

## Tips

- **Set a Default Google Category before going live.** Products with no category may be disapproved in Merchant Center.
- **Use the Excluded Products field for test products.** Any internal or non-sellable product you have in the catalog should be excluded to avoid Merchant Center warnings.
- **Check the feed in a browser first.** Visit the Feed URL directly in your browser. You should see XML starting with `<rss`. If you see an error message, check that the plugin is enabled and J2Commerce is installed correctly.
- **Free shipping?** Enter `0` as the Shipping Price for a country rule to tell Google that shipping is free for that destination.
- **Secure your feed with a token** if your product catalog contains pricing you prefer not to expose publicly.

## Troubleshooting

### Products Are Not Appearing in Google Merchant Center

**Cause:** The feed URL has not been registered, the feed has not been fetched yet, or the feed returned no products.

**Solution:**

1. Visit the Feed URL directly in your browser. Confirm it returns XML.
2. In Google Merchant Center, go to **Products** -> **Data sources** and check the status of your feed. Look for a "Last fetch" timestamp.
3. If the feed shows "No products", confirm that the plugin is enabled and that you have published products in J2Commerce.
4. Click **Fetch now** in Merchant Center to trigger an immediate fetch rather than waiting for the scheduled run.

### Google Reports Product Category Warnings

**Cause:** Some or all products have no Google product category assigned.

**Solution:**

1. Go to **J2Commerce** -> **Apps** -> **Google Merchant Feed**.
2. Set a **Default Google Category** that matches your main product type.
3. For products in different categories, set category-level or product-level overrides as described in [Category Resolution Order](https://docs.j2commerce.com/v6/apps-and-extensions/apps/app_googlemerchantfeed#category-resolution-order).

### Feed URL Returns an Error or Empty Page

**Cause:** The plugin is disabled, J2Commerce is not installed, or a Feed Access Token is set but missing from the URL.

**Solution:**

1. Go to **J2Commerce** -> **Apps** and confirm **Google Merchant Feed** shows a green checkmark.
2. If you set a **Feed Access Token**, make sure you are using the full URL (including `&token=YOUR_TOKEN`) that appears in the plugin settings.
3. Clear the Joomla cache: **Home Dashboard** -> **Cache** -> **Delete All**.

### Feed Shows Outdated Product Information

**Cause:** The feed is being served from cache and has not regenerated since you last changed your products.

**Solution:**

1. Wait for the cache to expire (determined by the **Feed Cache** setting in minutes).
2. To force an immediate refresh, go to the plugin settings and temporarily set **Feed Cache (minutes)** to `0`, save, visit the feed URL once, then restore your preferred cache time.

### Sync Does Not Start

**Cause:** A sync needs a connected account, a selected data source, a Delivery Mode other than XML Feed Only, and a Store URL (or Joomla's `live_site`).

**Solution:** Find the message you see and follow it.

- "Connect your Merchant Center account on the Connection screen before syncing." or "Upload a service-account key and save your account ID first.": finish the steps in [Connect Your Account](https://docs.j2commerce.com/v6/apps-and-extensions/apps/app_googlemerchantfeed#connect-your-account).
- "Select a primary API data source on the Connection screen first.": choose or create a data source.
- "Set Delivery Mode to Merchant API or Both before syncing.": change **Delivery Mode** on the Basic Settings tab.
- "Set Store URL in the plugin options first. Without a Store URL (or Joomla's live_site setting), product links cannot be built safely.": enter the **Store URL** on the Basic Settings tab.

### The Stored Key Cannot Be Decrypted

**Cause:** The site's secret key changed, for example after a migration.

**Solution:** Upload the service-account key again from the Connection screen.

### Checkout Links Do Not Reach Shoppers

**Cause:** Checkout settings are out of step between this site and Merchant Center.

**Solution:**

1. Open the Checkout Links panel and read its notes.
2. Choose **Checkout Links** -> **Push Checkout Settings** to send the current settings to Merchant Center.
3. Choose **Test URL Structure** and confirm the sample link adds the product to the cart.
