
Merchant Image Audit for OpenCart — product photo audit against the Google Merchant Center 500×500 minimum
A module for OpenCart 4, 3 and 2.3 that measures the original file of every product photo — main and additional — against the Google Merchant Center minimum of 500×500 px, which Google applies to all products from 31 January 2027. It shows which products already have a larger photo of their own, checks format, file size and megapixels, and exports a CSV report. Pro makes the product's own larger photo the main one in one click (with undo), serves supplemental files for Merchant Center and checks which images your feed really sends.
- Compatibility
- OpenCart 4.0.2 – 4.1.x (tested on 4.1.0.3 and 4.0.2.3, including DB_DRIVER=pdo) · OpenCart 3.0.x (tested on 3.0.5.0) · OpenCart 2.3.0.2 (PHP 7.0) · PHP — whatever your OpenCart version needs (tested on 7.0, 8.1, 8.2, 8.3)
- Version
-
v1.0.0 (OpenCart 4)
v1.0.0 (OpenCart 3.x)
v1.0.0 (OpenCart 2.3) - Licence
- one site, lifetime
- Trial
- 7 days, no card, one per site
- Updated
- 9 October 2026
What Free has,
and what Pro adds
The free version works with no time limit. Pro adds the rest of the features in the table.
What it looks like
Key points
What the buyer sees
Customers do not see the module: nothing changes in the storefront or checkout, and the module adds no scripts or requests to shop pages.
What the admin gets
The module lives in Extensions → Extensions → Modules → CatCode Merchant Image Audit.

The trial starts when you ask
A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — one site
Moving the store? Unbind the licence on the old domain and activate it on the new one yourself. For studios — keys for 5 or 25 sites, or unlimited.
Technical requirements
OpenCart 4.0.2 – 4.1.x (tested on 4.1.0.3 and 4.0.2.3, with the mysqli and pdo database drivers), 3.0.x (tested on 3.0.5.0) or 2.3.0.2.
PHP — whatever your OpenCart version needs: the 2.3 build is tested on PHP 7.0, the others on PHP 8.1, 8.2 and 8.3.
Product photos in the image/ folder on the same server (OpenCart standard).
The PHP cURL extension — for the licence and for remote feed images; XMLReader — for checking an XML feed.
For the daily re-scan in OpenCart 3 and 2.3 — a hosting cron that opens the URL from the settings.
Version history
For OpenCart 4.x, 3.x and 2.3: audit of the original main and additional photos against the Merchant Center minimum, checks of format, file size, megapixels and extension, verdicts, the…
Frequently bought with Merchant Image Audit for OpenCart
4 modules in one order — 40% cheaper than separately


Nova Poshta Premium — a Nova Poshta module for OpenCart 2.3, 3.x and 4.x

LiqPay — Card Payments for OpenCart 2.3, 3.x and 4.x

