Before you pay for a WooCommerce analytics plugin, open WooCommerce → Orders and look at the Origin column. Order attribution has shipped in WooCommerce core since 8.5 and it is enabled by default, so your store is probably already recording which campaign produced each order, at no cost and with no third party involved.
What core will not do is tell you whether the money you spent on ads came back. It records a source per order; it does not know your ad spend, your cost of goods, or that the $340 order on Tuesday was refunded on Friday. That gap is the only honest reason to buy anything on this page, and for a store doing fewer than a few hundred orders a month it is often not worth closing yet.
What WooCommerce already gives you for free
Two separate features, both in core as of WooCommerce 11.1.2, and most store owners use neither properly.
Analytics is the reporting section under WooCommerce → Analytics: revenue, orders, products, coupons, taxes and stock, built from WooCommerce’s own order tables rather than a tracking script. The numbers there are your numbers. Nothing can block them, no visitor can opt out of them, and they reconcile with your bank deposits.
Order Attribution arrived in WooCommerce 8.5 in January 2024 and is switched on by default for new and existing stores. The toggle lives at WooCommerce → Settings → Advanced → Features. It stores a source per order and shows it in three places: an Origin column on the orders list, a meta box on the order edit screen with origin, source type, device type and session page views, and the Analytics reports.
The source types it records are UTM parameters (source, medium, campaign, content and term), organic search, referral, and direct or type-in. Orders you create by hand in the admin have no attribution data and show as unknown. It keeps session data in sbjs_* cookies that expire with the session, and it is compatible with the WP Consent API, so a consent plugin can suppress it properly instead of you having to.
You can query it directly. On a store with High-Performance Order Storage enabled, attribution meta lives in wp_wc_orders_meta:
-- Orders grouped by attribution source type (HPOS)
SELECT meta_value AS source_type, COUNT(*) AS orders
FROM wp_wc_orders_meta
WHERE meta_key = '_wc_order_attribution_source_type'
GROUP BY meta_value
ORDER BY orders DESC;
If you are still on legacy post storage, the same meta keys sit in wp_postmeta against the shop_order posts. Either way, run that once before you shop. A store where 80% of rows come back as typein has a tracking problem that no paid dashboard will fix.
Your two revenue numbers will never match
How I judged these WooCommerce analytics plugins
These are documented behaviours, published prices and install counts, not benchmark scores. Weight them differently if your store is shaped differently:
- Whether revenue comes from orders or from a script. A tool reading your order tables cannot be blocked. A tool reading JavaScript events will always undercount, and the size of the gap depends on your audience.
- What the free tier actually includes — specifically whether ecommerce revenue and UTM campaigns are in it, because on several of these they are not.
- Licence shape and renewal price, not the headline number. Two of these advertise a 50% introductory rate you will not renew at.
- What it costs the store in performance — extra queries on every page view, a growing stats table, or a report that times out on the admin side.
- What it cannot do, stated plainly. Every tool here has a hole, and the expensive mistake is buying one whose hole is the thing you needed.
Prices and version numbers were checked on 4 October 2026 against each vendor’s own pricing page and WordPress.org listing.
WooCommerce analytics plugins compared
On a narrow screen this table stacks into one card per option rather than scrolling sideways.
| Option | Where data lives | Free tier | Paid price | Campaign attribution | Where it falls short |
|---|---|---|---|---|---|
| WooCommerce core (Analytics + Order Attribution) 11.1.2 | Your database | All of it — included in WooCommerce | $0 | Yes — source type and UTM per order, Origin column, Analytics reports | No ad spend, no cost of goods, no profit. Reports slow down on large stores. No channel-level ROAS |
| Google Analytics for WooCommerce 2.4.2 | Google’s servers | Everything — 100,000+ installs, free | $0 | Yes, through GA4’s own attribution models | Client-side tags: blocked, consented away or lost when a tab closes early. Revenue will not reconcile. Recent reviews report conflicts with consent plugins |
| MonsterInsights | Google’s servers, surfaced in wp-admin | Free plugin, no ecommerce reports | Pro $199.50/yr introductory, $399 regular, 5 sites. 14-day refund | Yes — GA4 data, nicer presentation | You are buying a view of GA4, so you inherit all of GA4’s undercounting. Ecommerce sits behind the Pro tier; confirm the plan matrix before you pay |
| Metorik | Metorik’s servers (a synced copy of your store) | None — 30-day trial, no card | From $25/mo, scaling with average monthly orders. One subscription covers several stores | Yes, plus cost and profit tracking | Recurring cost that grows with success, and your order and customer data leaves your server. Thin on pre-purchase browsing behaviour |
| Burst Statistics 3.7.2 | Your database | Yes — 200,000+ installs. Traffic, sources, goals | Creator $49/yr (1 site), Business $99/yr, Agency $199/yr unlimited. 14-day trial + 30-day guarantee | UTM tracking from the $49 Creator tier | Two paywalls, not one: UTM campaigns start at $49, but revenue and WooCommerce funnel reporting need the $99 Business plan |
| Independent Analytics 2.15.5 | Your database, cookie-free | Yes — 100,000+ installs. Views, referrers, geo, devices | Pro $49/yr or $147 lifetime (1 site), $79/yr (3 sites), $199/yr unlimited. 30-day guarantee | UTM campaigns and WooCommerce revenue, both in Pro | General site analytics with ecommerce added, not an ecommerce tool. No cohorts, no profit, no forecasting |
| UTM Manager 2.0.4 | Your database | Yes — free, 100+ installs | $0 | First-touch and last-touch UTM per visitor, with CSV export | 100+ installs and one review is a very small track record. It captures attribution; it is not a reporting suite |
Google Analytics for WooCommerce: free, and the softest numbers here
This is the official plugin, version 2.4.2, with 100,000+ active installs, and it is the right first move if you run ads. It wires GA4 into your store and fires the standard ecommerce events, which is what Google Ads needs in order to attribute a conversion back to a click. If you are optimising campaigns, you need this data to exist somewhere.
Treat the revenue figure as a channel comparison, not as money. Everything it reports is a browser-side event: a visitor with an ad blocker never fires one, a visitor who declines consent on an opt-in site never fires one — version 2.4.2 now sends an explicit denied state for undecided visitors there — and a customer who pays and closes the tab before the order-received page renders never fires one either.
Weakness worth naming: the recent review history on WordPress.org is rough, with several reports of the plugin conflicting with consent management plugins and tracking breaking after an update. Install it, then verify in GA4 realtime that a test purchase produces exactly one purchase event with the total you expect, and check again after every update. If you also run a tag through Google Tag Manager, you will double-count purchases — pick one.
MonsterInsights: a better view of the same GA4 data
MonsterInsights puts GA4 reports inside wp-admin so you never open the Google Analytics interface. For a store owner who finds GA4’s navigation hostile, that convenience is real and worth something.
Ecommerce tracking sits in the Pro tier: $199.50 for the first year against a $399 regular price, covering 5 sites, with a 14-day refund window. The Plus plan at $99.50 introductory, $199 regular, is one site and does not include ecommerce reports. The pricing page describes the current rates as a 50% introductory discount, so budget for the regular figure at renewal and confirm the plan matrix yourself before paying — vendors move features between tiers.
Weakness worth naming: it reads from GA4, so it inherits every undercount described above. You are paying $199.50 for presentation, not for accuracy. If your actual complaint is “my revenue numbers are wrong,” this will not fix it; if your complaint is “I never log into GA4,” it will.
Metorik: the only paid option that reports on your real orders
Metorik syncs your store and reports from the order data itself, which puts it in a different category from everything built on GA4. Its reports include cost and profit tracking, forecasts, segment exports, subscription reporting, and email automation including abandoned cart emails — which means it can replace a plugin you may already be paying for, and that belongs in the comparison.
Pricing starts at $25 a month and scales with your average monthly orders, with one subscription covering several stores and a 30-day trial that does not ask for a card. Because it reports from orders, a refund shows up as a refund and your revenue line matches your payment gateway settlements once you have accounted for fees.
Weaknesses worth naming: there is no free tier, the bill grows exactly as your store grows, and a copy of your order and customer data lives on someone else’s infrastructure — write that into your privacy policy before you start the trial, and check it against whatever your jurisdiction expects of you. It is also thinner than GA4 on what visitors did before they bought, because it is working from orders rather than from page views.
Burst and Independent Analytics: keep the data on your own server
Both are first-party analytics plugins that store page views in your WordPress database instead of shipping them to Google, which makes them harder to block and simpler to explain in a privacy policy. Both are genuinely popular — Burst Statistics 3.7.2 has 200,000+ active installs, Independent Analytics 2.15.5 has 100,000+ — and both have real free tiers.
Read their paywalls carefully, because they are drawn in different places. Burst puts UTM and campaign tracking in the $49 Creator plan but holds revenue tracking and WooCommerce funnel analytics for the $99 Business plan, so a store that wants both is on the second tier. Independent Analytics puts UTM campaigns and WooCommerce sales tracking together in Pro: $49 a year or $147 once for a single site, $79 for three, $199 for unlimited, with a 30-day money-back guarantee and no trial.
Weakness worth naming for both: a stats table in your own database is a table that grows, and on shared hosting a busy store will feel it. Check how your plan handles the extra writes before you commit — the same PHP workers and RAM that serve your checkout are serving these inserts. Neither tool does cohorts, profit or forecasting; they answer “where did my traffic come from,” not “is this campaign making money.”
Fix attribution before you buy a dashboard
A dashboard built on broken attribution is an expensive way to be confidently wrong. Three things break it, in order of how often I see them.
Full-page caching serves a stale session
Attribution that depends on PHP rendering a value into the page will be cached along with the page, so every visitor gets the first visitor’s source. Anything that tracks reliably behind a cache does it with a JavaScript beacon fired after load, or from a nonced REST request. If your attribution column is mostly typein, check your cache first — the same trap covered in WooCommerce caching plugins and what breaks.
Your own links have no UTM parameters
Core attribution can only classify what arrives. An email campaign linking to https://example.com/shop/ is indistinguishable from a bookmark; the same link as https://example.com/shop/?utm_source=newsletter&utm_medium=email&utm_campaign=october-sale is a row you can act on. Fix your links before you blame your tooling.
If you want first-touch and last-touch per visitor rather than only the order’s source — useful when a buyer finds you through an ad in September and buys in October — core does not store both. UTM Manager is a free plugin that does, with a lead table and CSV export, and it uses a non-blocking beacon so it survives full-page caching. Disclosure: I build and maintain that plugin, so judge it by the same criteria as everything else here. By those criteria its weakness is obvious: 100+ active installs and a single review is almost no track record, so you would be an early adopter rather than the thousandth person to hit a given bug. If you want campaign attribution with far more stores behind it, Burst Statistics’ Creator plan at $49 a year does campaign tracking with 200,000+ installs of history, and plain GA4 remains free.
Nobody ever reads the data
The cheapest useful report is one you can run today against orders you already have. Drop this in wp-content/mu-plugins/ and run it with wp eval-file:
<?php
// wp-content/mu-plugins/wpf-attribution-report.php
// Revenue by attribution source for the last 30 days.
$orders = wc_get_orders( [
'limit' => -1,
'status' => [ 'processing', 'completed' ],
'date_created' => '>' . gmdate( 'Y-m-d', strtotime( '-30 days' ) ),
] );
$rows = [];
foreach ( $orders as $order ) {
$type = $order->get_meta( '_wc_order_attribution_source_type' ) ?: 'unknown';
$source = $order->get_meta( '_wc_order_attribution_utm_source' ) ?: '(none)';
$key = $type . ' / ' . $source;
if ( ! isset( $rows[ $key ] ) ) {
$rows[ $key ] = [ 'orders' => 0, 'revenue' => 0.0 ];
}
++$rows[ $key ]['orders'];
$rows[ $key ]['revenue'] += (float) $order->get_total();
}
uasort( $rows, static fn( $a, $b ) => $b['revenue'] <=> $a['revenue'] );
foreach ( $rows as $key => $row ) {
printf(
"%-34s %4d orders %s\n",
$key,
$row['orders'],
number_format( $row['revenue'], 2 )
);
}
On a store with tens of thousands of orders, 'limit' => -1 will exhaust memory — narrow the date range or page through in batches of 500. If it dies anyway, the memory exhausted error is the symptom to expect.
Five reasons your numbers disagree
- Tax-inclusive pricing. If your prices include tax, a purchase event can report the gross figure while your Analytics revenue reports net, and the two drift apart by exactly your tax rate. Worth checking against how your sales tax setup calculates totals.
- Refunds and cancellations. WooCommerce adjusts the order. A purchase event fired last Tuesday stays fired forever.
- Shipping and fees. Some integrations include shipping in event revenue and some do not. Decide which you want and verify it with one test order.
- Attribution windows. GA4 credits a channel using its own lookback model; WooCommerce stores the last source it saw before checkout. These answer different questions and will disagree even when both are working.
- Timezone. Your GA4 property and your WordPress install can sit in different timezones, which shifts every daily total and makes month boundaries wrong.
One more that catches stores late: WooCommerce Analytics reports run aggregate queries over your order tables, and on a large store they will make wp-admin crawl. If your reports are the slowest page on the site, that is the lookup table rebuild, not your theme — diagnosing a slow admin dashboard covers how to confirm it.
Which one should you pick?
- Under about 200 orders a month, no paid ads: core Analytics plus Order Attribution, and add UTM parameters to your own links. Spend nothing.
- Running Google or Meta ads: Google Analytics for WooCommerce, free, because the ad platforms need those events. Keep WooCommerce as your revenue truth.
- You want profit, not traffic: Metorik from $25/mo. It is the only option here that reports cost and profit against real orders.
- Privacy is the constraint, or Google is blocked for you: Burst Business at $99/yr for revenue plus funnels, or Independent Analytics Pro at $49/yr if UTM and sales totals are enough.
- You hate GA4’s interface and that is the whole problem: MonsterInsights Pro. Just know you are buying a window, not better data.
Whatever you install, place one test order and reconcile it by hand in all three places: the order screen, the plugin’s report, and your payment gateway. Every analytics decision I have seen go wrong went wrong because nobody did that once.
Frequently asked questions
Do I need an analytics plugin if WooCommerce has Analytics built in?
Not for revenue, orders, products or coupons — core covers those from your own database and the figures are more trustworthy than anything script-based. You need something extra when you want ad spend compared against revenue, profit after cost of goods, cohort or repeat-purchase behaviour, or detail on what visitors did before they bought.
Why do most of my orders show as direct or type-in?
Usually one of three things: your own campaign links carry no UTM parameters, a page cache is serving one visitor’s session data to everyone, or a consent plugin is blocking the attribution cookies before they are set. Check in that order. Genuinely direct traffic exists, but it is rarely the majority on a store that advertises.
Will an analytics plugin slow my store down?
A script-based tool adds a third-party request that affects your Core Web Vitals but not your server. A first-party tool writes a database row on every page view, which costs your server instead of the visitor’s browser. Neither is free, and on a busy store the self-hosted option is the one more likely to show up in your hosting metrics.
Can I use GA4 and a first-party plugin at the same time?
Yes, and plenty of stores do — GA4 for the ad platforms, a first-party tool for traffic you would otherwise never see because it was blocked. The rule is one tool per question. Two tools reporting the same metric differently is how teams end up arguing about numbers instead of acting on them.
Does order attribution work with a consent banner?
WooCommerce’s order attribution is compatible with the WP Consent API, so a consent plugin that implements that standard can suppress and restore it cleanly. If your consent tool does not support the API and blocks scripts by handle instead, test a purchase with consent denied and then with it granted, and look at the Origin column for both.

Leave a Reply to This Post