The pairing your customer never found out you sold
← Blog

The pairing your customer never found out you sold

Someone buys a dress and never finds out the brand also sells the exact heels styled with it in the campaign photos. They buy shoes somewhere else entirely. Someone else buys a bag of chili spice rub and never learns the brand also sells the marinade it's meant to pair with, and improvises with something from the regular grocery store instead. Both of these are the same missed sale: a product that was already a near-certain add-on, sitting one email away, that never got sent.

A pattern that shows up across founder interviews

I went looking for a founder on record saying, in so many words, "I realized our customers had no idea we sold the thing that goes with what they just bought." I couldn't verify one specific person saying exactly that, attributably, with a source I could point to and stand behind. So rather than paraphrase something into someone's mouth, here's the honest version: a pattern that shows up repeatedly across founder interviews and operator threads about post-purchase marketing, not attributed to any one person.

A founder launches a second or third product line, often something that pairs naturally with the first (the wallet brand that adds a ring, the spice brand that adds a marinade, the dress brand that adds shoes). Sales on the new line come in slower than expected, not because the product is bad, but because the people most likely to want it (existing customers who already bought the complementary item) never heard about it. The brand's newsletter mentions it once, to everyone, including people who bought nothing related. A chunk of existing customers find out about the pairing from a review, a friend, or not at all. The founder realizes, sometimes months later, that the highest-intent audience for the new product was sitting in their own order history the whole time, and nobody built the connection between "bought X" and "should hear about Y."

That's the shape of the problem, even without a name attached to it. It matches what's easy to verify structurally: catalogs grow faster than marketing systems do, and most post-purchase email is broadcast, not targeted.

Why "you might also like" doesn't work

Generic cross-sell email has a specific failure mode. It goes out to the whole list, tied to nothing anyone actually bought, usually as an occasional campaign rather than a system. "Complete your look" or "you might also like" lands in an inbox that has no idea why it's being shown that particular product, because it wasn't chosen based on what that person owns. It reads as marketing, gets treated as marketing, and gets ignored the way most marketing does.

