MerchantFlowMerchantFlow Docs
Profit & Loss

Order Tracking & Attribution

Track orders, refunds, fulfillment costs, and UTM attribution data in MerchantFlow. View order-level profitability for Shopify and WooCommerce stores.

Order Tracking

Order tracking in MerchantFlow syncs every order from your Shopify or WooCommerce store and provides detailed visibility into revenue, refunds, fulfillment costs, and marketing attribution at the individual order level. This data feeds directly into your P&L calculations for accurate profit reporting.

What Data Gets Tracked Per Order

Each order in MerchantFlow includes:

  • Subtotal - order amount before shipping and tax (already net of discounts)
  • Shipping charged, Tax, and Discount amount
  • Refund Amount - any refunded amount for the order, plus the refund date
  • Order Date - when the order was placed. This is the date every P&L and COGS lookup keys off
  • Payment Status - paid, completed, processing, partially_refunded, refunded, or pending. Everything except pending counts toward revenue; cancelled orders are excluded entirely
  • Payment Fee - the processor fee reported by your platform
  • Fulfillment Cost - merchant-side cost to ship the order, plus its source (carrier-reported vs derived)
  • Total COGS and per-line costs, once cost data resolves
  • Destination country and region - stored as ISO codes and used for tax rules and per-country margin

UTM Attribution Data

MerchantFlow stores marketing attribution data per order:

  • UTM Source - where the customer came from (e.g., google, facebook, newsletter)
  • UTM Medium - the marketing medium (e.g., cpc, email, social)
  • Referrer - the referring URL

This data connects your orders back to the marketing channels that generated them. See UTM Tracking for setup instructions.

How to Access Orders

Orders Dashboard

Navigate to Orders in the main navigation to view your complete order list.

Dashboard shows:

  • Total orders for the selected period
  • The orders table, showing the columns you choose (see below)
  • Filtering by date range, status, fulfilment and order type
  • Search by order ID or customer

The orders table

On desktop the table scrolls inside its own frame rather than with the page. The column headings stay pinned at the top while you scroll down through the rows, and the Order Details column stays pinned on the left while you scroll across the money columns, so you always know which order and which column you are looking at. A short list simply takes its natural height.

Orders load 50 per page by default, switchable to 25 or 100 with the selector below the table. A "Showing X to Y of Z orders" line and the page controls sit below the table, outside the scrolling area. Changing page or sort order returns the table to the top. On a phone the table is replaced by a card per order showing the first few of your chosen columns.

Choosing your columns

Click Columns above the table to open the Edit columns dialog. Drag a column by its handle to reorder it and use the toggle to show or hide it, then Save. Reset to defaults restores the standard layout. Your layout is saved to your account, and the CSV export follows whatever columns you picked.

Order Details is different: it shows a lock in place of the drag handle, labelled Always shown as the first column. It cannot be hidden or moved, and no other column can be dropped above it -- it is the column the table pins on the left.

A column that is switched on but does not apply to your current view shows the note "Hidden right now because of your current view" in the dialog. Today that is Source on workspaces that use blended costs, where per-order attribution is not available.

ColumnOn by defaultSortable
Order DetailsYes (always)No
DateNoYes
SourceYesNo
Sales ChannelNoNo
ItemsYesNo
Product RevenueYesYes
RefundedNoNo
DiscountNoNo
TaxNoNo
COGSYesYes
Ad SpendYesYes
Shipping Charged to CustomerYesNo
Shipping & fulfilmentYesYes
Shipping ShortfallNoYes
Payment FeeNoNo
OverheadNoNo
Contribution ProfitNoNo
Net ProfitYesYes
Net MarginYesYes
StatusYesNo
FulfilmentNoNo
Payment MethodNoNo
CountryNoNo
TagsNoNo
ReferenceNoNo

Revenue and shipping columns

Three columns separate money that is easy to mix up:

  • Product Revenue is what the customer paid for the products -- the order subtotal, without shipping.
  • Shipping Charged to Customer is the shipping the customer paid you.
  • Shipping & fulfilment is what shipping and pick/pack cost you. With a 3PL connected it reads Shipping & 3PL fulfilment.

The two shipping columns sit side by side in the standard layout so you can compare them at a glance. If you saved your own layout before they moved, your layout is kept as it is -- use Reset to defaults in Columns to pick up the new arrangement.

Shipping Shortfall (off by default) shows how much more shipping cost you than the customer paid for it: shipping and fulfilment cost minus shipping charged, and never below zero. It shows - rather than $0 when the order has no fulfilment cost recorded yet, because "no shortfall" and "not known yet" are different answers. To track it over time, pin Avg. Shipping Shortfall / Order on your dashboard: the average of this column across online orders.

