Magento 2 Google Shopping Feed

View Demo

Create a feed file with the Google Shopping extension for Magento and get more orders while increasing your revenue.

The Google Shopping is a go-to sales channel for online stores to increase their revenue and customer base. Roughly 1 billion shopping sessions a day are conducted on this platform, according to Google.

Sell directly from the Google Search engine by placing your products on its dedicated Google Shopping tab. Get new audience by advertising your products in Google Ads on hundreds of websites.

  • Generate a fully compliant Magento 2 Google Shopping feed
  • Keep your feed always up to date with an automatic update option
  • Filter out products to be excluded from the Google Shopping schema
  • Easily configure what product attributes to include in the feed
  • See your feed success with its clicks, orders, and revenue statistics
  • Start with a Google-ready preset, copy it for related campaigns, or build a feed from scratch
  • Run pre-flight checks before upload to Google Merchant Center

ℹ️ Important: This sub-module is included in the Advanced Product Feeds extension.

Buying this item gives you access to all feeds including Facebook, Instagram, Google Shopping, and others in one powerful package.

Hyvä
Magento Cloud
Mage-OS
Compatible with:
Community:
2.3.* - 2.4.9
Enterprise:
2.3.* - 2.4.9

Business Value

Google Shopping is a proven sales channel to get you more orders. Roughly 46% of product searches begin on Google, and Google Shopping accounts for 36% of product discovery searches. Almost 35% of Google shoppers make a purchase within 5 days of searching for a product.

  • Problem: Presenting your product catalog on Google’s comparison shopping engine means you need to format data on your products within Google’s XML feed specification and taxonomy. Google also expects this info to be automatically updated.
  • Solution: Magento Google Shopping extension easily makes a product feed that is fully compliant with Google’s specification and automatically updates the feed. It tracks the feed business success and serves best for your business goals.

How Google Shopping feed drives your sales

Using the Google Shopping Magento extension to sell your products directly on Google, you can expect rapid sales growth. Here are three main reasons for this:

Match with shopper's interests

Products on Google Shopping automatically match relevant keywords and search queries. Shoppers will see items they are potentially interested in buying.

Reach wider audience

Google is the most popular search engine, serving millions of search queries per day. By selling on Google, you can reach a wider audience in a short time period.

One feed for multiple platforms

A Google Shopping feed can be used for selling on other sales channels. Facebook, Microsoft Bing, and dozens of other sales engines accept this feed.

Fully compliant with Google feed specification

Google Shopping extension generates a product feed that can pass the check by Google Shopping from the start. The shopping feed Google expects may have such information on products:

  • Basic product data
  • Price and availability
  • Product category
  • Product identifiers
  • Detailed product description
  • Shopping campaigns and other configurations
  • Destinations
  • Shipping
  • Tax

Some of the product info, like price and availability or product category, is mandatory. The corresponding attributes are included in the default feed template when you create it in the Magento Google shopping feed module.

To stand out your products from competitors, let your potential shoppers to fully see your products. For that purpose, include optional product data, such as additional images, expiration date, or mobile-optimized landing page. Google shopping extensions' capabilities allow you to present goods in the best way possible.

Two steps to get a feed

To speed setup, the builder opens on a start screen with popular destinations, an A–Z index for quick filtering, and instant search to help you pick the right preset.

Using a prebuilt template for Google Shopping, you can get the feed literally in a minute. Make a product feed in two steps:

  • Provide a feed file name
  • Click the Generate button

Then, simply copy and paste the feed file URL into your Google Merchant account. Alternatively, configure the FTP/SFTP feed file upload to Google if it suits you better.

However, typically, the Google Shopping product feed requires more than two steps as you may want to make it more personal. To stand out from competitors, you can edit the default feed template to change its output. For example, customize the template to add more product information and apply product filters to filter out irrelevant items.

For similar destinations, you can duplicate a preset, and both presets and feeds support helper metadata (logo, guide link, short note) for clearer organization.

Additionally, configure e-mail notifications regarding the feed status and reporting on the user statistics. Attach your UTM tags to track your feed access in Google Analytics.

Product Attributes

Configure your Magento Google product feed easily in a visual manner, no experience of working with XML required.

Simply click the Library of patterns and find a product attribute you want to include in your feed. Use the Preview function to get a view on the output the pattern delivers. Then copy the pattern and paste it in your feed template.

