*{box-sizing:border-box} html{scroll-behavior:smooth} body{margin:0;color:#eaf6f8;font-family:'Segoe UI',system-ui,-apple-system,Arial,sans-serif;line-height:1.7;font-size:17px;background:linear-gradient(180deg,#04263e 0%,#063a52 45%,#0a5a6e 100%);min-height:100vh} h1,h2,h3{line-height:1.25;font-weight:800;color:#fff} a{color:#5eead4;text-decoration:none} a:hover{text-decoration:underline;color:#99f6e4} .wrap{max-width:1120px;margin:0 auto;padding:0 24px} .site-header{background:rgba(4,38,62,.75);backdrop-filter:blur(12px);border-bottom:1px solid rgba(94,234,212,.25);position:sticky;top:0;z-index:50} .site-header .wrap{display:flex;align-items:center;gap:20px;padding:12px 24px;flex-wrap:wrap} .brand{display:flex;align-items:center;gap:11px;text-decoration:none;color:#fff;font-size:23px;font-weight:800} .brand:hover{text-decoration:none;color:#5eead4} .brand svg{width:40px;height:40px} .nav{display:flex;gap:4px;flex-wrap:wrap;margin-left:auto;align-items:center} .nav a{text-decoration:none;color:#bfe3e8;font-size:14.5px;font-weight:600;padding:9px 15px;border-radius:999px;border:1px solid transparent} .nav a:hover{color:#5eead4;border-color:rgba(94,234,212,.4);background:rgba(94,234,212,.08);text-decoration:none} .nav a.cta{background:#5eead4;color:#04263e;border-color:#5eead4} .nav a.cta:hover{background:#99f6e4;color:#04263e} .waves{display:block;width:100%;height:90px;margin-bottom:-1px} .bubbles{position:absolute;inset:0;overflow:hidden;pointer-events:none} .bubble{position:absolute;border-radius:50%;border:2px solid rgba(94,234,212,.25);background:radial-gradient(circle at 30% 30%,rgba(255,255,255,.18),transparent 60%)} @keyframes rise{0%{transform:translateY(0)}100%{transform:translateY(-120px)}} .hero{padding:64px 0 0;position:relative;overflow:hidden} .hero-inner{position:relative;max-width:70ch;padding-bottom:30px} .eyebrow{display:inline-block;background:rgba(94,234,212,.12);border:1px solid rgba(94,234,212,.5);color:#5eead4;font-size:13px;font-weight:700;letter-spacing:2.5px;text-transform:uppercase;padding:8px 20px;border-radius:999px;margin-bottom:18px} .hero h1{font-size:clamp(36px,5.4vw,60px);margin:0 0 16px} .hero h1 .hl{color:#5eead4} .lede{color:#bfe3e8;font-size:18px} .console{background:rgba(255,255,255,.06);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid rgba(94,234,212,.35);border-radius:20px;margin:10px 0 12px;box-shadow:0 24px 70px rgba(0,0,0,.45),inset 0 1px 0 rgba(255,255,255,.12);overflow:hidden} .console-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:20px 28px;border-bottom:1px solid rgba(94,234,212,.2)} .console-head h2{margin:0;font-size:24px} .console-head .lights{display:flex;gap:8px} .console-head .lights span{width:13px;height:13px;border-radius:50%;background:rgba(94,234,212,.35)} .console-head .lights span:first-child{background:#5eead4} .privacy-chip{margin-left:auto;display:inline-flex;align-items:center;gap:8px;border:1px solid #5eead4;color:#5eead4;font-size:13px;font-weight:700;letter-spacing:1px;padding:8px 16px;border-radius:999px} .privacy-chip svg{width:16px;height:16px} .console-body{padding:28px} .opts{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:18px;margin-bottom:24px} .opt{background:rgba(4,38,62,.5);border:1px solid rgba(94,234,212,.25);padding:18px;border-radius:14px} .opt-label{display:block;font-weight:700;font-size:13.5px;letter-spacing:1.5px;text-transform:uppercase;color:#5eead4;margin-bottom:12px} .opt-hint{font-size:13.5px;color:#9fc3cc;margin:10px 0 0} .seg{display:flex;flex-wrap:wrap;gap:8px} .seg button{border:1px solid rgba(94,234,212,.4);background:rgba(255,255,255,.05);color:#eaf6f8;padding:8px 15px;font-size:13.5px;font-weight:600;cursor:pointer;font-family:inherit;border-radius:999px} .seg button:hover{border-color:#5eead4} .seg button[aria-pressed="true"]{background:#5eead4;color:#04263e;border-color:#5eead4;font-weight:700} .num-row{display:flex;align-items:center;gap:12px} .num-row input[type=range]{flex:1;accent-color:#5eead4} .num-row input[type=number]{width:70px;border:1px solid rgba(94,234,212,.4);background:rgba(4,38,62,.6);color:#eaf6f8;padding:8px 10px;font-size:15px;border-radius:10px;font-family:inherit} .count-val{font-weight:800;color:#5eead4;font-size:20px;min-width:40px;text-align:center} .actions{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-bottom:8px} .btn{border:2px solid #5eead4;background:transparent;color:#5eead4;padding:12px 26px;font-weight:700;font-size:15px;cursor:pointer;font-family:inherit;border-radius:999px;display:inline-flex;align-items:center;gap:9px;text-decoration:none} .btn:hover{background:rgba(94,234,212,.12);text-decoration:none} .btn.primary{background:#5eead4;color:#04263e;box-shadow:0 8px 26px rgba(94,234,212,.35)} .btn.primary:hover{background:#99f6e4} .btn svg{width:17px;height:17px} .btn:disabled{opacity:.35;cursor:not-allowed;box-shadow:none} .copy-note{font-size:14px;font-weight:700;color:#5eead4} .output{margin-top:20px;background:rgba(4,38,62,.55);border:1px solid rgba(94,234,212,.25);min-height:130px;padding:20px;border-radius:14px} .output ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px} .output li{background:rgba(255,255,255,.05);border:1px solid rgba(94,234,212,.25);border-radius:12px;padding:14px 18px;cursor:pointer;display:flex;gap:14px;align-items:flex-start} .output li:hover{background:rgba(94,234,212,.08)} .output li .idx{flex:none;width:38px;height:38px;border-radius:50%;background:#5eead4;color:#04263e;font-weight:800;display:flex;align-items:center;justify-content:center;font-size:15px} .output li .txt{min-width:0} .output li .nm{display:block;font-weight:800;font-size:17px;color:#fff} .output li .inc{display:block;font-size:14px;color:#bfe3e8} .output li .fr{display:block;font-size:13.5px;color:#5eead4;margin-top:3px} .output li .mini-copy{margin-left:auto;flex:none;font-size:12px;font-weight:700;color:#5eead4;border:1px dashed rgba(94,234,212,.6);padding:5px 12px;border-radius:999px;align-self:center} .output .placeholder{color:#7fa8b3;text-align:center;margin:32px 0;font-size:15px} .output-meta{margin-top:12px;font-size:13.5px;color:#9fc3cc} .limits{margin-top:22px;background:rgba(4,38,62,.55);border:2px dashed rgba(94,234,212,.5);padding:20px 22px;border-radius:14px} .limits h3{margin:0 0 10px;font-size:19px;color:#5eead4;display:flex;align-items:center;gap:10px} .limits h3 svg{width:22px;height:22px;flex:none} .limits ul{margin:0;padding-left:20px;font-size:15px;color:#bfe3e8} .limits li{margin-bottom:7px} .section{padding:56px 0 8px} .section h2{font-size:clamp(28px,3.6vw,40px);margin:0 0 14px} .section h2 .hl{color:#5eead4} .sub{color:#bfe3e8;max-width:68ch;margin:0 0 24px} .cards3{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:20px} .card{background:rgba(255,255,255,.06);backdrop-filter:blur(10px);border:1px solid rgba(94,234,212,.25);border-radius:18px;padding:24px;display:flex;flex-direction:column} .card h3{margin:0 0 10px;font-size:19px} .card p{margin:0 0 14px;color:#bfe3e8;font-size:15px;flex:1} .card .icon{width:46px;height:46px;border-radius:50%;background:rgba(94,234,212,.15);border:1px solid rgba(94,234,212,.5);display:flex;align-items:center;justify-content:center;margin-bottom:14px} .card .icon svg{width:24px;height:24px} .card a.more{font-weight:700;font-size:14.5px} .prose{max-width:74ch} .prose p{margin:0 0 16px;color:#cfe7ec} .prose h2{margin:36px 0 12px;font-size:27px} .prose h3{margin:28px 0 10px;font-size:20px;color:#5eead4} .prose ul,.prose ol{margin:0 0 18px;padding-left:22px;color:#cfe7ec} .prose li{margin-bottom:8px} .prose table{width:100%;border-collapse:collapse;margin:18px 0;font-size:15.5px} .prose th{background:rgba(94,234,212,.12);color:#5eead4;text-align:left;padding:10px 14px;border:1px solid rgba(94,234,212,.25)} .prose td{padding:10px 14px;border:1px solid rgba(94,234,212,.25);color:#cfe7ec} .prose strong{color:#fff} .prose code{background:rgba(4,38,62,.7);padding:2px 7px;border-radius:5px;font-size:.88em;color:#5eead4} .callout{background:rgba(94,234,212,.1);border-left:4px solid #5eead4;padding:18px 22px;margin:20px 0;border-radius:0 12px 12px 0} .callout p{margin:0} .faq-item{background:rgba(255,255,255,.05);border:1px solid rgba(94,234,212,.25);border-radius:14px;padding:18px 22px;margin-bottom:14px} .faq-item h3{margin:0 0 8px;font-size:18px;color:#5eead4} .faq-item p{margin:0;color:#bfe3e8;font-size:15.5px} .site-footer{background:#03202f;border-top:1px solid rgba(94,234,212,.25);margin-top:70px;padding:44px 0 30px} .site-footer .wrap{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:26px} .site-footer h4{color:#5eead4;margin:0 0 12px;font-size:15px;letter-spacing:1.5px} .site-footer a{color:#9fc3cc;font-size:14.5px;display:block;margin-bottom:8px} .site-footer a:hover{color:#5eead4} .site-footer .fine{grid-column:1/-1;font-size:13px;color:#6f96a0;border-top:1px solid rgba(94,234,212,.15);padding-top:18px;margin-top:6px} .breadcrumb{font-size:13.5px;color:#9fc3cc;margin:22px 0 0} .breadcrumb a{color:#5eead4} .page-hero{padding:44px 0 6px} .page-hero h1{font-size:clamp(32px,4.6vw,48px);margin:0 0 14px} @media(max-width:700px){.console-body{padding:20px 16px}.output li{flex-wrap:wrap}.nav{margin-left:0}} @media(prefers-reduced-motion:reduce){.bubble{animation:none!important}}

Product Bundle Pricing Guide

How to price product bundles so they lift order value without sinking margin: the four strategies, the discount ranges that work, and how to show the saving.

Product bundle pricing means selling two or more products together at one price, usually below the sum of buying each separately. Done well, it raises average order value without raising acquisition cost. Done badly, it gives away margin for a small basket-size lift. The mechanism is partly arithmetic and partly psychological: the bundle frames the purchase as one decision instead of several, and anchors the buyer on the higher sum-of-parts reference price.

The four bundle strategies

Pure bundling

Products are only available as a package; the items are not sold individually. Software suites and streaming subscriptions are the classic examples. Pure bundling gives you full control over the package and works best when the combination delivers more value together than the items would separately.

Mixed bundling

Customers can buy the bundle or the items individually. A "mix and match: buy 3, get 1 free" deal is mixed bundling. Giving the customer choice adds a personal touch, and the bundle still nudges baskets upward.

Leader bundling

A hero product grabs attention, paired with complementary extras. A console bundled with a game, or a hero serum bundled with a cleanser and moisturizer: the lead product is the draw, the extras add value and move units.

Captive bundling

The main product requires the add-on to function, like a printer and its ink. Powerful but easy to abuse; use it only where the pairing is genuinely useful to the customer.

The discount range that works

In most ecommerce categories, the bundle-saving range that works is roughly 10 to 25% off the sum of individual prices. Below that, the saving feels like a rounding error and will not change behavior. Above it, you erode margin and train discount-only buying habits. Pick your point in the range based on your contribution margin, then hold it.

Always display the saving

The most important pricing decision is not the discount, it is whether to show it. "Worth $100, yours for $85" outperforms showing only the bundle price, because the anchor makes the value concrete. Always display three numbers: the products' total, the bundle price, and the saving. A widely used guideline for displaying savings: show percentages for prices under 100 and absolute amounts for prices over 100, since each format reads as larger in its range.

Bundles that move slow stock

Bundling is one of the cleanest ways to clear slow-moving inventory: pair the slow item with a bestseller instead of discounting the slow item alone. The bundle protects the perceived value of your core line while the idle stock rides along. Keep bundled items in a narrow price band so the deal reads as coherent, not as a clearance bin.

Test one variable at a time

When a bundle underperforms, change the composition first (which items), then the discount depth, then the framing. Log what you ran and what happened; after a few cycles you will have a bundle playbook instead of guesses. For the broader guardrails, see our offer pricing rules, and generate bundle structures to test with the free product offer generator.