---
title: AI Agent for eCommerce Upselling and Cross-Selling (2026)
description: Camera in the cart. Suggest a lens that fits and is in stock, instead of "people also bought." Cart abandonment at 70.22% is checkout leak context, not an attach promise.
url: https://www.joinhorizon.co/blog/ai-agent-ecommerce-upsell-cross-sell-2026/
datePublished: 2026-08-27T00:00:00.000Z
dateModified: 2026-10-28T00:00:00.000Z
author: palaniappan-p
category: AI Agents
tags: ai-agents, ecommerce, amazon-bedrock, bedrock-agentcore, product-data, generative-ai
---

# AI Agent for eCommerce Upselling and Cross-Selling (2026)

> Camera in the cart. Suggest a lens that fits and is in stock, instead of "people also bought." Cart abandonment at 70.22% is checkout leak context, not an attach promise.

Monday at checkout: a camera body sits in the basket. The drawer offers a lighting kit that does not mount. Collaborative filters call that an attach. Your returns pile calls it something else.

The useful upsell is the **next SKU that still matches the cart**: it fits, is in stock, is not already owned, is not a restricted add-on, and is not a price rewrite. "People also bought" does not check any of that.

[Baymard](https://baymard.com/lists/cart-abandonment-rate) puts average cart abandonment at **70.22%** across 50 studies (updated Sep 22, 2025). That is checkout leak context, and it is no promise that add-ons will save it.

This post covers cart-aware ranking. Discovery-from-intent lives in [AI product recommendation agents](https://www.joinhorizon.co/blog/ai-product-recommendation-agent-ecommerce-2026/). Catalog completeness lives in [catalog management](https://www.joinhorizon.co/blog/ai-product-catalog-management-ecommerce-2026/). Keep the three separate.

This is post 15 in the [15-automations map](https://www.joinhorizon.co/blog/ai-agents-for-ecommerce-15-automations-2026/). We have no published store results that say attach rate or average order value moved.

**The job.** Suggest the next SKU that fits the cart using relationships, stock, and history, not co-occurrence alone.

**This week.** One accessory family with a real fits graph. Lookups only. Present for confirm. No silent cart-add. No price cut.

**A person still signs.** Published bundles, margin floors as filters, discounts (separate path), and silent cart mutation later.

**Skip it when** a three-line merch rule already maps body → lenses correctly, compatibility is missing from the catalog, or leadership wants quiet attach for margin.

**Our take:** next-best depends on the cart. Without a compatibility graph, ship a static merch rule and skip the agent.

> **Copy the matrix:** Open [`upsell-cross-sell-decision-matrix.md`](https://www.joinhorizon.co/examples/architecture-blog-2026/ecommerce-ai-agents-series/upsell-cross-sell-decision-matrix.md). Fill Owner and Approval. Co-occurrence is secondary. Ship gates: [`monday-checklist.md`](https://www.joinhorizon.co/examples/architecture-blog-2026/ecommerce-ai-agents-series/monday-checklist.md).

## Why "people also bought" fails at the cart

Checkout and cart drawers show add-ons. Most are a merch pin or a frequently-bought-together table. They do not know the shopper already bought the spare battery. They do not know the lens mount. They will still "upsell" a thinner-margin hero if the model is told to maximize average order value.

A bad attach is a return and a support ticket. A good attach is guided selling at the moment of intent. Anyone selling accessories, parts, or sized goods has this problem without compatibility fields.

## How stores handle this today

Shopify apps, "complete the look" pixels, rules in the order management system (OMS), sales associates on the phone. Rules win when the graph is small and correct (this SKU → these three SKUs). Agents win when the cart is messy (two categories, a constraint in chat, a size already chosen). Hybrid: rules for the obvious edge, agent for the rest ([agent vs workflow](https://www.joinhorizon.co/blog/ai-agent-vs-workflow-automation-ecommerce-2026/)).

## What runs this week (lookups and drafts)

- Upsell: same family, higher capacity or warranty, still constraint-safe, **cited**.
- Cross-sell: compatible accessory or consumable, in stock, not already owned.
- Bundle **candidate**: structured set for a merchandiser to publish.

Margin and live promos are **inputs**, not the objective function. A high-margin unrelated SKU must not win.

## What a person still owns

- Compatibility and restricted flags.
- Inventory and price lookup (no writes).
- Promo engine eligibility for "this add-on is on a deal" (display only).
- Cart mutation policy (shopper confirm).

No price writes. If they want a cheaper add-on, that is [personalized offers](https://www.joinhorizon.co/blog/ai-agents-personalized-offers-ecommerce-2026/) plus a person approving, not `setPrice`.

Merch owns the relationship graph and published bundles. Finance owns margin floors as **filters**, not as the ranking. CX handles "I already have this" when history tools are wrong. Nobody should need a human to suppress an out-of-stock add-on if inventory is fresh.

```mermaid
flowchart TD
  cart[Current cart]
  agent[Upsell agent]
  tools[Relationships inventory history margin promo]
  next[Next-best SKU]
  present[Present for confirm]
  skip[Skip or escalate]
  cart --> agent
  agent --> tools
  tools --> next
  next -->|compatible in stock| present
  next -->|already owned restricted unknown| skip
```

## Lookups you attach this week

Week-one allow-list:

| Tool | Purpose | Evidence to return |
| ---- | ------- | ------------------ |
| `getCart` | Starting SKUs | variant ids, qty |
| `getRelationships` | Fits / upgrade / accessory | typed edges, not FBT-only |
| `getInventory` | Hard filter | status, `asOf` |
| `getOrderHistory` | Already owns? | sku match, last purchase date |
| `getMargin` | Tie-break only | margin band, not a "push this" flag |
| `lookupPromo` | Display eligibility | engine rule id |

Writes week one: none. Later `addToCart` with Cedar and confirm. Payment capture is out of the tools. Memory holds this cart. Do not store a "always upsell" preference that overrides compatibility.

There is **no native Shopify connector**.

## Ship one accessory family first

One accessory family with a real fits-graph. Goldens: compatible add-on, already-owned skip, out-of-stock skip, margin-only SKU must not appear, price-cut request must not write.

If a three-line merch rule already maps body → lenses correctly, **leave it**. Agent the messy carts.

## For your technical lead

**On June 17, 2026**, Amazon Bedrock AgentCore Harness reached general availability ([What's New](https://aws.amazon.com/about-aws/whats-new/2026/06/amazon-bedrock-agentcore-harness-generally-available/)). **Agents Classic** is in maintenance for new customers after **July 30, 2026**.

**Bedrock** is the model layer, not the host. **Harness** or **Runtime** hosts the loop. **Gateway + Cedar** on cart writes. Browser and Code Interpreter **off**. **Next.js** is storefront or human-in-the-loop, not the runtime. **Strands** does not provide Gateway, Identity, Policy, or microVMs.

Share catalog tools with the [recommendation agent](https://www.joinhorizon.co/blog/ai-product-recommendation-agent-ecommerce-2026/). Separate prompts so a discovery session cannot silently attach. Supervisor + hop cap if those specialists coexist ([store-agents](https://www.joinhorizon.co/blog/ecommerce-ai-agents-amazon-bedrock-agentcore-2026/)).

> **First-party signals we reuse (not eCommerce client outcomes):** Gateway server-side tools cut median tool round-trip **~180 ms → ~95 ms** on a **B2B CRM assistant** (12 tools, ~8k turns/day), per the [Gateway post](https://www.joinhorizon.co/blog/amazon-bedrock-agentcore-gateway-server-side-tool-execution-2026/). Platform TCO silhouette: support-style AgentCore at **50K sessions/mo ~$791/mo** platform + model ([decision guide](https://www.joinhorizon.co/blog/aws-bedrock-agentcore-vs-amazon-q-enterprise-decision-guide-2026/)). Model widget volume on the [AgentCore pricing calculator](https://www.joinhorizon.co/tools/amazon-bedrock-agentcore-pricing-calculator/).

The **~95 ms** Gateway median on the CRM canary is not your cart API's p95.

> **What broke:** Cart-drawer prototype ranked add-ons from frequently bought together plus a "maximize margin" instruction. A camera body received a high-margin lighting kit that used a different mount. **Detection:** golden "body in cart → compatible lens" failed; traces showed `getFrequentlyBoughtTogether` and `getMargin`, no `getCompatibility`. **Recovery:** compatibility required; margin tie-break only; fail evals if co-occurrence is the only evidence. **Lesson:** attach rate without fit is a return rate you have not measured yet, and we are not inventing yours.

## What to do this week

1. Pick one family. Confirm relationship fields exist in the PIM. If not, [catalog](https://www.joinhorizon.co/blog/ai-product-catalog-management-ecommerce-2026/) first.
2. Copy [`upsell-cross-sell-decision-matrix.md`](https://www.joinhorizon.co/examples/architecture-blog-2026/ecommerce-ai-agents-series/upsell-cross-sell-decision-matrix.md). Owner and Approval on auto-attach (default: no).
3. Tools: cart, relationships, inventory, history. No `setPrice`.
4. Harness; Policy `LOG_ONLY`; default-deny writes; Browser off.
5. Five goldens above. Alarm on unexpected tool mix.
6. Presentment only, with no silent cart mutation.
7. Price on the [AgentCore pricing calculator](https://www.joinhorizon.co/tools/amazon-bedrock-agentcore-pricing-calculator/). Run [`monday-checklist.md`](https://www.joinhorizon.co/examples/architecture-blog-2026/ecommerce-ai-agents-series/monday-checklist.md).

Need Gateway on cart + PIM before an attach widget goes live? [Contact us](https://www.joinhorizon.co/contact-us/). Related: [Amazon Bedrock consulting](https://www.joinhorizon.co/services/aws-bedrock/), [Generative AI on AWS](https://www.joinhorizon.co/services/generative-ai-on-aws/), [AWS for retail / eCommerce](https://www.joinhorizon.co/industries/aws-retail-ecommerce/).

## What this post doesn't cover

- Session-intent recommendations: [recommendation agent](https://www.joinhorizon.co/blog/ai-product-recommendation-agent-ecommerce-2026/).
- Discount issuance: [personalized offers](https://www.joinhorizon.co/blog/ai-agents-personalized-offers-ecommerce-2026/).
- Homepage merchandising: [dynamic merchandising](https://www.joinhorizon.co/blog/ai-agents-dynamic-merchandising-ecommerce-2026/).
- Measured attach rate, average order value, or conversion from a client engagement.
- Payment capture / x402.
- A native Shopify AgentCore connector.

## FAQ

### When should we NOT run an AI upsell or cross-sell agent?

Skip it when the cart already has a deterministic accessory rule that is correct (camera body → approved lens SKUs), when compatibility is not in the catalog, or when leadership wants silent cart-add for margin. Also skip the older Agents Classic product for new work after July 30, 2026. Missing "fits" data is a product information management (PIM) ticket, not a model job.

### What could go wrong if we rank add-ons only by frequently bought together?

Incompatible accessories, duplicates the shopper already owns, and out-of-stock "bestsellers" land in the cart drawer. Co-occurrence is a tie-break after relationships, stock, and history pass. Same rule as the recommendation-agent post: cart-aware.

### What could go wrong if the upsell agent can write prices?

It will cut the add-on to close the attach. That is a discount engine hiding in merchandising. No setPrice, no issueDiscount. Offers are a separate path with a person approving (human-in-the-loop). Instructions in the prompt do not authorize a write.

### How is this different from a product recommendation agent?

Recommendations start from session intent ("wide trail shoe"). Upsell/cross-sell starts from the current cart plus relationships. Share catalog and inventory tools. Do not share one unbounded prompt that also mints coupons.

### Should the agent auto-attach the add-on to the cart?

Not in week one. Return a structured next-best payload. The storefront confirms. A later cart-mutation tool needs a hard block, shopper identity, and a confirm. Quiet attach of a high-margin unrelated SKU is how you earn chargebacks.

### Is there a native Shopify AgentCore connector for upsell widgets?

No. Relationship graphs live in the PIM or middleware you expose as signed-in lookups. Shopify apps that "do upsell" are not AgentCore. Treat the platform as a system of record behind your own API.

## How the upsell and cross-sell stays bounded

Propose an add-on from catalog rules and the current basket.

- **Maturity:** Level 2 — reference architecture
- **Risk:** high
- **Oversight:** approval
- **Starts when:** A basket or product page asks for an attachment offer.
- **Tools:** A write goes through a router, a permission check, a policy check, and a budget check. The model does not commit it. An approval token lives in tool context, not in the user message.
- **Stops for a person:** Discount depth and checkout changes stay with the offer policy and a reviewer.
- **Checked by:** The SKU and the price shown match the tool. A missing price is not invented.
- **Untrusted data:** Merchandising copy and shopper messages that name a price the tool did not return.
- **If it fails:** If the upsell and cross-sell stops, name the reason: completed, budget_exceeded, timed_out, cancelled, guardrail_blocked, approval_required, tool_failure, verification_failed, or partial_completion. Retry a timeout at most twice. Back off on rate limits. After repeated verification failure, escalate. Stop when the budget is exhausted or a permission is denied. No unbounded loop. Discount depth and checkout changes stay with the offer policy and a reviewer.
- **Lifecycle:** Explore, then act, then confirm, then verify. Explore gathers the context for the upsell and cross-sell. Act stays reversible. Confirm stops before an irreversible step. Verify is a separate check of the outcome.

Reference architecture, not a published production deployment. The shared contract is the [AWS store-agent architecture](https://www.joinhorizon.co/blog/aws-ai-agents-for-ecommerce-factualminds-2026/#operating-contract).

## FAQ

### When should we NOT run an AI upsell or cross-sell agent?
Skip it when the cart already has a deterministic accessory rule that is correct (camera body → approved lens SKUs), when compatibility is not in the catalog, or when leadership wants silent cart-add for margin. Also skip the older Agents Classic product for new work after July 30, 2026. Missing "fits" data is a product information management (PIM) ticket, not a model job.

### What could go wrong if we rank add-ons only by frequently bought together?
Incompatible accessories, duplicates the shopper already owns, and out-of-stock "bestsellers" land in the cart drawer. Co-occurrence is a tie-break after relationships, stock, and history pass. Same rule as the recommendation-agent post: cart-aware.

### What could go wrong if the upsell agent can write prices?
It will cut the add-on to close the attach. That is a discount engine hiding in merchandising. No setPrice, no issueDiscount. Offers are a separate path with a person approving (human-in-the-loop). Instructions in the prompt do not authorize a write.

### How is this different from a product recommendation agent?
Recommendations start from session intent ("wide trail shoe"). Upsell/cross-sell starts from the current cart plus relationships. Share catalog and inventory tools. Do not share one unbounded prompt that also mints coupons.

### Should the agent auto-attach the add-on to the cart?
Not in week one. Return a structured next-best payload. The storefront confirms. A later cart-mutation tool needs a hard block, shopper identity, and a confirm. Quiet attach of a high-margin unrelated SKU is how you earn chargebacks.

### Is there a native Shopify AgentCore connector for upsell widgets?
No. Relationship graphs live in the PIM or middleware you expose as signed-in lookups. Shopify apps that "do upsell" are not AgentCore. Treat the platform as a system of record behind your own API.

---

*Source: https://www.joinhorizon.co/blog/ai-agent-ecommerce-upsell-cross-sell-2026/*
