*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;color:#3d3654;font-family:ui-rounded,'SF Pro Rounded','Segoe UI',system-ui,-apple-system,Arial,sans-serif;line-height:1.7;font-size:17px;background:linear-gradient(180deg,#ede9fe 0%,#f7f4ff 340px,#fff9f3 900px,#f2fbf6 100%)}
h1,h2,h3{color:#2c2545;line-height:1.25;font-weight:800}
a{color:#6d28d9;text-decoration:none}
a:hover{text-decoration:underline}
.wrap{max-width:1120px;margin:0 auto;padding:0 24px}
.site-header{background:rgba(255,255,255,.85);backdrop-filter:blur(10px);position:sticky;top:0;z-index:50;border-bottom:3px solid #ede9fe}
.site-header .wrap{display:flex;align-items:center;gap:20px;padding:12px 24px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:10px;text-decoration:none;color:#2c2545;font-weight:800;font-size:22px}
.brand:hover{text-decoration:none}
.brand svg{width:38px;height:38px}
.nav{display:flex;gap:4px;flex-wrap:wrap;margin-left:auto;align-items:center}
.nav a{text-decoration:none;color:#3d3654;font-weight:700;font-size:14.5px;padding:9px 14px;border-radius:999px}
.nav a:hover{background:#ede9fe;text-decoration:none;color:#6d28d9}
.nav a.cta{background:#6d28d9;color:#fff;box-shadow:0 6px 18px rgba(109,40,217,.28)}
.nav a.cta:hover{background:#5b21b6;color:#fff}
.dots{position:absolute;inset:0;background-image:radial-gradient(#c4b5fd 2.2px,transparent 2.3px);background-size:22px 22px;opacity:.35;pointer-events:none}
.hero{padding:58px 0 12px;position:relative;overflow:hidden}
.hero-inner{position:relative}
.eyebrow{display:inline-block;background:#ffedd5;color:#9a3412;font-weight:800;font-size:13px;letter-spacing:1.5px;text-transform:uppercase;padding:8px 18px;border-radius:999px;margin-bottom:16px;box-shadow:0 6px 16px rgba(251,146,60,.25)}
.hero h1{font-size:clamp(36px,5.6vw,60px);margin:0 0 16px;letter-spacing:-.5px}
.hero h1 .hl{color:#6d28d9}
.lede{max-width:66ch;color:#5b5478;font-size:18px}
.tool-card{background:#fff;border-radius:24px;margin:30px 0 12px;box-shadow:0 18px 48px rgba(139,92,246,.16);border:1px solid #ede9fe;overflow:hidden}
.tool-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:20px 26px;background:linear-gradient(135deg,#ede9fe,#ffedd5);border-bottom:1px solid #f1eafd}
.tool-head h2{margin:0;font-size:24px}
.privacy-chip{margin-left:auto;display:inline-flex;align-items:center;gap:8px;background:#fff;border:2px solid #6d28d9;color:#6d28d9;font-weight:800;font-size:13px;padding:8px 16px;border-radius:999px}
.privacy-chip svg{width:16px;height:16px}
.tool-body{padding:28px 26px}
.opts{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:18px;margin-bottom:24px}
.opt{background:#faf9ff;border:2px solid #ede9fe;padding:18px;border-radius:18px}
.opt.mint{background:#f2fbf6;border-color:#d1fae5}
.opt.peach{background:#fffaf3;border-color:#ffedd5}
.opt-label{display:block;font-weight:800;font-size:14px;letter-spacing:.6px;text-transform:uppercase;color:#6d28d9;margin-bottom:12px}
.opt.mint .opt-label{color:#047857}
.opt.peach .opt-label{color:#c2410c}
.opt-hint{font-size:13.5px;color:#8a84a3;margin:10px 0 0}
.seg{display:flex;flex-wrap:wrap;gap:8px}
.seg button{border:2px solid #ddd6fe;background:#fff;color:#3d3654;padding:8px 15px;font-weight:700;font-size:13.5px;cursor:pointer;font-family:inherit;border-radius:999px;transition:all .15s}
.seg button:hover{border-color:#a78bfa}
.seg button[aria-pressed="true"]{background:#6d28d9;color:#fff;border-color:#6d28d9;box-shadow:0 4px 12px rgba(109,40,217,.3)}
.opt.mint .seg button[aria-pressed="true"]{background:#059669;border-color:#059669;box-shadow:0 4px 12px rgba(5,150,105,.3)}
.opt.peach .seg button[aria-pressed="true"]{background:#ea580c;border-color:#ea580c;box-shadow:0 4px 12px rgba(234,88,12,.3)}
.num-row{display:flex;align-items:center;gap:12px}
.num-row input[type=range]{flex:1;accent-color:#6d28d9}
.num-row input[type=number]{width:70px;border:2px solid #ddd6fe;border-radius:12px;padding:8px 10px;font-size:15px;font-family:inherit;background:#fff;color:#3d3654}
.count-val{font-weight:800;color:#6d28d9;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 #6d28d9;background:transparent;color:#6d28d9;padding:12px 26px;font-weight:800;font-size:15px;cursor:pointer;font-family:inherit;border-radius:999px;display:inline-flex;align-items:center;gap:9px;text-decoration:none;transition:all .15s}
.btn:hover{background:#ede9fe;text-decoration:none}
.btn.primary{background:#6d28d9;color:#fff;box-shadow:0 8px 22px rgba(109,40,217,.32)}
.btn.primary:hover{background:#5b21b6}
.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:#059669}
.output{margin-top:20px;background:#faf9ff;border:2px solid #ede9fe;min-height:130px;padding:20px;border-radius:18px}
.output ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.output li{background:#fff;border:1px solid #ede9fe;border-radius:16px;padding:14px 18px;cursor:pointer;box-shadow:0 6px 18px rgba(139,92,246,.08);display:flex;gap:14px;align-items:flex-start}
.output li:hover{box-shadow:0 10px 24px rgba(139,92,246,.16)}
.output li .idx{flex:none;width:38px;height:38px;border-radius:50%;background:#ede9fe;color:#6d28d9;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:16.5px;color:#2c2545}
.output li .ds{display:block;font-size:14px;color:#5b5478}
.output li .rl{display:block;font-size:13px;color:#047857;margin-top:3px}
.output li .mini-copy{margin-left:auto;flex:none;font-size:12px;font-weight:800;color:#6d28d9;border:2px dashed #c4b5fd;padding:5px 12px;border-radius:999px;align-self:center}
.output .placeholder{color:#a5a0bd;text-align:center;margin:32px 0;font-size:15px}
.output-meta{margin-top:12px;font-size:13.5px;color:#8a84a3}
.limits{margin-top:22px;background:#fffaf3;border:2px dashed #fb923c;padding:20px 22px;border-radius:18px}
.limits h3{margin:0 0 10px;font-size:19px;color:#9a3412;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:#5b5478}
.limits li{margin-bottom:7px}
.section{padding:52px 0 8px}
.section h2{font-size:clamp(28px,3.6vw,40px);margin:0 0 14px}
.section h2 .hl{color:#6d28d9}
.sub{color:#5b5478;max-width:68ch;margin:0 0 24px}
.cards3{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:20px}
.card{background:#fff;border:1px solid #ede9fe;border-radius:24px;padding:24px;box-shadow:0 12px 30px rgba(139,92,246,.10);display:flex;flex-direction:column}
.card.peach{border-color:#ffedd5;box-shadow:0 12px 30px rgba(251,146,60,.10)}
.card.mint{border-color:#d1fae5;box-shadow:0 12px 30px rgba(16,185,129,.10)}
.card h3{margin:0 0 10px;font-size:19px}
.card p{margin:0 0 14px;color:#5b5478;font-size:15px;flex:1}
.card .icon{width:46px;height:46px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin-bottom:14px}
.card .icon svg{width:24px;height:24px}
.card a.more{font-weight:800;font-size:14.5px}
.prose{max-width:74ch}
.prose p{margin:0 0 16px}
.prose h2{margin:36px 0 12px;font-size:27px}
.prose h3{margin:28px 0 10px;font-size:20px}
.prose ul,.prose ol{margin:0 0 18px;padding-left:22px}
.prose li{margin-bottom:8px}
.prose table{width:100%;border-collapse:collapse;margin:18px 0;font-size:15.5px}
.prose th{background:#ede9fe;color:#2c2545;text-align:left;padding:10px 14px}
.prose td{padding:10px 14px;border-bottom:1px solid #ede9fe}
.callout{background:#ede9fe;border-radius:18px;padding:18px 22px;margin:20px 0}
.callout.peach{background:#ffedd5}
.callout.mint{background:#d1fae5}
.faq-item{background:#fff;border:1px solid #ede9fe;border-radius:18px;padding:18px 22px;margin-bottom:14px;box-shadow:0 8px 22px rgba(139,92,246,.08)}
.faq-item h3{margin:0 0 8px;font-size:18px}
.faq-item p{margin:0;color:#5b5478;font-size:15.5px}
.site-footer{background:#2c2545;color:#cfc9e8;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:#fff;margin:0 0 12px;font-size:16px}
.site-footer a{color:#cfc9e8;font-size:14.5px;display:block;margin-bottom:8px}
.site-footer a:hover{color:#fff}
.site-footer .fine{grid-column:1/-1;font-size:13px;color:#9d95c4;border-top:1px solid #453d68;padding-top:18px;margin-top:6px}
.breadcrumb{font-size:13.5px;color:#8a84a3;margin:22px 0 0}
.breadcrumb a{color:#6d28d9}
.page-hero{padding:44px 0 6px}
.page-hero h1{font-size:clamp(32px,4.6vw,48px);margin:0 0 14px}
@media(max-width:700px){.tool-body{padding:20px 16px}.output li{flex-wrap:wrap}.nav{margin-left:0}}
Home / How to Write a Marketing Offer
How to Write a Marketing Offer That Converts
A good offer is a good sentence before it is a good deal. Here is a practical framework for turning any mechanic into copy that gets clicked and redeemed.
Most weak offers fail at the sentence level, not the math level. The discount could be generous, but if the headline buries the value, adds friction, or reads like fine print, shoppers scroll past. Writing a marketing offer is a small, learnable skill with a repeatable structure.
The anatomy of a strong offer
Every offer needs four elements, in this order:
- The value, up front. Lead with what the customer gets: "20% off," "free shipping," "a free gift." Shoppers decide in about a second whether to keep reading; the value is what earns that second.
- The action. What must they do? Buy two, spend $50, sign up, use a code. One action, stated plainly.
- The boundary. Which products, which dates, which customers. Boundaries protect your margin and, paradoxically, make the offer more believable: "on all full-price items" sounds more real than "on everything (probably)."
- The urgency. Why act now? An end date, a quantity cap, or a genuine limited window.
A headline only has room for elements one and four; the rest belongs in the subhead and terms. Example: headline "24-Hour Flash Sale: 30% Off," subhead "All skincare sets, today only, no code needed."
Headline formulas that keep working
- Number + benefit + deadline: "Save 25% on Bundles, Ends Sunday."
- Action + threshold + reward: "Spend $75, Get Free 2-Day Shipping."
- Exclusivity + access: "Members Shop First: Extra 15% Off."
- Problem + relief: "Cart Still Full? Take 10% Off to Finish Checkout."
Keep headlines under about ten words. If you need a comma splice and a semicolon to explain the deal, the deal is too complicated; simplify the mechanic instead of the sentence. More starter headlines are waiting in the offer generator.
Write the terms like a human
Clear terms increase redemption; vague terms increase support tickets. State the valid dates, the eligible products, and the main restrictions in plain language. "Valid March 1 to 7 on full-price items; one code per customer; cannot be combined with other offers" beats a paragraph of legalese and beats silence even more. Hidden restrictions discovered at checkout are one of the fastest ways to lose a customer you just paid to acquire.
Match the voice to the mechanic
A flash sale can shout; a loyalty reward should feel like a thank-you. Write the offer in the voice the customer already associates with you. A formal brand running a "SPLISH SPLASH MEGA DEAL" creates a disconnect that cheapens both the brand and the offer. If your emails are calm and helpful, your offer copy should be too.
Test one thing at a time
When an offer underperforms, resist changing the headline, the discount, and the audience at once. Change the headline first: it is the cheapest variable to test and often the culprit. Then test the threshold ("over $50" vs "over $75"), then the mechanic itself. Keep a simple log of what you ran, when, and what happened; after a few cycles you will have a playbook instead of guesses. For examples of finished offers across mechanics, browse the examples page.
Quick check before you publish: value in the first five words, one clear action, honest boundaries, a real deadline. If all four are present, your offer copy is doing its job.