Recommend: eCommerce Strategy

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 this API reference with ReadFullDocsArticle:

After classifying domains in Step 4b, load the matching goal skill with ReadFullDocsArticle:

If COUPON mechanism in Step 4c, load:

EXECUTION RULES — READ BEFORE ANYTHING ELSE

You are an operator, not a consultant. When this recipe is activated:

  1. Do NOT ask clarifying questions — start executing immediately from Step 1. The merchant's request contains enough information. The analysis steps will determine which domains and strategies apply.
  2. Do NOT produce recommendations before calling the mandatory APIs. If you skip the API calls and generate advice from assumptions, your output is wrong — even if it sounds reasonable.
  3. Execute every step in order. Do not skip steps. Do not merge steps. Do not answer "in the meantime."
  4. Use ONLY data returned by API calls. Never substitute reasoning, general knowledge, or doc summaries for live data. Every number you cite in reasoning MUST come directly from an API response — do NOT assume, infer, or fabricate data.
  5. If a call fails or is blocked, report the exact blocker. Do not work around it with assumptions.
  6. All API calls use CallWixSiteAPI. The internal tool names (getSiteData, getCatalogAnalytics, etc.) are NOT directly callable.
  7. Generate recommendations across ALL relevant domains — not just discounts. Consider shipping, discounts, and any other domain that the data supports.

Step 1: Resolve the target site

MANDATORY — do this first.

If you don't already have a siteId, call ListWixSites to find it.

If the merchant mentioned a site name, match it. If only one site exists, auto-select it. Store the siteId — every subsequent API call requires it.

Do not proceed without a siteId.


Step 2: Load recommendation history (Tracking)

MANDATORY — do NOT skip unless the user said SKIP_TRACKING or "don't track".

Query the tracking database for existing recommendations on this site:

Copy

Use the returned history to inform your analysis:

StateHow to use it
PROPOSEDDon't re-propose — ask about the pending one
DONEDon't re-propose — consider complementary recommendations
REJECTEDDo NOT re-propose. If rejectionPermanent is true, never suggest this action type again
FAILEDOffer to retry or suggest alternative
EXPIREDCan re-propose if still relevant with fresh data

If the query returns empty results or fails, continue — this is a fresh session.


Step 3: Gather site data

MANDATORY API CALL — do not skip.

Copy

You need these values:

ValueUsed for
aovDiscount thresholds, shipping threshold calibration
discountMarginMax allowed discount (decimal, 0.25 = 25%)
currentDiscountsConflict detection
countryHoliday detection, shipping region analysis
currencyPrice formatting
languageTranslating recommendation names
visitorsTraffic-to-conversion analysis
ordersCountConversion analysis

STOP if country, industry, or revenue are missing or null. Report: "Cannot generate recommendations — missing required site data: {fields}."


Step 3b: Validate the request

Check if the merchant's request includes anything unsupported. Reject these:

Unsupported requestResponse
Buy one get one (BOGO)Explain: not supported by Discount Rules API
Fixed-price bundles ("3 for $100")Explain: requires custom pricing logic
Unrelated to eCommerceDecline politely

If valid, continue.


Step 4: Identify applicable domains

Based on the merchant's request AND the site data, determine which domains to analyze. Multiple domains can be active simultaneously.

DomainWhen to activateData signals
DISCOUNTSMerchant mentions sales, promotions, revenue, AOV, clearance, holidays, coupons. Also activate if no specific domain is mentioned (default).Always — site data contains discount metrics
SHIPPINGMerchant mentions shipping, delivery, checkout conversion, cart abandonment. Also activate proactively if site data suggests shipping issues.High visitors + low orders may indicate shipping friction
ABANDONED_CARTActivate proactively if site data shows abandoned carts with no active recovery automation. No merchant trigger needed — detect from data.currentDiscounts empty or no cart recovery automation visible

Priority rule: If the merchant mentions a specific holiday/event/date, the DISCOUNTS domain MUST use the SEASONAL strategy — even if other signals like "boost sales" or "increase revenue" could match other goals. Holidays are time-sensitive and take priority over general intent.

If the request is generic (e.g., "boost my sales", "help my business"), activate ALL domains. The best recommendations will come from analyzing every angle.

If the request targets a specific domain (e.g., "give me a coupon", "fix my shipping rates", "set up a gift card"), activate ONLY that domain. Do not generate cross-domain recommendations — focus all 5 recommendation slots on the requested domain. The merchant asked for something specific; respect that focus.


Step 4b: Load domain-specific goal skills

MANDATORY — load the matching goal skill(s) now using ReadFullDocsArticle. These contain detailed strategy logic, KPIs, margin tiers, campaign window calculations, and guardrails that you MUST follow.

For DISCOUNTS domain — classify the discount goal and load it:

Discount goalTriggerLoad this skill
SEASONALHoliday/event/date mentionedGoal: Seasonal Revenue
UPSELL_BOOST"increase AOV", "spend more", "upsell"Goal: Increase AOV
STOCK_MOVER"clear inventory", "overstock", "clearance"Goal: Clear Inventory
BUNDLE_AND_SAVE"bundle", "cross-sell", "buy together"Goal: Drive Cross-Sells
Generic (no clear goal)"boost sales", ambiguousDefault to SEASONAL if holiday nearby, else UPSELL_BOOST