Telegram notifications and Viber/SMS for customers for OpenCart
Full module description
Merchant Image Audit for OpenCart is a module for shops that list products in Google Shopping and free listings through Merchant Center. According to the Google help, from 31 January 2027 every image in image_link and additional_image_link must be at least 500×500 px — for all products and categories. Since 14 April 2026 smaller images already get the Merchant Center warning “Image too small for upcoming enforcement”. In a typical OpenCart catalogue photos were uploaded over the years, by different people and in different sizes, so checking them by hand takes a long time.
The module measures the original file of every product photo — the main one and all additional ones, not the resized copies the theme shows — and splits products into four groups: all fine; only additional photos fail; the main photo is too small but the product has a larger photo of its own; a new photo is needed. Along the way it checks format, file size, megapixels and whether the file extension matches the real format. The module never enlarges photos: it either finds a larger photo the product already has, or says plainly that a new one is needed.
For WooCommerce there is a separate version — Merchant Image Audit for WooCommerce.
What the buyer sees
Customers do not see the module: nothing changes in the storefront or checkout, and the module adds no scripts or requests to shop pages. Its public addresses — the supplemental files for Merchant Center and the re-scan URL — open only with a secret key. The customer sees only the result: the product in Google Shopping is shown with a sharp photo instead of being disapproved for a small image.
What the admin gets
The module lives in Extensions → Extensions → Modules → CatCode Merchant Image Audit. Five tabs: Audit, Merchant Center files, Feed check, Settings, Licence.
- “Scan all products”. The module reads only file headers, in batches, and changes nothing. Counters: products checked, all photos OK, main photo fails, of them have a larger own photo, need a new photo, additional photos that fail.
- Product list with a thumbnail, the size and weight of the original main photo, thumbnails of the additional photos with their sizes, and a verdict for each. A blue frame marks the largest own photo that passes every rule. Clicking a thumbnail opens the original, clicking the name opens the product editor.
- Filters: all problems, main photo fails, fixable with an own photo, needs new photo, only additional photos fail, extension ≠ format, all OK. Search by name, model, SKU or ID.
- CSV report — one row per product: ID, model, SKU, name, verdict, size, status and URL of the main photo, how many additional photos and how many of them fail, the largest own photo with its size and URL. UTF-8 with BOM: it opens in Excel without encoding trouble, and product names starting with “=” are not run as formulas.
- Settings: minimum size (500×500 by default), whether to check disabled products.
Pro: fixes, Merchant Center files, feed check
- “Use as main”. The product’s own additional photo that passes every rule becomes the main one, and the previous main photo moves to the additional photos — nothing is deleted. The “Use own larger photo for all” button does the same for every Fixable product. Every change shows in the list with an Undo button.
- Supplemental files for Merchant Center. Merchant Center lets you attach a supplemental data source to the primary feed; it changes attributes of products that already exist, matched by id, without touching the feed module. The module prepares three such files in TSV format, with a value in every cell: image_link with the original file (only for Fixable products, or for every product with a usable photo), excluded_destination for products without any usable photo (Shopping_ads, Free_listings, Display_ads, Local_inventory_ads, Free_local_listings — your choice) and custom label for the same products in slot custom_label_0…4. The id template adapts to your feed.
- How to connect (per the Google help): in Merchant Center enable the “Advanced data source management” add-on → Settings → Data sources → Supplemental sources → Add supplemental product data → A file → the file link (or upload the file by hand) → link it to the primary source. We have not tested live acceptance of the file — see above.
- Feed check. Many feed modules put a resized copy from image/cache/ into image_link even when the original is large. Enter the address of the feed you submit to Merchant Center (XML with the g: namespace or TSV/CSV, gzip too, up to 200,000 links) — the module measures every image behind image_link and additional_image_link. Images of this shop are read from disk, other hosts over HTTP, only the first bytes. For a cached copy the module shows the original and its size.
- Daily re-scan. In OpenCart 4 — with the OpenCart cron job; in OpenCart 3 and 2.3 — with a URL for the hosting cron (once an hour is enough, a new round starts only after 20 hours); and also in short steps when Merchant Center fetches a file.
How it works — step by step
- “Scan all products” goes through the catalogue in batches of 200 products, each request up to 8 seconds, so a hosting timeout does not cut the scan off. Enabled products are taken (disabled ones — if the setting says so).
- For every photo the module takes the original from image/ and reads only the file header: width, height, real format. A file over 16 MB or 64 MP, missing, unreadable or in an unsupported format (SVG, AVIF) gets its own status.
- The product gets one verdict. The main photo passes and so do the additional ones → OK. The main one passes but some additional ones do not → Additional photos. The main one fails (or is missing) but the product has an own additional photo that passes every rule → Fixable, and the module marks the largest of them. Otherwise → Needs new photo.
- You filter the list, export the CSV for the photographer or content manager, and in Pro fix the Fixable ones with a button.
- In Pro the module builds three supplemental files for Merchant Center from the last scan and re-scans the catalogue every day, so the files do not go stale.
Under the hood
- No core edits. No OCMOD patches, no events. One class library is identical in all three builds, the code is PHP 7.0 compatible.
- Own tables
oc_cc_imgaudit_product(product verdict),oc_cc_imgaudit_image(every photo),oc_cc_imgaudit_log(main-photo swaps for Undo),oc_cc_imgaudit_feed(feed check). - Only file headers are read:
getimagesize(), and the WebP header is parsed by hand so it works on PHP 7.0 too. Photos are not re-encoded or copied. - Supplemental files are served at
index.php?route=extension/cc_imgaudit/feed&type=image|exclude|label&key=…: without the key or without an active Pro — “403”. - The licence lives in a separate settings group: Save does not touch it.
- Removal: uninstall removes the tables, settings, the cron job (OpenCart 4) and the access rights to the module page. The audit is rebuilt by a new scan.
How to install
- OpenCart 4: Extensions → Installer → upload
cc_imgaudit.ocmod.zip(do not rename the archive) and press Install. OpenCart 3: Extensions → Installer →cc_imgaudit-oc3.ocmod.zip, then Extensions → Modifications → Refresh. OpenCart 2.3: upload the contents of theupload/folder fromcc_imgaudit-oc2.ocmod.zipto the shop root (FTP or the hosting file manager) — the 2.3 Installer does not copy files without a configured FTP. - Extensions → Extensions → Modules → CatCode Merchant Image Audit → Install, then Edit.
- Audit tab → “Scan all products”. Filter “Needs new photo” and export the CSV — that is the list for the photographer.
- For Pro: paste the licence key from the email after payment, or press “Try 7 days” on the Licence tab. Then “Use own larger photo for all” and, if needed, the file links from the “Merchant Center files” tab into Merchant Center.
Questions
about the module
Didn't find the answer? Message us on Telegram and we'll reply within a business day.
Which minimum does the module check?
500×500 px by default. According to the Google Merchant Center help, this is the minimum for image_link and additional_image_link of all products; since 14 April 2026 smaller images get the warning "Image too small for upcoming enforcement", and from 31 January 2027 the requirement is enforced. You can change the minimum in the settings — for example, to the 1500×1500 that Google recommends.
Does the module enlarge small photos?
No, and it does not promise to. The Google help sets the minimum and says nothing about whether an enlarged photo is acceptable, while it explicitly forbids borders and padded canvases. So the module either finds a larger photo the product already has, or honestly says "Needs new photo".
Why do the sizes in the module differ from what the theme shows?
The theme shows resized copies from image/cache/. The module measures the original file in image/ — that is the one worth sending to Merchant Center. If your feed sends cached copies, the Pro tab "Feed check" shows it.
Does the module change products on its own?
In Free — no: it only reads file headers and stores the result in its own tables. In Pro a photo changes only when you press "Use as main" or "Use own larger photo for all", and every change can be undone. If the main photo was changed by hand after the module, Undo leaves it alone.
Will Merchant Center definitely accept the module's supplemental files?
We have not tested this on a live Merchant Center account. The module serves TSV files with an id column and the attribute, following the Google help on supplemental data sources (input: a file, Google Sheets or the API). Whether Merchant Center fetches the file by link on a schedule in your account — check it during the 7-day trial; you can also download the file and add it by hand.
My feed builds the id differently, not from product_id.
Set the id template on the "Merchant Center files" tab: {product_id}, {sku}, {model}, {mpn}, {upc}, {ean}, {jan}, {isbn}, with any prefix — for example shop_{product_id}. Products whose id comes out empty or twice are left out. Separate offers per product option are not covered.
Is the licence yearly?
No. For OpenCart it is a one-time payment and the licence is forever, one for all three builds: 4.x, 3.x and 2.3. The Pro trial starts only when you press the button. After the trial the audit, the list and the CSV keep working, while the supplemental file links answer "403" — Merchant Center stops applying their values.
Does the module change OpenCart files?
No. No core edits, no OCMOD patches, no events; it has its own tables. Uninstall removes these tables together with the change log used by Undo.
No reviews yet. Be the first.
No questions yet. Ask one — we answer within 24 hours.
Not quite what you are looking for?
We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.
Order a custom module
Buying the module
—
