Flow: Upsell Boost Campaign

Download skillThe skill is a reference md and part of wix-manage skill. You can use the following command to add the full wix-manage skill to your project:
Copy

Before executing this skill, read these referenced skills with ReadFullDocsArticle:

Creates a discount that incentivizes customers to spend more per order by setting a minimum subtotal threshold above the store's current AOV. The discount percentage is scaled to the store's average profit margin, and the scope targets high-margin categories or products.

Prerequisites

  • Wix Stores installed on the site
  • Products exist in the catalog with price data
  • Access to getCatalogAnalytics and getProductCatalogData tools
  • AOV data available from site metrics (revenue / ordersCount)

Required APIs


Step 1: Gather catalog data and site metrics

Call getCatalogAnalytics and getProductCatalogData concurrently to collect pricing, margin, and product data.

getCatalogAnalytics call:

Copy

getProductCatalogData call:

Copy

Also retrieve site-level AOV from getSiteData (AOV = revenue / ordersCount). Run the AOV sanity check: if AOV < price_p25, override with price_p50 as the effective AOV.

Save the following values:

  • effective_aov — the validated average order value
  • avg_profit_margin — average profit margin across the catalog
  • price_p50, price_p75, price_p90 — pricing quantiles
  • Top products by price and order volume

Step 2: Determine margin tier and calculate discount + minSubTotal

Use the average profit margin to select the appropriate discount and threshold tier.

Margin TierConditionMax DiscountminSubTotal Formula
Low marginavg_profit_margin < 25%10%1.15 x effective_aov
Medium margin25% <= avg_profit_margin <= 50%15%1.3 x effective_aov
High marginavg_profit_margin > 50%20%1.5 x effective_aov
No dataMargin data unavailable10%1.15 x effective_aov

Example: If effective_aov = $150 and avg_profit_margin = 35% (medium), then max discount = 15% and raw minSubTotal = $195.


Step 3: Round minSubTotal (CRITICAL)

minSubTotal MUST be rounded UP to the nearest $5 increment (the result mod 5 must equal 0). Always round UP, never down.

Raw ValueRounded Value
$195$195 (already divisible by 5)
$217$220
$223$225
$199$200
$172.50$175
$201$205

Formula: minSubTotal = ceil(raw_value / 5) * 5


Step 4: Determine discount scope

Select the scope based on analytics data:

  • CATEGORY (preferred): When analytics show a clear high-margin category opportunity. Target the category with the highest profit margin that also has sufficient product count.
  • ITEMS: When specific high-margin products stand out as upsell candidates (max 5 productIds).
  • SITE (fallback): When no single category or product group dominates, apply catalog-wide.

Step 5: Convert category names to GUIDs (if CATEGORY scope)

If scope is CATEGORY, call getCategoryIds to convert human-readable category names into GUIDs. Never output category names directly as scope IDs.

Exclude the "All Products" system category — it contains every product and would effectively make the discount site-wide.

Max 3 categoryIds per discount rule.


Step 6: Run guardrail checks

IMPORTANT: Run both guardrail checks before creating the discount rule.

6a: Discount Conflicts

  1. Query existing active discount rules:

Endpoint: POST https://www.wixapis.com/ecom/v1/discount-rules/query

Request:

Copy
  1. Check for scope overlap, time overlap, and coupon stacking risks with the planned upsell discount.
  2. If conflicts found, present to merchant and get confirmation before proceeding.

6b: Margin Protection

Verify that discount_percentage <= avg_profit_margin - 15% (minMarginPct). If the discount would push effective margin below 15%, warn the merchant.

The global discount cap is 25%. Do not exceed this unless the merchant explicitly overrides it.


Step 7: Create the discount rule

Endpoint: POST https://www.wixapis.com/ecom/v1/discount-rules

Request — 15% off orders over $195, scoped to a category:

Copy

Response:

Copy

Request — site-wide fallback example:

Copy

Save the returned id and revision for later management.


Step 8: Verify the rule is active

  1. Query discount rules to confirm the new rule exists and is active: true
  2. Verify the minSubTotal condition is correctly set
  3. Report to the merchant:

    "Upsell discount is live: {discount}% off on orders over ${minSubTotal} for {scope description}. This threshold is {percentage}% above your current average order value of ${effective_aov}, designed to incentivize higher spending."


Branching logic

Merchant intentScopeDiscountminSubTotal
"Increase average order value"Determined by analytics (CATEGORY preferred)Margin-tieredCalculated from AOV
"Get people to spend more on electronics"COLLECTION with electronics category GUIDMargin-tieredCalculated from AOV
"20% off orders over $200" (explicit)As specified by merchant20% (user override)$200 (user override)
"Reward big spenders"CATALOG (site-wide)Margin-tieredCalculated from AOV

Error Handling

ErrorCauseFix
DISCOUNT_RULE_NOT_FOUNDRule ID doesn't existRe-query discount rules for current IDs
REVISION_MISMATCHRevision doesn't matchRe-fetch rule for latest revision, then retry
AOV unavailableNo revenue or order dataUse price_p50 from catalog analytics as AOV proxy
Margin data unavailableNo profit margin data in catalogDefault to low-margin tier (10% discount, 1.15x AOV)
Category GUID not foundCategory name doesn't match any collectionRe-query categories or fall back to SITE scope

References

Did this help?