diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..13566b81 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/skills/wix-manage/references/ecommerce/flow-cart-abandonment-analysis.md b/skills/wix-manage/references/ecommerce/flow-cart-abandonment-analysis.md new file mode 100644 index 00000000..00a3eedb --- /dev/null +++ b/skills/wix-manage/references/ecommerce/flow-cart-abandonment-analysis.md @@ -0,0 +1,381 @@ +--- +name: "Flow: Cart Abandonment Analysis" +description: Analyzes abandoned cart performance — calculates abandonment rate, compares to industry benchmarks, diagnoses root causes (shipping cost surprises, coverage gaps, missing recovery automation, high rates, checkout friction), and generates targeted recommendations. +layer: flow +--- +# Flow: Cart Abandonment Analysis + +## When to use + +Activate this flow for any question about abandoned cart performance, including: + +**Rate and metrics** +- "What is my cart abandonment rate?" +- "How many carts are being abandoned?" +- "How much revenue am I losing to abandoned carts?" +- "What is my cart recovery rate?" +- "Am I above or below average for cart abandonment?" + +**Root cause and diagnosis** +- "Why are people leaving without buying?" +- "Why aren't customers completing checkout?" +- "What's causing checkout drop-off?" +- "Why are carts not converting?" + +**Recovery and automation** +- "How do I recover abandoned carts?" +- "Should I set up cart recovery emails?" +- "How much could I recover with automation?" +- "Is my cart recovery working?" + +**General performance** +- Any question about checkout conversion, lost sales, unfinished purchases, or abandoned cart trends +- Proactive analysis when the ABANDONED_CART domain is active and no specific question was asked + +--- + +## Data sources + +### Profile (available now) + +All base metrics come from Step 3 of the entry point (`recommend-ecommerce-strategy.md`). + +| Profile field | Type | Description | +|---|---|---| +| `ecom_number_cart_that_were_abandoned_last_30_days` | LONG | Count of abandoned carts in last 30 days | +| `ecom_usd_sum_of_carts_that_were_abandoned_last_30_days` | LONG | Total USD value of abandoned carts, last 30 days | +| `activate_abandoned_cart_automation` | STRING | Non-null = recovery automation is active; null = inactive | +| `last_30_days_orders_count` | LONG | Orders placed in last 30 days (already in Step 3) | +| `online_gpv_last_30_days` | LONG | Gross payment volume last 30 days (already in Step 3) | +| `payment_currency` | STRING | Site currency (already in Step 3) | + +**If Profile fields are missing or zero:** Proceed with available data. Do not fail the recommendation. Use conservative estimates where needed and note data limitations. + +For industry benchmarks on abandonment rates and recovery rates, additionally call `GetAbandonedCartsBenchmarks`: + +``` +CallWixSiteAPI( + url: "https://www.wix.com/_api/analytics-ng-server/v2/store-overview/get-abandoned-carts-benchmarks", + method: "POST", + body: {} +) +``` + +Response shape: + +```json +{ + "data": { + "abandoned_carts_rate": 0.72, + "recoverable_carts_rate": 0.45, + "cart_recovery_rate": 0.08 + } +} +``` + +| Field | Description | +|---|---| +| `abandoned_carts_rate` | Industry average abandoned cart rate (e.g., 0.72 = 72%) | +| `recoverable_carts_rate` | Share of abandoned carts that have a contact email (recoverable) | +| `cart_recovery_rate` | Industry average recovery rate via email automation | + +If the benchmark call fails, use these fallback industry averages: + +| Metric | Industry average | +|---|---| +| Cart abandonment rate | ~70% | +| Recoverable cart rate | ~40% | +| Recovery rate (with automation) | ~8-15% | + +### DWH data (future — via data-to-production API) + +**Not available at runtime yet.** These fields will be provided by `com.wixpress.datatoproduction.data-to-production`, which returns results equivalent to the reference queries below. When available, prefer this data over Profile estimates and benchmark fallbacks. + +**Additional fields this will provide:** + +| Field | Source | Replaces | +|---|---|---| +| `recovery_rate_pct` | actual recovered / total abandoned | 10% hardcoded estimate | +| `recoverable_count` | carts with buyer contact (all in practice) | 40% benchmark estimate | +| `avg_cart_value_usd` | average per-cart USD value | missing_sales / count | +| `cart_churn_pct` | % dropped before reaching checkout | no current signal | +| `checkout_churn_pct` | % dropped during checkout | root cause E signal | + +**When `checkout_churn_pct > 80%`:** Strengthen root cause E diagnosis — checkout UX friction is almost certainly the primary driver. + +**When `cart_churn_pct > 60%`:** The drop is happening before checkout — likely product/pricing or trust signals on the product page, not shipping or checkout UX. + +``` +-- DEBUG REFERENCE ONLY — for QA and future data-to-production wiring +-- Table: prod.ecom.abandoned_cart_dim (Tier 1, owner: ecom-platform-data) +-- Returns: per-site recovery metrics for last 30 days + +SELECT + msid, + COUNT(*) AS abandoned_cart_count, + COUNT(CASE WHEN buyer_contact_id IS NOT NULL THEN 1 END) AS recoverable_count, + COUNT(CASE WHEN status = 'RECOVERED' THEN 1 END) AS recovered_count, + COUNT(CASE WHEN first_email_sent_date IS NOT NULL THEN 1 END) AS email_sent_count, + COUNT(CASE WHEN first_email_sent_date IS NOT NULL AND status = 'RECOVERED' THEN 1 END) AS email_recovered_count, + ROUND(SUM(price_total_usd), 2) AS total_abandoned_usd, + ROUND(AVG(price_total_usd), 2) AS avg_cart_value_usd, + ROUND(COUNT(CASE WHEN status = 'RECOVERED' THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 1) AS recovery_rate_pct, + ROUND(COUNT(CASE WHEN buyer_contact_id IS NOT NULL THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 1) AS recoverable_rate_pct +FROM prod.ecom.abandoned_cart_dim +WHERE msid = '' + AND abandoned_date >= CURRENT_DATE - INTERVAL '30' DAY + AND deleted_date IS NULL +GROUP BY msid + +-- Sample output (2026-05-26, test sites): +-- msid | abandoned | recoverable | recovered | email_sent | email_recovered | total_usd | avg_usd | recovery_pct | recoverable_pct +-- 0539bfda (Fishing) | 815 | 815 | 129 | 803 | 129 | 181966.52 | 223.27 | 15.8% | 100% +-- 25fd3126 (Cannabis) | 581 | 581 | 236 | 53 | 10 | 113238.13 | 194.90 | 40.6% | 100% +-- 2a3e0db2 (Lighting) | 147 | 147 | 20 | 146 | 20 | 30741.17 | 209.12 | 13.6% | 100% +-- c1f68cb7 (Sneakers) | 27 | 27 | 2 | 0 | 0 | 4373.40 | 161.98 | 7.4% | 100% +``` + +``` +-- DEBUG REFERENCE ONLY — for QA and future data-to-production wiring +-- Table: prod.ecom.abandoned_cart_enrichments_monthly (owner: ecom-platform-data) +-- Returns: funnel churn location — cart stage vs checkout stage + +SELECT + msid, + COUNT(*) AS total_carts, + COUNT(CASE WHEN churned_at_cart = true THEN 1 END) AS churned_at_cart, + COUNT(CASE WHEN churned_at_checkout = true THEN 1 END) AS churned_at_checkout, + COUNT(CASE WHEN is_recoverable = true THEN 1 END) AS recoverable_count, + COUNT(CASE WHEN is_recovered = true THEN 1 END) AS recovered_count, + COUNT(CASE WHEN is_email_sent = true THEN 1 END) AS email_sent_count, + ROUND(COUNT(CASE WHEN churned_at_cart = true THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 1) AS cart_churn_pct, + ROUND(COUNT(CASE WHEN churned_at_checkout = true THEN 1 END) * 100.0 / NULLIF(COUNT(*), 0), 1) AS checkout_churn_pct +FROM prod.ecom.abandoned_cart_enrichments_monthly +WHERE msid = '' + AND abandoned_date >= CURRENT_DATE - INTERVAL '30' DAY +GROUP BY msid + +-- Sample output (2026-05-26, test sites): +-- msid | total | cart_churn | checkout_churn | recoverable | recovered | email_sent | cart_pct | checkout_pct +-- 0539bfda (Fishing) | 102 | 1 | 101 | 102 | 11 | 102 | 1.0% | 99.0% +-- 25fd3126 (Cannabis) | 111 | 77 | 34 | 111 | 3 | 36 | 69.4% | 30.6% +-- 2a3e0db2 (Lighting) | 13 | 5 | 8 | 13 | 4 | 13 | 38.5% | 61.5% +-- c1f68cb7 (Sneakers) | 22 | 1 | 21 | 22 | 0 | 0 | 4.5% | 95.5% +``` + +--- + +## Step 1: Calculate the abandonment rate + +From Profile data: + +``` +abandoned_carts = ecom_number_cart_that_were_abandoned_last_30_days +orders = last_30_days_orders_count +total_carts_est = abandoned_carts + orders +abandonment_rate = abandoned_carts / total_carts_est (as percentage) +``` + +**Derived metrics:** + +``` +aov = online_gpv_last_30_days / orders (in payment_currency) +missing_sales_usd = ecom_usd_sum_of_carts_that_were_abandoned_last_30_days +avg_abandoned_cart_value = missing_sales_usd / abandoned_carts +``` + +**Benchmark comparison:** + +- `abandonment_rate` vs `benchmark.abandoned_carts_rate` (industry avg ~70%) +- If site rate > benchmark + 5 percentage points → above-average problem +- If site rate < benchmark - 5 percentage points → performing well on abandonment + +--- + +## Step 2: Diagnose root causes + +Run through this checklist. Root cause C uses only Profile data. Root causes A, B, and D require delivery profile and shipping configuration data — these signals are available when the SHIPPING domain is co-active in the same session (Step 6 of the entry point). If SHIPPING is not active, skip A, B, and D and rely on root cause C and E only. + +### Root cause A — Shipping cost surprise (most common) + +**Signals:** +- No free shipping option exists +- Free shipping threshold > 2× AOV +- All shipping rates are flat with no tiering + +**Impact:** Customers see full shipping cost at checkout for the first time. Studies show 49% of cart abandonment is caused by extra costs (shipping, taxes, fees). + +**Detection:** Check if `data.free_shipping_exists = false` from delivery profile analysis, or if existing free shipping threshold > `2 × aov`. + +### Root cause B — Shipping coverage gap + +**Signals:** +- Active regions with zero assigned shipping options +- Customer's country not covered by any region + +**Impact:** Customer cannot complete checkout at all — conversion is 0% for that region. + +### Root cause C — No recovery automation + +**Signals:** +- `activate_abandoned_cart_automation` is null or empty in Profile + +**Impact:** Recoverable carts (those with a contact email) are never followed up. Industry automation recovers 8-15% of abandoned carts. + +**Estimated recoverable value:** + +``` +recoverable_carts_est = abandoned_carts × benchmark.recoverable_carts_rate (use 0.40 if benchmark unavailable) +recoverable_value_usd = recoverable_carts_est × avg_abandoned_cart_value +potential_recovery_usd = recoverable_value_usd × 0.10 (conservative 10% recovery rate) +``` + +### Root cause D — High shipping rates + +**Signals:** +- Any shipping rate > 15% of AOV +- `multiplyByQuantity: true` on any rate + +**Impact:** Sticker shock — final shipping amount feels disproportionate to order value. + +### Root cause E — Checkout friction (non-shipping) + +**Signals:** +- High abandonment rate (> 80%) with no shipping issues detected +- `checkout_churn_pct > 80%` from DWH data (when available) — strong confirmation + +**Possible causes (non-shipping, informational only):** +- Forced account creation +- Limited payment methods +- Long checkout form +- Trust/security concerns + +**Note:** These are outside the scope of shipping/discount recommendations. Report the issue and suggest the merchant investigate their checkout UX. + +**If `cart_churn_pct > 60%` from DWH data:** Drop is happening before checkout — likely product page trust, pricing, or unclear product descriptions. This is a different problem from checkout friction. Note it separately. + +--- + +## Step 3: Generate recommendations + +Produce up to 3 recommendations, ordered by root cause impact. Use domain `"abandoned_cart_recovery"` for all. + +### Recommendation type: Activate recovery automation + +**When to generate:** `activate_abandoned_cart_automation` is null/empty AND `missing_sales_usd >= 200`. + +**Urgency:** + +| Missing sales (USD, 30 days) | Urgency | +|---|---| +| ≥ $1,000 | HIGH | +| $200–$999 | MEDIUM | +| < $200 | Do not recommend | + +**Action:** `activate_abandoned_cart_recovery` + +**Required params:** + +```json +{ + "automation_key": "wix_e_commerce-cart_abandonment", + "missing_sales_usd": "", + "abandoned_cart_count": "", + "recoverable_carts_est": "", + "potential_recovery_usd": "", + "window_days": 30 +} +``` + +**Title pattern:** `"Recover $[potential_recovery_usd] in abandoned carts"` + +**Reasoning MUST cite:** abandonment count, total missing sales, that automation is inactive, the estimated recoverable count, and potential recovery amount. + +### Recommendation type: Fix shipping to reduce abandonment + +**When to generate:** Root cause A, B, or D detected AND these are not already covered by shipping recommendations in the same session. + +Delegate to the appropriate shipping flow: + +- Coverage gap → `flow-fix-coverage-gaps` +- No free shipping → `flow-add-free-shipping` +- High rates → `flow-optimize-shipping-rates` + +Use domain `"shipping"` for these recommendations. + +### Recommendation type: Address abandonment rate insight + +**When to generate:** Abandonment rate > benchmark + 5pp AND no clear root cause found from above. + +**Action:** `investigate_checkout_friction` + +**Params:** + +```json +{ + "site_abandonment_rate_pct": "", + "industry_benchmark_pct": "", + "gap_pp": "", + "non_shipping_causes": ["forced_account_creation", "payment_methods", "checkout_ux"] +} +``` + +**Domain:** `"abandoned_cart_recovery"` + +--- + +## Output for "What is my cart abandonment rate?" + +When the merchant asks specifically about their rate, always include a direct answer at the top of your response before the JSON: + +> "Your cart abandonment rate is approximately **[X]%** over the last 30 days — [above/below/at] the industry average of ~70%. You had **[N] abandoned carts** representing **$[missing_sales]** in missed revenue." + +Then proceed with recommendations as normal. + +--- + +## Output for "Why are people leaving without buying?" + +When the merchant asks about causes, lead with the primary root cause found: + +> "The main reason customers are leaving without buying is **[root cause]**. [Specific data point from the site]. Here's what I recommend:" + +Then output the recommendation JSON. + +--- + +## KPIs + +| KPI | Definition | Benchmark | +|---|---|---| +| Cart abandonment rate | abandoned carts / (abandoned + orders) | Industry avg ~70% | +| Delivery step CVR | Customers completing delivery step / customers reaching it | ~65% healthy | +| Cart recovery rate | Recovered carts / total abandoned carts | ~8-15% with automation | +| Revenue from recovered carts | recovered_carts × avg_abandoned_cart_value | — | + +--- + +## Measurement plan + +### Baseline (before recommendations) + +1. Record `abandonment_rate` from Step 1 calculation +2. Note whether recovery automation is active (`activate_abandoned_cart_automation`) +3. Record `missing_sales_usd` over the last 30 days + +### After activation (30-day check) + +1. Re-run this flow and compare new `abandonment_rate` vs baseline +2. If automation was activated: check recovered revenue vs `potential_recovery_usd` estimate +3. If shipping was fixed: compare before/after shipping root causes +4. `delivery_step_cvr >= 65%` and `abandonment_rate` trending toward benchmark = healthy + +--- + +## Constraints + +- `missing_sales_usd` and `potential_recovery_usd` must be integers (rounded) +- Always state the 30-day window in reasoning +- Do not recommend recovery automation if `missing_sales_usd < 200` +- Do not duplicate shipping recommendations already generated in Step 6 +- Abandonment rate calculation is an estimate (abandoned carts / (abandoned + orders)) — note this in reasoning diff --git a/skills/wix-manage/references/ecommerce/goal-reduce-cart-abandonment.md b/skills/wix-manage/references/ecommerce/goal-reduce-cart-abandonment.md deleted file mode 100644 index d81932d0..00000000 --- a/skills/wix-manage/references/ecommerce/goal-reduce-cart-abandonment.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -name: "Goal: Reduce Cart Abandonment" -description: Maps cart abandonment reduction to recovery automation KPIs. Covers abandoned cart email automation activation, missing sales detection, and eligibility thresholds. Also references shipping flows that affect checkout drop-off. -layer: goal -references: - - name: "Flow: Fix Coverage Gaps" - path: ecommerce/flow-fix-coverage-gaps.md - load: false - - name: "Recipe: Apply Shipping Recommendations" - path: ecommerce/recipe-apply-shipping-recommendations.md - load: false - - name: "Setup Store Pickup Location" - path: ecommerce/setup-store-pickup-location.md - load: false ---- -# Goal: Reduce Cart Abandonment - -> **Related skills** (read with `ReadFullDocsArticle` if needed): -> - [Flow: Fix Coverage Gaps](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/skills/flow-fix-coverage-gaps) — shipping coverage gaps block checkout entirely -> - [Recipe: Apply Shipping Recommendations](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/skills/recipe-apply-shipping-recommendations) -> - [Setup Store Pickup Location](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/skills/setup-store-pickup-location) -> - [Setup Store Pickup Location](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/skills/setup-store-pickup-location) - -Reduce checkout abandonment caused by shipping friction — coverage gaps, unexpected costs, and missing free shipping options — by optimizing the delivery step of the checkout funnel. - ---- - -## Business Goal - -The merchant wants to reduce the percentage of customers who abandon checkout, specifically at the delivery/shipping step. Shipping-related friction is the leading cause of checkout abandonment, and the delivery step conversion rate (delivery_step_cvr) is the primary metric. - -**Benchmark:** A healthy delivery_step_cvr is approximately 65%. Stores below this benchmark have significant shipping-related friction. - ---- - -## KPIs - -| KPI | Definition | How to measure | Benchmark | -|---|---|---|---| -| Delivery step CVR | Customers completing delivery step / customers reaching delivery step | Site metrics: delivery_step_cvr | 65% | -| Cart abandonment rate | Carts created but not converted to orders / total carts | 1 - (orders / carts) | Industry avg ~70% | -| Free shipping qualification rate | Orders qualifying for free shipping / total orders | Track orders meeting free shipping threshold | Higher is better | -| Revenue from recovered checkouts | Incremental revenue from improved conversion | (new_cvr - old_cvr) * checkout_sessions * AOV | - | - ---- - -## Triggers - -Activate this goal when the merchant expresses any of the following intents: - -- "cart abandonment" -- "checkout drop-off" -- "shipping friction" -- "delivery step" -- "people are leaving at checkout" -- "customers not completing orders" -- "why are customers abandoning" -- "checkout conversion" -- Any request about reducing drop-off during the purchase flow - ---- - -## Diagnostic Questions - -Before recommending actions, assess the root cause of abandonment. Ask or investigate: - -1. **Where are buyers dropping off?** — Is it specifically the delivery step, or payment, or earlier in the funnel? -2. **Are shipping costs visible before checkout?** — Surprise shipping costs are the #1 abandonment driver. -3. **Is there a free shipping option?** — Free shipping (even with a threshold) dramatically reduces abandonment. -4. **Are there shipping coverage gaps?** — Customers in unserved regions cannot complete checkout at all. -5. **Are shipping rates reasonable?** — Rates above 10-15% of order value cause sticker shock. -6. **Are payment methods adequate?** — Missing payment options can look like shipping-step abandonment in metrics. -7. **Are recovery emails enabled?** — Abandoned cart emails can recapture 5-15% of abandoned carts. - ---- - -## Recommended Actions (Prioritized) - -Actions are ordered by impact. Address blocking issues first, then conversion drivers, then optimization. - -### Priority 1: Flow: Fix Shipping Coverage Gaps (Blocking) - -Coverage gaps are the most critical issue — if a customer's region is not covered by any shipping option, they literally cannot complete checkout. - -**When to use:** When delivery profiles show regions without active shipping options, inactive regions, or missing domestic coverage. - -**Impact:** Removes a hard blocker. Customers in uncovered regions have 0% conversion. - -### Priority 2: Flow: Add Free Shipping (Conversion Driver) - -Free shipping is the single most effective lever for reducing cart abandonment. Even with a minimum order threshold, offering a free shipping option significantly improves delivery step conversion. - -**When to use:** When the store has no free shipping option, or when the existing free shipping threshold is set too high relative to AOV. - -**Impact:** Typically improves delivery_step_cvr by 10-20 percentage points. The threshold should be calibrated to AOV (typically 1.2x-1.5x AOV). - -### Priority 3: Flow: Optimize Shipping Rates (Sticker Shock Reduction) - -High shipping rates cause sticker shock even when coverage exists. Rate optimization ensures pricing is competitive and proportional to order value. - -**When to use:** When shipping rates are disproportionately high relative to product prices, or when rates lack tiered/conditional pricing. - -**Impact:** Reduces abandonment from price sensitivity. Most effective when combined with free shipping at a threshold. - ---- - -## Measurement Plan - -### Before optimization - -1. Record baseline delivery_step_cvr from site metrics -2. Record current cart abandonment rate -3. Identify the specific shipping configuration state: - - Number of active regions with shipping options - - Presence/absence of free shipping - - Average shipping rate as percentage of AOV - -### During optimization (weekly monitoring for 30 days) - -1. Track delivery_step_cvr weekly -2. Compare week-over-week trend -3. Monitor free shipping qualification rate (if threshold was added) -4. Check for new coverage gaps if regions were modified - -### After optimization (30-day assessment) - -1. Calculate CVR improvement: `new_delivery_step_cvr - baseline_delivery_step_cvr` -2. Estimate revenue recovered: `cvr_improvement * checkout_sessions * AOV` -3. Evaluate threshold effectiveness: - - Free shipping qualification rate > 40% = threshold well-calibrated - - Free shipping qualification rate < 10% = threshold too high, consider lowering -4. Assess whether further optimization is needed: - - delivery_step_cvr >= 65% = healthy, monitor quarterly - - delivery_step_cvr 50-65% = improving, continue optimization - - delivery_step_cvr < 50% = investigate non-shipping causes (payment, UX) - ---- - -## Decision Matrix - -| Scenario | Priority Action | Rationale | -|---|---|---| -| Regions without shipping options | Fix Coverage Gaps (P1) | Hard blocker — 0% conversion in uncovered regions | -| No free shipping option exists | Add Free Shipping (P2) | #1 conversion driver for delivery step | -| Free shipping exists but threshold too high | Add Free Shipping (recalibrate) | Lower threshold to match AOV | -| High shipping rates, free shipping exists | Optimize Shipping Rates (P3) | Reduce sticker shock for below-threshold orders | -| delivery_step_cvr >= 65% | No immediate action needed | Already at healthy benchmark | -| Abandonment not at delivery step | Investigate other causes | Payment methods, UX, trust signals may be the issue | diff --git a/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md b/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md index f89cba6a..7bfb0879 100644 --- a/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md +++ b/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md @@ -18,8 +18,8 @@ references: - name: "Goal: Drive Cross-Sells" path: ecommerce/goal-drive-cross-sells.md load: false - - name: "Goal: Reduce Cart Abandonment" - path: ecommerce/goal-reduce-cart-abandonment.md + - name: "Flow: Cart Abandonment Analysis" + path: ecommerce/flow-cart-abandonment-analysis.md load: false - name: "Setup: Coupons" path: ecommerce/setup-coupons.md @@ -33,7 +33,7 @@ references: > - **UPSELL_BOOST** / **SHIPPING** → [Goal: Increase AOV](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/skills/goal-increase-aov) (includes both discount and shipping flows) > - **STOCK_MOVER** → [Goal: Clear Inventory](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/skills/goal-clear-inventory) > - **BUNDLE_AND_SAVE** → [Goal: Drive Cross-Sells](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/skills/goal-drive-cross-sells) -> - **ABANDONED_CART** → [Goal: Reduce Cart Abandonment](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/skills/goal-reduce-cart-abandonment) +> - **ABANDONED_CART** → [Flow: Cart Abandonment Analysis](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/skills/flow-cart-abandonment-analysis) > > **If COUPON mechanism in Step 4c**, load: > - [Setup: Coupons](https://dev.wix.com/docs/api-reference/business-solutions/coupons) @@ -111,7 +111,10 @@ CallWixSiteAPI( "success_last_30_days_distinct_visitors", "last_30_days_orders_count", "online_gpv_last_30_days", - "payment_currency" + "payment_currency", + "ecom_number_cart_that_were_abandoned_last_30_days", + "ecom_usd_sum_of_carts_that_were_abandoned_last_30_days", + "activate_abandoned_cart_automation" ] } ) @@ -129,6 +132,9 @@ CallWixSiteAPI( | `last_30_days_orders_count` | LONG | Order count in last 30 days | AOV calculation, goal selection | | `online_gpv_last_30_days` | LONG | Online Gross Payment Volume in last 30 days (site currency units) | Revenue analysis, AOV calculation | | `payment_currency` | STRING | Store payment currency code (ISO-4217) | Discount/shipping amount formatting | +| `ecom_number_cart_that_were_abandoned_last_30_days` | LONG | Count of carts abandoned in last 30 days | Abandoned cart domain activation + analysis | +| `ecom_usd_sum_of_carts_that_were_abandoned_last_30_days` | LONG | Total USD value of abandoned carts last 30 days | Missing sales calculation for ABANDONED_CART | +| `activate_abandoned_cart_automation` | STRING | Non-null = recovery automation is active; null = inactive | ABANDONED_CART domain eligibility gate | **Response shape** — each field is a nested object; missing fields = no data for this site: @@ -205,11 +211,11 @@ Based on the merchant's request AND the site data, determine which domains to an **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:** +**For ABANDONED_CART domain — load the analysis flow directly:** -[Goal: Reduce Cart Abandonment](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/skills/goal-reduce-cart-abandonment) +[Flow: Cart Abandonment Analysis](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/skills/flow-cart-abandonment-analysis) -**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. +**The flow contains all execution logic** — rate calculation, root cause diagnosis, benchmark comparison, and recommendation generation. **Do NOT skip this step.** The goal/flow/guardrail skills contain critical constraints (margin tiers, campaign windows, conflict checks) that prevent bad recommendations. @@ -420,29 +426,20 @@ Analyze the site's shipping configuration using the rules below. All shipping re ### 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"`. +**Delegate to [Flow: Cart Abandonment Analysis](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/skills/flow-cart-abandonment-analysis)** — loaded in Step 4b when ABANDONED_CART is active. -**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 +The flow uses Profile data already fetched in Step 3: -**If either condition fails, do NOT generate abandoned cart recommendations.** - -**Urgency thresholds based on missing sales (USD, last 30 days):** - -| Missing sales | Urgency | +| Profile field | Used for | |---|---| -| >= $1,000 | HIGH | -| $200 — $999 | MEDIUM | -| < $200 | Do 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. +| `ecom_number_cart_that_were_abandoned_last_30_days` | Abandoned cart count | +| `ecom_usd_sum_of_carts_that_were_abandoned_last_30_days` | Missing sales (USD) | +| `activate_abandoned_cart_automation` | Eligibility gate — is automation already active? | +| `last_30_days_orders_count` | Abandonment rate denominator | +| `online_gpv_last_30_days` | AOV calculation | +| `payment_currency` | Currency display | + +The flow handles: rate calculation, industry benchmarks (from `GetAbandonedCartsBenchmarks` API), root cause diagnosis, and recommendation generation. All abandoned cart recommendations use `domain: "abandoned_cart_recovery"`. ### Cross-domain balance diff --git a/skills/wix-manage/references/ecommerce/skill-graph.md b/skills/wix-manage/references/ecommerce/skill-graph.md index d36f3555..ed8fc6b7 100644 --- a/skills/wix-manage/references/ecommerce/skill-graph.md +++ b/skills/wix-manage/references/ecommerce/skill-graph.md @@ -15,18 +15,14 @@ flowchart TB R --> |"loads API ref"| Config R --> |"Step 4b: loads matching goal"| Goals + R --> |"Step 4b: ABANDONED_CART"| FAC R --> |"Step 2+8: tracking inlined"| TrackingAPI subgraph Goals["Goals — Business Objectives"] - subgraph GD["Discount + Shipping"] - goal-increase-aov - goal-clear-inventory - goal-seasonal-revenue - goal-drive-cross-sells - end - subgraph GA["Abandoned Cart"] - goal-reduce-cart-abandonment - end + goal-increase-aov + goal-clear-inventory + goal-seasonal-revenue + goal-drive-cross-sells end Goals --> |"loads matching flows"| Flows @@ -44,6 +40,9 @@ flowchart TB flow-add-free-shipping flow-optimize-shipping-rates end + subgraph FAC["Cart Abandonment"] + flow-cart-abandonment-analysis + end end Flows --> |"loads validation"| Guardrails @@ -97,9 +96,9 @@ flowchart TB classDef standalone fill:#6b7280,stroke:#4b5563,color:#fff classDef apidoc fill:#e5e7eb,stroke:#9ca3af,color:#374151 - class goal-increase-aov,goal-clear-inventory,goal-seasonal-revenue,goal-drive-cross-sells,goal-reduce-cart-abandonment goal + class goal-increase-aov,goal-clear-inventory,goal-seasonal-revenue,goal-drive-cross-sells goal class guardrail-discount-conflicts,guardrail-margin-protection,guardrail-shipping-health,guardrail-rate-pricing-sanity guardrail - class flow-upsell-boost,flow-bundle-and-save,flow-stock-mover,flow-seasonal-promotion,flow-fix-coverage-gaps,flow-add-free-shipping,flow-optimize-shipping-rates flow + class flow-upsell-boost,flow-bundle-and-save,flow-stock-mover,flow-seasonal-promotion,flow-fix-coverage-gaps,flow-add-free-shipping,flow-optimize-shipping-rates,flow-cart-abandonment-analysis flow class setup-discount-rules,setup-coupons,setup-shipping-regions,setup-shipping-rates,api-recommendation-tracking config class recommend-ecommerce-strategy reco class recipe-apply-shipping-recommendations,setup-store-pickup-location,troubleshoot-discount-not-applying,troubleshoot-checkout-delivery-dropoff standalone @@ -116,7 +115,7 @@ flowchart TB | `goal-clear-inventory.md` | Step 4b (STOCK_MOVER) | | `goal-seasonal-revenue.md` | Step 4b (SEASONAL) | | `goal-drive-cross-sells.md` | Step 4b (BUNDLE_AND_SAVE) | -| `goal-reduce-cart-abandonment.md` | Step 4b (ABANDONED_CART domain) | +| `flow-cart-abandonment-analysis.md` | Step 4b (ABANDONED_CART domain — loaded directly) | | `flow-upsell-boost.md` | goal-increase-aov chain | | `flow-bundle-and-save.md` | goal-increase-aov / goal-drive-cross-sells chain | | `flow-stock-mover.md` | goal-clear-inventory chain | diff --git a/yaml/wix-manage/ecommerce/documentation.yaml b/yaml/wix-manage/ecommerce/documentation.yaml index 190ec646..f46c3c0a 100644 --- a/yaml/wix-manage/ecommerce/documentation.yaml +++ b/yaml/wix-manage/ecommerce/documentation.yaml @@ -48,6 +48,11 @@ apiDoc: title: "Flow: Seasonal Promotion" docsEntry: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce tags: [ecommerce, ecommerce recommendations] + # Flows — Cart Abandonment + - file: ../../../skills/wix-manage/references/ecommerce/flow-cart-abandonment-analysis.md + title: "Flow: Cart Abandonment Analysis" + docsEntry: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce + tags: [ecommerce, ecommerce recommendations] # Flows — Shipping - file: ../../../skills/wix-manage/references/ecommerce/flow-fix-coverage-gaps.md title: "Flow: Fix Coverage Gaps" @@ -99,10 +104,6 @@ apiDoc: title: "Goal: Drive Cross-Sells" docsEntry: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce tags: [ecommerce, ecommerce recommendations] - - file: ../../../skills/wix-manage/references/ecommerce/goal-reduce-cart-abandonment.md - title: "Goal: Reduce Cart Abandonment" - docsEntry: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce - tags: [ecommerce, ecommerce recommendations] # Tracking API - file: ../../../skills/wix-manage/references/ecommerce/api-recommendation-tracking.md title: "API: Recommendation Tracking"