AI product bundles manual.

From the first generation to the discount in the basket: build and approve sets, configure sources and limits, choose the position - and find out why a discount is not applying when in doubt.

System requirements

Shopware 6.7 with Storefront, PHP 8.2 or newer. Background runs and the scheduled run need a working message queue; the built-in admin worker is enough.

For AI scoring you need your own API key with the provider of your choice. Billing happens directly there; nothing is routed through our servers.

Installation

Upload the ZIP in the admin under Extensions, install and activate it. Then enter the licence key on the licence screen.

Ready in five steps

  • Enter and activate the licence key
  • Choose the position on the product page under Settings
  • Define set size and sets per product
  • Click "Generate bundles" in the Bundles tab
  • Review the results and approve them
Important: only approved sets appear in the shop. A freshly generated set is open at first and invisible to customers.

How the sets are built

Products per bundle defines how many products a set contains in total, the anchor product included. At three the customer gets the item being viewed plus two partners.Bundles per product defines how many different sets are created for one product. The sets do not overlap: a partner already used in one set is not reused for the next.Allow smaller bundles permits a set with fewer products when not enough fitting partners are found. Switched off the rule is: either the set is complete or it is not created at all.

Data sources

Basket analysis evaluates which products were actually ordered together - the most reliable source. A minimum number of shared orders and a look-back period control how strictly it filters.Viewed together evaluates which products visitors look at within the same visit. Per visit a rolling window of recently viewed products is kept, and the current product is paired with everything in it.Shared categories and shared properties help when order history is thin. Same manufacturer is the weakest source and meant only as a last resort.

If several sources are active, their weights add up. Genuine co-purchases count triple; "viewed together" weighs more than the catalogue sources and less than real purchases.

On privacy: "viewed together" sets no cookies and stores no visitor data - only product pairs with a counter. Bots are discarded. If AI Cross-Selling is installed, the plugin adopts its existing counters once during the update.

Limits and exclusions

The maximum partner price limits how expensive a partner may be relative to the anchor product. At 60, a product costing 100 euros only gets partners up to 60 euros. This produces sets with accessory character rather than arbitrary pairings of cheap and expensive articles. Zero disables the rule.

Only available products excludes clearance articles without stock so no sets are created that the shop immediately hides again.Exclude manufacturers and exclude categories keep products out entirely - they become neither anchor nor partner. Useful for vouchers, spare parts or shipping articles.
Two points of effect: the exclusion applies when generating new sets and when displaying them. An existing set containing an excluded product disappears completely when "hide incomplete bundles" is active, otherwise it is shown without that product. Products without a manufacturer are never affected; variants inherit the manufacturer of their parent product.

Individual products

The normal run considers the strongest products from order history and is capped by "maximum anchor products per run".

In the Individual products tab you select articles deliberately. Sets are created for them without that cap, even if they barely appear in the order history. After the run the results appear directly below the selection and can be approved, rejected, deactivated or edited there.

A selected parent product includes its variants; the data basis always comes from the purchasable products.

If a run finds nothing for a product, relax the rules helps: for that single run all data sources are used, minimum values are set to one, price ratio and minimum AI score are suspended and the period widens to two years.

What still applies: exclusions for manufacturers and categories, stock and active products remain in force - otherwise sets would be created that the shop may not display at all. The saved settings do not change; the relaxation applies to this run only.

In a relaxed run the AI no longer discards sets but only scores and names them; its assessment still appears on every set. Results of a relaxed run always go into the review pool, even with auto-approval active.

Another run for the same product does not replace the existing sets but adds further ones - identical combinations are merely updated. How many sets a product shows in the shop is controlled by "maximum bundles shown"; the default is one. A marker points out anchor products with several sets, and the filter "only products with several bundles" in the review pool shows exactly those.

The status of a set

A set is either open, approved or rejected. The available buttons follow from that:

  • Open - edit, approve, reject
  • Approved - edit and deactivate. Deactivating takes the set out of the shop and returns it to open; name, description text and discount are kept
  • Rejected - edit and approve

The coloured figures next to a set explain themselves on hover.

Position on the product page

Four positions are available: at the top of the buy box, directly above the price; below the complete buy box; above the tab bar, meaning above description and reviews; or below the entire tab area.

"Do not display" hides the box without deleting the generated sets.

Show heading and show description text switch the two text lines of the box on or off. The texts themselves are maintained per set through "Edit".
On multilingual shops: the default texts are translated through snippets. A text set on an individual bundle, by contrast, appears identically in every language. If the heading stays empty the default applies; for the description text the AI reasoning comes first, then the default. Both survive another generation run.

How it looks in the shop

Products can be deselected controls whether customers may remove products from the set. Switched on, a checkbox sits in front of every product and total price and saving recalculate live. Switched off the checkboxes are gone and the set only goes into the basket as a whole - useful when the discount should apply to the complete set only.Show article number displays the article number under every product in the box and additionally behind the product names in the review pool. The search there then finds sets by article number too.

