Cross Selling | Post-Purchase Upsell & Cross Selling
Description
Highlights
- Add-on item in the same order – no second checkout
- Automatically show the best-matching offer for each eligible order
- Set up the first campaign in minutes
- Acceptance rate, added revenue and revenue per 100 orders
- Offer page that matches your shop, with image gallery and zoom
About the Extension
Just two clicks away in our demo shop: a live offer page and access to the Shopware Administration. No order required.
When an order meets your campaign conditions, Post-Purchase Cross-Selling & Upselling shows exactly one relevant add-on offer after the order is placed and before the order confirmation page. If the customer accepts it, the item is added to the existing order, without a second checkout or a new order. The add-on amount is shown upfront. If the customer declines, closes the page or lets the offer expire, the original order remains confirmed and unchanged.
Why it pays off
- You reach customers immediately after they place an order, not undecided visitors during checkout.
- 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 relevant accessory, refill, care product, spare part or warranty can increase the order value, without extra traffic or another checkout step.
What you control
- Campaigns for a specific product, category, manufacturer or any eligible order.
- Targeting by order value, customer group, shipping country, payment method, product exclusions, validity period and sales channel.
- Several campaigns can run in parallel: product triggers take precedence over category and manufacturer triggers; priority decides within each tier.
- Per campaign: offer product, percentage or fixed discount, quantity, and all offer-page copy for each language, with placeholders for product, price and discount.
- The "Analytics" tab shows acceptance rate, added revenue and revenue per 100 orders by campaign and sales channel; the "Activity" tab records every offer with its outcome and reason.
- The "Revenue potential" tab estimates the additional revenue based on your order history and shows the share of orders with a supported payment method.
An offer page that matches your shop
The built-in offer page inherits the shop logo, colours, corner radii and borders from the theme. All product images are available with thumbnails, swipe gestures and a zoom view, and are displayed larger on mobile. You can also assign your own Shopping Experiences layout and reduce the offer card to the essentials for each layout – with no extra sales copy. The preview shows the offer page for each sales channel and language, without placing a test order.
Safely added to the existing order
- When the customer accepts the offer, all conditions are checked again: campaign and offer product, payment, stock, shipping, policies, and the displayed price and quantity. If a check fails, the order stays unchanged.
- Shopware recalculates the grand total and taxes; a configured discount appears as a separate discount line item.
- Invoice, prepayment, cash on delivery and direct debit are supported only while the order is still open and unpaid.
- With a saved PayPal payment or a card saved through PayPal, the add-on amount is charged as a separate PayPal transaction without further customer action.
- Without a saved payment, the customer briefly approves the add-on amount at PayPal when this option is enabled. No offer is shown for a PayPal card payment without a saved card.
Optional ERP export: waiting until the order is ready
For a selected ERP integration or user account, affected orders remain in the "Waiting" state while the customer's decision or payment confirmation is still pending. The order becomes "Ready for the ERP" once processing is complete; interrupted cases appear as "Review needed". The discount line item can have its own product number.
Just two clicks away in our demo shop: a live offer page and access to the Shopware Administration. No order required.
When an order meets your campaign conditions, Post-Purchase Cross-Selling & Upselling shows exactly one relevant add-on offer after the order is placed and before the order confirmation page. If the customer accepts it, the item is added to the existing order, without a second checkout or a new order. The add-on amount is shown upfront. If the customer declines, closes the page or lets the offer expire, the original order remains confirmed and unchanged.
Why it pays off
- You reach customers immediately after they place an order, not undecided visitors during checkout.
- 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 relevant accessory, refill, care product, spare part or warranty can increase the order value, without extra traffic or another checkout step.
What you control
- Campaigns for a specific product, category, manufacturer or any eligible order.
- Targeting by order value, customer group, shipping country, payment method, product exclusions, validity period and sales channel.
- Several campaigns can run in parallel: product triggers take precedence over category and manufacturer triggers; priority decides within each tier.
- Per campaign: offer product, percentage or fixed discount, quantity, and all offer-page copy for each language, with placeholders for product, price and discount.
- The "Analytics" tab shows acceptance rate, added revenue and revenue per 100 orders by campaign and sales channel; the "Activity" tab records every offer with its outcome and reason.
- The "Revenue potential" tab estimates the additional revenue based on your order history and shows the share of orders with a supported payment method.
An offer page that matches your shop
The built-in offer page inherits the shop logo, colours, corner radii and borders from the theme. All product images are available with thumbnails, swipe gestures and a zoom view, and are displayed larger on mobile. You can also assign your own Shopping Experiences layout and reduce the offer card to the essentials for each layout – with no extra sales copy. The preview shows the offer page for each sales channel and language, without placing a test order.
Safely added to the existing order
- When the customer accepts the offer, all conditions are checked again: campaign and offer product, payment, stock, shipping, policies, and the displayed price and quantity. If a check fails, the order stays unchanged.
- Shopware recalculates the grand total and taxes; a configured discount appears as a separate discount line item.
- Invoice, prepayment, cash on delivery and direct debit are supported only while the order is still open and unpaid.
- With a saved PayPal payment or a card saved through PayPal, the add-on amount is charged as a separate PayPal transaction without further customer action.
- Without a saved payment, the customer briefly approves the add-on amount at PayPal when this option is enabled. No offer is shown for a PayPal card payment without a saved card.
Optional ERP export: waiting until the order is ready
For a selected ERP integration or user account, affected orders remain in the "Waiting" state while the customer's decision or payment confirmation is still pending. The order becomes "Ready for the ERP" once processing is complete; interrupted cases appear as "Review needed". The discount line item can have its own product number.
Details
- Available: English, German
- Latest update: 4 September 2026
- Publication date: 8 July 2026
- Version: 4.8.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
For the complete manual with screenshots and deeper PayPal setup details, see commercewerk.de/en/docs/shopware/post-purchase-upsell/overview.
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.
- Article number for the discount position – optional. This article number is written to the discount position of an accepted offer so your ERP can map it. The setting applies to offers accepted after you save it; orders accepted earlier stay unchanged.
Emails, retention & advanced
- Send customer confirmation email on accept – on by default. Edit the wording under Settings > Email templates.
- CC recipients for the confirmation email – empty by default. Additional addresses that receive a visible copy of each acceptance confirmation email; these addresses are visible to customers. Separate addresses with commas or semicolons. When empty, no CC copy is sent.
- BCC recipients for the confirmation email – empty by default. Additional addresses that receive a hidden copy, for example an internal inbox; these addresses are not visible to customers. Separate addresses with commas or semicolons. When empty, no BCC copy is sent.
- 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.
ERP export
- Wait until the order is ready before the ERP can import it – off by default. The selected ERP integration and/or user account waits until an offer can no longer change the order. The ERP must regularly query every order that is still eligible for import.
- Integration the ERP uses to import orders – choose this when the ERP uses its own integration credentials.
- User account the ERP uses to import orders – choose this when the ERP signs in with a username and password. Create a separate Administration account used only by the ERP: while an order is waiting, its order searches and Administration order module cannot find it. If both an integration and user account are selected, both wait.
Per sales channel: the master switch, offer-link validity, the customer email with its CC/BCC recipients, ERP export settings and 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 access under Settings > Users & permissions. Available are View, Edit, Create and Delete; every tab of the extension follows View. "Release ERP exports" is its own switch under Additional permissions. The permissions build on each other, so Create already includes Edit and View. Roles saved with versions before 4.7.0 need one open-and-save, then the ERP Export and Revenue potential tabs appear.
- 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.
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.8.0 6.7.0.0 - 6.7.13.1
New
- Dynamic Product Groups as an offer source.
- The offer page preview opens on the selected storefront domain, optionally with a specific preview product.
- Analytics by offer product: a new "By offer product" table on the "Analytics" tab.
Changed
- The extension name and menu item were slightly adjusted.
4.7.0 6.7.0.0 - 6.7.13.1
New
- Revenue potential: a new tab showing what share of orders is eligible for an add-on offer, and an estimate of the additional revenue.
- Support per payment method, including those that work only for some orders, so any gap is visible.
- The estimate for the selected period uses an adjustable add-on amount and acceptance rate.
4.6.1 6.7.0.0 - 6.7.13.1
Fixed
- The offer page now takes colours, corner radii and borders from the shop theme.
- Double-clicking the arrows in the zoom view or the thumbnails no longer selects text.
4.6.0 6.7.0.0 - 6.7.13.1
New
- Image gallery on the offer page: all product images with thumbnails, swipe gestures and a zoom view.
Improved
- Leaner offer card: the subline and the short benefit are hidden by default and can be re-enabled per Shopping Experiences layout.
- The header now shows only the shop logo.
- Preview: a small chip in the header replaces the previous bar at the top of the page.
- Larger product photos on phones; the offer card stays the same height while customers browse the gallery.
4.5.0 6.7.0.0 - 6.7.13.1
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.1
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.1
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.1
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.1
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.1
- 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.1
- 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.1
- 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.1
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.8.0 6.6.0.0 - 6.6.10.23
New
- Dynamic Product Groups as an offer source.
- The offer page preview opens on the selected storefront domain, optionally with a specific preview product.
- Analytics by offer product: a new "By offer product" table on the "Analytics" tab.
Changed
- The extension name and menu item were slightly adjusted.
3.7.0 6.6.0.0 - 6.6.10.23
New
- Revenue potential: a new tab showing what share of orders is eligible for an add-on offer, and an estimate of the additional revenue.
- Support per payment method, including those that work only for some orders, so any gap is visible.
- The estimate for the selected period uses an adjustable add-on amount and acceptance rate.
3.6.1 6.6.0.0 - 6.6.10.23
Fixed
- The offer page now takes colours, corner radii and borders from the shop theme.
- Double-clicking the arrows in the zoom view or the thumbnails no longer selects text.
3.6.0 6.6.0.0 - 6.6.10.23
New
- Image gallery on the offer page: all product images with thumbnails, swipe gestures and a zoom view.
Improved
- Leaner offer card: the subline and the short benefit are hidden by default and can be re-enabled per Shopping Experiences layout.
- The header now shows only the shop logo.
- Preview: a small chip in the header replaces the previous bar at the top of the page.
- Larger product photos on phones; the offer card stays the same height while customers browse the gallery.
3.5.0 6.6.0.0 - 6.6.10.23
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.23
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.23
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.23
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.23
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.23
- 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.23
- 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.23
- 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.23
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.8.0 6.5.8.0 - 6.5.8.19
New
- Dynamic Product Groups as an offer source.
- The offer page preview opens on the selected storefront domain, optionally with a specific preview product.
- Analytics by offer product: a new "By offer product" table on the "Analytics" tab.
Changed
- The extension name and menu item were slightly adjusted.
2.7.0 6.5.8.0 - 6.5.8.19
New
- Revenue potential: a new tab showing what share of orders is eligible for an add-on offer, and an estimate of the additional revenue.
- Support per payment method, including those that work only for some orders, so any gap is visible.
- The estimate for the selected period uses an adjustable add-on amount and acceptance rate.
2.6.1 6.5.8.0 - 6.5.8.19
Fixed
- The offer page now takes colours, corner radii and borders from the shop theme.
- Double-clicking the arrows in the zoom view or the thumbnails no longer selects text.
2.6.0 6.5.8.0 - 6.5.8.19
New
- Image gallery on the offer page: all product images with thumbnails, swipe gestures and a zoom view.
Improved
- Leaner offer card: the subline and the short benefit are hidden by default and can be re-enabled per Shopping Experiences layout.
- The header now shows only the shop logo.
- Preview: a small chip in the header replaces the previous bar at the top of the page.
- Larger product photos on phones; the offer card stays the same height while customers browse the gallery.
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.1
1.1.6 6.7.0.0 - 6.7.13.1
- 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.