One pass over a Wix store's backend, graded against the Black Friday / Cyber Monday checklist, delivered as one report in three blocks: what already works, what the agent can fix (one approval), what the merchant does (a checklist with links). The checklist is the BFCM Webinar 2026 one, built from ~13,000 Wix stores.
Principle: verify from data, never from assumption. Every ✅ in the report is backed by an API response the agent read, or a page the agent opened and looked at, in this session. A check the agent could not read or see is handed to the merchant as a checklist item with the exact page to open, never reported as passed.
Two eyes. The backend tells you what is configured; only the live site tells you what a customer sees. When the agent has a tool that opens a web page and returns what it shows (a browser, a screenshot tool, a page reader with rendered text), it opens the store and looks. When it does not, the visual checks become the first group of the merchant's checklist, each with the page link and what to look for, on desktop and on a phone.
Not for: designing the sale strategy from scratch (route to Recommend: eCommerce Strategy, then come back here to verify it), traffic acquisition (marketing), sites without Wix Stores (say so; offer the policies, emails and tracking sections only).
siteId, site URL, created date, time zone, currency, and read the Wix Stores line of its app list: hasStores must be true and storesCatalogV says V3 or V1. No Stores: say so and run only the policies, emails and tracking sections. V1: the catalog, inventory and category probes below are V3-only, so skip the catalog, stock and test-cart checks, say why, and run the rest; never call the V3 endpoints on a V1 store. Several sites and none named: ask which one. No site URL in the context means the site is not published: do not look for one (no docs search, no account-level site query, no site list). Leave SITE_URL empty, send Probe 1 whole and unchanged, and put "Publish your site" first in the checklist. This recipe reads its own site fields; do not run eCommerce: Load Context for the review. It is loaded only later, if the merchant approves creating a discount (see the fixes table).Promise.allSettled, a failed read returned as its own { ok: false } and never thrown. Catalog, inventory, categories, coupons, discount rules, shipping, checkout policies, marketing tags, automations, email campaigns, gift card product, cookie banner, site properties, pages, orders, the live homepage.finally. No order is placed, no customer created. The report says so. Skip when the catalog has no purchasable product.wix-manage recipe (table below). After each write, read it back and tell the merchant in one line what changed and what the value was before.Every finding lands in exactly one block, decided by who acts:
| Mark | Block | Rule |
|---|---|---|
| ✅ | Already working | Verified from an API response, or seen on the live site in a browser; the pass rule holds on real data |
| 🔧 | I can fix these | Verified problem whose fix has a row in the fixes table, pending the merchant's yes |
| ✋ | Your checklist | A task or confirmation only the merchant can do (editor, inbox, external tool, a toggle with no public API, a business decision), and every visual check when the agent has no browser |
| ❔ | Your checklist → "I couldn't check these" | Call failed or the API does not expose it; say how to check by hand. Never downgrade to 🔧 or upgrade to ✅ |
| ➖ | omitted | Not relevant to this store; at most one line at the end |
A check with two parts (agent fixes the data, merchant confirms in the editor) is split: the agent part goes to 🔧, the merchant part to ✋.
Numbers are the checklist's; each has its data source and pass rule in the checks file.
A. Checkout, payments & catalog — 1 test cart prices without errors (merchant places one real order) · 2 every visible product has an image, a price above 0 and a description · 3 payments connected and the methods customers expect are on: cards, Apple Pay, Google Pay, PayPal, buy-now-pay-later (merchant toggles; no public read). B. Sale merchandising (live homepage) — 4 announcement bar shows the sale and its dates match the discount window · 5 every product the homepage links to is in stock · 6 discounted products carry a compare-at price (the crossed-out original) · 7 a countdown timer, if present, ends when the discount ends · 8 the sale category is in the site menu. C. Shipping — 9 each region prices a test cart above and below the free-shipping threshold, and every shipping option shows a delivery estimate. D. Policies & legal — 10 return/shipping policy at checkout and linked in the footer · 11 sale terms exist (dates, exclusions, stacking, final-sale) · 12 Terms, Privacy and cookie banner in place. E. Stock — 13 sale and best-selling products have stock for expected demand · 14 low-stock alerts (merchant) · 15 inventory tracking on for limited-quantity products. F. Coupons & discounts — 16 a dated discount or coupon for the sale exists, in the store time zone · 17 each coupon applies on a test cart with the expected amount and minimum · 18 coupon + automatic discount together never price a line below cost · 19 the sale does not stack on products already discounted · 20 coupons have total and per-customer limits · 21 everything is scheduled: discounts, coupons, emails (banners and timers: merchant). G. Emails & tracking — 22 order confirmation, shipping confirmation and abandoned-cart automations ACTIVE · 23 at least 4 email campaigns for the sale scheduled or sent · 24 Google Analytics, Meta Pixel, TikTok Pixel connected. I. Google & AI search — 25 Google Merchant Center connected (merchant; no public read) · 26 product data ready: clear titles, brand, descriptions · 27 Google / Meta feeds synced, no rejections (merchant). H. Operations — 28 expected order volume from the same sale's week last year and the last 30 days.
Write exactly this structure: it fixes what the report says and in what order. How it looks and how to talk to the store owner follow below.
Rules for the report:
- [ ]), grouped by where the merchant does them, each with a dashboard link when a route exists. Checkboxes render as a real checklist where Markdown task lists are supported and as readable text elsewhere.https://manage.wix.com/dashboard/<siteId>/. Routes allowed, all from the dashboard navigation and automations recipes: products wix-stores/products, inventory wix-stores/inventory, categories wix-stores/categories/list, store settings wix-stores/settings, Google channel wix-stores/channel/google, orders ecom-platform/orders-list, abandoned checkouts ecom-platform/abandoned-checkouts, shipping ecom-platform/delivery-profile, tax ecom-platform/tax, checkout settings ecom-platform/checkout-settings, gift cards ecom-platform/gift-cards, accept payments wix-cashier/payments, automations triggers, email campaigns email-marketing/my-campaigns. No other route from memory; without one, name the page in words.The store owner should be able to see where they stand in five seconds and act with one tap. Use the richest presentation the client can draw. When it can draw cards, status labels, selectable lists and buttons, use them as mapped below. When it can only show text, the Markdown in the contract is the fallback and must read just as clearly. The content and its order are the same either way.
| Part of the report | With rich UI | Text fallback |
|---|---|---|
| Verdict | A status label next to the sale name, with the verdict sentence beside it | The bold verdict line |
| Headline numbers | A row of up to four cards, below | The line under the verdict: "17 days to Black Friday, Nov 27 · 0 of 27 products can be bought · no sale set up yet · 5 fixes I can make, 7 tasks for you" |
| This week | A quiet note under the cards, only when nothing stops sales | The line from the timing table |
| ✅ Already working | A short list with check marks | The bullet list |
| 🔧 I can fix these | The ready fixes as a selectable list, preselected, each saying what will change. Fixes that need an answer sit below them, not selectable, each with its suggestion. Two buttons: "Yes, apply N fixes" ("Yes, apply 1 fix" for one) and "No, cancel". N counts only the selected ready fixes. Choosing items changes nothing; only the first button does | The numbered list and its reply lines |
| 📋 Your checklist | Checkboxes the owner can tick, grouped by place, each with a button that opens the right page, labelled in Title Case ("Open Accept Payments") | - [ ] lines with links |
The cards on top. Up to four, in this order, each one number or one short phrase with a plain label. Red when it stops sales, amber when it needs attention, green when it is fine; the words on the card carry the meaning, never the colour alone.
stockSummary in the checks file (canBeBought of visibleProducts).A card shows only what was read from the store in this session. When a number could not be read, leave that card out; never show a guess, and never add a card for something that cannot be read (payments, for example).
No extra sections. Problems that stop sales are not listed in a block of their own: they go first inside 🔧 or 📋, with "Stops sales." at the start of the line, and the verdict names the worst one. Saying the same problem twice makes the report longer, not clearer.
The owner is busy, is often on a phone, and may be worried about the sale. Every message leaves them knowing where they stand and what to do next. This section applies to the report and to every message around it.
Voice. Calm, direct and on their side. Friendly, never cute. Never blame: say what is missing and how to fix it, not what they forgot. No exclamation points, no "please", no "sorry", no "we". "I" is only for what you checked or will change. "You" and "your" are for the store.
Say less. A report the owner can read in about a minute beats a complete one they skim. Keep the whole report to about 500 words; when it runs over, cut the least urgent lines first.
Words.
| Write this | Not this |
|---|---|
| Your 27 books show as out of stock, so nobody can buy them | The inventory API contains entries only for three hidden products |
| An automatic discount, a sale price that applies by itself with no code | A discount rule |
| The original price, shown crossed out | Compare-at price |
| Inventory tracking is off for 4 products, so they can oversell | trackQuantity is false on 4 variants |
| Your abandoned cart email is off, so customers who leave items in their cart get no reminder | The abandoned-cart recovery automation is inactive |
| The "I agree to the terms" checkbox at checkout | policyAgreementCheckbox |
| Delivery time shown at checkout | Delivery estimate on the shipping option |
| Google Analytics and Meta tracking | Marketing tags, pixels |
What to say at each moment. One pattern each. Keep the shape, use the store's own names and numbers.
| Moment | Pattern | Example |
|---|---|---|
| Before the first read | One line: what you are doing, how long, and that nothing changes | "I'm checking your store for Black Friday. This takes a few minutes and changes nothing." |
| Which store | Numbered options and how to reply. Never the word "confirm" | "Which store should I review? 1. The Thriller Room 2. Ember and Oak. Reply with the number." |
| Which sale | One question, only when step 2 cannot tell | "Which sale are you preparing for, and on what date?" |
| Before a change that customers see, or that can't be taken back | See the approval rules below | "To approve: create an automatic discount of 20% on all products, from Nov 16 00 to Nov 29 23, Berlin time. Customers see the lower prices as soon as it starts. Reply "yes" to create it, or "no" to leave your prices as they are." |
| After a fix | What changed, the new value, the old value, how to undo it | "Done. Coupon BF25 now ends Nov 29 at 23, Berlin time. It had no end date before. Say "undo BF25" to put it back." |
| A fix failed | What did not happen, that nothing else changed, the next step | "I couldn't update the coupon, and nothing was changed. You can set the end date yourself: Open Coupons." |
| Something couldn't be checked | What, and how to check it | "I couldn't check your shipping settings. Open Shipping and check that every country you sell to has a rate and a delivery time." |
| After the fixes | The new standing and what is left | "You're almost ready now. 4 things are left for you, starting with payments." |
Asking for approval. The agent proposed these changes, so the owner approves them. Getting this moment right matters more than any other line.
Shopping starts early and ends late; a single check the day before the sale is too late for many items. Pick the stage from how many days remain to the sale day. The dates column is Black Friday 2026 (Nov 27; Black Friday is the Friday after the fourth Thursday of November, US Thanksgiving). For any other sale, or another year, use the days column. The stage names are for you; the owner reads only the line in the fourth column.
| Days to the sale day | Black Friday 2026 | Stage | The line the owner reads | What the report puts first |
|---|---|---|---|---|
| 25–19 | Nov 2–8 | Tease | This week: Get your products ready for Google and start telling customers about the sale. | Google readiness (25–26), gift guide (S8), VIP waitlist (S19), paid ads started (S5) |
| 18–12 | Nov 9–15 | Early access | This week: Give your subscribers first access to the sale. | Segments (S20), 4+ emails scheduled (23), early-access offer for subscribers (S2), payment methods (3) |
| 11–5 | Nov 16–22 | Go public | This week: Put the sale on your site. | Announcement bar, countdown, sale category in the menu, ribbons, automatic discounts, free-shipping banner (4–8, S6–S15) |
| 4–1 | Nov 23–26 | Final check-up | This week: Run the final checks before the sale. | All of Part 1: test order, coupon and shipping tests, stock, policies, everything scheduled (21) |
| 0, and up to 3 after | Nov 27–30 | Sale days (Black Friday · Cyber Monday) | Your sale is on. Check orders, stock and coupons every day. | Everything live now (1, 9, 16–17, 22); for Black Friday, a separate Cyber Monday offer (S3) |
| 4 or more after | December | Finish late | After the sale: Take down sale banners and email your new customers. | Shipping cutoffs (S17), second-purchase follow-up (S4), countdowns and banners taken down (4, 7) |
| More than 25 | Any other date | Preparation | You have time: Get the basics right first. | Order by damage; mention the first stage ahead |
Apply only what the merchant names. Load the recipe, follow it, confirm with a read-back in the same call.
| Fix | Recipe |
|---|---|
| Write missing or weak product titles, brand, descriptions; set compare-at prices; add ribbons | stores/update-product-with-options.md (ribbons: Get or Create Ribbon in ecommerce/ecom-pricing.md) |
| Turn on inventory tracking, set quantities | stores/update-product-stock-and-pre-order.md |
| Create or fix a coupon: dates, usage limits, minimum | ecommerce/pricing-promotions/ecom-pricing-create-coupon.md |
| Fix an existing automatic discount: dates, scope, exclusions; convert a coupon to an automatic discount | ecommerce/pricing-promotions/ecom-pricing-create-discount-rule.md |
| Create the sale's discount when none is dated (Black Friday, a separate Cyber Monday offer, any other holiday) | Goal: Seasonal Revenue, then its Flow: Seasonal Promotion, for which products and how much off. Dates and the number of rules follow Sale dates below, not the flow. Build the request body as Create Discount Rule shows it (POST https://www.wixapis.com/ecom/v1/discount-rules), not from the example in the flow |
| Fix free-shipping threshold, missing region, add delivery estimates | ecommerce/ecom-shipping.md dispatcher (ecommerce/shipping/ecom-shipping-api.md for Update Shipping Option) |
| Policy text at checkout (return, terms, privacy, sale terms, extended holiday returns); show the "I agree" checkbox | Update Checkout Settings PATCH https://www.wixapis.com/ecom/v1/checkout-settings (checkoutPolicies.<policy>.{visible,content}; sale terms in customPolicy with a title; checkoutFields.policyAgreementCheckbox.visible) |
| Activate order / shipping / abandoned-cart automation | automations/activation-status.md |
| Build an abandoned-cart series, post-purchase follow-up, review-request automation | automations/build-and-manage-automations.md |
| Send or schedule the sale's email campaign drafts (needs the merchant's confirmed subject, audience and time) | marketing/review-and-send-email-campaigns.md |
| Create a sale category, named for the sale, from the discounted products | stores/manage-store-categories-catalog-v3.md |
| Build customer segments and label contacts | contacts/find-contacts.md, contacts/bulk-label-and-unlabel-contacts.md |
| Gift card product | ecommerce/gift-cards/ecom-gift-cards-goal-sell-gift-cards.md (one per site) |
| Email signup / VIP waitlist form | forms/create-form.md |
| Connect GA / Meta Pixel / TikTok | Create Marketing Tag POST https://www.wixapis.com/marketing/v1/tags (the tag object mirrors the fields the checks file reads back from GET /marketing/v1/tags; confirm the body in the Wix REST docs before calling); needs the merchant's tracking ID, never invented |
The checklist this review grades against is the source for timing. Where the Seasonal Promotion flow says otherwise, this section wins.
Offer at most three, chosen by this week's stage and what the store lacks. None is set up without approval. To plan the sale itself (offers, which products), switch to Recommend: eCommerce Strategy, keep the sale dates above, and come back here to verify the result.
| # | Suggestion | Agent can | Merchant does |
|---|---|---|---|
| S1 | Start the sale before the sale day (for Black Friday: 46% of customers start buying before November) | Propose a schedule; move discount start dates | Approve |
| S2 | A month-long plan: tease → early access for subscribers → go public with countdown → reminder → the sale day (then Cyber Monday, for Black Friday) | Build a dated plan from store data; schedule discounts and the email drafts the store already has | Approve; place editor items |
| S3 | Black Friday only: give Cyber Monday its own offer | Suggest an offer that doesn't stack with Black Friday's; create it | Approve |
| S4 | Plan for after the sale: bring first-time buyers back | Set up a post-purchase follow-up email automation | Approve |
| S5 | Start paid ads 4–6 weeks before the sale | Remind only | Everything |
| S6 | A category or landing page for the sale | Create the category from discounted products; draft landing copy | Place the page |
| S7 | Choose what to feature, bundle or skip | Pick from last November's sales and current stock, skipping low-stock and already-discounted items | Approve |
| S8 | Gift guide in three price tiers, in-stock only | Build it from last year's holiday orders and current stock | Place it |
| S9 | Announcement bar with offer and dates | Write the copy | Place it in the editor |
| S10 | Countdown timer | Set end time = discount end | Add the timer |
| S11 | Product ribbons ("Best seller", "Holiday deal", "-20%") | Apply to the right products | Approve |
| S12 | Automatic discounts instead of codes, so savings show on product pages | Convert the sale's coupon to an automatic discount | Approve |
| S13 | Low-stock messages ("Only 3 left") | List products that would show it | Turn on the setting |
| S14 | Promote gift cards all month | Check a gift card product exists; suggest where to promote | Place |
| S15 | Free-shipping banner in the header, threshold above average order value | Suggest the threshold from AOV | Place the banner |
| S16 | Extended holiday returns ("until Jan 31") | Draft and set the checkout return policy | Approve |
| S17 | Holiday shipping cutoffs ("Order by Dec 15") | Work out dates from delivery times; draft banner + FAQ text | Approve, place |
| S18 | Delivery estimates at checkout | Add estimates to shipping options (also check 9) | Approve |
| S19 | VIP early-access waitlist popup | Create the form, write the copy | Place it |
| S20 | Segment the list: VIPs, repeat buyers, one-time buyers, last year's holiday buyers who haven't returned, signed-up-never-bought | Build segments from orders and contacts, show sizes, suggest an offer each, label contacts | Approve |
| S21 | Abandoned-cart series (2–3 emails) | Create the automation and write the emails | Approve |
| S22 | SMS / WhatsApp opt-in | Check availability for region and plan | — |
| S23 | FAQ: shipping times, returns, order tracking | Write answers from real policies and shipping settings | Place |
| S24 | Videos / UGC on top 5 sale products | List which have no video | Generate with Creatify on Wix |
| S25 | Product reviews | Check reviews are on, list products with none; offer a review-request automation | Approve |
Place Order and Get Checkout URL are never called. In a browser, the agent stops at the payment step: it never enters card details, an email, an address or any personal data, never submits a form, never logs in, and never accepts or declines the cookie banner (its appearance is the evidence; leave it).| Mistake | Fix |
|---|---|
| Asking for sale dates before reading discounts | Read coupons and rules first; when none are dated the question is the first fix under "Needs one answer from you" |
| Asking which holiday when the calendar answers it | In November it is Black Friday, in December Christmas; ask only when nothing falls within six weeks or two events tie |
| Treating the review as Black Friday only | Any named sale or holiday gets the same checks; stages run on days to the sale day |
| Reporting a failed call as 🔧 or as broken | It is ❔ in the checklist; 🔧 needs evidence of a real problem the agent can change |
| Putting merchant-only tasks in the 🔧 list, or agent-fixable problems in the checklist | Decide by who acts; split a check when both do |
| Comparing coupon dates in UTC | Convert epoch-ms coupon times and ISO rule times to the store time zone before stating them |
Calling inventory.availabilityStatus "stock" | Quantities live in inventory items; the product field has no number |
| Treating an untracked variant as 0 units | Untracked means unlimited; it is a check-15 finding, not a sell-out |
Reading script text as page content, or looking for /product-page/ links | Scripts are stripped in the probe; product and category links are matched by their own URL paths |
| Leaving the test cart behind | Delete it in the same function, in a finally |
Counting sent emails from dateUpdated | Use distributionStatus and publishingData.datePublished; dateUpdated changes on every edit |
| Running only this week's checks | Every check runs every time; the stage only orders the report |
| Skipping the browser pass because the HTML probe already ran | HTML shows what is served, not what is seen; with a browser, open the pages. Without one, the visual checks are the first checklist group |
| Reporting a visual check as ✅ from HTML alone | HTML evidence gives at most "the bar's text is present"; visibility, layout, timer behaviour and the crossed-out price need a browser or the merchant |
| Paying, typing personal data or logging in during the browser pass | Stop at the payment step; the cart and checkout pages are only looked at |
| Setting up suggestions unasked | Offer three, do none without approval |
Last updated: 10 November 2026