Merchgain
EN
Available now
Next, in this order
  • DeutschDE
  • EspañolES
  • FrançaisFR
  • ItalianoIT
  • PortuguêsPT
  • NederlandsNL

A language shows up here once its pages are actually written. Nothing on this site is machine-translated.

Install freeInstall

What it never writes

A reporting plugin has no business editing a shop. This page is the list of what Merchgain therefore cannot do for you — including a few things you might reasonably want.

Updated 2026-10-14

The rule

Merchgain writes nothing to your shop. No product, no price, no stock level, no order, no order line, and above all no cost value is ever written back.

That is not a limitation waiting to be lifted in a later version. It is the reason the plugin can be installed on a live shop on a Friday afternoon: the worst case is a report you disagree with, not a catalogue you have to restore from backup.

What that rules out

Some of these are genuinely useful, and their absence is a decision rather than an oversight:

  • no bulk cost editor. Filling in 500 costs is exactly the job you would want automated, and it is exactly the job that makes a plugin capable of overwriting your buying prices. The guide shows how to script it yourself, with your backup and your decision;
  • no “fix this” button anywhere, of any kind;
  • no importing costs from another plugin. Reading a competitor’s meta field and writing it into the core field is two risky operations in one click;
  • no switching the WooCommerce feature on for you. It is one checkbox in the WooCommerce settings and the shop owner should be the one who ticks it;
  • no re-saving orders to “repair” cost history. Saving an order is exactly how cost history gets damaged — see what a refund does.

What it does store

Two things, both in your own database, both removed when you uninstall:

  • its own options — the last date range you looked at, and internal version markers;
  • cached results — aggregates and single pages of a table, held for an hour so the screen opens quickly. Entering a cost clears the cache immediately; the Recalculate button clears it on demand. How the cache works.

No custom tables. No copies of your orders. No second cost field of its own.

Nothing leaves your server either

No account, no sign-up, no licence check, no telemetry, no update ping of its own, no fonts or scripts pulled from someone else’s CDN. The report is SQL against your database, rendered in your admin.

Your cost prices and margins are among the most sensitive numbers in a shop. The simplest way to keep them private is for them to never travel — see does any data leave my server for how to verify that rather than take it on trust.

The one exception is your own choice: from version 0.2.6 an AI assistant you connect to your store can read the report through Merchgain’s read-only abilities (what it can read).

How to check all of this in ten minutes

Nothing here needs to be believed:

  • grep the plugin folder for wp_remote_get, wp_remote_post, curl_, update_post_meta, wp_insert_post and ->save(). A read-only plugin has a short and boring list of hits;
  • watch your outbound traffic on a test site while opening the report;
  • read the source. It is GPL-2.0-or-later, in full, and it is a few thousand lines of plain PHP rather than a compiled bundle;
  • check the capability: the report and its CSV export are both gated on view_woocommerce_reports, the same permission WooCommerce uses for its own reports.

The one thing you can do that writes

The CSV export writes a file — to your computer, when you click the button. That is the only output the plugin produces, and it exists because it is also the only defence against WooCommerce rewriting recorded costs on a refund. A monthly export takes ten seconds and gives you a record that nothing else can change.

It is in the free version, and it always will be.