Sorting

Eight columns sort: Date, Product Revenue, COGS, Ad Spend, Shipping & fulfilment, Shipping Shortfall, Net Profit and Net Margin. Orders with no fulfilment cost or no shipping shortfall recorded always sort last. Click a header to sort descending (largest or newest first); click it again to flip to ascending. An arrow marks the active column. Sorting runs on the server across every order that matches your filters, so page 1 really is the top of the list. Until you choose a sort, orders are listed newest first.

Cost Alerts

Cost Alerts flag orders whose costs are out of line, so you can find them in a long list. Click Cost Alerts next to Columns and set either or both limits, in your store currency:

LimitFlags
Maximum ad spend per orderOnline orders whose allocated advertising spend is above the limit
Maximum shipping shortfallOrders whose Shipping Shortfall is above the limit

Leave a field empty for no limit, and use Clear limits to switch both off. An order exactly at a limit is not flagged, a wholesale (B2B) order is never flagged for ad spend because it carries none, and an order with no fulfilment cost recorded cannot be over the shipping limit. The limits apply to everyone in your store; owners, admins and analysts can change them, and other roles see them read-only.

A flagged figure gets a rose highlight with a warning icon -- hover it for the reason, for example "Allocated ad spend is $42.20, above your $35.00 limit." The shipping flag sits on the Shipping Shortfall cell, or on Shipping & fulfilment when the shortfall column is hidden.

The Cost Alerts filter above the table narrows the list to Any alert, Ad spend over limit or Shipping over limit. It filters every page and the totals above the table, not just the orders on screen. An option stays greyed out until its limit is set.

Row actions

Click the ⋮ button at the end of a row:

  • View Order Details -- open the order
  • Copy Order ID -- copy the order number to your clipboard
  • Print Invoice -- open a printable invoice in a new tab
  • Mark as Shipped -- record the tracking details
  • Adjust order -- correct details your store cannot report: the sales channel (online or B2B), the real fulfilment cost, and a COGS override (Pro and Plus plans; not offered on manual orders)
  • Edit order and Delete order -- manual orders only
  • Issue Refund -- record a refund against the order

The menu opens below the button, or above it when there is no room below, and is never cut off by the table. Press Esc or click elsewhere to close it. Clicking anywhere else on the row opens the order.

Order type: online and B2B

The Order type filter above the table narrows the list to All, Online or B2B, and B2B rows carry a copper B2B badge. A synced order arrives as online; it becomes B2B either because you flipped it with Adjust order, because you entered it by hand as a manual order, or because automatic wholesale detection classified it.

The distinction is not cosmetic. A B2B order is excluded from ad-spend allocation on both sides, and from ROAS, MER, CPA and CAC everywhere they appear -- see Sales Channels for the full rule and for the matching split on the P&L page.

Individual Order Details

Click any order to view its full details:

  • Order summary (subtotal, tax, shipping, total)
  • Payment status and history
  • Fulfillment cost and status
  • Line items with product and variant mapping
  • Refund status (refunded or partially refunded)
  • Attribution (traffic source, ad platform and campaign, acquisition cost)

How Order Syncing Works

MerchantFlow syncs orders from your connected e-commerce platform:

  • Shopify - orders synced via the Shopify integration
  • WooCommerce - orders synced via the WooCommerce REST API

The sync pulls all order data including line items, payment status, fulfillment details, and any associated refunds.

Line Items

Each order includes detailed line items:

  • Product name and SKU
  • Variant (size, color, etc.)
  • Quantity ordered
  • Price per unit
  • Product mapping to your MerchantFlow product catalog

Line item data enables product-level profitability analysis and COGS matching.

How Refunds Are Handled

MerchantFlow tracks refunds at the order level:

  • Full refunds - entire order amount refunded
  • Partial refunds - portion of order refunded
  • Refund amount - exact dollar amount returned to customer

Refunds are factored into P&L calculations automatically: the refund amount is subtracted from gross revenue to produce net revenue, and refunded orders still count as orders. Refunds on an order placed in an earlier period are recognised in the period they were refunded, so they never go missing.

Two settings shape the detail:

  • Refund Cost Recognition decides whether a refunded order's costs sit on the sale date (default) or the refund date.
  • A refunded order that was never fulfilled has its COGS excluded entirely - the goods never left inventory. This is binary per order, so a partially refunded unfulfilled order drops all of its COGS. Under the percentage fulfillment method, refunded orders are also skipped; under per-product rates and 3PL data they keep their fulfillment cost, because you paid to ship regardless.

