{"id":308599,"date":"2026-05-08T17:45:08","date_gmt":"2026-05-08T17:45:08","guid":{"rendered":"https:\/\/en-gb.wordpress.org\/plugins\/jons-google-merchant-feed\/"},"modified":"2026-10-01T08:02:35","modified_gmt":"2026-10-01T08:02:35","slug":"jons-product-feed-for-google-merchant-center","status":"publish","type":"plugin","link":"https:\/\/br.wordpress.org\/plugins\/jons-product-feed-for-google-merchant-center\/","author":4866958,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.0","stable_tag":"trunk","tested":"6.9.10","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"Jon's Product Feed for Google Merchant Center","header_author":"Jon Webb","header_description":"Syncs WooCommerce products to Google Merchant Center via the Content API for Shopping. Supports full and delta sync, attribute\/term mappings, per-product and per-category exclusions, and availability date from lead_time \/ due_date meta.","assets_banners_color":"","last_updated":"2026-10-01 08:02:35","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/plugins.justridingalong.com\/google-merchant-feed-plugin-for-woocommerce\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":810,"num_ratings":0,"support_threads":1,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.20":{"tag":"1.2.20","author":"jonthewebb","date":"2026-05-09 07:00:15","revision":3527042},"1.3.0":{"tag":"1.3.0","author":"jonthewebb","date":"2026-05-10 22:07:38","revision":3528059},"1.3.1":{"tag":"1.3.1","author":"jonthewebb","date":"2026-05-14 07:41:37","revision":3531711},"1.3.3":{"tag":"1.3.3","author":"jonthewebb","date":"2026-05-29 11:38:59","revision":3553451},"1.4.0":{"tag":"1.4.0","author":"jonthewebb","date":"2026-07-22 11:52:19","revision":3618529},"1.4.1":{"tag":"1.4.1","author":"jonthewebb","date":"2026-09-02 06:36:11","revision":3677275},"1.5":{"tag":"1.5","author":"jonthewebb","date":"2026-10-01 08:03:28","revision":3722618}},"upgrade_notice":{"1.5.0":"<p>Fixes multi-market sync (each market now gets its own data source, was incorrectly shared), a checkpoint bug that could silently stop auto-sync after any failure, and a crash on orphaned variations. Adds Pro bundle-variant explosion for separate Google listings per component.<\/p>","1.4.1":"<p>Bug fix for 1.4.0: sync could pick a non-API (e.g. scheduled-fetch) data source and fail every product with an INVALID_ARGUMENT\/fileInput error. If you saw that, update, then go to Settings and click &quot;Reset data source&quot; once.<\/p>","1.4.0":"<p>Required update: migrates to Google&#039;s Merchant API before the Content API for Shopping shuts down 18 Aug 2026. After updating, go to Merchant Feed &gt; Settings and click &quot;Register Cloud project with Merchant Center&quot; \u2014 a one-time step Google now requires.<\/p>","1.3.0":"<p>Introduces a free and Pro plan. All existing functionality continues to work. Advanced features (multi-market, category exclusions, custom labels, reports, offer ID map) are now part of the Pro plan.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3528058,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.20","1.3.0","1.3.1","1.3.3","1.4.0","1.4.1","1.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3532680,"resolution":"1","location":"assets","locale":"","width":1056,"height":686},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3532680,"resolution":"2","location":"assets","locale":"","width":1227,"height":918},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3532680,"resolution":"3","location":"assets","locale":"","width":980,"height":736},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3532680,"resolution":"4","location":"assets","locale":"","width":979,"height":475},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3532680,"resolution":"5","location":"assets","locale":"","width":963,"height":334}},"screenshots":{"1":"Check the live status of any product or variation, and see what needs fixing","2":"Map attributes and terms from your website to Google attributes","3":"Map your categories to Google product categories for increased visibility","4":"Generate report of all issues to find and fix problems","5":"Report detail shows products with issues"}},"plugin_section":[],"plugin_tags":[150,2605,5418,889,286],"plugin_category":[45],"plugin_contributors":[78154,262358],"plugin_business_model":[],"class_list":["post-308599","plugin","type-plugin","status-publish","hentry","plugin_tags-google","plugin_tags-merchant","plugin_tags-product-feed","plugin_tags-shopping","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-freemius","plugin_contributors-jonthewebb","plugin_committers-jonthewebb"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/jons-product-feed-for-google-merchant-center\/assets\/icon-256x256.png?rev=3528058","icon_2x":"https:\/\/ps.w.org\/jons-product-feed-for-google-merchant-center\/assets\/icon-256x256.png?rev=3528058","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/jons-product-feed-for-google-merchant-center\/assets\/screenshot-1.png?rev=3532680","caption":"Check the live status of any product or variation, and see what needs fixing"},{"src":"https:\/\/ps.w.org\/jons-product-feed-for-google-merchant-center\/assets\/screenshot-2.png?rev=3532680","caption":"Map attributes and terms from your website to Google attributes"},{"src":"https:\/\/ps.w.org\/jons-product-feed-for-google-merchant-center\/assets\/screenshot-3.png?rev=3532680","caption":"Map your categories to Google product categories for increased visibility"},{"src":"https:\/\/ps.w.org\/jons-product-feed-for-google-merchant-center\/assets\/screenshot-4.png?rev=3532680","caption":"Generate report of all issues to find and fix problems"},{"src":"https:\/\/ps.w.org\/jons-product-feed-for-google-merchant-center\/assets\/screenshot-5.png?rev=3532680","caption":"Report detail shows products with issues"}],"raw_content":"<!--section=description-->\n<p>Jon's Product Feed for Google Merchant Center solves the problems issues present in the official WooCommerce Google Merchant plugin, and also adds many features for finding errors and debugging your merchant feed. It connects your WooCommerce store to Google Merchant Center using the Merchant API \u2014 no feed files, no delays. Changes are pushed instantly and can be verified immediately with the plugin's status check features. Now compatible with the latest Google Merchant API!<\/p>\n\n<h4>Free plan includes<\/h4>\n\n<ul>\n<li>Full and delta sync to a single market<\/li>\n<li>Core product fields: title, price, images, availability, brand, MPN, GTIN, condition<\/li>\n<li>Attribute and term value mappings (color, size, gender, age group, etc.)<\/li>\n<li>Scheduled automatic sync (twice daily)<\/li>\n<li>Per-product exclusion from feed<\/li>\n<li>Log viewer<\/li>\n<\/ul>\n\n<h4>Pro plan adds<\/h4>\n\n<ul>\n<li>Multi-market sync (multiple countries from one store)<\/li>\n<li>Sync preview on variations shows what data will be submitted to Google<\/li>\n<li>Per-category exclusion from feed<\/li>\n<li>Per-variation availability date from lead time and due date meta<\/li>\n<li>Lead time and due date can be mapped from your existing stock system values if present<\/li>\n<li>Google product category mapping with taxonomy search<\/li>\n<li>Product types from WooCommerce category hierarchy<\/li>\n<li>Sale price effective date<\/li>\n<li>All five custom labels (automatic, tag-mapped, category-mapped, and per-product)<\/li>\n<li>Offer ID map \u2014 override offer IDs to preserve Google review history on migration<\/li>\n<li>Bulk issue reports \u2014 scan all Merchant Center products and export issues to CSV<\/li>\n<li>Bundle variant explosion \u2014 generate a separate Google listing per variation of a bundled component (e.g. hole-count or colour), instead of one generic listing per bundle<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to Google's APIs to provide its core functionality.<\/p>\n\n<h4>Google Merchant API<\/h4>\n\n<p>When you sync products, data including product title, description, price, availability, images, SKU, brand, GTIN\/MPN, Google product category, and mapped attributes is sent to Google Merchant Center via the Google Merchant API. Data is transmitted when you trigger a sync manually or via the scheduled automatic sync. No data is sent until you configure and connect the plugin.<\/p>\n\n<p>Service provided by Google LLC.\n* <a href=\"https:\/\/policies.google.com\/terms\">Google Terms of Service<\/a>\n* <a href=\"https:\/\/policies.google.com\/privacy\">Google Privacy Policy<\/a>\n* <a href=\"https:\/\/developers.google.com\/merchant\/api\">Merchant API documentation<\/a><\/p>\n\n<h4>Google Product Taxonomy<\/h4>\n\n<p>When you click \"Refresh taxonomy\" in the plugin settings, a request is made to fetch Google's public product taxonomy file from google.com. The taxonomy is stored locally in your WordPress database and used to power the category search. No personal data is sent in this request.<\/p>\n\n<p>Service provided by Google LLC.\n* <a href=\"https:\/\/policies.google.com\/terms\">Google Terms of Service<\/a>\n* <a href=\"https:\/\/policies.google.com\/privacy\">Google Privacy Policy<\/a><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to \/wp-content\/plugins\/.<\/li>\n<li>Activate the plugin through the Plugins menu in WordPress.<\/li>\n<li>Go to Merchant Feed &gt; Settings to configure your Google API credentials.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20can%20i%20get%20support%3F\"><h3>Where can I get support?<\/h3><\/dt>\n<dd><p>Get support for this plugin at <a href=\"https:\/\/plugins.justridingalong.com\/google-merchant-feed-plugin-for-woocommerce\/\">plugins.justridingalong.com<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Fix: Each market now resolves (and if needed creates) its own Merchant Center data source, matched on contentLanguage\/feedLabel. Previously a single data source was shared across all markets, which accounts migrated to \"single locale feeds and data target split\" reject \u2014 products in any non-primary market failed with \"[productInput] The product must have the same feedLabel and contentLanguage as the data source.\"<\/li>\n<li>Fix: Delta and full sync could advance the internal sync checkpoint even when every product in that run failed to upsert (e.g. due to the data source bug above, or any other systemic failure). Since delta sync only looks at products modified after that checkpoint, this could silently and permanently drop products from automatic sync \u2014 manual per-product sync still worked, masking the issue. The checkpoint now only advances when at least one product actually succeeded.<\/li>\n<li>Fix: A product whose variation's parent was deleted (an orphaned variation) crashed the sync with a PHP TypeError instead of being cleanly rejected and logged.<\/li>\n<li>New (Pro): Bundle variant explosion. For bundles containing a variable component that isn't priced individually (e.g. a shell with hole-count or colour options), generates one Google listing per component variation \u2014 grouped under one item_group_id \u2014 instead of a single generic listing for the whole bundle. Configure via the new \"Bundle explode-by attributes\" setting and the per-bundle override on the Merchant Feed tab.<\/li>\n<li>Improvement: Log entries for a variation now link to its parent product's edit screen, since variations have no edit screen of their own.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Fix: Sync could resolve to a non-API-type Merchant Center data source (e.g. a scheduled-fetch\/file feed) instead of the API one, causing every product upsert to fail with \"INVALID_ARGUMENT: [dataSource] ... API data sources cannot have a <code>fileInput<\/code> field set.\" The data source lookup now requires Input::API explicitly, not just non-legacy.<\/li>\n<li>New: \"Reset data source\" button in Settings \u2014 clears the cached data source so the next sync re-detects the correct one. Needed once if you were affected by the above.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Changed: Migrated from the Content API for Shopping (discontinued by Google on 18 August 2026) to the new Merchant API. Existing connections and synced listings carry over automatically \u2014 no reconnection needed.<\/li>\n<li>New: \"Register Cloud project with Merchant Center\" button in Settings. Google's Merchant API requires each Google Cloud project to be registered against the Merchant Center account once (separate from OAuth); without it, sync fails with a GCP_NOT_REGISTERED error. Required after updating to 1.4.0.<\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>New (Pro): Set a custom feed price for bundle and composite products directly from the Merchant Feed tab on the product edit page \u2014 no longer requires manually adding a custom field.<\/li>\n<li>New (Pro): Map an existing product meta key to the bundle\/composite feed price via plugin settings, so prices managed by your stock system are picked up automatically. The per-product field is disabled and shows the mapped value when a mapping is active.<\/li>\n<li>New: Sync preview button on the Merchant Feed tab for simple, bundle, and composite products \u2014 shows all fields that will be submitted to Google without triggering a sync.<\/li>\n<li>Improvement: Replaced the inline Google Cloud setup guide with a link to the full setup guide on the plugin website.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>New: Map existing stock-system meta keys to the lead time and due date fields via plugin settings. When a mapping is active the per-variation inputs are disabled and show the value as interpreted by the plugin, making it easy to verify date format configuration.<\/li>\n<li>New: Specify a PHP date format alongside the due date meta key mapping (defaults to Y\/m\/d when left blank). Lead time values are cast to integer, so formats such as \"5 days\" are handled automatically.<\/li>\n<li>New: Sync preview button on each variation panel \u2014 shows all fields that will be submitted to Google including offer ID, item group ID, availability date, custom labels, and images, without needing to trigger a full sync.<\/li>\n<li>Improvement: Availability date row in the fetch-status panel now always renders, showing \u2014 when no date is indexed, making it easier to confirm availability date configuration.<\/li>\n<li>Fix: Due date and lead time meta key mapping settings were not persisting \u2014 they were silently dropped by the settings save allowlist.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New: Introduced free and Pro plans. Core sync features remain free. Advanced features \u2014 multi-market sync, per-category exclusion, Google product category mapping, custom labels, availability date, offer ID overrides, and bulk issue reports \u2014 are now part of the Pro plan.<\/li>\n<\/ul>\n\n<h4>1.2.20<\/h4>\n\n<ul>\n<li>Fix: WordPress.org review compliance \u2014 plugin name, external services documentation, inline script enqueuing, nonce sanitization, CSV validation.<\/li>\n<\/ul>\n\n<h4>1.2.18<\/h4>\n\n<ul>\n<li>Fix: WordPress plugin checker compliance improvements.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<\/ul>","raw_excerpt":"Syncs WooCommerce products to Google Merchant Center via the Merchant API.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/308599","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=308599"}],"author":[{"embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jonthewebb"}],"wp:attachment":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=308599"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=308599"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=308599"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=308599"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=308599"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=308599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}