For SHIPPING domain — load the same goal as discounts. Shipping flows (free shipping threshold, rate optimization) serve the same business goals as discount flows. Load the matching discount goal above — it now includes shipping flow references.

For ABANDONED_CART domain — load the cart abandonment goal:

Goal: Reduce Cart Abandonment

The goal skill will instruct you to load flow and guardrail skills — follow those instructions. This chain provides the detailed execution logic you need for high-quality recommendations.

Do NOT skip this step. The goal/flow/guardrail skills contain critical constraints (margin tiers, campaign windows, conflict checks) that prevent bad recommendations.


Step 4c: Determine mechanism — Automatic Discount or Coupon

Only for DISCOUNTS domain. Skip if DISCOUNTS is not active.

Merchant saysMechanism
"sale", "promotion", "discount for everyone"AUTOMATIC
"coupon", "code", "promo code", "voucher"COUPON
"discount for subscribers", "influencer code"COUPON
UnclearAsk the merchant

If unclear, ask: "Would you like this to apply automatically to everyone, or as a coupon code?"

If COUPON is selected, load the coupon setup reference with ReadFullDocsArticle: Setup: Coupons


Step 5: Analyze catalog (Discounts domain)

Skip this step if DISCOUNTS domain is not active.

Call both APIs concurrently:

Call 1: GetCatalogAnalytics

Copy

Aggregates by goal:

Goalaggregates array
UPSELL_BOOST[{"op":"count","field":"price"}, {"op":"quantiles","field":"price","q":[0.5,0.75,0.9]}, {"op":"avg","field":"profitMargin"}]
BUNDLE_AND_SAVE[{"op":"min","field":"price"}, {"op":"max","field":"price"}, {"op":"avg","field":"profitMargin"}, {"op":"count","field":"price"}]
STOCK_MOVER[{"op":"sum","field":"quantity"}, {"op":"sum","field":"ordersCount"}, {"op":"avg","field":"profitMargin"}]
SEASONAL[{"op":"sum","field":"ordersCount"}, {"op":"quantiles","field":"price","q":[0.5,0.9]}, {"op":"avg","field":"profitMargin"}]

Call 2: GetProductCatalogData

Copy

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

MANDATORY before outputting any categoryIds. Never output category names as IDs.

Send only the categories you plan to target — max 10 names per call. Do NOT send all categories from analytics. Pick only the high-opportunity ones relevant to your recommendations.

Copy

If response returns empty categoryIds: fall back to SITE scope.

Failure handling

  • Both calls fail: Fall back to SITE scope with 5-10% discount using only site data.
  • One fails: Use whichever succeeded.

Step 6: Generate recommendations across ALL active domains

Only now — after data gathering — generate recommendations.

Maximum 5 recommendations total across all domains. Each recommendation includes its domain field.

Discount recommendations (if DISCOUNTS domain active)

Use site data + catalog data to generate discount recommendations. Each should use a different strategy:

StrategyWhen to useKey parameters
SEASONALHoliday/event within 30 daysTime-bounded, site-wide or category scope
UPSELL_BOOSTAOV data availableminSubTotal above current AOV
STOCK_MOVERProducts with high stock + low ordersDeeper discounts on slow movers
BUNDLE_AND_SAVEMany low-priced itemsminItemQuantity conditions

Scope selection (in order of preference):

  1. CATEGORY (preferred): High-opportunity category from analytics. Must have GUID from GetCategoryIds.
  2. ITEMS (specific): Individual products from catalog data. Max 5 product IDs.
  3. SITE (fallback): When no clear category/product opportunity.

Performance signals:

What you observe in the dataWhat to recommend
High visitors, low ordersCountSite-wide discount to convert traffic
High AOV, few items per orderBUNDLE_AND_SAVE
Products with high stock + low ordersSTOCK_MOVER
Holiday within 30 daysSEASONAL

Discount constraints:

  • Discount must not exceed discountMargin from site data (unless merchant overrides)
  • Round percentages to 5/10/15/20/25% unless merchant specified exact value
  • All categoryIds must be GUIDs from GetCategoryIds
  • All productIds must be from GetProductCatalogData
  • Mechanism must be AUTOMATIC or COUPON per Step 4c

Shipping recommendations (if SHIPPING domain active)

Analyze the site's shipping configuration using the rules below. All shipping recommendations use domain: "shipping".

Externally managed regions: Regions where deliveryCarriers[].appId matches an external carrier (e.g., Shippo) — exclude from ALL analysis. Do not recommend changes to these.

Shipping analysis rules — evaluate each and recommend where data supports:

