Husky Data Publishing Strategy¶
Date: 2026-04-23 (revised 2026-04-28)
Status: Approved — execution in flight
Supersedes: 2026-04-20-aws-dx-product-catalog.md (scope expanded beyond AWS DX)
2026-04-28 incident & strategy revision (read first)¶
On 2026-04-28 an autopilot run flipped the four rejected paid/trial listings from Free → Limited Trial via UI to clear the reviewer feedback. The flip was successful, but the share contents at flip time still pointed at full-production views (V_HEM_US 910M rows, V_MAID_APAC_PLUS_US 33.6M rows). This created a P0 leak risk: had Snowflake auto-published the listings within the 24hr SLA, ~944M real production rows would have been mountable by any Marketplace consumer for free.
Owner intervention (paraphrased): "一見光就人地用左唔會買。佢可以開好多account 得閒拎我地data. 所以 free 一定唔可以真." Real production data must NEVER be mountable via a Free or Limited Trial listing — consumers can spin up multiple trial accounts and siphon data without ever paying.
P0 remediation executed: 5 REVOKE statements removed real views (V_HEM_US, V_MAID_APAC_PLUS_US) from all four shares. After remediation, shares contained only reference data (SEGMENT_CATALOG, V_COUNTRY_COVERAGE, V_COVERAGE_APAC_US, V_IAB_CROSSWALK) and empty views (V_MAID_US_ANDROID, V_MAID_US_IOS) — zero real PII/MAID exposure.
Strategy revision (locked 2026-04-28):
- Trial tier listings ship sample-only data — deterministic-hash ~1K-row samples (
V_HEM_US_SAMPLE991 rows,V_MAID_APAC_PLUS_US_SAMPLE1051 rows). Built viaWHERE ABS(HASH(<key>)) % N < 1so every query returns the same rows — zero maintenance overhead, no monthly refresh cron required, schema-truthful for evaluation. - Paid tier listings will use Snowflake Paid (V2 monetization) — full data behind a Stripe payment gate. Self-serve mount once consumer pays. Requires: (a) Stripe Express account setup in Snowsight Admin > Billing > Marketplace billing, (b) Snowflake Partner Manager engagement / Marketplace Operations case for go-to-market validation. SG-eligible per provider-becoming docs.
- No "By Request" access type for external Marketplace — verified via doc reading on 2026-04-28.
draft_access_typeenum is FREE / PAID / LIMITED_TRIAL / UNKNOWN only.request_approval_typeexists for organizational listings, not external. The owner's competitive-protection intent is achieved by the Trial = sample / Paid = full-via-Stripe split. - Pre-flight checklist mandatory before any Limited Trial submission — see
docs/reference/snowflake-listing-playbook.md. RunSELECT COUNT(*) FROM <view>for every view granted to a trial share before submission. Any view ≥10M rows is a red line — STOP and replace with a sample view.
Execution status (2026-04-28 EOD):
| Listing | State | Review | Notes |
|---|---|---|---|
HUSKY_MOBILE_AUDIENCE_SAMPLE (#57) |
PUBLISHED | — | Limited Trial, original sample listing — unchanged |
HUSKY_BRANDED_SEGMENT_CATALOG (#62a) |
PUBLISHED | — | Free reference |
HUSKY_COUNTRY_COVERAGE (#62b) |
PUBLISHED | — | Free reference (auto-published 2026-04-28) |
HUSKY_IAB_TAXONOMY_CROSSWALK (#62c) |
PUBLISHED | — | Free reference |
HUSKY_US_MOBILE_AUDIENCE_TRIAL (#60) |
PUBLISHED | — | Sample-aligned manifest (V_HEM_US_SAMPLE) approved + auto-published 2026-04-28 |
HUSKY_CROSSBORDER_MOBILE_AUDIENCE_TRIAL (#61) |
PUBLISHED | — | Sample-aligned manifest (V_HEM_US_SAMPLE + V_MAID_APAC_PLUS_US_SAMPLE) approved + auto-published 2026-04-28 |
HUSKY_USA_MOBILE_HEM_BUNDLE (paid-1) |
DROPPED | — | Will recreate as Paid V2 after Stripe onboarding |
HUSKY_CROSSBORDER_BUNDLE (paid-2) |
DROPPED | — | Will recreate as Paid V2 after Stripe onboarding |
Lesson: reviewer feedback ("submit as Limited Trial") is necessary but not sufficient. The reviewer cares about manifest-tier consistency, not whether share contents are sample vs. real. Provider must independently enforce share content matches the access type. The "submit as Limited Trial" advice from a reviewer is a trap if the share content isn't already sample data — the only safe response is "first replace share content with sample, then flip access type."
Context¶
Husky Data ships APAC-focused mobile audience data, but Snowflake's data footprint review on 2026-04-22 revealed what the brand narrative had been undershooting: USA is our largest single market (2.01B MAIDs) and we hold a US-only HEM asset that no APAC-native competitor can match. Between 2026-04-19 and 2026-04-23 we tried to ship a single Marketplace listing ("Husky Data — APAC Mobile Audience (Free Sample)") and hit two rejection cycles that forced a wider re-think:
- Profile privacyUrl reject — Snowflake required a dedicated privacy page (
/company/privacy), not a generic compliance page. Fixed by updating profile metadata. - Listing type reject — Snowflake policy: Free listings must be full production datasets, sample data must be shipped as Limited Trial with a consumer-request flow to upgrade. Our "Free Sample" framing was a category mistake.
Fixing #2 surfaced a deeper opportunity: Snowflake's tier system maps cleanly onto a proper B2B data-sales funnel. Rather than one hybrid listing, we split into 10 products across 3 tiers and 5 channels, with one canonical master catalog.
Decisions (locked 2026-04-23)¶
- Geo narrative: dual-track APAC + USA. Keep APAC as differentiation story, add USA as scale story. Parallel listing funnels, not a single "global" pitch.
- Cross-border APAC↔US is flagship. US-addressable audience carrying APAC behavioural attributes — no US incumbent (LiveRamp, Experian, Acxiom) can replicate. This is the moat, not a footnote.
- Master catalog as single source of truth. 10 products defined once in
docs/internal/husky_product_master.yaml. Each channel (Snowflake, AWS DX, huskydata.io, Eyeota, LiveRamp) gets a subset viadocs/internal/channel_distribution.yaml. Phase-2 adapter scripts auto-generate channel manifests; until then, human reads master, fills channel UI. - Supplier diversification parked until Q3. Current ingest covers APAC + USA MAID/HEM. New suppliers (Eyeota monthly feed, potential MENA/EU) add to
data_sourcesfield once master catalog architecture is proven.
Product lineup (10 SKUs)¶
Free tier (3 products — top-of-funnel, full production metadata)¶
- Husky Audience Segment Catalog — 295 branded segments with IAB Taxonomy 1.1 mapping. Geo: GLOBAL. Zero PII.
- Husky Audience Coverage Atlas — 28 rows of country × platform MAID counts. Geo: APAC + USA. Transparent supply forecasting.
- Husky × IAB Taxonomy 1.1 Crosswalk — 295 Husky → IAB Tier 1-4 mappings. Drop-in utility for DSP/SSP/CDP multi-vendor harmonisation.
Trial tier (3 products — 30-day limited trial, sample-only data, upgrade-to-paid flow)¶
Implementation (revised 2026-04-28): Trial shares contain stable deterministic ~1K-row hash samples of the production audience, not full data. Same query returns same rows — built for reproducible schema/quality/coverage evaluation, not freshness. Consumer wanting fresh production data → upgrade to Paid via Stripe.
- Husky APAC Mobile Audience (Trial) — 1K SGP/Android MAID sample + catalog + coverage. Upgrades to APAC-7 Bundle.
- Husky USA Mobile + HEM Audience (Trial) —
V_HEM_US_SAMPLE(991 rows, deterministic hash on hem) + reference catalog. Upgrades to USA Mobile+HEM Bundle. - Husky Cross-border APAC↔US Audience (Trial) —
V_MAID_APAC_PLUS_US_SAMPLE(1051 rows, deterministic hash on maid) +V_HEM_US_SAMPLE+ reference catalog. Upgrades to Cross-border Bundle.
Paid tier (4 products — Snowflake V2 monetization, Stripe-gated self-serve)¶
Implementation (revised 2026-04-28): Paid bundle listings are Snowflake Marketplace Paid (V2 monetization) with pricing plans. Consumer pays via Stripe → mount full production data zero-copy. Provider receives payouts to Stripe Express. Currently DROPPED in Marketplace until Stripe onboarding completes — will recreate when ready.
- APAC-7 Bundle — SGP/HKG/JPN/KOR/TWN/AUS/NZL, 300 segments. $15K/mo (V2 flat-fee monthly).
- APAC-13 Bundle — adds IDN/IND/MYS/PHL/THA/VNM. $25K/mo (V2 flat-fee monthly).
- USA Mobile + HEM Bundle — 2.01B US MAIDs + 910M HEMs. $20K/mo (V2 flat-fee monthly). Currently DROPPED, recreate after Stripe live.
- Cross-border APAC↔US Bundle — Flagship moat product. V2 usage-based or flat-fee TBD pending Partner Manager call. Currently DROPPED, recreate after Stripe live.
Full schema, pricing, compliance tags in docs/internal/husky_product_master.yaml.
Channel distribution¶
| Channel | SKU count | Role |
|---|---|---|
| huskydata.io | 10 | Primary narrative, full catalog, SEO entry |
| Snowflake Marketplace | 10 | Full funnel (3 Free / 3 Trial / 4 Paid) — zero-copy delivery |
| AWS Data Exchange | 7 | Paid-heavy (4) + Trials reframed as Free (3) — AWS buyers prefer bundled SKUs |
| Eyeota Audience Platform | 4 pipe feeds | Distribution (not marketplace) — we push paid bundles to Eyeota, they onboard DSPs |
| LiveRamp Data Collaboration | 2 priority | Future Q3 2026 — identity partner for USA + Cross-border only |
No mirroring. Each channel is a SUBSET of master, not a copy. Channel-specific overrides (e.g. AWS DX framing Trials as "Free", LiveRamp priority flags) live in channel_distribution.yaml.
Why this structure¶
The Snowflake policy lesson (hard-learned)¶
"Free listings are intended to provide full, production-ready datasets. Samples must be resubmitted as Limited Trial with a consumer-request flow."
This split is actually correct B2B commerce design:
- Free = trust-building metadata (catalog, coverage, taxonomy). Zero-risk install, full product, buyer learns our shape.
- Trial = time-bounded real data sample. 30-day conversion window. Buyer signals intent by clicking "Request access".
- Paid = the actual revenue engine.
Our original "Free Sample" was a hybrid that satisfied neither bucket. Splitting unlocks 4× discoverability on Marketplace (free listings appear in general browse; trials appear in eval flows; paid appears in active buyer searches).
Why 3 Free SKUs, not 1¶
Different personas search different keywords:
- Analyst searches "segment catalog", "audience taxonomy" → lands on Segment Catalog
- BI team searches "audience reach", "coverage atlas" → lands on Coverage Atlas
- Ad-tech architect searches "IAB Taxonomy 1.1", "segment mapping" → lands on Crosswalk
Each free listing is under 30 minutes to ship once the template is in place. ROI on the 3rd listing is high.
Cross-border as moat¶
The data asset exists because our APAC ingest pipeline happens to resolve against US MAIDs too. Competitors are geographically siloed:
- LiveRamp / Experian / Acxiom: US-native, zero APAC behavioural depth
- AlikeAudience / Eyeota (APAC): APAC-centric ingest, no US MAID reconciliation at our scale
The product writes itself: "Reach US diaspora / expats / APAC-outbound eCom shoppers on their US mobile devices using behavioural signals no US vendor has." Flagged HIGH priority on LiveRamp distribution when that channel opens.
Roadmap¶
Phase 1 (now — end April 2026)¶
- Master catalog + channel distribution YAML committed
-
HUSKY_MOBILE_AUDIENCE_SAMPLE(= apac_mobile_trial) PUBLISHED 2026-04-24 - Ship 3 Free listings on Snowflake (task #62)
- Update
huskydata.io/productspages from master catalog
Phase 2 (May 2026)¶
- US Mobile Trial listing (task #60) — sample-aligned manifest approved + PUBLISHED 2026-04-28
- Cross-border APAC↔US Trial listing (task #61) — sample-aligned manifest approved + PUBLISHED 2026-04-28
- Sample views built (V_HEM_US_SAMPLE 991 rows, V_MAID_APAC_PLUS_US_SAMPLE 1051 rows) — deterministic hash, zero maintenance
- Stripe Express onboarding (Snowsight Admin > Billing > Marketplace billing)
- Snowflake Partner Manager engagement / Marketplace Operations case (for Paid V2 listing approval)
- Recreate paid-1 (USA Mobile+HEM Bundle) and paid-2 (Cross-border Bundle) as Paid V2 listings once Stripe verified
-
render-snowflake.pyadapter — auto-generate ALTER LISTING SQL from master - Segment × Country reach matrix evaluation (blocked on bridge-table-in-Snowflake)
Phase 3 (June–July 2026)¶
- AWS DX 7-product rollout (requires resolving current AWS rejection appeal — task #55)
-
render-awsdx.pyadapter - Paid bundle fulfillment infrastructure (APAC-7 first)
Phase 4 (Q3 2026)¶
- LiveRamp partnership — USA + Cross-border only
- Supplier diversification — Eyeota monthly pipe into master schema, new MENA/EU suppliers if signed
Risks and mitigations¶
| Risk | Mitigation |
|---|---|
| Snowflake re-rejects on Trial listing | Manifest already conforms to policy; if rejected, specific feedback drives incremental fix via ALTER LISTING AS $$ … $$ REVIEW |
| Trial upgrade request flow with no paid bundle ready | First 30 days, sales@ manually handles upgrade requests via custom contract — same flow used today for non-Marketplace leads |
| Cross-border product gives away moat in marketing | Counter: US incumbents can't replicate regardless — exposure accelerates win rate on specifically the campaigns only we can serve |
| Channel matrix becomes stale with no CI | Phase-2 adapter scripts add drift detection (master SHA in rendered channel manifest) |
References¶
- Master catalog:
docs/internal/husky_product_master.yaml - Channel distribution:
docs/internal/channel_distribution.yaml - Snowflake listing playbook:
docs/reference/snowflake-listing-playbook.md - Current Snowflake listing SQL:
docs/internal/snowflake_listing_v1.sql,snowflake_listing_v1_alter.sql - Manifest dump tool:
docs/internal/dump_listing_manifest.sh - Compliance matrix (14 markets):
docs/internal/compliance-matrix.md(pending)