North-Star & Funnel Definition
The north star: First Qualified Sourcing Action (FQSA)
Signup is not the goal. A seller who creates an account and never finds a supplier is a cost we paid for nothing, and a signup count that hides that fact. The north-star metric for this plan is:
FQSA — First Qualified Sourcing Action: one unique user completes either (a)
supplier_contact_requestedon at least 1 supplier or (b)results_savedwith ≥ 3 distinctsupplier_idvalues in a single saved list, where the originating search hascategory_l1in a 9.9-relevant taxonomy andquery_type in (text, image).
Counted once per user (the first qualifying event), reported as a daily count plus a cumulative count against the Sep 14 target. Every user who has an FQSA is an Activated Seller — the only cohort we are allowed to describe as "value delivered" in any report, case study, or investor/retro note.
Why this and not signups, searches, or "matches shown":
- Signups are a vanity metric here because the friction to sign up is near zero (free window, social login, no card). Signup rises with any clickbait hook — a giveaway, a misleading "factory price" thumbnail, a discount-code post — and correlates poorly with whether a seller actually found stock. Worse, signup can be involuntarily inflated by paid campaigns optimised to Lead on Instant Forms where the user never reaches a search result. If we manage to signups we will buy a pipeline of dead accounts.
- Searches are gameable and noisy — a bot, a curious scraper, or a person testing one junk query registers the same as a buyer. Searches measure our marketing, not our product.
- "Suppliers matched" measures our index, not the user's outcome. It is an input metric and it is our job for it to be high.
- FQSA is the smallest signal that a real procurement intent was expressed (saving a shortlist to work from, or reaching out to a factory). It is also the event that best predicts whether a seller will ever pay: whoever pays for credits is paying to contact more factories, not to see more search boxes.
Secondary metrics we report alongside FQSA but never optimise to: Activated Seller → quote_received rate, return_day7, credits_consumed per activated user, and search-failure rate. Time-to-FQSA (median minutes from signup_completed to FQSA) is the health check on onboarding — target under 10 minutes for desktop-flow users, under 6 minutes for WhatsApp-flow users [ASSUMPTION], both [VERIFY] from real data in week one.
Funnel stages and exact event names
Canonical names below are the single source of truth. Migration note: paid-media.md currently refers to a FirstSupplierSearch event — that alias must be renamed to first_search (or mapped one-to-one in GA4 with an alias report) before Sep 8, or the dashboard and the ad platform will disagree and retro in W4 will be fiction.
session → signup_completed → first_search → results_saved → supplier_contact_requested → return_day7
| Stage | Event name | Fires when | Owner of the number |
|---|---|---|---|
| 0. Session | session_start (GA4 built-in) |
Any visit; utm_* captured at first touch and persisted in a 90-day cookie/local-storage record |
Growth |
| 1. Signup | signup_completed |
Account record created + email/phone verified (unverified does not count) | Growth |
| 2. First search | first_search (alias of search_performed with is_first_for_user = true) |
Search returns with result_count >= 1; zero-result searches fire search_no_results instead and do not complete this stage |
Product |
| 3. Saved | results_saved |
User saves ≥ 1 item; qualifies for FQSA only at ≥ 3 distinct suppliers | Product |
| 4. Contacted | supplier_contact_requested |
User taps contact / copies supplier detail / opens WhatsApp link with prefilled product context | Product |
| 5. Return | return_day7 |
Derived, not instrumented as a discrete event: any authenticated session_start on day 7 ±1 after the user's first qualifying search |
Data |
Stage-to-stage conversion targets
Every figure here is a placeholder hypothesis written before we have data. They are the numbers we intend to falsify, not to defend.
| Transition | Target by Sep 14 | Floor that triggers intervention | Basis |
|---|---|---|---|
| Session → signup | 4–6% (cold), 12–18% (warm/retargeted) | < 2% cold | [ASSUMPTION] [VERIFY] |
| Signup → first_search | 60–70% | < 40% (onboarding broken; freeze content work) | [ASSUMPTION] — highest-confidence number, because the product's first action is obvious |
| first_search → results_saved | 25–35% | < 15% (results quality or relevance problem) | [ASSUMPTION] |
| results_saved → contact_supplier | 20–30% | < 10% (MOQ/price/logistics reality gap) | [ASSUMPTION] |
Any qualified action → return_day7 |
25–35% for FQSA users; 5–10% for non-FQSA users | < 15% for FQSA users | [ASSUMPTION] |
| Session → FQSA (end-to-end) | ≈ 0.4–1.1% | < 0.2% | Product of the above: 0.05 × 0.65 × 0.30 × 0.25 ≈ 0.24% at midpoint; 0.5–1% only via warm traffic |
Chained-multiplication is the honest way to read this: even with every stage hitting target, roughly 1 in 400 cold sessions produces an FQSA. With USD 60/day and a blended cost per signup of USD 2.50–4.00 [ASSUMPTION] (see paid-media.md), paid buys about 15–24 signups per day, i.e. 3–5 paid FQSA/day at plan-midpoint funnel rates, and plausibly zero for several days running. That is not a reason to skip paid — it is the reason the Sep 8–14 dashboard must be FQSA-first, and the reason no one is allowed to call paid "working" on the strength of signup counts alone.
UTM & Event Taxonomy (must exist before Sep 8)
Hard gate: if the UTM spec, the 10 events, and the attribution dashboard are not live on Fri Sep 5, paid launch slips from Sep 8 to Sep 10. Spending against an untagged funnel is unrecoverable data loss; a two-day delay is not.
UTM convention
Format, all lowercase, underscores only, no spaces, no trailing slashes, no uppercase anywhere:
utm_source = where the click came FROM (the platform) e.g. meta, google, tiktok
utm_medium = HOW it came (the delivery mechanism) e.g. paid_social, organic_social, email
utm_campaign = our internal flight/plan name e.g. w3_paid_meta_99credits_sea-en
utm_content = the creative or message variant e.g. carousel_pricemoq_v2, ama_reminder_h18
utm_term = PAID SEARCH ONLY: the keyword, or `not_provided` when the platform withholds it
Rules:
- Never set UTM on internal links. Login → search, in-app share, and own-domain email links must be UTM-free or self-attributing, otherwise a user's own second visit looks like a new "referral" and we invent a channel that does not exist.
- One
utm_campaignper budget line. If two campaigns share a campaign name we cannot separate them retroactively — that is the single most expensive tagging error. - Link builder is mandatory: all links are generated from the sheet
growth-kit/links.csv, never typed. If it is not in the sheet, it does not get posted. - WhatsApp/Telegram/Zalo click-to-chat links carry
utm_medium=ctcand the deep link must survive the app hop (deferred deep linkor a short-link service we control with 90-day attribution retention)[VERIFY]— if the link does not survive, community channels attribute to Direct and we will under-count our best channel. - Direct/untagged traffic is a real bucket we must keep under 30% of sessions
[ASSUMPTION]; anything above that means the tagging discipline has already failed and we should stop scaling rather than keep guessing.
Allowed utm_source values (fixed list; adding a value is a one-line PR, not a freelance decision):
meta, ig, fb, tiktok, google, yt, fbgroup, telegram, whatsapp, zalo, reddit, quora, shopeeforum, seo, email, referral, offline, partner, koc, direct
Allowed utm_medium values:
paid_social, paid_search, organic_social, community, ctc, forum, organic, email, lifecycle_email, push, referral, qr, booth, partner, spark_ads
The 12 pre-named campaigns (no new names without a swap-out)
| # | utm_campaign |
Flight | Channel | Notes |
|---|---|---|---|---|
| 1 | w2_fbgroup_assetpack_sep04_sea-en |
W2 | fbgroup / organic | Sep 4 free asset pack; English, generic SEA |
| 2 | w2_content_seo_99selection_id |
W2 | seo | ID-language 9.9 selection page cluster |
| 3 | w2_content_seo_99selection_th |
W2 | seo | TH-language equivalent |
| 4 | w3_paid_meta_99credits_sea-en |
W3 | meta paid | Maps to meta_SEA_* ad sets in paid-media.md |
| 5 | w3_paid_meta_lookalike_id_th |
W3 | meta paid | LAL seeded from Activated Sellers only |
| 6 | w3_paid_google_search_sourcing_1688_en |
W3 | google paid_search | Intent keywords; utm_term mandatory |
| 7 | w3_paid_tiktok_99hook_my |
W3 | tiktok paid / spark_ads | MY first; image-to-source hook |
| 8 | w3_ama_live_sep08_registrations |
W3 | email + organic_social | AMA sign-ups and reminder chain |
| 9 | w3_lifecycle_freeexpiring_d3 |
W3 | lifecycle_email / push | Free-window expiry sequence |
| 10 | w3_referral_99credits_koc |
W3 | referral + koc | 9.9 credit-referral mechanic |
| 11 | w3_offline_bd_qrcard_wholesale |
W3 | offline / qr | Wholesale-district QR cards, MY + TH markets |
| 12 | w4_1111_preheat_waitlist |
W4 | mixed | Bridge campaign, replaces 1–3 as they retire |
The 10 events (GA4 + custom, with parameters)
| # | Event | Required parameters |
|---|---|---|
| 1 | signup_completed |
user_id_hash, market (ID/TH/VN/PH/MY/SG), lang, signup_method (email/google/phone_otp), first_touch_campaign, first_touch_source |
| 2 | search_performed |
search_id, query_type (text/image/link), category_l1, image_present, result_count, latency_ms, currency_shown, is_first_for_user |
| 3 | results_viewed |
search_id, supplier_count, price_min, price_max, moq_median, has_demand_signal, scroll_depth_pct |
| 4 | search_no_results |
raw_query_or_image_hash, category_guess, market, lang — this is the product's most valuable failure log; it must be read by a human daily |
| 5 | results_saved |
search_id, saved_list_id, item_count, distinct_supplier_count, item_type (supplier/product/bundle) |
| 6 | supplier_contact_requested |
search_id, supplier_id, contact_channel (in_app/whatsapp/copy_link/email), unit_price_shown, moq_shown, is_first_for_user |
| 7 | quote_received_marked |
supplier_id, hours_to_quote, quote_accepted (bool) — user self-reported status tap |
| 8 | paywall_shown |
trigger_reason (credits_zero / window_expired / limit_reached), days_remaining_in_window, market |
| 9 | referral_link_shared |
referrer_id_hash, channel_used (whatsapp/telegram/copy/xhs), campaign |
| 10 | attribution_survey_submitted |
answer_bucket, verbatim_length, stage_shown_at (post_signup / post_first_save) |
return_day7 is computed nightly from authenticated sessions and cohort date; it is deliberately not a client event, because retention computed from logs cannot be silently broken by a dropped SDK call.
The 6 audiences to build (by Sep 5)
au_signed_no_search_48h— signed up, zero qualifying search in 48h. Feeds onboarding email/WhatsApp nudge and tells us if the hook oversold.au_searched_no_save— searched, never saved. Feeds results-quality follow-up; the primary suspect list for supplier-data complaints.au_saved_no_contact— shortlisted but timid. Feeds negotiation-template + trust content; highest-intent non-FQSA pool.au_fqsa_99— Activated Sellers during the 9.9 window. The only legal seed forw3_paid_meta_lookalike_id_th, the case-study pool, and the 11.11 waitlist.au_free_window_expiring_d3— days remaining ≤ 3 in the free window. Feedsw3_lifecycle_freeexpiring_d3.au_churned_after_first_value— had an FQSA, no authenticated session in 10 days. Win-back list, and the honest test of whether 9.9 value stuck.
Lookalike audiences must not be pushed at scale until the seed has ≥ 200 unique members [ASSUMPTION] — below that, LAL quality is noise and we will blame the creative.
Naming lint rule
Automated check runs on links.csv before any post or ad goes live; it must reject:
- any uppercase letter, any space or hyphen-in-source, any non-
[a-z0-9_-]character; - any
utm_campaignnot present in the 12-name list, or any name containingtest,tmp,draft,copy,final,v2final,asdf, or a personal name; - any duplicate campaign name used across two channels or two objectives;
- any missing
utm_contenton a paid link (we cannot learn which creative worked); - any link posted with a bare
?and no parameters at all.
Test campaigns are the classic leak. They enter GA4 as permanent sessions, distort channel averages, and in W4 someone will quote one in a retro. Use the w3_*_test_* namespace nowhere; run tag validation in GA4 DebugView plus a staging host with the analytics tag disabled.
Channel Attribution Model
Default reporting model: first-touch on campaign for cost efficiency, last-non-direct-touch for credit, plus a simple assisted-touch view once a week. We do not have enough volume for algorithmic data-driven attribution to mean anything — at 15–24 signups/day, any model more complex than "who started it and who closed it" produces confident nonsense.
| Channel | First-touch signal | Assisted signal | Cost basis | Metric that matters | Target by Sep 14 | What a failure looks like |
|---|---|---|---|---|---|---|
| Meta (paid) | utm_source=meta, medium=paid_social |
Same-user return via Direct/IG organic | USD 26/day + creative | Cost per FQSA, not per signup | 25–35 FQSA cumulative | Cheap CPL ≤ $2 but signup→first_search < 35%: wrong hook, buying curiosity not intent |
| Google Search | utm_source=google, utm_term present |
Branded-query uptick after content pushes | USD 18/day | Cost per FQSA on non-branded terms | 15–25 FQSA; non-branded CPC ceiling [VERIFY] |
All conversions come from branded queries — i.e. we are paying for traffic our other channels already earned |
| TikTok | utm_source=tiktok |
Organic profile visits + "saw it on TikTok" survey answers | USD 10/day | FQSA, plus search-failure rate from this source | 5–15 FQSA | High views, high searches, search_no_results > 25%: viral hook promised a product we don't have yet |
| Organic content (own) | utm_source per platform, medium=organic_social |
Later Direct + branded search | Time (≈ 12h/wk) | FQSA per post, saved-per-post | ≥ 1 post with ≥ 10 FQSA | Lots of saves of the post and zero saves in the product — content is entertaining, not useful |
| FB groups | utm_source=fbgroup, medium=community |
DM conversations, survey "saw it in a seller group" | Time; no cash | FQSA per member of the 12-country group list; group-admin relationship survival | 20–40 FQSA; ≥ 4 groups where a moderator knows us by name | Posts removed or shadow-banned; growth in members but zero in first_search |
| Telegram / WhatsApp | medium=ctc, per-link utm_content |
Voice-note follow-ups, forwards (untrackable) | Time; WhatsApp Business API fees [VERIFY] |
FQSA + reply latency | 15–30 FQSA; median human reply < 4 business hours | Chat replies in the right places but the deep link loses UTM through the app hop, so everything lands in Direct |
| Forums / Reddit / Quora | medium=forum |
Branded-search lift, survey verbatims | Time | FQSA per thread; thread survival rate | 5–10 FQSA, ≥ 8 threads with genuine answers | Thread deleted, or 100 upvotes and 0 searches = answered too vaguely to act on |
| SEO / localization | utm_source=seo (organic channel group) |
Assisted in branded query growth | Content hours; localisation QA | FQSA from ID/TH localised pages vs English | 2–3 pages ranking top-10 on a money phrase; 10–20 FQSA | Traffic grows on informational queries only; localised pages get impressions but no clicks (title/meta mismatch) |
| Email / lifecycle | utm_medium=lifecycle_email |
App opens without email in the 24h prior | ESP cost; ≈ USD 0 at our list size | Reactivation FQSA + unsub/abuse rate | ≥ 20 FQSA from the expiry sequence; unsub < 1.5% | High open, low click = subject line works and the offer does not; or the list is unverified signups from Instant Forms |
| Referral | utm_source=referral + ref code |
referral_link_shared without an attributed click |
Credit liability | K-factor and FQSA-quality of referred users (must be ≥ base) | 10–20 FQSA; referred cohort converts at ≥ non-referred rate | Shares happen but every referred user is a duplicate/self-referral; or referrals convert to signups and never search |
| Offline / BD | medium=qr, unique short-link per card/batch |
Survey "market/wholesale area", phone-OTP country | Print + travel + time | FQSA per 100 cards distributed | 5–15 FQSA from ≤ 1,000 cards | Cards "distributed" with zero scans — the count must be scans per card batch, not cards handed out |
| Partners / KOC | utm_source=koc or partner + utm_content = creator ID |
Cross-post comments, co-branded DMs | Commission or flat fee [VERIFY] |
FQSA per named creator, not reach | 3 creators with ≥ 5 FQSA each; all disclosures on file | Reach is bought but the creator's audience is consumers, not sellers — the classic KOC mismatch |
Attribution reality check
The attribution_survey_submitted field ("How did you hear about us?") is worth collecting at the post-first-save moment rather than post-signup: at signup, a seller is primed to name the brand they admire; after they've gotten value, they remember more accurately what actually got them there. It buys us three things no pixel can: awareness of dark-social (WhatsApp forwards, TikTok-to-chat shares, word-of-mouth at a wholesale market), a sanity check on the Direct bucket, and a signal for which offline effort is real when links are unclickable by design.
Its limits are equally real and must be stated in every report that uses it. Self-reported source is inflated for prestige channels (people say "I found you on Google" when they typed our name after a group post), deflated for paid (many users genuinely do not know an ad was an ad), biased toward the most recent memorable thing, and only answered by 15–25% of users [ASSUMPTION], who are not a random sample. So survey data may name a channel we are missing and may re-rank our hypotheses, but it must never be used to reallocate budget on its own. Rule of practice: if survey volume for a channel exceeds 10% of responses while tracked FQSA for that channel is zero, treat it as a tagging bug to investigate, not as an undiscovered gold mine.
Daily & Weekly Review Rituals
Daily standup: 12 minutes, same 9 columns, filled by 09:30 SGT
| # | Column | Definition / source |
|---|---|---|
| 1 | Day & flight state | Date, day-of-week, days to Sep 9, campaign status (live / paused / capped) |
| 2 | FQSA (yesterday + cumulative vs target) | North-star count, split paid vs organic |
| 3 | Sessions by top 3 source/medium |
With Direct% shown explicitly |
| 4 | Signup→first_search % (24h cohort) | The single best product-health number |
| 5 | Spend USD + CPL + cost-per-FQSA per campaign | From ad platforms, reconciled to our own log, not platform-reported conversions |
| 6 | search_no_results rate + 3 worst raw queries |
Read aloud by a human, every day |
| 7 | Free-window days remaining (cohort avg) + paywall_shown count |
Urgency honesty check |
| 8 | Support queue: oldest open item (hrs), WhatsApp replies pending | SLA on Sep 7–9 is the point of the sprint |
| 9 | Red flag, named owner, decision due by (time) | No "we should look into it"; a name and a clock |
Five alert thresholds that force an intervention (not a discussion)
search_no_results> 15% for 2 consecutive days → pause whichever campaign is driving the missing queries (most likely the TikTok image hook), same day. Add the top 10 failed queries to the index backlog and tell the sellers we asked for them.- Blended cost per signup > USD 6 for 3 consecutive days
[ASSUMPTION]→ cut the worst campaign to zero and reallocate to best CPL; if no campaign is under $4 by Sep 11, cut total spend to $30/day rather than fund a bad bet for a week. - Signup→first_search < 40% on any single day → all content shipping freezes; the 1.5 people spend that day on onboarding (empty-state copy, the first-query suggestion chips, image-search guidance). Nothing else matters while that number is broken.
- Untracked sessions (no
utm_*, no referrer) > 30% → stop scaling spend until tagging is fixed; publish no channel-level claim in the meantime. - Sep 8–9 only: oldest support item > 6 business hours → halt every scheduled post and AMA extra; everyone answers the inbox. During the 9.9 window, a seller whose supplier question goes unanswered for a day has already gone back to their old supplier.
Weekly review: 60 minutes, Fri 15:00 SGT
- 0–5 — North-star line, last 3 weeks, against target. No commentary yet.
- 5–15 — Funnel diff stage by stage vs last week. Question: where did the leak move, not did we grow.
- 15–25 — Campaign P&L: spend ÷ FQSA per campaign. Decide kill / keep / scale for each of the 12 names, out loud, in writing.
- 25–35 — Qualitative: five verbatim
search_no_resultsqueries and fiveau_searched_no_saveusers traced by hand. Numbers tell us what, this tells us why. - 35–45 — One channel experiment for next week: hypothesis, owner, success number, date. Exactly one, given capacity.
- 45–55 — Content carry-over: which assets retire, which get localised (ID/TH first), which become the 11.11 spine.
- 55–60 — Write the one-page memo and commit next week's numbers. The memo is the raw material for W4 retro, so retro is never a research project.
Three automated, three manual
Automate (before Sep 8, no exceptions): (1) daily funnel-by-campaign CSV into one sheet with FQSA as the top row; (2) paid spend vs tracked FQSA vs platform-reported conversions per campaign, with the delta shown — persistent delta means broken conversion API; (3) the search_no_results query log, deduped, in category order.
Keep manual, deliberately: (4) verbatim failure reading (a human decides which queries are real demand vs junk); (5) community/group sentiment and admin-relationship health (no tool detects "we are about to be removed"); (6) KOC/partner reconciliation against invoices and disclosures.
9.9 Sprint: Hour-by-Hour Playbook (Sep 7–9)
All times SGT. Owner A = growth/content (1.0 FTE), Owner B = product/sourcing + support (0.5 FTE). Sep 7 = Mon, Sep 8 = Tue (ads live, AMA evening), Sep 9 = Wed (day-of).
| Date | Time | Action | Channel | Owner | Copy / offer line | Metric to watch |
|---|---|---|---|---|---|---|
| Sep 7 | 08:00 | Dashboard go-live check: all 10 events firing, 12 campaigns registered, link lint run | Internal | B | (no external copy) | Zero untagged live links |
| Sep 7 | 09:30 | Publish "2 days to 9.9" countdown #1 with the real expiry date stated | FB groups + IG + TikTok organic | A | "9.9 is in 2 days. If you're still guessing your supplier prices, search the product photo here — free until 14 Sept, and we'll tell you the exact date it ends." | Saves of the post → first_search same day |
| Sep 7 | 11:00 | Re-share Sep 4 asset pack to all 6 country Telegram/WhatsApp groups with medium=ctc |
Telegram/WhatsApp | A | "Asset pack, 9.9 edition: 12 SKUs + supplier price bands + MOQ reality check. Reply 'PACK' and I'll send it." | Reply count; deep-link survival [VERIFY] |
| Sep 7 | 13:00 | Warm up Meta pixel + audiences: seed au_fqsa_99 and the 3 warm custom audiences |
Meta paid | A | — | Seed sizes ≥ 200 for any LAL |
| Sep 7 | 15:00 | AMA reminder #1 with agenda; ask for questions in-thread | email + organic | A | "Tue 8 Sept, 20:00 SGT: we'll source 3 live products on camera from your photos. Send the photo here." | Registrations; question submissions |
| Sep 7 | 17:00 | Index the top 20 failed queries from Sep 4–6; confirm coverage for the 9.9 hot categories | Product | B | — | search_no_results baseline for tomorrow |
| Sep 7 | 20:00 | Free-window expiry framing goes into the product UI (honest countdown to Sep 14) | In-app | B | "Free until 14 Sep — then credits. Your searches today stay saved either way." | paywall_shown preview; day-7 return |
| Sep 8 | 00:01 | Paid live: campaigns #4–#7 at USD 60/day total, no scaling decisions for 72h | Meta + Google + TikTok | A | "Search the photo. Get the factory, the price band, and the MOQ. Free until 9.9 ends." | Spend pacing; first-touch attribution integrity |
| Sep 8 | 09:30 | Standup + first read of overnight paid: CPL only (too early for FQSA); check for search-failure spike | Internal | both | — | search_no_results ≤ 15% |
| Sep 8 | 11:00 | Countdown #2: "tonight, 20:00" + one real anonymised sourcing example (numbers copied from an actual result page) | FB groups + IG Stories | A | "Last week before 9.9: here's a 6-piece cookware set at USD 4.80 factory band, MOQ 60 — and what that means for your landed price." (exact figures must be pulled from a live result page at posting time, not pre-written) [VERIFY] |
Click-through from story → FQSA |
| Sep 8 | 14:00 | AMA tech rehearsal; seller-support staffing plan locked for 19:00–22:30 | Internal | B | — | Two humans on chat during AMA |
| Sep 8 | 17:00 | AMA reminder #3, 3h out, calendar-add link | email + push + WhatsApp | A | "3 hours. Bring one product photo you're unsure about." | Open → click; last-non-direct credit |
| Sep 8 | 20:00–21:30 | LIVE AMA: source 3 attendee products on screen; show price band, MOQ, lead time, and where our data is weak out loud | Live (IG/YouTube/Telegram) | A on air, B sourcing | "If we can't find it, we say so, we log it, and you get credits for the wasted minute." | Concurrent viewers; searches during the hour; failed-query log |
| Sep 8 | 21:45 | Post-AMA: thank-you + recording + one-click "search your product" link; log every product named on air | email + organic | A | "Recording's up. Your turn — send the photo, we'll answer in chat tonight." | Post-AMA FQSA burst |
| Sep 9 | 07:30 | Day-of seller-support posture declared publicly: human replies within 2 business hours for sourcing questions, WhatsApp first | WhatsApp/FB groups/email | both | "Today we're answering sourcing questions, not pitching. Ask anything about 9.9 stock." | Oldest open item < 2h; queue age |
| Sep 9 | 09:00 | Countdown #3: "Today is 9.9" + what the free window still covers | all organic + email | A | "It's 9.9. If you haven't checked your supplier price yet, 5 minutes here before you commit stock." | Sessions/hour vs Sep 8 |
| Sep 9 | 12:30 | Mid-day check-in post (low-effort, high-trust) | IG Stories + WhatsApp status + FB groups | A | "Halfway through 9.9. 23 sellers messaged us about beauty kits today — the same 3 MOQ questions every time. Thread below." (count only from actual logged messages; if < 10, post the questions, not the count) [VERIFY] |
Replies; saves |
| Sep 9 | 14:00 | Social-proof "results so far" post — only if the claim gate below is passed | all | A | See claim rule | FQSA + post reach |
| Sep 9 | 17:00 | Paid pacing check (no creative surgery mid-day; note only) | paid | A | — | Cost per FQSA by campaign |
| Sep 9 | 20:30 | Last-call message: free-window deadline, honest about what happens after | email + push + WhatsApp | A | "Last call for 9.9. Searches and saved lists stay in your account after the free window ends on 14 Sept — you just don't lose your shortlist. Credits start after that; we'll show the price before you pay anything." | Open → login; results_saved after 20:00 |
| Sep 9 | 23:00 | Lock 9.9 numbers: FQSA, cost per FQSA, search-failure list, support SLA actual | Internal | B | — | Signed-off dataset for W4 retro |
| Sep 9 | 23:15 | Close the countdown (remove banners; do not silently extend) | In-app + social | A | "9.9 window closed. Free searches continue until 14 Sept as promised." | Trust: zero users seeing an expired-but-live countdown |
Countdown guardrail
Never fake urgency. Every countdown must be computed from the real expiry timestamp (Sep 14, free-usage end), not from a marketing date, and must be removed the moment it hits zero. If we extend the free window, we announce the extension as a change with a new real date — we never roll a clock back without saying so. The reason is not ethics-as-decoration: this product's entire value proposition is trust in numbers we pull from a factory floor. A fake countdown is the fastest way to teach sellers that our numbers are marketing too.
What you may claim (the social-proof gate)
Write the Sep 9 14:00 post only from our own event log, under these rules:
| Claim | May say | May NOT say |
|---|---|---|
| Volume | The exact measured count of unique user_id_hash with search_performed (or FQSA), stated as a floor: "over 480 sellers ran a sourcing search this week" — only if the number is ≥ the rounded figure |
"Thousands", "10k+ sellers", or extrapolating a 3-day count to a total |
| Supplier coverage | Distinct supplier_id values actually surfaced in results, per named category |
"Access to 500,000 factories" unless the index count is verified and disclosed as index size, not matched size |
| Price advantage | Individual, verifiable, attributed examples ("one seller's own Shopee listing price vs the factory band we showed — screenshot, with permission") | Any average savings percentage until ≥ 30 sellers have logged both a baseline and a quote [ASSUMPTION]; "cheapest prices guaranteed" |
| Quality/verification | What we actually check, named field by field (business licence, years trading, MOQ, response rate) | "All suppliers verified", "factory audited", "100% safe" |
| If the numbers are thin | Specificity instead of volume: the top 3 categories searched, the 5 most-asked questions, one real anonymised sourcing story | Nothing invented, nothing borrowed from competitor marketing, no stock-figure testimonials |
Rule of thumb: below 500 tracked sellers with a qualifying search, we compete on specificity and honesty, never on scale. If the gate cannot be met, the 14:00 slot publishes the questions-and-gaps post instead.
Offer Design for 9.9 → 11.11 Bridge
Four variants; all are the same underlying product with different framing and different friction. Choose by audience segment, not by which one we like.
Variant 1 — Free-credit window (default, mass)
Fits: first-time Shopee/TikTok Shop sellers, price-sensitive, low trust budget. Mechanic: unlimited qualifying searches + 30 credits through Sep 14; saved lists persist regardless. Honest wording: "Free until 14 Sept. After that, sourcing searches cost credits, and we'll show you the price before you spend anything. Your saved supplier lists are yours either way." Why honest: persistence-of-work is the real reason to sign up; "free" alone is a race to be cheapest and we will lose it to anyone with more money. Risk: attracts window-shoppers who never intend to buy stock. Mitigate by measuring FQSA (not signups) as the quality check on the free offer.
Variant 2 — "We-keep-looking" promise (not a guarantee)
Fits: sellers with an urgent specific SKU; wholesale/offline sellers with a concrete order to fill this week.
Mechanic: if a seller's search returns no supplier that fits their price/MOQ, a human re-sources it within 24 business hours and reports back, with what was found and what wasn't.
Honest wording: "If our results don't fit your price or MOQ, tell us — we'll manually hunt for 24 hours and show you what we found. If there's nothing, we'll say there's nothing." Do not phrase this as a "first-stock guarantee", "satisfaction guaranteed", or any money-back claim — we cannot control factory stock, lead times, shipping, or customs, and any guarantee-flavoured wording creates a liability we cannot honour [VERIFY] with counsel before using the word "guarantee" in any market.
Why do it anyway: the manual hunt is also our best product research and our cheapest index expansion, and it converts exactly the sellers who would otherwise churn at search_no_results.
Capacity limit: cap at 15 manual hunts per week during the sprint, and say so. [ASSUMPTION] — validate against B's 0.5 FTE.
Variant 3 — 9.9 sourcing cohort / bootcamp bundle
Fits: sellers who want process, not tool — the majority of the FB-group cold-start audience; strongest in ID, VN, TH.
Mechanic: 4-day cohort (Sep 8–11): day 1 category selection, day 2 image-search + shortlisting, day 3 MOQ/negotiation with supplier questions, day 4 landed-cost and shipping reality. Includes the Sep 4 asset pack, credit grant, and a shared ask-in-chat channel. Capped at 60 seats, honestly, because we can only answer 60 people's questions well.
Honest wording: "Small cohort, 60 seats, 4 days before 9.9. We teach sourcing and we answer your questions. We don't promise sales — nobody can."
Why it matters: cohorts produce the testimonials we're allowed to use, the case studies for W4, and the KOCs for October. Conversion to FQSA inside a cohort should be measured against the 0.24–1.1% cold baseline above [ASSUMPTION].
Variant 4 — Partner bundle
Fits: sellers already using a logistics agent, payment gateway, product-photography or listing-tool partner; SG/MY segments with higher willingness to pay.
Mechanic: partner's audience gets a credit grant + our category pack; partner gets co-branded content and a disclosed referral arrangement.
Honest wording: "This bundle comes with [partner] because they handle shipping and we handle sourcing. We're paid a referral fee if you take it — that's why it's discounted. Reviews and pricing are ours." Disclosure is mandatory in every market, and per-partner terms go in one sheet before any bundle is posted [VERIFY].
Why: cheapest FQSA available if the partner's audience is genuinely sellers; most damaging if it's consumers.
W4 bridge into 11.11 pre-heat (Sep 15–21)
Carries over: the FQSA definition and event taxonomy (never change a metric mid-flight — changing it in W4 to flatter retro numbers is prohibited); the campaign naming system with the w4_* and 1111 prefix; au_fqsa_99 as the seed for every paid audience and for the 11.11 waitlist; the top-3 winning categories from search_performed by category_l1; cohort format and its curriculum; the KOC/partner list with per-creator FQSA; the localised ID/TH page cluster.
Retires: the "free forever-ish" framing (replaced by priced credits, shown before payment — monetisation begins with honesty, not a surprise invoice); one-shot countdown mechanics (replaced by a calendar-anchored lead-time story, which is genuinely urgent: air-freight stock for 11.11 needs to be ordered roughly 3–5 weeks ahead [ASSUMPTION], sea freight 6–8 weeks [ASSUMPTION], both to be verified with real partner lead times); the 9.9-specific asset pack (superseded by an 11.11 selection calendar published weekly from Oct); paid scaling discipline from Sep 8–14 (frozen at whatever the Sep 14 cost-per-FQSA justified, ramp only per the unlock gates in paid-media.md).
The single narrative line for October: "9.9 was the warm-up; 11.11 is the real order." Sell lead-time certainty, not discounts.
Master Roadmap: Sep 2 → Nov 11
| Week | Focus | Content ship | Channel to add | Ops / paid action | Measurement | Exit criteria |
|---|---|---|---|---|---|---|
| W2 remainder (Sep 2–7) | Instrument first, then community | Sep 4 free asset pack; 6 category pages (ID/TH); 3 image-search demo clips | FB groups (4/wk, value-first), 6 Telegram/WhatsApp groups, Quora/Reddit answer threads | Build the 12-campaign registry; lint script; pixel/CAPI QA; cohort sign-ups open | 10 events live; 6 audiences built; dashboard daily CSV | UTM + events + dashboard live by Sep 5; ≥ 3 groups with a named contact; ≥ 30 cohort registrations |
| W3 (Sep 8–14) — 9.9 sprint | Convert the window | Hour-by-hour sprint posts; AMA deck + recording; 1 real case study with permission | Meta + Google + TikTok paid (Sep 8); first KOC (≤ 3); offline QR cards in MY/TH wholesale districts | Paid at $60/day, no scaling for 72h; AMA live; support SLA 2h | FQSA/day by campaign; cost per FQSA; search_no_results; day-7 return |
≥ 120 FQSA cumulative [ASSUMPTION]; cost per FQSA ≤ $35; signup→first_search ≥ 50%; untracked sessions < 30% |
| W4 (Sep 15–21) | Retro + 11.11 pre-heat frame | Retro one-pager (public version); 2 case studies; 11.11 lead-time explainer; localise top 3 winners to TH/ID | Win-back email/WhatsApp sequence; referral loop formalised | Freeze spend at best-CPA campaign only; kill losers; publish pricing/credits honestly | 4-channel P&L: paid, community, SEO, referral | Written decision on paid (scale / hold / pause) by Sep 19; ≥ 2 usable case studies; 11.11 waitlist ≥ 300 [ASSUMPTION] |
| Sep 22–30 | Monetisation soft-launch + retention | 11.11 selection calendar (weekly); negotiation-template series; 1 supplier-data transparency post | Zalo (VN) if capacity; second partner bundle | Credit pricing visible; cohort #2 (60 seats); CAC-per-FQSA gate for any budget increase | return_day7, paywall_shown → paid conversion, credits/user |
≥ 5 paid conversions [ASSUMPTION — small N, treat directionally only]; ≥ 25% return_day7 for FQSA users |
| Oct 1–7 | SEO + community compounding | 8 localised pages (ID/TH/VN); AMA #2 recorded | Reddit/Shopee-forum regular presence; KOC tier 2 (5 creators) | Paid held flat; test one new market language, not one new product | Organic session share; page-level FQSA | ≥ 10 pages in top-20 on a money phrase [VERIFY]; organic ≥ 25% of FQSA |
| Oct 8–14 | 11.11 pre-heat ramp begins | 11.11 category playbook (top 5 from Sep data); landed-cost calculator content | Partner co-marketing #2 | Budget increase only if Sep cost per FQSA ≤ $20 [ASSUMPTION]; new geo only if existing geo holds |
Cost per FQSA by market; search-failure backlog depth | Positive decision memo; cohort #3 launched |
| Oct 15–21 | Order-window urgency (real) | Weekly 11.11 countdown content anchored on freight cut-off dates; seller story series | WhatsApp broadcast list with consent flags | Paid ramps per unlock gates; retarget au_saved_no_contact |
FQSA, quote-marked rate, supplier-quality complaints | Complaints on supplier accuracy < 5% of contacts; consent flags on 100% of messaging audiences |
| Oct 22–31 | Peak pre-11.11 sourcing | Air-freight cut-off posts (with dates confirmed by partners [VERIFY]); "what to order this week" live short sessions |
Referral push with credit bonus | Hold creative changes stable through the cut-off; no big experiments during peak | FQSA/day vs Sep 9 baseline | Sep baseline beaten on FQSA and cost per FQSA at or below Sep level |
| Nov 1–11 | 11.11 execution support | Same-day restock posts; post-order support content; 11.11 recap prep | Do not add new channels in this window | Paid focused on high-intent search only; community + messaging first | Response SLA; FQSA; support load per head | Sellers answered within SLA during peak; a clean 11.11 dataset ready for Nov 12 retro |
Do not start before Sep 22: payments/wallet integration, market-specific product customisation beyond language, a mobile app, custom supplier-model retraining, affiliate platform back-end, new countries beyond ID/TH/VN/PH/MY/SG, and any hire beyond the current 1.5 people. Every one of these is a legitimate future need and a fatal distraction during the free window.
Capacity Reality & Cut List
Planning assumption: 1.5 people — A = growth/content/community (1.0), B = product/sourcing/support (0.5). At that headcount, roughly 60 hours of real work per week exists after email, payments, and life. The roadmap above asks for about 100. So the cut list is the plan, not a caveat.
| Keep (non-negotiable) | Defer to October | Drop entirely |
|---|---|---|
The daily standup table + search_no_results human read (12 min/day; this is the product's nervous system) |
SEO scale-out beyond the ID/TH clusters | A second AMA before Sep 22 (one is enough; prep cost is high, and it converts poorly if it isn't excellent) |
| UTM/events/dashboard before paid | Localising to VN + PH properly (QA needs a native reviewer; don't ship unreviewed translations) | Multiple TikTok creators / any talent-agency relationship (untrackable, unaffordable, wrong audience) |
| FB group value-first presence, ≤ 4 groups we do well | Referral-loop automation (do it manually with a sheet and credit grants until we see real sharing behaviour) | Original data research reports / "market index" content (weeks of work, no FQSA) |
| Free asset pack + 3 demo clips | Paid budget scaling above $60/day | Community building on a 7th messaging platform (Zalo/Line/Discord) until WhatsApp/Telegram is running cleanly |
| Supplier-contact SLA during Sep 8–9 (protect it ruthlessly) | Cohort #3 curriculum polish | Own logo/brand/website polish work of any kind before Sep 15 |
| Honest copy review (the countdown, claims gate) | 11.11 pre-heat creative production (start Oct 8, not Sep 9) | A mobile app, a Chrome extension, a Telegram bot with real code, or any new feature not needed to produce an FQSA |
| Reading and answering every verbatim failure | Partner-bundle #2 negotiation | Paid expansion into a 2nd product category / new vertical |
| Weekly 60-min review + memo | Hiring discussion / fundraising work until Sep 14 data exists |
The one highest-leverage 2-hour block per week:
- Sep 2–7: A builds the dashboard and runs the link lint until it actually works. Nothing else in this file has any value if Sep 8 is unmeasured.
- Sep 8–14: B clears the search_no_results backlog (top 20 queries indexed by hand) — this directly raises the north star on traffic we've already paid for.
- Sep 15–21: A writes the retro memo and the two case studies while memory is fresh. Deferred, this never happens, and October repeats September's mistakes.
- Sep 22–30: B interviews 5 Activated Sellers by WhatsApp about what blocked them from ordering. Cheapest product insight available, forever.
- Each October week: A publishes the week's 11.11 lead-time content, anchored on a confirmed freight cut-off. This is the only thing that makes our urgency honest rather than recycled.
Risk Register
| Risk | Early signal | Likelihood | Mitigation | Owner | Kill-switch decision rule |
|---|---|---|---|---|---|
| Ad account / page / phone-number bans (Meta and WhatsApp Business in SEA are aggressive; sourcing/1688 adjacency and link-shortener traffic both trip filters) | Ad set stuck in "limited", delivery = 0, WhatsApp number flagged, template rejections, sudden quality-ranking drop | High [ASSUMPTION] — SEA dropshipping-adjacent accounts are banned routinely |
Business Manager aged ≥ 30 days before Sep 8 [VERIFY]; policy-clean landing page (no "cheapest", no income claims); backup verified domain + backup number held cold; never buy aged accounts |
A | If the primary Meta account is restricted and no clean re-submission succeeds within 48h, shift that budget to Google Search permanently for W3 and rebuild Meta in parallel; do not run a second ban risk on the same assets |
| Group-admin removal / community exile | Post deleted, warning from a mod, engagement collapse in one group, members told "no self-promo" | High | Give value 5:1 vs promo; DM the admin before first posting and ask what's allowed; never drop naked links where a screenshot works; keep our own channel (Telegram/WhatsApp) as the real home | A | If we are removed from 2 groups in the same week, stop group posting entirely for 7 days and move that time to owned channels + SEO. Do not re-enter with a new account |
| Paid CAC unsustainably high | Cost per FQSA > $35 after 3 days; cost per signup > $6 | Medium-High | Kill rules in paid-media.md; no scaling for first 72h; optimise to FQSA via CAPI, never to Lead |
A | If cumulative cost per FQSA > $35 across paid on Sep 11, cut paid to $30/day. If still > $35 on Sep 14, paid goes to zero on Sep 15 and October funds organic only. If cumulative FQSA < 60 with ≥ $420 spent, paid is paused pending a positioning review — the problem is the promise or the product, not the bidding |
| Supplier data quality complaints (wrong price band, dead MOQ, factory no longer makes it, listing is a trader not a factory) | > 5% of contacted users report "price/MOQ wrong"; au_searched_no_save spikes; refund/credit complaints; angry verbatims |
Medium-High — cross-border price data decays fast | Show data freshness per supplier ("price as of DD MMM"); label trader vs factory or omit the claim; add a one-tap "this looks wrong" flag wired into search_no_results-adjacent log; never state "verified" unless the field is actually checked |
B | If the wrong-data complaint rate > 15% of FQSA users in a week, pause all acquisition and fix the data — marketing spend amplifies a broken promise faster than it fixes a weak one |
| English-only ceiling | ID/TH/VN sessions convert at ≤ half the English rate; unauthenticated bounce after landing | High | Localise 6 category pages + landing + search placeholders in ID/TH by Sep 7; never machine-translate the product UI without a native reviewer | A | If localised pages show < 50% of the English signup→first_search rate by Sep 21, freeze further localisation and re-diagnose whether the localised audience is a different (wrong) segment rather than shipping more languages |
| 9.9 window too short to convert (sellers stock 2–4 weeks before a sale day; by Sep 9 many orders are already placed) | Median days_before_sale_searched < 7; most searches are informational; cohort drop-off |
High — arguably the plan's central risk | Reframe 9.9 as the learning run for 11.11; sell restock and test-order behaviour, not big pre-buys; keep the free window through Sep 14 so late converters aren't cut off; make 11.11 lead time the real urgency | both | If < 60 FQSA by Sep 12, do not extend free access indefinitely. Announce the fixed end honestly, pivot the whole pitch to 11.11 pre-heat on Sep 15, and treat 9.9 as an acquisition + learning event rather than a conversion event |
| Cash / burn discipline (subscribing to a fifth tool, freelance "growth experts", paying for reach) | Spend lines appearing in the ledger that aren't paid ads, printing, or partner fees | Medium | Ledger caps: USD 420 paid + USD 150 non-ad for Sep; anything above needs a written justification and a measurable FQSA hypothesis | A | If non-ad spend exceeds 40% of the paid budget in any month, all discretionary tooling freezes automatically until the next retro |
| Legal / PDPA messaging consent (SG PDPA, MY PDPA, TH PDPA, ID PDP Law, VN Decree 13/2023, PH DPA; plus platform messaging policies) | Opt-in records missing for a portion of a messaging list; complaints; a template rejected for promotional content; no suppression list | Medium — but highest severity, and we are not lawyers | Explicit recorded consent before any promotional WhatsApp/SMS/email; sender ID + opt-out visible in every message; suppression list enforced; data minimisation (no SSN/ID cards on sellers); no scraping of competitor group members; counsel review of the messaging stack and the consent wording before the Sep 8 lifecycle send [VERIFY] |
both | If we cannot demonstrate recorded consent for a messaging audience, that list does not get messaged — full stop, even if it is our biggest growth lever in the week. No send runs on an unreviewed template; any complaint or regulatory contact halts all outbound messaging pending review |
If Only 3 Things Happen Next Week
If everything else in this file is dropped, these three are what make Sep 8 survivable and W4 retro possible.
1. Get attribution live before any spend (A, Sep 2–5). Why: Sep 8 without campaign-level attribution is 7 days of non-repeatable experiments. By the time we look in W4 we will know how much we spent and nothing about what earned the sellers, so October's budget decisions become vibes. This is the one dependency nothing else in this file can work around. Minimum viable version: the 12 campaign names registered in one sheet; 6 events instrumented rather than 10 (signup, search, no-results, saved, contact, paywall); one Google Sheet updated each morning by hand from GA4 exports — no dashboard build, no warehouse, no BI tool. Plus the claim: on Sep 5 you can look at any signup and state which campaign produced it.
2. Fix the top search failures so traffic doesn't land on a dead end (B, Sep 3–6).
Why: the funnel target that most worries us is signup→first_search, and the fastest way to destroy it is paying for searches that return nothing. Failure also poisons the community channels — one "I tried it and there was nothing for my category" in a 40,000-member group costs more than the whole USD 420.
Minimum viable version: export every search_no_results from Sep 2–6; hand-index the top 20 queries (usually 5–6 categories) by finding real 1688 suppliers manually and pasting them into the index; ship an honest empty-state that logs the request and promises a reply. Then post publicly: "we couldn't find X last week; we added it." That post is more trust-building than any ad.
3. Plant the warm channels and hold 20 real seller conversations (A+B, Sep 4–7). Why: community, WhatsApp/Telegram and the Sep 4 asset pack are the only channels where a 1.5-person team can produce FQSA at near-zero cash cost, and they are the only channel that keeps working when paid gets banned. Twenty conversations also generate the copy for every offer in this file — the objections sellers raise in DM are the exact words the Sep 7–9 posts should use. Minimum viable version: one asset pack shipped Sep 4 in the 4 groups we can serve honestly; 20 DM/chat replies logged with the objection written verbatim into a sheet; one cohort thread open with registrations; consent captured in writing before any broadcast send (risk register above). "20 conversations" means 20 real exchanges, not 20 reactions.
Everything else — TikTok, offline QR, partners, SEO expansion, the second AMA — is a good idea queued behind these three, and is the correct thing to lose if the week goes badly.