RuleFindingRecommendation
CoverageActive region with zero shipping optionsCRITICAL — create_shipping_option for that region
CoverageDomestic country not covered by any regionCRITICAL — activate_region or create domestic region
CoverageInactive regions with shipping optionsactivate_region or clean up orphaned options
Free ShippingNo free shipping option anywherecreate_shipping_option with AOV-calibrated threshold (1.2-1.5x AOV)
Free ShippingFree shipping threshold > 2x AOVLower threshold — too high for most customers
RatesFlat rate > 15% of AOVReduce rate or add conditional tiering — sticker shock risk
RatesAll flat rates, no conditional pricingAdd threshold-based tiers for better conversion
RatesPer-item pricing enabledReview — usually causes unexpectedly high totals
CarrierNo backup rate on carrier regionsenable_backup_rate as fallback
OptionsToo many options per region (> 5)Consolidate — choice paralysis reduces conversion
OptionsOnly 1 option per regionAdd at least one alternative (e.g., express tier)

Shipping action types: create_shipping_option, update_shipping_option, enable_backup_rate, activate_region.

Priority order: CRITICAL blockers (no options, no coverage) → Conversion-linked (no free shipping, high rates) → Revenue opportunities (international, tiered pricing) → Configuration improvements (consolidate, add estimates).

Abandoned cart recommendations (if ABANDONED_CART domain active)

Detect if the merchant has significant cart abandonment without active recovery. All abandoned cart recommendations use domain: "abandoned_cart_recovery".

Eligibility gate (BOTH conditions required):

  1. Cart abandonment recovery automation is NOT active on the site
  2. Estimated missing sales >= $200 over the last 30 days

If either condition fails, do NOT generate abandoned cart recommendations.

Urgency thresholds based on missing sales (USD, last 30 days):

Missing salesUrgency
>= $1,000HIGH
$200 — $999MEDIUM
< $200Do not recommend

Action type: activate_abandoned_cart_recovery

Params must include: automation_key ("wix_e_commerce-cart_abandonment"), missing_sales_usd (integer, rounded), abandoned_cart_count (integer), window_days (always 30).

Title pattern: "Recover $[missing_sales_usd] in abandoned carts"

Reasoning MUST cite: automation is inactive, exact cart count, exact missing sales USD, 30-day window, and why the urgency level was chosen.

Cross-domain balance

  • If request is generic, aim for recommendations from multiple domains (e.g., 2-3 discount + 1-2 shipping + abandoned cart if eligible)
  • If request targets a specific domain, focus all slots on that domain
  • Rank by business impact: CRITICAL blockers first, then conversion-linked, then revenue opportunities

Step 7: Validate before returning

  1. Conflict check: Do existing active discounts/coupons overlap with your recommendation scope? Warn about stacking.
  2. Margin check: Discounts within discountMargin cap.
  3. No duplicates: Each recommendation targets a different scope/action combination.
  4. No contradictions: Don't recommend opposite actions in the same domain.
  5. Strategy diversity: Discount recommendations use different strategies where possible.
  6. Mechanism match: Discount mechanism matches Step 4c determination.
  7. ID validity: All categoryIds are GUIDs from GetCategoryIds. All productIds are from GetProductCatalogData.
  8. Rounding: Discount percentages round to 5/10/15/20/25% unless merchant specified exact value.
  9. Data-backed: Every recommendation must reference specific data from API responses.
  10. Domain labeled: Every recommendation has the correct domain field.

Step 8: Persist recommendations to database (Tracking)

MANDATORY — do NOT skip unless the user said SKIP_TRACKING.

Call BatchCreate to persist ALL recommendations as PROPOSED:

Copy

Save the id and revision from each result. Include them in the output.

If BatchCreate fails, report the error and include recommendations without tracking IDs.


Output format

Copy

Field rules

FieldRule
idGUID from tracking BatchCreate response (omit if tracking skipped/failed)
titleShort, actionable. Max 200 chars. Always English.
reasoningMust reference which API call returned the data. Always English.
domain"discounts", "shipping", or "abandoned_cart_recovery" (future: "gift_cards", "taxes")
urgencyCRITICAL, HIGH, MEDIUM, or LOW
mechanismAUTOMATIC or COUPON. From Step 4c. Only for discounts domain.
nameMarketing headline, 2-5 words. Translate to site language if not English.
why1-2 sentences with specific data points from API responses. Translate to site language.
codeOnly for COUPON mechanism. Memorable code, max 20 chars (e.g., "SAVE15").
scope + IDsFor discounts: SITE = both empty, CATEGORY = categoryIds only (max 3), ITEMS = productIds only (max 5).
success_criteriaHow to verify the recommendation was applied correctly

Valid action types by domain

DomainAction types
discountsapply_discount
shippingcreate_shipping_option, update_shipping_option, enable_backup_rate, activate_region
abandoned_cart_recoveryactivate_abandoned_cart_recovery

Constraints

  • Maximum 5 recommendations total across all domains
  • Each discount recommendation must use a different strategy
  • All data must come from API responses — no assumptions
  • Respect discountMargin cap unless merchant overrides
  • All IDs must be GUIDs from API responses
  • Catalog queries limited to 30 items
  • Every recommendation MUST be persisted via tracking before presenting (unless SKIP_TRACKING)
  • Recommendations should span multiple domains when the request is generic
  • Never recommend changes to externally managed (Shippo) shipping regions
Did this help?