The set button text can be adapted: either one text for all languages or one per language. Empty fields fall back to the general text first, then to the translated default.

With assign bundles both ways a set appears not only on the anchor product but also on the product pages of the partners it contains. The anchor product is shown there as an equal member of the set.

Two independent routes: the setting applies globally; in addition, the mutual assignment can be set for individual sets in the review pool through "Edit". A set with its own tick therefore appears both ways even when the global setting is off.

Link products controls whether the product name in the box leads to the product page. Switched off the name stays plain text and the customer stays where they are. Show quick info in a modal opens a small window with image, article number, price and short description when a product is clicked. With links switched off, the button to the product is omitted inside it. Both options work independently.

The product layout determines the arrangement in the box. Wrap into rows shows four products per row, two on tablets, one on phones. Slider keeps all products in one swipeable row; on desktop arrows appear that disable themselves at the ends. List gives every product its own row across the full width.

Rule of thumb: with more than four products in a set, slider or list is usually the better choice - wrapping gets tall quickly.

AI scoring

With AI scoring active, every set is sent to the chosen provider. The AI decides whether the products belong together, assigns a score and, on request, writes a short sales headline. Sets below the minimum score are discarded and never reach the review pool.

Names, description texts and discount reasoning are produced by the AI in the default language of the shop.

On the key: the API key is stored server side and never delivered to the browser. "Test connection" verifies access directly.

Set discount

Switched off by default. When active, the discount applies as soon as all products of an approved set are in the basket. It appears there as its own line item and is determined afresh on every recalculation: if a product of the set leaves the basket, the discount disappears automatically.

The percentage from the settings applies to all sets. Through "Edit" a deviating value can be set per set, which then takes precedence.

Zero is the deciding value: a set with zero always follows the global rate - a later change there takes effect on all such sets immediately. Only an AI suggestion or a manually entered value binds an individual rate to the set.
Each product counts towards one set only. If two sets overlap, the discount is not granted twice.

The minimum set value prevents discounts on very small orders. With tier the discount by set size, larger sets receive more - five percent for two, eight for three and twelve from four products, for example. The tiering applies only to sets without their own percentage.

With bundle name as discount name the discount line carries the name of the set, such as "Garden set (-25 %)". The customer then sees in the basket which set triggered it.

AI suggests the discount

With this setting the AI assigns a discount suggestion to every set during generation. The basis is how well the products fit - very coherent sets need only a small incentive, loosely fitting ones a larger one - and the price level of the set, because with expensive sets a few percent already carry weight.

The maximum AI discount caps the suggestion hard; the AI can never exceed it. The value lands as a percentage on the set, is visible in the review pool and can be changed through Edit at any time. Existing sets keep their value.

The discount is still only granted when the set discount is switched on overall.

Discount diagnosis

The discount diagnosis in the settings checks whether a combination of article numbers would trigger a discount. It runs server side through exactly the same logic as the basket calculation.

If no discount applies, it names the concrete reason: switch off, unknown article number, no approved set, missing set product or a percentage of zero.

Automation

Auto-approve releases sets from a configured total score without manual review. Scheduled run produces new sets regularly through the scheduled task.

When generating from the administration a window shows the progress: anchor products processed, sets created and sets discarded by the AI. Continue in the background hands the run to the message queue - the admin is immediately usable again, a slim bar shows the state, and the run continues even with the browser closed.

The run is protected against interruptions: if a segment fails, the admin retries with growing pauses, and after reloading the page a running generation is picked up automatically. It works in segments and can be cancelled at any time - sets already created are kept.

On the console: bin/console staw:product-bundles:generate --size=3 --per-product=2

Check the display

If no set appears on a product page although one should, the "check display" tool answers that in one go: enter an article number and it names the sets that appear on that page - and for the rest, the reason why not.

The check uses exactly the same matching as the storefront, including variants and mutual assignment. What it shows is therefore precisely what the customer sees.

Troubleshooting

No sets are created: usually order history is missing. Lower the minimum number of shared orders or additionally enable the shared categories source.
The box does not appear in the shop: check that the sets are approved, that storefront display is active and that the position is not set to "do not display". Then clear the shop cache.
A set suddenly disappeared: with "hide incomplete bundles" active, a set vanishes as soon as one of its products is no longer available or no longer visible in the sales channel.
The discount does not apply: the discount diagnosis names the reason in one go - that saves trial and error.

Support

Questions and requests come straight to us - support is from the developer, not from a queue. You can also request a feature through the Plugin Suite in the admin.

Availability

Directly from Stone & Water

Available now

Monthly12.99 €
Half-yearly64.99 €16 % cheaper
Best priceYearly115.99 €25 % cheaper

All prices net, plus VAT.

You buy the licence directly from us and receive an invoice from us. Installation by upload in the admin without SSH, updates through our licence platform, support straight from the developer.

Get in touch +49 2555 9997342

Shopware Store

In preparation

The plugin will be listed in the official Shopware Community Store. Installation and automatic updates then run through the plugin manager in the backend, billing through your Shopware account. We will link it here as soon as it is available.