Post-Purchase Cross-Selling & Upselling
Description
Highlights
- The first extension in the Shopware Store that lets customers add products to their existing order in one click, without a second checkout
- Worked example: 1,000 orders × 4% acceptance rate × €25 offer value = +€1,000 added revenue a month (not a forecast)
- Safely added to the existing order: the order is extended only when every check on payment, stock and recalculation passes cleanly – if in doubt, nothing happens
About the Extension
Founding offer: three months to test + personal onboarding
The Shopware Store gives you a one-month trial – for the first ten shops, we add two more months. We handle the set-up: we build the five most promising campaigns for your catalogue – you review and approve. All at no extra cost. Email us at support@commercewerk.de. Prefer to see it live first? Our demo shop: demo.commercewerk.de
Right after the purchase, buying intent is at its peak. Post-Purchase Cross-Selling & Upselling puts that exact moment to work: once the order is placed and before the order confirmation page appears, a single relevant offer is shown. If the customer accepts, the item is added to the existing order, with no second checkout and no new order. Unlike cross-selling in the basket or during checkout, the offer appears only after the purchase: the checkout stays lean, the buying decision is already made, and you can raise the average order value (AOV) without adding another hurdle to the checkout.
The numbers behind it
A worked example: 1,000 orders a month, a conservative 4% acceptance rate, a €25 offer value – that makes €1,000 added revenue a month; the extension costs €99 a month. Reported figures are 4.7% on average (ReConvert) and up to about 15% at the top end (Yotpo) – not a forecast for your shop.
Around 35% of all purchases on Amazon come from product recommendations (McKinsey, 2013). Product recommendations are proven practice in e-commerce; the point is to show a relevant offer at the right moment.
When customers accept a relevant offer, they do so with one click; declining the offer does not affect the original order. To see the flow in action, visit the demo shop at demo.commercewerk.de; to see how it performs with your own products, check your analytics after the first campaign.
Why it pays off
- You reach people who have just bought, not undecided visitors. This is where buying intent is highest.
- The original purchase stays secure: the offer appears only after the order is placed, and the order is extended only if the customer accepts.
- A higher order value with no extra traffic: a matching accessory, a refill, a care product, a spare part or a warranty, offered at exactly the right moment.
What you control
- Campaigns that respond to a specific product, a category, a manufacturer, or to every eligible order.
- Precise targeting by order value, customer group, shipping country, payment method, product exclusions, validity period and sales channel.
- Several campaigns run in parallel; the most specifically targeted campaign wins, and Priority decides between equally specific ones – so the right offer appears at the right moment.
- The offer per campaign: the offer product, a percentage or fixed discount, and the quantity.
- All offer-page copy is editable per campaign – in every language of your shop.
- Use the built-in offer page or build your own with Shopping Experiences.
- A live preview shows the offer page per sales channel and language – without a test order.
- Clear analytics: Shown, Accepted, Declined, Acceptance rate, Added revenue and Revenue per 100 orders – per campaign and sales channel.
- The Activity tab logs every offer with its outcome and the reason in plain language – you can always see why an order got an offer, or why not.
Safely added to the existing order
- An accepted item is added only when every check on the order, stock, payment and recalculation passes cleanly. If in doubt, nothing happens.
- The grand total, taxes and discounts are recalculated correctly; discounts appear as separate line items so the tax stays right.
- The accepted item joins the existing order – no second checkout. Works with invoice, prepayment, cash on delivery, direct debit and PayPal (wallet and cards saved through PayPal).
Typical uses
- A matching accessory right after the purchase.
- A refill, care product, spare part, sample or warranty, before the order confirmation page appears.
- A bundle-style add-on offer with its own layout from Shopping Experiences.
- A first relevant campaign, with the added revenue visible straight away in the analytics.
Direct support
Post-Purchase Cross-Selling & Upselling is built by commercewerk in Munich. Questions, requests or help getting set up? We answer directly, in English and German.
Founding offer: three months to test + personal onboarding
The Shopware Store gives you a one-month trial – for the first ten shops, we add two more months. We handle the set-up: we build the five most promising campaigns for your catalogue – you review and approve. All at no extra cost. Email us at support@commercewerk.de. Prefer to see it live first? Our demo shop: demo.commercewerk.de
Right after the purchase, buying intent is at its peak. Post-Purchase Cross-Selling & Upselling puts that exact moment to work: once the order is placed and before the order confirmation page appears, a single relevant offer is shown. If the customer accepts, the item is added to the existing order, with no second checkout and no new order. Unlike cross-selling in the basket or during checkout, the offer appears only after the purchase: the checkout stays lean, the buying decision is already made, and you can raise the average order value (AOV) without adding another hurdle to the checkout.
The numbers behind it
A worked example: 1,000 orders a month, a conservative 4% acceptance rate, a €25 offer value – that makes €1,000 added revenue a month; the extension costs €99 a month. Reported figures are 4.7% on average (ReConvert) and up to about 15% at the top end (Yotpo) – not a forecast for your shop.
Around 35% of all purchases on Amazon come from product recommendations (McKinsey, 2013). Product recommendations are proven practice in e-commerce; the point is to show a relevant offer at the right moment.
When customers accept a relevant offer, they do so with one click; declining the offer does not affect the original order. To see the flow in action, visit the demo shop at demo.commercewerk.de; to see how it performs with your own products, check your analytics after the first campaign.
Why it pays off
- You reach people who have just bought, not undecided visitors. This is where buying intent is highest.
- The original purchase stays secure: the offer appears only after the order is placed, and the order is extended only if the customer accepts.
- A higher order value with no extra traffic: a matching accessory, a refill, a care product, a spare part or a warranty, offered at exactly the right moment.
What you control
- Campaigns that respond to a specific product, a category, a manufacturer, or to every eligible order.
- Precise targeting by order value, customer group, shipping country, payment method, product exclusions, validity period and sales channel.
- Several campaigns run in parallel; the most specifically targeted campaign wins, and Priority decides between equally specific ones – so the right offer appears at the right moment.
- The offer per campaign: the offer product, a percentage or fixed discount, and the quantity.
- All offer-page copy is editable per campaign – in every language of your shop.
- Use the built-in offer page or build your own with Shopping Experiences.
- A live preview shows the offer page per sales channel and language – without a test order.
- Clear analytics: Shown, Accepted, Declined, Acceptance rate, Added revenue and Revenue per 100 orders – per campaign and sales channel.
- The Activity tab logs every offer with its outcome and the reason in plain language – you can always see why an order got an offer, or why not.
Safely added to the existing order
- An accepted item is added only when every check on the order, stock, payment and recalculation passes cleanly. If in doubt, nothing happens.
- The grand total, taxes and discounts are recalculated correctly; discounts appear as separate line items so the tax stays right.
- The accepted item joins the existing order – no second checkout. Works with invoice, prepayment, cash on delivery, direct debit and PayPal (wallet and cards saved through PayPal).
Typical uses
- A matching accessory right after the purchase.
- A refill, care product, spare part, sample or warranty, before the order confirmation page appears.
- A bundle-style add-on offer with its own layout from Shopping Experiences.
- A first relevant campaign, with the added revenue visible straight away in the analytics.
Direct support
Post-Purchase Cross-Selling & Upselling is built by commercewerk in Munich. Questions, requests or help getting set up? We answer directly, in English and German.
Details
- Available: English, German
- Latest update: 19 August 2026
- Publication date: 8 July 2026
- Version: 4.5.0
- Category: Conversion Optimization
Resources
Reviews (0)
About the Extension Partner
commercewerk
Partner Status
-
Shopware
Extension Partner
Details
- Partner since: 2025
- Extensions: 2
Support
- Based in: Germany
- Speaks: German, English
- Response time: Very quickly
- Frontend:
- Go to demo
- Name:
- demo@commercewerk.de
- Password:
- demo
- Admin:
- Go to demo
- Name:
- demo-admin
- Password:
- demo
- Frontend:
- Go to demo
- Name:
- demo@commercewerk.de
- Password:
- demo
- Admin:
- Go to demo
- Name:
- demo-admin
- Password:
- demo
Requirements and where to start
- Requirements: Shopware 6.5 (6.5.8+), 6.6 or 6.7 – the extension ships in platform-bound version lines (2.x / 3.x / 4.x) and the Shopware Store delivers the matching one automatically. PHP 8.1+ on Shopware 6.5, PHP 8.2+ on 6.6 and 6.7. The SwagPayPal extension is only required if you want to offer upsells on PayPal orders.
- After installation, open Marketing > Cross-Selling & Upselling. The admin area has four tabs: Campaigns, Analytics, Activity and Health.
- The master switch is on by default. If you want to prepare campaigns before anything can go live, switch it off in the extension settings and switch it back on after testing.
1. Check the global settings
Open Settings > Extensions > My extensions > Post-Purchase Cross-Selling & Upselling > Configure.
Post-Purchase Cross-Selling & Upselling
- Enable post-purchase upsell offers – master switch, on by default.
- Offer link validity (minutes) – default 30 minutes, limited to 5 to 120 minutes.
Emails, retention & advanced
- Send customer confirmation email on accept – on by default. Edit the wording under Settings > Email templates.
- Analytics retention (days) – default 365. Older offer links, events and acceptance records are removed by the daily cleanup task.
- Log level (extension channel) – default Warning. Raise it only while investigating an issue.
- PayPal wallet: collect upsell via a quick confirmation when not vaulted – on by default. Lets PayPal wallet customers without a saved payment approve the add-on amount with a quick confirmation at PayPal. The PayPal card method (ACDC) is saved-card only; a card order without a saved card is not offered the upsell.
Per sales channel: the master switch, offer-link validity, customer email and the PayPal wallet confirmation can be overridden per sales channel. Analytics retention and log level are global.
2. Create a campaign
Open Campaigns > Add campaign. A campaign is the merchant rule; the offer is the customer-facing result for one order. The detail form has three tabs; the Ready to go live? strip above them tracks the few required steps. New campaigns start inactive.
- Campaign tab – internal name (translatable per language), Active switch, optional valid-from/until dates, Priority and Sales channels. The most specific trigger wins; higher priority decides between equally specific campaigns. Below that, the display condition: the trigger (Always (any order), specific product, category or manufacturer) plus filters by net order value, customer groups, shipping countries and excluded products. New campaigns start with all sales channels selected; an empty sales-channel selection means the campaign runs in no channel.
- Offer tab – the offer product, quantity, discount type and discount value. Below that, the offer page copy, all optional and translatable per language: the label above the headline, the headline, two sublines (with and without the quick confirmation), the short benefit, the product benefits and both button texts. The %product%, %price%, %savings% and %percent% placeholders work in every text field; they resolve at display time from the offer's actual totals, so edited prices or discounts never leave stale numbers. %savings% and %percent% stay empty when the campaign has no discount. This tab also assigns the layout: the built-in default offer page, or the shipped Shopping Experiences layout Post-purchase offer.
- Handling tab – allowed payment methods: invoice, prepayment, cash on delivery, direct debit, plus PayPal wallet and the PayPal card method (ACDC). If this list is empty, the campaign never runs. Then choose the document, shipping, stock and cart-promotion policies. The defaults are conservative: block if a document already exists; show only if shipping stays the same; require available stock; suppress the offer when a cart promotion exists.
Save the campaign, then check it with Preview offer page in the live preview – per sales channel and language, no test order needed. Afterwards, place a test order with a supported payment method.
3. Understand how the offer is selected
- For one order, only one offer is shown: the best-matching eligible campaign – the most specific trigger wins (product beats category/manufacturer beats "Always (any order)"), with priority deciding between equally specific ones.
- A campaign is eligible only when it is active, within its valid dates, matches the trigger, matches the order's net value, customer group, shipping country and payment method, has no excluded product in the order, and does not offer a product already in the order.
- If two equally specific eligible campaigns have the same priority, the most recently edited campaign wins. Use distinct priorities for same-tier campaigns when the order matters.
- If the top campaign's offered product is out of stock according to its stock policy, or its shipping policy blocks the offer, the next eligible campaign is shown instead.
- Important: campaign terms are checked again when the customer accepts. If the amount or quantity no longer matches what was shown, the acceptance fails safely. Still, deactivate a campaign before changing its product, price, quantity or discount, then reactivate it.
4. Configure payment handling
- Invoice, prepayment, cash on delivery and direct debit – while the order is still unpaid, the add-on amount is added to the existing grand total. No recharge is created.
- PayPal with a saved payment – if the customer has a saved (vaulted) PayPal payment or ACDC card, the add-on amount is recharged silently before the item is added to the order.
- PayPal wallet without a saved payment – if the wallet confirmation is enabled, the customer confirms the add-on amount briefly at PayPal. After that, the item is added to the existing order.
- The recharge is recorded as a separate PayPal transaction and can be refunded from the order's PayPal tab.
- A PayPal card order (ACDC) without a saved card is not offered the upsell. Card payments via Stripe, Mollie or Adyen, and Klarna payments, are not recharged automatically in this version.
- If a vaulted PayPal customer's silent recharge is declined, there is no quick-confirmation fallback for that case.
The original order stays protected: if the customer declines or the add-on cannot be completed, the order stays exactly as placed and no second order is created.
PayPal setup checklist
- Install and configure the official SwagPayPal extension – tested with SwagPayPal 8.x on Shopware 6.5, 9.x on 6.6 and 10.x on 6.7.
- Enable PayPal Vaulting so registered customers can save PayPal for future recharges.
- Test in PayPal Sandbox first.
- Before going live, connect a live PayPal Business account, re-enable Vaulting for live, and enable Reference Transactions on the PayPal account. Silent PayPal recharge is declined until Reference Transactions is active.
- Keep the PayPal wallet confirmation on as the safety net for wallet customers without a saved payment.
5. Test and operate
- Health tab: start here if no offer appears. It checks the master switch, active campaigns, active offer products, the storefront offer route, the order and line-item custom fields, and the Shopware version note.
- Analytics tab: track the Shown, Accepted, Declined, Failed, Acceptance rate, Added revenue, Average upsell value and Revenue per 100 orders KPIs. Use date presets, custom ranges, the campaign and sales-channel filters, the revenue-per-day chart and the per-campaign breakdown.
- Activity tab: a per-order feed with each offer's outcome and plain-language suppression reasons. For a failed offer, Copy technical details hands the full error to your agency or to support.
- Permissions: assign roles under Settings > Users & permissions. Available roles are Viewer, Editor, Creator, Deleter, Analytics viewer, Health viewer and Log viewer (for the Activity tab). Roles build on each other, so Creator already includes Editor and Viewer.
- Privacy and cleanup: offer links use one-time, time-limited tokens. Offer pages are never cached and are marked noindex. The daily cleanup removes old links, events and records after the analytics retention period; used, declined and expired links are removed after 7 days.
- Order records: accepted upsells write marker fields onto the order and the added line item, so you can identify the campaign and add-on later.
- Advanced CLI: optional commands are cwk:ppu:cleanup, cwk:ppu:install-default-layout and cwk:ppu:analytics:show.
For the complete manual with screenshots and deeper PayPal setup details, see commercewerk.de/en/docs/shopware/post-purchase-upsell.
Uninstalling: with Shopware's Keep user data option, campaigns, analytics, settings and the email template remain. Without it, the extension's data and the seeded offer layout are removed. Shopping Experiences layouts you built yourself and upsell markers already written to past orders remain.
4.5.0 6.7.0.0 - 6.7.13.0
New
- New "Product number for the discount line item" setting: the discount line item of an accepted offer can now carry its own product number, which an ERP can use to map the line item.
4.4.0 6.7.0.0 - 6.7.13.0
New
- An ERP that signs in with a username and password instead of an integration can now wait for orders via a separate Shopware Administration user account.
- New "Show short benefit" switch: the short benefit below the offered product's name ("Selected to match this order.") can now be hidden per Shopping Experiences layout. Existing layouts keep showing it.
Improved
- Elements that themes or extensions add to the checkout header no longer appear in the offer page header.
- Preview links from the campaign editor are now valid for 30 minutes; an expired link shows a clear notice instead of an error page.
- Details of an order in the "ERP Export" tab now open via "View details".
4.3.0 6.7.0.0 - 6.7.13.0
New
- CC and BCC recipients for the acceptance confirmation email: via two new fields under "Emails, retention & advanced", a copy of the confirmation email is sent to additional addresses, for example an internal inbox, when a customer accepts an offer. CC recipients are visible to the customer, BCC recipients are not. Both fields are empty by default, so nothing changes until you use them.
4.2.0 6.7.0.0 - 6.7.13.0
New
- Optional ERP export: if an ERP or fulfilment system imports your orders, an order with an offer now waits until its offer is finished, so your ERP imports the final order and never a version that changes a moment later. Orders without an offer are ready right away. Switch it on per sales channel and choose the integration your ERP uses to import orders. Use it only with an ERP that re-checks all open orders on each run; ask your ERP partner first if you are unsure.
- A new "ERP Export" tab under Marketing > Cross-Selling & Upselling shows every order that qualified for an offer and whether it is "Waiting" or "Ready for the ERP", next to its order status. Filter the list by order number or ERP readiness. Almost every order becomes ready on its own. If the processing of an accepted offer does not finish, the order shows "Review needed" and you can "Allow this import" once you have checked it; the "Health" tab lists these orders, and designated recipients get an email if one of these orders keeps waiting past the threshold – 15 minutes by default.
Changed
- Changing the ERP export setting finishes open offers first: when you switch it on or off, or pick a different integration, open offers in the affected sales channels are finished before the new setting applies, so no offer is left unresolved. Shopware refuses the change while an accepted offer is still being processed.
4.1.0 6.7.0.0 - 6.7.13.0
New
- Live value placeholders in campaign copy: all campaign text fields (context pill, headline, sublines, benefit text and items, both buttons) now support %price%, %savings% and %percent% alongside %product%. Values resolve at display time from the offer's actual totals, so edited prices or discounts can never leave stale numbers in your copy. %savings% and %percent% stay empty when the campaign has no discount.
- Order-confirmation strip: every offer page now opens with a compact strip confirming that the order has been placed – green tick, "Order complete", and a link to the order confirmation page – so the customer knows their order has been placed before any offer is made. The link only opens the order confirmation page; it never accepts or declines the offer.
Changed
- The offer page was redesigned around the product image. When the order contains the campaign's trigger product, a compact "Your order includes" card, a plus connector and the image-first offer panel form one visual bundle; without a trigger product the offer card stands alone with the same width and height as in the paired layout – at every desktop width, and also inside Shopping Experiences layouts. Decorative shadows and hardcoded corner radii are gone: corners now follow your theme's radius settings, so the page renders flat on a flat theme and rounded on a rounded one.
- The "Fits your order" recommendation badge is now off by default. On the built-in page there is no switch for it; in a Shopping Experiences layout the element's "Show badge" toggle brings it back. Existing layouts keep their saved setting.
- Offers appear only for orders that can still change. A cancelled or completed order, or one whose payment was refunded or voided, no longer shows an offer page – the customer lands on the normal order confirmation page instead. The same applies when the storefront context no longer matches the order, for example after a currency switch.
- The offer-page address changed to /cwk-post-purchase-offer/. Links using the previous address keep working.
- Customer-facing default copy was revised in both languages, including the strip title, the reassurance line and the fallback for the context pill. The German mail-template naming is updated by a migration that only touches the stock wording – customised template names and descriptions are never overwritten.
- Theme note: if your theme overrides offer.html.twig or _bundle-offer-experience.html.twig, re-sync the override to render the full redesign. Stale overrides degrade gracefully in the meantime.
Fixed
- Graduated (tier) prices: the whole offer – discount, struck-through price and savings percentage – is now calculated from the price tier that actually applies to the customer, not from the quantity-1 price. A safety net verifies the price basis before any payment is taken and before the order is changed; on a mismatch the acceptance is refused, and a shift detected only after a capture is refunded automatically.
- The campaign list's product and campaign pickers now rank results by search relevance instead of alphabetically, so the product or campaign you search for is found even on a large catalogue.
- Variants in the campaign list filters now show their option values, so two variants of the same parent product are distinguishable.
- "Reset filters" now works from the filtered empty state after a page reload.
- An offer whose payment was already attempted can no longer be reopened by returning from a cancelled PayPal checkout.
- Product images without a file no longer render as an empty image, and alt text stored for the media now takes precedence over the product name on the offer and context images.
4.0.3 6.7.0.0 - 6.7.13.0
- Fixed a case where a newly created campaign could appear unsaveable: after its offer-page preview was opened before the first save, the campaign was in fact stored, but the screen stayed on "create" and every further save failed with an error. The first save now opens the saved campaign, and saving works as expected. No configuration changes are required.
- The acceptance column in the campaign list is now labelled "Accepted" (previously "Accepts"), matching the analytics and activity wording.
4.0.2 6.7.0.0 - 6.7.13.0
- Offer page: when the offer product or the trigger product is a variant, the corresponding card now shows its option values (e.g. Colour: Red | Size: XL) under the product name, in the sales-channel language and in the same wording Shopware uses for order line items. Before, a variant showed only the inherited product name there, so the customer could not tell which variant it was. Simple products are unchanged; campaign selection and pricing do not change.
4.0.1 6.7.0.0 - 6.7.13.0
- Variants in the product pickers: the trigger product and excluded products fields now find variants by search and show them with their option values (e.g. Colour: Red, Size: M), the same way the offer product field already did. A configurable product still applies to all of its variants; a single variant can also be the trigger or an exclusion.
- Product numbers in every product picker, so products that share a name can be told apart.
- A new help text on the trigger product field explains configurable products versus single variants.
- Offer page: the plus between the order card and the offer card keeps the desktop design on phones and stacked tablet widths (green, with connector lines into both cards); the product name in the order card is one step smaller on phones.
4.0.0 6.7.0.0 - 6.7.13.0
Every line below is new or changed since 1.1.7. Versions are platform-banded: 2.x = Shopware 6.5, 3.x = Shopware 6.6, 4.x = Shopware 6.7.
- Redesigned offer page: order-context card and offer card side by side, benefit checklist, reassurance strip, a prominent accept button with the price on it, sticky actions on mobile, robust handling of product images and long product names.
- Offer page layouts via Shopping Experiences, with per-section display options (context pill, subline, context card, recommendation badge, discount row, savings display, tax note, benefit checklist, reassurance strip).
- Per-campaign offer copy: the subline in both payment variants, label above the headline, short benefit, product benefits and decline button text; short benefit and product benefits support the %product% placeholder; campaign names are translatable.
- Analytics dashboard: added revenue, average upsell value, revenue per 100 orders and acceptance rate as KPIs, plus shown/accepted/declined/failed, a revenue-over-time chart, date presets and campaign and sales channel filters.
- New "Activity" tab: per order, what the offer did (shown, accepted, declined, not applied, failed) — including plain-language reasons when a matching campaign was held back.
- New "Health" tab: checks the extension's setup and shows the most common reasons why no offer appears.
- Campaign detail reorganised into Campaign / Offer / Handling tabs, with a readiness strip and a live preview of the offer page in both payment variants — no test order needed; new campaigns start inactive.
- Campaign list with a filter sidebar, type-ahead campaign and product search, and optional metric columns (shown, accepts, acceptance rate, added revenue).
- Campaign selection prefers the most specifically targeted campaign: product triggers over category and manufacturer triggers over "Always (any order)"; priority decides within the same specificity.
- Cart promotion policy per campaign: suppress the offer (safe default) or stack the promotion and calculate the actual add-on amount.
- PayPal: the silent recharge now also covers saved PayPal credit/debit cards; wallet orders without a saved payment approve the add-on amount with a quick confirmation at PayPal.
- Order and money-path fixes: correct VAT on the discount in B2B net shops, accepting also works on orders with shipping discounts, cart-promotion line items without a product reference no longer break campaign matching, recharges refuse currencies with other than two decimal places.
- Admin quality: fully reviewed copy in German and English, translated health checks, rounded and localised amounts and rates, reliable tab navigation; failed acceptances show a plain-language summary with copyable technical details.
3.5.0 6.6.0.0 - 6.6.10.22
New
- New "Product number for the discount line item" setting: the discount line item of an accepted offer can now carry its own product number, which an ERP can use to map the line item.
3.4.0 6.6.0.0 - 6.6.10.22
New
- An ERP that signs in with a username and password instead of an integration can now wait for orders via a separate Shopware Administration user account.
- New "Show short benefit" switch: the short benefit below the offered product's name ("Selected to match this order.") can now be hidden per Shopping Experiences layout. Existing layouts keep showing it.
Improved
- Elements that themes or extensions add to the checkout header no longer appear in the offer page header.
- Preview links from the campaign editor are now valid for 30 minutes; an expired link shows a clear notice instead of an error page.
- Details of an order in the "ERP Export" tab now open via "View details".
3.3.0 6.6.0.0 - 6.6.10.22
New
- CC and BCC recipients for the acceptance confirmation email: via two new fields under "Emails, retention & advanced", a copy of the confirmation email is sent to additional addresses, for example an internal inbox, when a customer accepts an offer. CC recipients are visible to the customer, BCC recipients are not. Both fields are empty by default, so nothing changes until you use them.
3.2.0 6.6.0.0 - 6.6.10.22
New
- Optional ERP export: if an ERP or fulfilment system imports your orders, an order with an offer now waits until its offer is finished, so your ERP imports the final order and never a version that changes a moment later. Orders without an offer are ready right away. Switch it on per sales channel and choose the integration your ERP uses to import orders. Use it only with an ERP that re-checks all open orders on each run; ask your ERP partner first if you are unsure.
- A new "ERP Export" tab under Marketing > Cross-Selling & Upselling shows every order that qualified for an offer and whether it is "Waiting" or "Ready for the ERP", next to its order status. Filter the list by order number or ERP readiness. Almost every order becomes ready on its own. If the processing of an accepted offer does not finish, the order shows "Review needed" and you can "Allow this import" once you have checked it; the "Health" tab lists these orders, and designated recipients get an email if one of these orders keeps waiting past the threshold – 15 minutes by default.
Changed
- Changing the ERP export setting finishes open offers first: when you switch it on or off, or pick a different integration, open offers in the affected sales channels are finished before the new setting applies, so no offer is left unresolved. Shopware refuses the change while an accepted offer is still being processed.
3.1.0 6.6.0.0 - 6.6.10.22
New
- Live value placeholders in campaign copy: all campaign text fields (context pill, headline, sublines, benefit text and items, both buttons) now support %price%, %savings% and %percent% alongside %product%. Values resolve at display time from the offer's actual totals, so edited prices or discounts can never leave stale numbers in your copy. %savings% and %percent% stay empty when the campaign has no discount.
- Order-confirmation strip: every offer page now opens with a compact strip confirming that the order has been placed – green tick, "Order complete", and a link to the order confirmation page – so the customer knows their order has been placed before any offer is made. The link only opens the order confirmation page; it never accepts or declines the offer.
Changed
- The offer page was redesigned around the product image. When the order contains the campaign's trigger product, a compact "Your order includes" card, a plus connector and the image-first offer panel form one visual bundle; without a trigger product the offer card stands alone with the same width and height as in the paired layout – at every desktop width, and also inside Shopping Experiences layouts. Decorative shadows and hardcoded corner radii are gone: corners now follow your theme's radius settings, so the page renders flat on a flat theme and rounded on a rounded one.
- The "Fits your order" recommendation badge is now off by default. On the built-in page there is no switch for it; in a Shopping Experiences layout the element's "Show badge" toggle brings it back. Existing layouts keep their saved setting.
- Offers appear only for orders that can still change. A cancelled or completed order, or one whose payment was refunded or voided, no longer shows an offer page – the customer lands on the normal order confirmation page instead. The same applies when the storefront context no longer matches the order, for example after a currency switch.
- The offer-page address changed to /cwk-post-purchase-offer/. Links using the previous address keep working.
- Customer-facing default copy was revised in both languages, including the strip title, the reassurance line and the fallback for the context pill. The German mail-template naming is updated by a migration that only touches the stock wording – customised template names and descriptions are never overwritten.
- Theme note: if your theme overrides offer.html.twig or _bundle-offer-experience.html.twig, re-sync the override to render the full redesign. Stale overrides degrade gracefully in the meantime.
Fixed
- Graduated (tier) prices: the whole offer – discount, struck-through price and savings percentage – is now calculated from the price tier that actually applies to the customer, not from the quantity-1 price. A safety net verifies the price basis before any payment is taken and before the order is changed; on a mismatch the acceptance is refused, and a shift detected only after a capture is refunded automatically.
- The campaign list's product and campaign pickers now rank results by search relevance instead of alphabetically, so the product or campaign you search for is found even on a large catalogue.
- Variants in the campaign list filters now show their option values, so two variants of the same parent product are distinguishable.
- "Reset filters" now works from the filtered empty state after a page reload.
- An offer whose payment was already attempted can no longer be reopened by returning from a cancelled PayPal checkout.
- Product images without a file no longer render as an empty image, and alt text stored for the media now takes precedence over the product name on the offer and context images.
3.0.3 6.6.0.0 - 6.6.10.22
- Fixed a case where a newly created campaign could appear unsaveable: after its offer-page preview was opened before the first save, the campaign was in fact stored, but the screen stayed on "create" and every further save failed with an error. The first save now opens the saved campaign, and saving works as expected. No configuration changes are required.
- The acceptance column in the campaign list is now labelled "Accepted" (previously "Accepts"), matching the analytics and activity wording.
3.0.2 6.6.0.0 - 6.6.10.22
- Offer page: when the offer product or the trigger product is a variant, the corresponding card now shows its option values (e.g. Colour: Red | Size: XL) under the product name, in the sales-channel language and in the same wording Shopware uses for order line items. Before, a variant showed only the inherited product name there, so the customer could not tell which variant it was. Simple products are unchanged; campaign selection and pricing do not change.
3.0.1 6.6.0.0 - 6.6.10.22
- Variants in the product pickers: the trigger product and excluded products fields now find variants by search and show them with their option values (e.g. Colour: Red, Size: M), the same way the offer product field already did. A configurable product still applies to all of its variants; a single variant can also be the trigger or an exclusion.
- Product numbers in every product picker, so products that share a name can be told apart.
- A new help text on the trigger product field explains configurable products versus single variants.
- Offer page: the plus between the order card and the offer card keeps the desktop design on phones and stacked tablet widths (green, with connector lines into both cards); the product name in the order card is one step smaller on phones.
3.0.0 6.6.0.0 - 6.6.10.22
Every line below is new or changed since 1.1.7. Versions are platform-banded: 2.x = Shopware 6.5, 3.x = Shopware 6.6, 4.x = Shopware 6.7.
- Redesigned offer page: order-context card and offer card side by side, benefit checklist, reassurance strip, a prominent accept button with the price on it, sticky actions on mobile, robust handling of product images and long product names.
- Offer page layouts via Shopping Experiences, with per-section display options (context pill, subline, context card, recommendation badge, discount row, savings display, tax note, benefit checklist, reassurance strip).
- Per-campaign offer copy: the subline in both payment variants, label above the headline, short benefit, product benefits and decline button text; short benefit and product benefits support the %product% placeholder; campaign names are translatable.
- Analytics dashboard: added revenue, average upsell value, revenue per 100 orders and acceptance rate as KPIs, plus shown/accepted/declined/failed, a revenue-over-time chart, date presets and campaign and sales channel filters.
- New "Activity" tab: per order, what the offer did (shown, accepted, declined, not applied, failed) — including plain-language reasons when a matching campaign was held back.
- New "Health" tab: checks the extension's setup and shows the most common reasons why no offer appears.
- Campaign detail reorganised into Campaign / Offer / Handling tabs, with a readiness strip and a live preview of the offer page in both payment variants — no test order needed; new campaigns start inactive.
- Campaign list with a filter sidebar, type-ahead campaign and product search, and optional metric columns (shown, accepts, acceptance rate, added revenue).
- Campaign selection prefers the most specifically targeted campaign: product triggers over category and manufacturer triggers over "Always (any order)"; priority decides within the same specificity.
- Cart promotion policy per campaign: suppress the offer (safe default) or stack the promotion and calculate the actual add-on amount.
- PayPal: the silent recharge now also covers saved PayPal credit/debit cards; wallet orders without a saved payment approve the add-on amount with a quick confirmation at PayPal.
- Order and money-path fixes: correct VAT on the discount in B2B net shops, accepting also works on orders with shipping discounts, cart-promotion line items without a product reference no longer break campaign matching, recharges refuse currencies with other than two decimal places.
- Admin quality: fully reviewed copy in German and English, translated health checks, rounded and localised amounts and rates, reliable tab navigation; failed acceptances show a plain-language summary with copyable technical details.
2.5.0 6.5.8.0 - 6.5.8.19
New
- New "Product number for the discount line item" setting: the discount line item of an accepted offer can now carry its own product number, which an ERP can use to map the line item.
2.4.0 6.5.8.0 - 6.5.8.19
New
- An ERP that signs in with a username and password instead of an integration can now wait for orders via a separate Shopware Administration user account.
- New "Show short benefit" switch: the short benefit below the offered product's name ("Selected to match this order.") can now be hidden per Shopping Experiences layout. Existing layouts keep showing it.
Improved
- Elements that themes or extensions add to the checkout header no longer appear in the offer page header.
- Preview links from the campaign editor are now valid for 30 minutes; an expired link shows a clear notice instead of an error page.
- Details of an order in the "ERP Export" tab now open via "View details".
2.3.0 6.5.8.0 - 6.5.8.19
New
- CC and BCC recipients for the acceptance confirmation email: via two new fields under "Emails, retention & advanced", a copy of the confirmation email is sent to additional addresses, for example an internal inbox, when a customer accepts an offer. CC recipients are visible to the customer, BCC recipients are not. Both fields are empty by default, so nothing changes until you use them.
2.2.0 6.5.8.0 - 6.5.8.19
New
- Optional ERP export: if an ERP or fulfilment system imports your orders, an order with an offer now waits until its offer is finished, so your ERP imports the final order and never a version that changes a moment later. Orders without an offer are ready right away. Switch it on per sales channel and choose the integration your ERP uses to import orders. Use it only with an ERP that re-checks all open orders on each run; ask your ERP partner first if you are unsure.
- A new "ERP Export" tab under Marketing > Cross-Selling & Upselling shows every order that qualified for an offer and whether it is "Waiting" or "Ready for the ERP", next to its order status. Filter the list by order number or ERP readiness. Almost every order becomes ready on its own. If the processing of an accepted offer does not finish, the order shows "Review needed" and you can "Allow this import" once you have checked it; the "Health" tab lists these orders, and designated recipients get an email if one of these orders keeps waiting past the threshold – 15 minutes by default.
Changed
- Changing the ERP export setting finishes open offers first: when you switch it on or off, or pick a different integration, open offers in the affected sales channels are finished before the new setting applies, so no offer is left unresolved. Shopware refuses the change while an accepted offer is still being processed.
2.1.0 6.5.8.0 - 6.5.8.19
New
- Live value placeholders in campaign copy: all campaign text fields (context pill, headline, sublines, benefit text and items, both buttons) now support %price%, %savings% and %percent% alongside %product%. Values resolve at display time from the offer's actual totals, so edited prices or discounts can never leave stale numbers in your copy. %savings% and %percent% stay empty when the campaign has no discount.
- Order-confirmation strip: every offer page now opens with a compact strip confirming that the order has been placed – green tick, "Order complete", and a link to the order confirmation page – so the customer knows their order has been placed before any offer is made. The link only opens the order confirmation page; it never accepts or declines the offer.
Changed
- The offer page was redesigned around the product image. When the order contains the campaign's trigger product, a compact "Your order includes" card, a plus connector and the image-first offer panel form one visual bundle; without a trigger product the offer card stands alone with the same width and height as in the paired layout – at every desktop width, and also inside Shopping Experiences layouts. Decorative shadows and hardcoded corner radii are gone: corners now follow your theme's radius settings, so the page renders flat on a flat theme and rounded on a rounded one.
- The "Fits your order" recommendation badge is now off by default. On the built-in page there is no switch for it; in a Shopping Experiences layout the element's "Show badge" toggle brings it back. Existing layouts keep their saved setting.
- Offers appear only for orders that can still change. A cancelled or completed order, or one whose payment was refunded or voided, no longer shows an offer page – the customer lands on the normal order confirmation page instead. The same applies when the storefront context no longer matches the order, for example after a currency switch.
- The offer-page address changed to /cwk-post-purchase-offer/. Links using the previous address keep working.
- Customer-facing default copy was revised in both languages, including the strip title, the reassurance line and the fallback for the context pill. The German mail-template naming is updated by a migration that only touches the stock wording – customised template names and descriptions are never overwritten.
- Theme note: if your theme overrides offer.html.twig or _bundle-offer-experience.html.twig, re-sync the override to render the full redesign. Stale overrides degrade gracefully in the meantime.
Fixed
- Graduated (tier) prices: the whole offer – discount, struck-through price and savings percentage – is now calculated from the price tier that actually applies to the customer, not from the quantity-1 price. A safety net verifies the price basis before a payment is taken or the order is changed; on a mismatch the acceptance is refused, and a shift detected only after a capture is refunded automatically.
- The campaign list's product and campaign pickers now rank results by search relevance instead of alphabetically, so the product or campaign you search for is found even on a large catalogue.
- Variants in the campaign list filters now show their option values, so two variants of the same parent product are distinguishable.
- "Reset filters" now works from the filtered empty state after a page reload.
- An offer whose payment was already attempted can no longer be reopened by returning from a cancelled PayPal checkout.
- Product images without a file no longer render as an empty image, and alt text stored for the media now takes precedence over the product name on the offer and context images.
2.0.3 6.5.8.0 - 6.5.8.19
- Fixed a case where a newly created campaign could appear unsaveable: after its offer-page preview was opened before the first save, the campaign was in fact stored, but the screen stayed on "create" and every further save failed with an error. The first save now opens the saved campaign, and saving works as expected. No configuration changes are required.
- The acceptance column in the campaign list is now labelled "Accepted" (previously "Accepts"), matching the analytics and activity wording.
2.0.2 6.5.8.0 - 6.5.8.19
- Offer page: when the offer product or the trigger product is a variant, the corresponding card now shows its option values (e.g. Colour: Red | Size: XL) under the product name, in the sales-channel language and in the same wording Shopware uses for order line items. Before, a variant showed only the inherited product name there, so the customer could not tell which variant it was. Simple products are unchanged; campaign selection and pricing do not change.
2.0.1 6.5.8.0 - 6.5.8.19
- Variants in the product pickers: the trigger product and excluded products fields now find variants by search and show them with their option values (e.g. Colour: Red, Size: M), the same way the offer product field already did. A configurable product still applies to all of its variants; a single variant can also be the trigger or an exclusion.
- Product numbers in every product picker, so products that share a name can be told apart.
- A new help text on the trigger product field explains configurable products versus single variants.
- Offer page: the plus between the order card and the offer card keeps the desktop design on phones and stacked tablet widths (green, with connector lines into both cards); the product name in the order card is one step smaller on phones.
2.0.0 6.5.8.0 - 6.5.8.19
Every line below is new or changed since 1.1.7. Versions are platform-banded: 2.x = Shopware 6.5, 3.x = Shopware 6.6, 4.x = Shopware 6.7.
- Redesigned offer page: order-context card and offer card side by side, benefit checklist, reassurance strip, a prominent accept button with the price on it, sticky actions on mobile, robust handling of product images and long product names.
- Offer page layouts via Shopping Experiences, with per-section display options (context pill, subline, context card, recommendation badge, discount row, savings display, tax note, benefit checklist, reassurance strip).
- Per-campaign offer copy: the subline in both payment variants, label above the headline, short benefit, product benefits and decline button text; short benefit and product benefits support the %product% placeholder; campaign names are translatable.
- Analytics dashboard: added revenue, average upsell value, revenue per 100 orders and acceptance rate as KPIs, plus shown/accepted/declined/failed, a revenue-over-time chart, date presets and campaign and sales channel filters.
- New "Activity" tab: per order, what the offer did (shown, accepted, declined, not applied, failed) — including plain-language reasons when a matching campaign was held back.
- New "Health" tab: checks the extension's setup and shows the most common reasons why no offer appears.
- Campaign detail reorganised into Campaign / Offer / Handling tabs, with a readiness strip and a live preview of the offer page in both payment variants — no test order needed; new campaigns start inactive.
- Campaign list with a filter sidebar, type-ahead campaign and product search, and optional metric columns (shown, accepts, acceptance rate, added revenue).
- Campaign selection prefers the most specifically targeted campaign: product triggers over category and manufacturer triggers over "Always (any order)"; priority decides within the same specificity.
- Cart promotion policy per campaign: suppress the offer (safe default) or stack the promotion and calculate the actual add-on amount.
- PayPal: the silent recharge now also covers saved PayPal credit/debit cards; wallet orders without a saved payment approve the add-on amount with a quick confirmation at PayPal.
- Order and money-path fixes: correct VAT on the discount in B2B net shops, accepting also works on orders with shipping discounts, cart-promotion line items without a product reference no longer break campaign matching, recharges refuse currencies with other than two decimal places.
- Admin quality: fully reviewed copy in German and English, translated health checks, rounded and localised amounts and rates, reliable tab navigation; failed acceptances show a plain-language summary with copyable technical details.
1.1.7 6.7.0.0 - 6.7.13.0
1.1.6 6.7.0.0 - 6.7.13.0
- Focused add-on offers after checkout, with accepted products assigned to the existing order and no second checkout.
- Offer targeting by product, category, or manufacturer, with percentage, fixed, or no discount.
- Support for invoice, prepayment, cash on delivery, and PayPal. Depending on the payment method, an additional payment approval may be required.
- Safe order handling with stock checks, configurable shipping policy, protection for already documented orders, and one-time expiring offer links.
- Built-in analytics with impressions, accepts, acceptance rate, added revenue, and a health check.