Skip to content

BlogHow To Guides

Shopware Server-Side Tracking: The Setup per Edition

Shopware server-side tracking is two halves: the visit and the order. The visit is a first-party tag; the order is a handover, and which handover you get depends on your edition, because the Flow Builder webhook action is a commercial feature. Here is the setup for both, and what actually changes.

Shopware server-side tracking: the storefront tag, the Flow Builder webhook and the Admin API
Contents
  1. Quick summary
  2. What is lost
  3. The visit
  4. The order, per edition
  5. Consent
  6. The store plugins
  7. Measuring it
  8. Further Reading
Summarise this article with AI

Opens the page with a ready prompt in:

Nothing is sent until you pick a service.

A Shopware shop usually arrives at server-side tracking from one of two directions. Either the numbers stopped matching, because a consent banner and an ad blocker are between the storefront and the pixels, or somebody asked for ROAS per campaign and it turned out the shop knows about orders while the ad accounts know about spend and nothing joins them.

Both problems have the same shape and the same two-part answer. Move the visit onto your own domain, and let the order leave Shopware from the server rather than from a script on the finish page. The second part is where editions matter, so this guide splits it.

Quick Summary: Server-Side Tracking on Shopware 6

In short

Server-side tracking on Shopware is two halves. The visit: a first-party tag in the storefront, recording sessions, campaign parameters and click IDs against your own domain, so filters that block by destination stop removing it. The order: handed over from the server rather than read by a script on the finish page. Which handover you get depends on your edition. Flow Builder's Call URL (Webhook) action is part of the Shopware Commercial extension, from the Evolve plan upwards, so a Community Edition shop uses the Admin API or an automation step instead. What it fixes: sources lost to consent tools and blockers, orders lost at a payment redirect, refunds a pixel never hears about, and match keys travelling through the page. What it does not fix: consent itself.

Below: the two halves in detail, the handover per edition, the German consent question, and how to tell whether it worked.

What the Storefront Loses Today

Before changing anything, it is worth being specific about what is actually missing, because the answer decides whether this project is worth a morning or a week.

  • Sources held by the consent toolShopware's own cookie configuration and most third party consent tools hold non-essential scripts until the visitor accepts. A shopper who accepts late, or not at all, has no source stored when they order. This is the largest single cause on a DACH shop and it is a legal position rather than a bug.
  • Requests blocked by destinationA large share of blocking is a list of third party domains. Anything pointed at a vendor's hostname is on that list; a request to a subdomain of your own shop is not.
  • Orders lost at the payment providerAn off-site payment means the customer leaves and returns, sometimes on a new session. A tag on the finish page can miss it, and the customer who closes the tab after paying is missed for certain.
  • The spend, which was never in ShopwareThe admin knows what you sold. It does not know what you paid Google, Meta and Microsoft for it, so ROAS per campaign lives in a spreadsheet no matter how good the storefront tracking gets.

Half One: the Visit, on Your Own Domain

The first half is ordinary and takes minutes. A tag in the storefront, delivered either in the theme or through the tag manager you already run, pointed at a subdomain of your own shop rather than at a vendor's hostname.

  1. Pick a tracking subdomain on the shop's own domain and point it at whatever receives the events.
  2. Add the tag once, in the storefront theme or via your tag manager, so it runs on every page: category, product, cart and the CMS pages you build campaigns on.
  3. Check it survives a return visit. Open the shop, leave, come back through a different channel and confirm both sessions are recorded. Most broken setups are broken here, not at the first visit.
  4. Leave your consent configuration alone while testing, so what you measure is what a real shopper produces.

This is not the half that fixes the numbers

A first-party tag makes the visit more likely to be recorded. It does not join the visit to the order, and it does not put spend next to revenue. Stores that stop here usually feel better for a month and then have the same argument about ROAS.

Half Two: Handing the Order Over, per Edition

This is where guides get it wrong. Flow Builder can call a webhook when an order is placed, which is the no-code path everybody recommends, and that action is part of the commercial extension. On Community Edition the menu item is not there.

Which handover your edition allows

All four end in the same place: the paid order, with its number, its total, its currency and its transaction state, arriving at your measurement layer from a server. Which one you pick is a question of licence and appetite, not of what the data can do afterwards.

One trigger, not every status change

Whichever path you choose, bind it to one state. A handover on every order update fires again as the order moves through its states, and a conversion count that is a clean multiple of your order count is almost always this.

What the Store's Tracking Plugins Do, and Where They Stop

The Shopware Store has good extensions that write a source onto the order and manage the storefront tags, and if you have one, keep it. It is worth knowing exactly where its job ends.

  • They record the parameters that were on the URL at that visit, which means a customer who returns later through a brand search overwrites the ad that introduced them.
  • They write one source per order, so there is nowhere for the earlier touches to live and no model can distribute credit across them afterwards.
  • They have no spend, because Shopware has none, so cost per order and ROAS are still assembled outside the shop.
  • They do not send the order back to Google, Meta or Microsoft as a conversion with its value, so bidding keeps learning from checkout starts.

How to Tell Whether It Worked

Three numbers, before and a month after

What not to judge it by

Not by reported ROAS going up. A more complete record usually moves credit between channels rather than adding revenue, and a blended ROAS that jumps in the first week is more likely to be double counting than a result.

Further Reading

FAQ

Frequently Asked Questions

What Shopware merchants and their agencies ask first.

What is server-side tracking in Shopware 6?

Two things together. A first-party tag in the storefront, pointed at a subdomain of your own shop, so visits are recorded against your domain rather than a vendor's. And the paid order leaving Shopware from the server, through a Flow Builder webhook, the Admin API or an automation step, rather than being read by a script on the finish page. The second half is what makes the order immune to blockers, caching and payment redirects.

Can I use Flow Builder to send orders to an external service?

On the commercial plans, yes: the trigger is Checkout, Order, Placed and the action is Call URL (Webhook). That action is part of the Shopware Commercial extension, from Evolve upwards, so it is not available on Community Edition. On Community Edition, use the Admin API or an automation tool with a Shopware module, both of which deliver the same order payload.

Does server-side tracking make consent unnecessary?

No. Consent decides what you are allowed to collect; server-side decides whether what you are allowed to collect survives the browser. Anyone telling you otherwise is handing you their legal risk. What it does give you is a single place to decide what each ad platform receives, which is usually less than a third party script on the page would take.

Do I still need a tracking plugin from the Shopware Store?

Keep it if it is doing a job for you, such as managing storefront tags or writing a source onto the order for your service team. What it will not do is keep the touches before the last one, put your ad spend next to your revenue, or send the paid order back to the ad platforms with its value. Those are different problems from the one a storefront plugin solves.

How do I get ROAS per campaign for a Shopware shop?

Three things have to meet in one place: the visit with its click ID, the paid order from Shopware, and the spend from each ad account. Shopware has the second, the ad platforms have the third, and the first exists only if something recorded it. Any tool that reports ROAS for a Shopware shop is joining those three, and the quality of the answer depends entirely on how completely the first one was captured.

Does this work with several sales channels?

Yes, and it is usually the first report worth opening. A Shopware order carries the sales channel it was placed in, so revenue and cost per order can be read per channel rather than summed. A shop running a B2B storefront next to a B2C one almost never has the same best campaign in both.

Hosted in the EU

Ready to track your Shopware shop from the server?

LeadJourney records every storefront visit first-party, takes the paid order from Flow Builder or the Admin API, joins your spend from every platform, and sends the order back to Google, Meta and Microsoft with its value. Live in 21 minutes, 14-day free trial.

LeadJourney dashboard showing lead sources, campaign performance and attributed revenue side by side