Magento Google product feed

Product Filters

Make your Google Shopping feed more effective by filling it with products that meet your business interests best.

For example, Google requires to exclude out of stock products otherwise it will disapprove the product. Additionally, you may want to promote only products of a specific price range.

Apply the Base Product Filter or Extended Filter or both to your product feed to filter out irrelevant products from your feedt.

Magento Google product feed

Feed Preview

Magento Google product feed

Make sure you get a perfect XML feed before it is uploaded to Google. Use the preview option to correct any misconfiguration that may occur when editing the feed default template.

You will see the output exactly as it will be received by Google Shopping. Check for possibly deleted mandatory attributes, tags have opening and closing elements, etc.

Having such a preview tool helps to save time by avoiding a rejection when the feed is uploaded to Google.

Feed Validation

Catch issues before export and avoid rejections. Validate any feed against your own rules and get a clear report before upload.

Set checks in Content Settings > Validation Rule, generate the feed, and run validation. If a rule is present, it can run automatically; you can also start it manually at any time.

Typical checks include title length, required fields, character encoding, price and currency formats, and dimensions, etc. Reports show line numbers and plain-language messages, so you can fix values, regenerate, and validate again.

Magento Google product feed

How to sell on Google Shopping with a product feed

To start selling on Google Shopping, Google Ads, and other Google services, the first thing you need to do is to create a product feed file. This file contains all information on your products you want to sell via Google services.

Next, create a Google Merchant account and configure the access to the feed file. You may set up Google Merchant to fetch your feed by the URL or FTP/SFTP.

The last step is to finish the setup of your Merchant account by providing such business info as shipping, taxes, branding, returns.

Finally, you can publish your product listings to start selling on Google.

Magento Google product feed
No hidden fees
Lifetime access to source code
Access to free support and updates for 1 year
Updates and support prolongation - $108

Pay today $179 for the first year.

Then $108 for updates and support services per year.

Cancel anytime.

30 days money back guarantee
See it in action!
Pick a quick tutorial to learn about various aspects of this extension
Customer Reviews 0
Earn points for your review about this extension modules. $1 = 10 points
Write Your Own Review

check-circle You submitted your review for moderation.

Manual & Support
Need more help?

Save time by starting your support request online and we'll connect you to an expert.

