Marketing attribution

How to see which channels bring the most WooCommerce orders

To see which channels bring the most WooCommerce orders, use order attribution. Each order's channel shows in the Origin column under WooCommerce › Orders, but core Analytics doesn't total it. For totals, export orders with their attribution meta and pivot them, run a SQL query, add WooCommerce's attribution extension, or ask a tool that groups orders by channel.

This guide shows each method, which grouping to use (source type, source, medium or campaign), and how to read the result without overreacting to it. For background on how WooCommerce decides the channel, start with WooCommerce order attribution, explained.

The free way: the Origin column, one order at a time

  1. In WordPress admin, go to WooCommerce › Orders.
  2. Find the Origin column. If it isn't there, open Screen Options at the top right and tick it.
  3. Each order shows a label such as Direct, Organic: Google, Referral: Facebook.com or Source: newsletter.
  4. Open an order to see the full Order attribution box: source type, UTM source, medium and campaign, device type and session page views.

This is fine for spotting a pattern over a few dozen orders. It isn't a report: there's no total at the bottom, and core WooCommerce doesn't give you a channel breakdown under Analytics.

Which grouping should you use?

WooCommerce saves several attribution fields on each order. They answer different questions, so pick the one that matches yours.

Group by Meta key Answers Example values
Source type _wc_order_attribution_source_type Which kind of traffic sells? utm, organic, referral, typein, admin
Source _wc_order_attribution_utm_source Which specific source sells? google, newsletter, facebook.com
Medium _wc_order_attribution_utm_medium Email vs paid vs social? email, cpc, organic, referral
Campaign _wc_order_attribution_utm_campaign Which campaign sold most? black-friday, spring-launch
Device _wc_order_attribution_device_type Phone or computer? Mobile, Tablet, Desktop

Start with source type for the big picture. Then drill into source to see which search engine, site or tagged source sits behind each type. Medium and campaign are only filled in for links you tagged, which is why they're covered in how to track UTM campaigns. The meaning of each source type is in the glossary.

Getting channel totals: three ways

1. Export and pivot in a spreadsheet

Core WooCommerce's exports don't give you a channel total, so you need an order export plugin that can include custom order meta. Then:

  1. Export orders for your date range, including the _wc_order_attribution_source_type and _wc_order_attribution_utm_source fields and the order total.
  2. Filter out statuses you don't count as sales (failed, cancelled, pending payment).
  3. Build a pivot table: rows by source type, values as count of orders and sum of totals.

Watch what "total" means in your export. Order totals usually include tax and shipping, while WooCommerce Analytics reports net sales (after coupons and refunds, before tax and shipping). Pick one and stay with it.

2. SQL against the Analytics tables

For developers. wc_order_stats is the Analytics order table, so this gives net sales the way Analytics defines them. On an HPOS store the meta is in wp_wc_orders_meta:

SELECT COALESCE(NULLIF(m.meta_value, ''), '(none)') AS source,
       COUNT(*) AS orders,
       ROUND(SUM(s.net_total), 2) AS net_sales
FROM wp_wc_order_stats s
LEFT JOIN wp_wc_orders_meta m
  ON m.order_id = s.order_id
 AND m.meta_key = '_wc_order_attribution_utm_source'
WHERE s.parent_id = 0
  AND s.date_created >= '2026-10-01' AND s.date_created < '2026-11-01'
  AND s.status NOT IN ('wc-pending', 'wc-failed', 'wc-cancelled', 'wc-refunded', 'wc-checkout-draft')
GROUP BY source
ORDER BY orders DESC;

On posts storage, join wp_postmeta m ON m.post_id = s.order_id instead. Change wp_ if your prefix differs, and match the status list to your excluded statuses under Analytics › Settings. Refund rows are left out (parent_id = 0), so these are net sales before refunds. Swap the meta key to group by source type, medium, campaign or device.

3. WooCommerce's free attribution extension

Core Analytics has no attribution report, but WooCommerce offers a separate free extension, also named WooCommerce Analytics, with five Order Attribution reports: Orders by Channel, by Source, by Campaign, by Device, and by Channel and Source. It's in early access, and you add it from My subscriptions on WooCommerce.com. Caveats: attribution tracking must be on, it only covers orders placed after WooCommerce 8.5 (or after tracking was enabled), your site connects to WordPress.com so the data syncs there, and it works with single-currency stores only.

How to read a channel report

A table of channels is easy to misread. Before you move budget around, check these:

  • Unknown and (none) rows. Orders with no attribution data have to go somewhere. If that row is more than a small slice, the other channels are understated. Why attribution says Unknown lists the causes.
  • Direct is a catch-all. It includes typed visits and bookmarks, but also many clicks from apps and email clients that don't pass a referrer. A big Direct share usually means untagged links, not a loyal audience.
  • Last click only. The channel that closed the sale gets all the credit. Social and content that introduced the customer get none if they came back through Google. See last-click attribution.
  • Orders and revenue rank differently. A channel with fewer but larger orders can bring in more. Look at net sales per order alongside the count.
  • Compare periods. One month's split tells you what happened. The change against last month, or the same month last year, tells you what's moving. Comparing two date ranges covers which comparison to use.

The quick way: ask Askshelf

Askshelf adds Analytics › Askshelf to WordPress admin. Its "orders by channel" lookup groups orders and net sales by source type, UTM source, UTM medium, UTM campaign or device type for any date range, and can compare with an earlier period. It counts the same statuses as your Analytics settings, and refunds come off on the refund date, as in Analytics.

Askshelfexample answer

Which sources brought the most orders last month, compared with the month before?

google led with 96 orders and $5,720 in net sales, up 9%. newsletter came second with 41 orders ($3,050), up 64% after the October send. facebook.com brought 23 orders ($1,180), down 18%. 7 orders had no attribution data and are shown as (none).Orders by channel, grouped by UTM source, 1–31 October, compared with the previous period
An example on a demo store. In your store, the numbers come from your own orders.

Grouping by source shows whatever WooCommerce saved in the source field: the utm_source value for tagged links, the search engine for organic visits, and the referring site's host name for referrals. Askshelf doesn't group by the full referring URL and doesn't calculate profit or ad return per channel. See the order attribution use case for more questions it handles.

What to do with the totals

  • Shrink Direct first. Tag your email, social and influencer links so next month's report shows where those orders really came from.
  • Back the channels that bring repeat buyers, not only volume. The customer analytics guide covers how to look at new and returning customers.
  • Check order value by channel. If one channel's average order is far lower, it may be pulling in discount hunters.
  • Recheck after big changes. A new consent banner, firewall or checkout plugin can quietly break tracking. A sudden jump in Unknown is the sign.

Common questions

Does WooCommerce Analytics have an orders by channel report?

Core Analytics doesn't. The Origin column under WooCommerce › Orders shows each order's channel, but nothing in Analytics adds them up. WooCommerce's separate free extension, also called WooCommerce Analytics, adds five attribution reports, or you can export, query or ask a tool that reads attribution.

What counts as a channel in WooCommerce?

WooCommerce saves a source type on each order (UTM-tagged, organic, referral, direct, web admin and a few others) plus a source name and, for tagged links, a medium and campaign. A channel report can group by any of these.

Why is my Direct channel so large?

Direct collects every visit with no referrer and no UTM tags, which includes many clicks from apps and email clients, not only people typing your address. Tagging your links moves those orders into the right channel.

See how Askshelf handles this: Order attribution reports for WooCommerce