The timing compounds the problem. A customer is most receptive to a cross-sell suggestion in the days right after a purchase, while the original item is still on their mind (it just shipped, or just arrived, or they're still deciding whether they made the right call). A campaign email sent six weeks later, unconnected to any specific order, misses that window entirely. It's poorly targeted and poorly timed at once, and the two problems stack.

Fixing this requires actually knowing what was bought, not just knowing who's on the list. That's a different kind of system than a newsletter tool. It needs order-level data, a way to map specific products to specific complementary products, and a trigger tied to the purchase event rather than the calendar.

What a solution could look like

There's a spread of ways brands try to solve this, and it's worth being honest about what each one actually does and doesn't fix.

A generic post-purchase upsell app (there are dozens on the Shopify app store) will trigger an email or an on-site popup after checkout, but most of them default to store-wide "trending" or "frequently bought together" logic pulled from aggregate order data. That's better than nothing, but it's not purchase-specific in the way that matters: it's reacting to what's popular across the whole store, not to what this customer actually bought.

A manual seasonal campaign (an email blast timed to a holiday or a new collection drop) gets the timing and creative right for one moment, but it's not personalized to the individual order, and it's not repeatable without someone rebuilding it every time.

Hardcoded product-bundle suggestions (a fixed "goes well with" list set once in the theme or the product page) solve the pairing-logic problem once, at a point in time, but they don't update as the catalog grows. Six months later there's a new product line that should be in the pairing logic and isn't, because nobody remembered to go back and edit it.

A fully custom purchase-aware recommendation automation is the only one of these that actually closes the loop: it reads the order, matches it to genuinely complementary products, and sends the recommendation on a schedule tuned to when the customer is still thinking about the purchase. It's also the only one that requires actual build work rather than a plugin install.

The solution I'd build

Here's how I'd approach this if I were building it for a D2C brand with a catalog that has real product relationships worth surfacing (not every catalog does, more on that below).

The trigger is the order itself. When an order is fulfilled, the system pulls the line items, not the customer's whole history, just what was in that specific order. That's the anchor for everything downstream.

The matching layer is where most of the actual thinking goes. I'd resist the instinct to build this on raw "customers who bought X also bought Y" co-occurrence data pulled automatically from order history, because that kind of algorithmic pairing tends to surface noise (two products that sold well in the same week, not two products that actually belong together). Instead, I'd start with a curated pairing table: someone who knows the catalog maps each product, or each product category, to the two or three items that genuinely complement it, the way a stylist would build a lookbook or a chef would build a menu pairing. That's a manual step, and it's the one most automations skip because it's slower to set up. It's also the one that decides whether the recommendation feels considered or feels like spam.

Once the pairing table exists, the automation does the mechanical part: look up what was purchased, pull the matched products, check that they're in stock, and queue a message. Timing matters as much as the matching. I'd send this a few days after delivery, not at checkout and not weeks later, aimed at the window when the customer still has the original product in mind but isn't in the middle of an active purchase decision anymore. For fashion or apparel, that might be framed as a lookbook: here's how the piece you bought was styled, and here's where to get the rest of it. For food and beverage, it's closer to a recipe or a bundle suggestion: here's what this pairs with, here's how people use it.

The system also needs a way to avoid re-sending the same pairing to someone who already owns both halves of it, and a way to retire a pairing if the recommended product goes out of stock or gets discontinued. Neither of those is complicated, but both get skipped in a lot of first builds, and both are the difference between a system that stays useful and one that quietly starts recommending things that don't exist anymore.

Flowchart of the post-purchase cross-sell logic: order fulfilled, a curated pairing table lookup, a stock check that retires unavailable pairings, a wait of a few days post-delivery, then a personalized send.

Pros and cons

The upside is real: the recommendation is specific to what the person actually bought, sent while they're still receptive, and it doesn't require anyone to write a new campaign every time there's something worth cross-selling.

The honest downsides:

The pairing logic needs real curation, or genuinely good product-relationship data, not just "frequently bought together" noise pulled from order history. Skip that step and the system technically works but recommends things that don't actually go together, which is worse for trust than sending nothing.

It can feel pushy if the timing or frequency isn't tuned. One well-timed, well-matched suggestion a few days after delivery reads as helpful. The same idea sent after every order, or stacked with other post-purchase emails, starts to read as another sales channel wearing a personalization costume.

It doesn't work well for a brand with a narrow, single-category catalog that has nothing to actually pair. If there's no second product that's a genuine complement to the first, forcing a cross-sell system onto that catalog just produces weaker versions of the generic "you might also like" problem this is supposed to fix. This only pays off where real product relationships exist.

How it gets implemented

The order data source is usually the store platform itself (Shopify, or whatever the brand runs on) via its order and fulfillment webhooks, so the trigger fires off a real event rather than a polling schedule.

The pairing logic can live in a simple structured table (a spreadsheet or a lightweight database) that maps product or category to its recommended pairings, maintained by whoever knows the catalog best. Whether that stays fully manual or gets a layer of algorithmic suggestion on top (using order co-occurrence as a starting point that a human still approves) depends on catalog size. Small to mid-size catalogs are usually better served by keeping it manual; it's the difference between a handful of pairings someone actually thought through and a table nobody trusts.

The timing and send layer is the orchestration piece: watch for the fulfillment or delivery event, wait the chosen number of days, check the pairing table, check inventory, and send through whichever channel the brand already uses for post-purchase communication (email is the most common, since it's already the default channel for order confirmations and shipping updates).

None of this requires exotic infrastructure. The complexity is almost entirely in the pairing logic and the timing decisions, not in the plumbing that connects them.

The numbers

The clearest documented figure here comes from MarketingSherpa's research: a 111% higher conversion rate for a personalized cross-sell recommendation sent in a post-purchase confirmation email, compared to the same recommendation sent in a generic weekly email. Worth being precise about what that actually measured: it's a channel-and-timing effect, not a personalized-versus-generic-content test, since both email types used the same personalization engine. The finding is about when and where the recommendation shows up, not about whether personalization itself works.

Separately, Opensend's ecommerce upsell research found AI-matched cross-sell offers see up to 30% higher take rates than generic promotions. The "up to" matters: that's a ceiling from a range, not a flat number every brand should expect to hit.

Timing and match-quality effects: a 111% higher conversion rate for a post-purchase confirmation email over a generic weekly send (MarketingSherpa), and up to 30% higher take rates for AI-matched offers over generic promotions (Opensend).

Both figures point the same direction as the structural argument above: relevance and timing matter more than volume. A recommendation tied to what someone actually bought, sent while they're still thinking about it, outperforms a broadcast sent to everyone regardless of purchase history. That's documented in fashion and apparel (lookbook-based cross-sell) and food and beverage (recipe and bundle pairing), and it applies to any brand where products are genuinely complementary rather than just adjacent in a catalog.

I write about building automation systems for D2C operators: what the operations actually look like and what makes the difference between something that sticks and something that doesn't. If you're working through something similar and want to think it through, LinkedIn is open.