Changelog
Version 1.15.13Sep 30, 2026
Feeds that export category paths generate faster on large catalogs. The full category path (for example Men > Tops > Jackets) was rebuilt from the database for every product, even when thousands of products share the same few categories, so a large feed made one database query per product just for that column. Each path is now built once per category and store view during an export and reused for the rest of it. Category names still follow the feed's store view, and the output is unchanged.
AI optimization now works through products in a predictable order. Each AI run takes a limited batch of the products that still need work, but that batch was picked in whatever order the database happened to return rows, so which products got processed in a given run was unpredictable. The batch is now always the products with the lowest IDs that still need work, so the catalog is worked through steadily from one run to the next.
Version 1.15.12Sep 23, 2026
JSON is now a feed type. Pick JSON in the Type selector, next to CSV, TXT and XML, to publish a feed whose deliverable is the JSON file itself, with no XML copy alongside it. You still write the template as XML markup. It is compiled once into a template that prints JSON directly, so memory stays flat however large the catalog is. Attributes on the elements control the output: xsi:type sets a value's JSON type (number, boolean, …), xsi:nil writes null, xsi:list makes an array, xsi:name sets the key, xsi:omitEmpty drops empty values, and xsi:record="true" marks the element that repeats once per product. Numbers keep exactly the digits your template produced, so a price of 34.00 is not cut to 34, and a value with broken characters is cleaned so the file still parses. If the template has no record element, has more than one, has more or fewer than one product loop, or has a key with an apostrophe, you get a plain message saying what to fix. ([#796]())
Choose how a JSON feed is framed: one document or one object per line. A new Framing option on the feed and template forms (shown for the JSON type only) switches between a single JSON document and JSON Lines, one record per line, which data pipelines read line by line. The file extension follows your choice: .json for one document, .jsonl for one object per line. Templates keep this setting when exported and imported. ([#796]())
Values that don't fit their declared type are reported, not guessed. If a value in a JSON feed doesn't match the type declared for it, such as a price that isn't a number, it is written as text instead of a made-up 0. The feed preview lists each one (key, declared type and value), and the feed validation results name them too. Validation reads the feed using the framing set on the feed, so a one-record document and a one-line JSON Lines file are both checked correctly. The preview lays out a one-document JSON feed in readable, highlighted form without changing any value. ([#796]())
The Generate JSON checkbox on XML feeds now says it is the legacy way to get JSON and points to the new JSON type. It still works and produces the same output as before.
⚠️ New column json_framing (varchar(16), default document) in the mst_feed_feed and mst_feed_template tables. Run bin/magento setup:upgrade after updating.
Only admins with the Import/Export data permission can import or export feed templates. The actions that run a template import or export did not check the Import/Export data role permission (Mirasvit_Feed::feed_import), which the Import/Export page itself already checks. So any admin user who could log in could reach them directly, whatever their role. They now check it, and admins without it are refused.
Version 1.15.11Sep 16, 2026
Feed cron no longer piles up idle PHP processes until the server runs out of memory. The feed cron group runs each due job in its own PHP process, and nothing stopped a second one from starting while the first was still working: an export that ran longer than its schedule interval was joined by a fresh process at every interval, and the one-minute queue job re-read the pending queue and started exporting the same items again alongside itself. Each of those processes costs 300–400 MB just to boot, so on a store with a long export they accumulated faster than they finished and the box eventually ran out of memory — the symptom was several feed processes sitting at 0% CPU and ~330 MB each. Both the scheduled export job and the generation-queue job now check whether a run is already in progress and simply do nothing until it finishes, and the marker is released even if a run crashes, so the next scheduled tick always gets its turn.
A feed that is already being exported now says so straight away instead of hanging, and a failed export no longer blocks the feed afterwards. When an export was already running for a feed, a second attempt waited on it indefinitely rather than reporting the feed as busy: bin/magento mirasvit:feed:export --id=N printed nothing at all instead of "already locked by another process", and a fully booted Magento process sat idle for as long as the other export took. On top of that, an export that ended in an error left the feed marked as in progress, so the next queued generation of that feed waited on a lock that would never be released and the cron run stalled. A busy feed is now reported within a second, and the marker is always cleared when an export ends, successfully or not — so the run moves on to the next feed. Stores whose media directory sits on a filesystem without file locking (NFS, AWS EFS) keep generating feeds as before.
Version 1.15.10Sep 15, 2026
Admin pages belonging to other extensions no longer fail with "The element with the '…' ID wasn't found". To keep its own admin screens from tripping a PHP deprecation notice, the extension quietly gave a name to any admin panel that had been left unnamed — including panels that belong to other extensions. When such an extension later named that panel itself, Magento could not find the name we had invented and the page died with that error instead of loading; Firebear Improved Import & Export's import job edit screen was one of them. Naming is now limited to this extension's own panels, so everyone else's pages are left alone and load normally, while our screens stay free of the deprecation notice.
Version 1.15.9Sep 14, 2026
A sale that is live on the storefront is now priced as a sale in the feed. The feed decided for itself whether a special price was still inside its from/to window, and it asked the server's UTC clock — while Magento judges that same window on the wall clock of the admin timezone, deliberately, so one special price means the same thing in every store view. The two disagree by exactly that timezone's offset, so on a store ahead of the server the storefront was already charging the sale price while the feed still published the full one, at every hour of the day. That is the "mismatched value" disapproval in Google Merchant Center and its equivalents elsewhere. The window is now Magento's to judge, so the feed and the storefront always quote the same price. An open-ended special (no end date) still applies, a window that has closed or has not opened still exports no sale price at all — not a 0, which would advertise the product as free.
A fractional stock quantity is no longer rounded down. Quantity was exported as a whole number, so a product stocked by weight or volume — 0.5 kg of something, 2.5 m of cable — shipped a quantity of 0 and read as out of stock in every channel that trusts that column. Fractional quantities, and the summed quantity of a configurable's or grouped product's children, now export as they are actually stocked. A whole-number quantity is unaffected: 5 still exports as 5.
{% if a and b and c %} now checks every condition in a feed template. A template condition joining three or more comparisons with and / or only ever evaluated the last two — everything before them was silently discarded, so a three-part rule guarding a column emitted the wrong branch with nothing in the log. Conditions are now folded left to right across the whole statement. Two-condition ifs, which is what most templates use, behaved correctly before and are unchanged.
The feed statistics chart no longer drops days with no traffic. A day with no recorded clicks was left out of the sparkline entirely rather than drawn as a zero, so three active days in a fortnight rendered as three adjacent bars and a sporadic feed read as one with steady traffic. Every day in the selected period now contributes a point, a quiet day as a genuine 0, so the shape of the chart matches the period it covers.
Feed generation and AI optimisation survive a media mount that has dropped out. The advisory lock file that keeps the admin, cron and CLI export paths from colliding was created under pub/media/feed/tmp, and the AI optimisation run kept its own lock in the same place. Where media is a remote or network mount (NFS, AWS EFS) that has lost its transport — after an OOM kill, say — opening that file failed before a single product was exported, and every feed on the store stayed broken until the mount came back. Both locks now live in var/mst_feed/tmp, next to the export's scratch and progress files, which already moved there: a transient coordination file has no business on shared storage. Nothing about how you use the extension changes; if a monitoring check watches for a stale .lock, point it at the new directory.
The AI profile template picker is no longer empty on stores that keep media on remote storage (Amazon S3 and compatible). The bundled profile templates ship inside the extension's own directory, but were being read through the remote-storage driver, which answers for a key that has never existed in the bucket with an empty file rather than an error. Every template then parsed as broken and was quietly skipped, so the picker offered 131 entries on an ordinary store and none at all on an S3 one, with no exception anywhere to explain it. They are now read from the local disk they actually live on.
Google category mapping works again on PHP 7.x. An empty search was read as "match nothing" rather than "match everything" on PHP 7, so the taxonomy came back empty with nothing logged: the category-mapping autocomplete in the admin offered no suggestions when opened with an empty box, and validation rejected every real Google category as invalid. Both work as they do on PHP 8 now.
A CSV template saved without a format no longer breaks the feed. A template is allowed to carry just a name and a type, and one saved that way reached generation with no column delimiter at all — a fatal error on PHP 8 and a run-together line on PHP 7. Such a template now renders with no separator rather than failing, and no delimiter is invented on your behalf.
The feed history grid remembers your Columns choice. The Columns dropdown rendered and worked, but the selection — along with filters and page size — was gone on the next load, with no error and nothing in the log. The grid now saves its view the way every other grid in the extension does.
An empty product selection no longer ends in a database error. Previewing a feed whose store view belongs to a website with no products assigned answered with a raw MySQL syntax error instead of an empty preview — the empty list of products was handed to the database as an empty condition. An empty selection is a legitimate answer and is now treated as one: the preview simply comes back empty. In the same vein, a feed left with no filter rule at all now explicitly clears its product set, so detaching the last rule no longer leaves the previous run's products attached to it.
The Order # column in the SKU report resolves again. The column is now backed by a direct link from the report row to the order it was attributed to, so it shows the order number rather than nothing.
Feed columns in the reports no longer go through a temporary table. The relationship between a report row and its feed was declared the wrong way round — the reporting engine believed one report row could have many feeds — so adding a Feed column pushed the data through a temporary table instead of joining it directly. Reports that group or filter by feed are now built with a plain join.
Reasons to choose Mirasvit
Client focusing and satisfaction

These are our primary. A major portion of our new clients come from referrals from our existing clients. Our professional team of developers, marketers and support staff have invested the best knowledge and experience in the field into our work, so you know you can come back to us again and again.

Remarkable support

One year free and high quality support. We go to great lengths to provide maximum satisfaction with every module you have purchased in our store. By helping you with installation, configuration, answering your every question, we do all our best to eliminate any possible problems.

Risk-free Investment

30-days money back guarantee. If you are not satisfied with our extension performance for any reason, we provide a full refund.

Constant improvements and upgrades

We constantly add new features to all our modules, and are always interested in hearing your opinion and implementing your suggested features in our future developments.

Comprehensive Documentation

We provide an expanded user guide for every aspect of our extension, so you can find answers for all your burning questions.

Unencrypted source code of our products

You can customize extension according to your needs and requirements.

Usability and Performance

The Module is easy to install and upgrade, just follow our step-by-step user guide. Additionally, the extension is ready to use with the Hyvä theme.

Ready for Magento Cloud

No core modifications. The extension has been tested in a Magento Cloud environment and is fully compatible with it.

Loading...