TL;DR
In the Magento admin, Edit cancels the order and creates a replacement with the same number plus -1 [2] [7]. On PRO the extension sends admin-created orders to GA4 server-side [1], so the replacement arrives as a new purchase, and GA4 only merges purchases that share a transaction ID [5]. The cancel reaches no destination, and the original can't be credited because it was never invoiced. Audit the grid, prevent the next edit, then clean the reports.
Key Takeaways
- In Sales > Orders, filter Status to Canceled and read the Sent to Measurement Protocol column: a sent original with "Link to the New Order" on its view page is a double count [1] [7].
- Edit exists only on Pending orders with no invoice [3], so stores that capture payment at checkout never see this; offline payment methods and phone orders do.
- Change a billing or shipping address with Save, which keeps the same order [2]; only item, quantity and shipping changes need Submit Order.
- Exclude Orders By Status prevents it only with both Pending and Canceled excluded; Pending alone lets the cron send the canceled original [1].
- A credit memo needs an invoice [4], so no Magento action produces a GA4 refund for an edited original.
- In a GA4 Free form exploration, filter Transaction ID for a hyphen, group the rows by base number and subtract every canceled number in each chain.
Start in the order grid: canceled orders marked as sent
You've probably had a customer call to swap a size on a bank-transfer order the week of a sale, and that call is where this starts. The order grid shows how often it happened, before you open any GA4 report.
Open Sales > Orders in the admin and set up the grid like this:
- Filter Status to Canceled.
- Add the Sent to Measurement Protocol column if it isn't showing. It marks orders the extension sent through the Measurement Protocol (v1.15.5, July 29, 2025), and since v1.16.0 (January 7, 2026) you can filter on it [1].
- Filter that column to the orders it marks as sent.
- Open a few. An edited original carries "Link to the New Order" on its view page, and the replacement carries "Link to the Previous Order" [7].
Our guide to verifying GA4 events with DebugView and the order grid uses this column to find orders that were never sent. Here you're looking for canceled orders that were sent, because GA4 holds them as revenue.
Not every canceled order in that filtered list is an edit. A plain cancellation of a sent order is also still in GA4, which is a separate problem. The ones with a linked new order have a twin, and the twin's number tells you which is which. Magento keeps the original number and adds -1, and a second edit of the same order produces -2 of the same base [7]. (Magento never writes -1-1.)
Count the canceled edits for last month. Their GA4 revenue, worked out in the last section, is what your purchase total is overstated by.
What does Magento 2 Edit Order actually do?
Adobe's merchant documentation says "If you modify substantial parts of an order, the original order is canceled and a new order is generated" [2]. The admin says the same thing before you commit. Click Edit on an order and Magento asks: "Are you sure? This order will be canceled and a new one will be created instead." [7]
You change the items, quantities or shipping method, click Submit Order, and Magento places the replacement, then cancels the original through its normal cancel action [2] [7].
The button only appears on some orders. Adobe says "Orders can be edited only while in Pending status", up until payment is received and an invoice is generated [3]. In Magento Open Source 2.4.9, Edit is offered only on an order that has no invoice and whose payment method allows editing [7]. Adobe also notes that with Authorize and Capture, an invoice is created when the customer places the order [2], so card orders captured at checkout can't be edited at all.
That leaves orders that sit in Pending without an invoice: check, bank transfer, cash on delivery and similar offline methods (Adobe says offline methods aren't invoiced automatically [3]), and orders staff create in the admin before they invoice them.
Adobe also says you "can, however, change the billing or shipping address without generating a new order", and that address changes are saved with Save, while line-item changes go through Submit Order [2].
Where the original and the -1 order each landed
The two orders take different paths out of Magento. The original was usually placed on the storefront, so it reached the browser tags on the success page and the server. The replacement is created in the admin, where no shopper's browser loads a success page. Since v1.12.5 (July 5, 2023), "When an order is created via the Admin Panel, the extension now triggers a server-side Purchase event with all the order details - PRO version only." [1]
| Destination | The original | The -1 replacement | The cancel |
|---|---|---|---|
| GA4 on PRO | One purchase | A second purchase, its own transaction ID | Nothing sent |
| GA4 on Standard | One purchase, from the success page | Not sent (admin orders aren't) | Nothing sent |
| Server-side addons | One purchase event (Placed Order on Klaviyo) | A second purchase event | Nothing sent |
| Browser pixels and the container's Google Ads tag | Fired on the success page | Never fired | Nothing sent |
| Google Ads, if you import GA4 purchases | Whatever GA4 credited | Can arrive with the GA4 import | Nothing sent |
The tier difference behind the Standard row is in our GA4 Standard vs PRO comparison.
For the last row, GA4 key events imported into Google Ads are the server-side route to Google Ads on this extension, one of the two routes compared in which route to send Google Ads conversions through. Whether Google Ads credits the replacement to an ad is Google's attribution call.
The replacement is placed from a staff member's admin session, so it carries none of the shopper's browser session. Expect it under a different source than the original, and see why GA4 purchases land as Unassigned if those orders pile up there.
With Require Visitor Consent for Server-Side Events switched on (it's disabled by default; added in v1.17.4, September 1, 2026), the GA4 Measurement Protocol and every Conversions API addon follow the shopper's Consent Mode v2 choice [1]; the server-side consent guide explains how it decides.
Why can't anything in Magento take the original back?
GA4 won't merge the two. Google's rule is that "Google Analytics deduplicates purchase events with the same transaction ID" [5], and the extension sends the order number as the transaction ID, so 100000123 and 100000123-1 are two transactions.
The only Magento action the extension reports to GA4 as a refund is a credit memo, sent through the Measurement Protocol on PRO; our refund tracking guide for credit memos covers that path. A credit memo needs an invoice first: Adobe's credit memo page says that with the Authorize payment action "you must generate an invoice before creating a credit memo" [4]. An order you could still edit had no invoice, by definition, so there's nothing to credit.
The cancel itself is just a status change from Pending to Canceled [2]. A cancel isn't a refund, and nothing the extension or its addons send describes it.
Stop the next one before it reaches GA4
Train whoever answers the phone to fix a wrong street or ZIP code with the address Save, and to use the order's Edit button only when items, quantities or the shipping method change.
A setting can also help, but only on a store whose editable orders are offline-payment orders you invoice when the money arrives. In the extension's General Configuration, Exclude Orders By Status [ Yes / No ] lets you pick statuses "for which a purchase event will not be sent", and the guide's own examples include Pending and Canceled [1]. Since v1.14.13 (February 17, 2025) the same exclusion holds back the server-side addons, and "a cron that picks up unsent orders and sends them if they move into a status that is not excluded" [1].
| Excluded statuses | What happens on an edit |
|---|---|
| Pending only | The original is held, the edit moves it to Canceled, Canceled isn't excluded, and the cron sends it; the replacement follows once you invoice it |
| Pending and Canceled | The original never reaches GA4 or the addons; the replacement is held until you invoice it, then sent once |
Excluding Pending alone doesn't help the edit case: the original still reaches GA4, only later. With both statuses excluded, every offline-payment order reaches GA4 and the addons on the day you invoice it, so same-day revenue reads low and the purchase may land on a later day than the order. That timing gap is worked through in why GA4 and Magento sales reports don't match. Exclusion is a PRO setting [1].
No setting recalls an order that was already sent. Before you rely on the exclusion, test it:
- Place one order with an offline payment method.
- In the grid, confirm the Sent to Measurement Protocol column doesn't mark it.
- Invoice it, then check the column again after the cron has run. It should now be marked, and the purchase should appear in GA4 under that order number.
How do you subtract the originals already in GA4?
GA4 keeps both purchases, so the cleanup happens in reporting. In GA4, open Explore > Free form and build it like this:
- Dimension: Transaction ID. Metrics: Ecommerce purchases and Purchase revenue.
- Filter Transaction ID to rows that contain a hyphen. If your store's own order numbers already contain one, filter on the ending pattern instead (
-1,-2). - Group the rows by base number. In each chain, every number below the highest (the base, and the -1 when a -2 exists) is a canceled original that was sent; their Purchase revenue is the overstated amount.
- Total those canceled numbers for the period and subtract them in whatever report or sheet you hand on.
Cross-check those canceled numbers against your grid count from the first section.
A developer can also send GA4 a refund for the original's transaction ID through the Measurement Protocol, dated no more than 72 hours before it's sent [6]; the addons keep both purchases either way.
FAQ
Does editing only the shipping address create a new order?
Changing it with Save keeps the same order. Adobe says the billing or shipping address can be changed "without generating a new order" [2]. Only changes that go through Submit Order produce the canceled original and the -1 replacement.
Does GA4 merge the original and the -1 order?
No. GA4 deduplicates purchases that share a transaction ID [5], and the replacement has its own order number. Both stay in GA4 revenue.
Does the Standard edition count edited orders twice?
Standard doesn't send admin-created orders, so GA4 keeps the original at its pre-edit value and never receives the replacement.
Can I issue a credit memo on the canceled original?
Not on an order you could edit. A credit memo needs an invoice [4], and Magento only offers Edit on orders without one [3] [7]. The original was canceled without ever being invoiced.
Send admin-created orders to GA4 server-side, and keep edited originals out with the right status exclusions, using the Magento 2 Google Analytics 4 extension.
Sources
- WeltPixel Google Analytics 4 User Guide and Change Log (General configuration; change log v1.12.5, v1.14.13, v1.15.5, v1.16.0, v1.17.4), retrieved October 20, 2026, https://docs.weltpixel.com/GA4/User-Guide-WeltPixel-Google-Analytics-4.html
- Update an order, Adobe Commerce Admin documentation, last updated October 8, 2026, retrieved October 20, 2026, https://experienceleague.adobe.com/en/docs/commerce-admin/stores-sales/point-of-purchase/assist/order-update
- Order workflow and processing, Adobe Commerce Admin documentation, last updated October 8, 2026, retrieved October 20, 2026, https://experienceleague.adobe.com/en/docs/commerce-admin/stores-sales/order-management/orders/order-processing
- Credit memos, Adobe Commerce Admin documentation, last updated October 8, 2026, retrieved October 20, 2026, https://experienceleague.adobe.com/en/docs/commerce-admin/stores-sales/order-management/credit-memos/credit-memos
- Minimize duplicate key events with transaction IDs, Google Analytics Help, retrieved October 20, 2026, https://support.google.com/analytics/answer/12313109
- Send Measurement Protocol events to Google Analytics, Google Analytics developer documentation, last updated October 13, 2026, retrieved October 20, 2026, https://developers.google.com/analytics/devguides/collection/protocol/ga4/sending-events
- Magento Open Source 2.4.9 source, Sales module (order edit flow, admin order view), retrieved October 20, 2026, https://github.com/magento/magento2/tree/2.4.9/app/code/Magento/Sales