Viewing refunds:

  1. Go to Orders
  2. Filter by payment status to find refunded orders
  3. Click an order to see refund details and amounts

How Attribution and Source Tracking Work

Each order can carry attribution data showing how the customer found your store:

  • Source - the origin (google, facebook, email, direct)
  • Medium - the channel type (cpc, organic, social, referral)
  • Referrer - the specific URL that sent the customer

Using Attribution Data for Decision-Making

Attribution helps you understand:

  • Which marketing channels generate the most orders
  • Which channels have the highest average order values
  • Where refund rates are highest by source
  • Which campaigns drive the most profitable customers

Example analysis:

  • Orders from Meta Ads: 500 orders, $45 average, 3% refund rate
  • Orders from Google Ads: 300 orders, $62 average, 2% refund rate
  • Orders from Email: 200 orders, $55 average, 1% refund rate

This data helps you allocate marketing budget more effectively.

How Orders Feed Into P&L

Order data feeds directly into your Profit & Loss calculations:

  • Gross revenue - order subtotal plus shipping charged, plus tax for tax-exclusive stores (tax-inclusive stores already have it inside the subtotal)
  • Refunds - subtracted from gross revenue to get net revenue
  • Payment fees and fulfillment cost - deducted at the contribution margin line
  • Product COGS - matched via line item product mapping, resolved against the order's own date

Note: Orders placed in a currency other than your store currency are excluded from the P&L entirely - both revenue and costs. They are not converted. If part of your volume sells in another currency, your P&L understates total volume by that share.

Navigate to Profit > Summary to see how orders contribute to your overall profitability.

Best Practices for Order Tracking

1. Monitor Refund Rates

Track refund rates by product and by source. High refund rates on specific products may indicate quality or description issues.

2. Use Attribution Data

Review attribution data regularly to understand which marketing channels drive the most profitable orders, not just the most orders.

3. Check Fulfillment Costs

Keep an eye on fulfillment costs per order. Rising fulfillment costs can silently erode margins.

4. Verify Sync Completeness

Periodically compare order counts in MerchantFlow with your e-commerce platform to ensure all orders are syncing correctly.

Troubleshooting Order Issues

Orders not appearing

Possible causes:

  • E-commerce integration not connected
  • Initial sync still in progress
  • Date range filter excluding recent orders

Solutions:

  1. Verify integration status at Settings > Integrations
  2. Wait for sync to complete
  3. Adjust the date range filter

Order totals do not match platform

Possible causes:

  • Sync timing difference
  • Currency conversion
  • Tax or shipping inclusion differences

Solutions:

  1. Wait for the next sync cycle
  2. Verify currency settings
  3. Check whether totals include or exclude tax/shipping in both systems

Missing attribution data

Possible causes:

  • UTM parameters not set on marketing links
  • Customer visited directly (no referrer)
  • Attribution data not passed by the e-commerce platform

Solutions:

  1. Ensure all marketing campaigns use proper UTM parameters
  2. Direct visits will naturally have no attribution data
  3. Check that your e-commerce platform captures and passes UTM data

Frequently Asked Questions

How often do orders sync in MerchantFlow?

Orders sync as part of the regular background sync cycle, approximately every 30 minutes for active workspaces. You can also trigger a manual sync for immediate updates.

Does MerchantFlow track individual customer data?

Yes. To power cohorts, LTV, new-vs-returning splits, per-country margin, and tax rule matching, MerchantFlow stores customer name, email, phone, the platform customer ID, and the shipping address from each synced order. Personal fields are encrypted at rest, and the destination country and region are stored separately as non-PII ISO codes for tax and regional reporting. See the Customers section for what is surfaced in the product, and the Privacy Policy for retention and deletion.

How are partial refunds reflected in profit calculations?

Partial refunds reduce the order revenue by the refunded amount. If the order was fulfilled, its COGS and other costs stay with it, giving an accurate post-refund profit. If it was never fulfilled, the whole order's COGS is excluded - even for a partial refund - because the goods stayed in inventory.

Can I export order data from MerchantFlow?

Yes. Navigate to Orders, apply any desired filters, and use the export function to download order data as CSV for external analysis. The file contains the columns you have chosen for the table, in the order you arranged them.

Can I choose which columns the Orders table shows?

Yes. Click Columns above the table, toggle columns on or off, drag them into the order you want, and Save. The layout is saved to your account, so it follows you between devices.

Why can't I move the Order Details column?

It is locked as the first column so the order number stays pinned on the left while you scroll across the money columns. Every other column can be reordered around it.


Last updated: October 1, 2026

Last updated on

On this page