| ● |
Shopify Orders |
Shopify CSV export → load_shopify.py |
307,108 |
100% |
0.3–1.5% |
Returns tracked by order date (CSV) not refund date (Analytics), so monthly return timing can differ 8-10%. |
Compare monthly gross to Shopify Analytics → Sales → Total Sales. Should be within 1.5%. |
| ● |
Amazon Orders |
Amazon flat file CSV → load_amazon.py |
82,469 |
100% |
0.4–3% |
3.4% of orders are multi-product where CSV captured partial line items (export issue). Settlement shows slightly higher gross. |
Compare to Amazon Business Reports → Sales & Traffic. Monthly should be within 3%. |
| ● |
Shopify Discounts |
Order CSV "Discount Amount" → proportional allocation |
142,920 |
100% |
<0.4% |
Penny-perfect for 2025, within 0.4% for 2024. Proportionally allocated across line items in multi-item orders. |
Compare monthly to Shopify Analytics → Discounts. Should be within 0.5%. |
| ● |
Shopify Returns |
Order CSV "Refunded Amount" → capped at line gross |
3,703 |
~90% |
8–10% |
CSV tracks by order date, Analytics by refund date. Timing mismatch. Capped at gross to exclude shipping refunds. 2026 partial. |
Compare annual to Shopify Analytics → Returns. Monthly will drift; annual should be within 5%. |
| ● |
Faire Orders |
Shopify CSV (tagged via @relay.faire.com email pattern) |
1,626 |
100% |
0% |
67 customers, $122K gross, $110K net. Tagged as channel='faire' in fact_orders. Flows through Shopify but identified and separated. |
Run: SELECT COUNT(*) FROM fact_orders WHERE channel='faire'. Cross-check gross vs Faire dashboard. |
| ● |
Amazon Returns |
Amazon Returns Report CSV → fact_amazon_returns |
1,867 |
96% |
~5% |
$26.1K total ($12.8K 2024, $10.9K 2025, $2.4K 2026 YTD). 122 returns unmatched (pre-2024 orders). Return rate 1.1-1.7% of gross. |
Compare annual to Amazon FBA returns report. Yellow: may not capture all return types; 2026 partial. |
| ● |
Shopify Fees |
Shopify Payments payout CSV (953 payouts) |
— |
100% |
<0.1% |
None. Actual rates per year: 3.11% (2024), 3.18% (2025), 3.14% (2026). |
Spot-check: sum platform_fees ÷ gross_revenue by year. Should match rates above. |
| ● |
Amazon Fees (2025) |
Settlement reports → fact_amazon_settlement_fees |
33,264 |
94.6% |
2.4% |
34.0% blended (15% referral + 19.1% FBA). 5.4% unmatched orders use 34.0% average. fact_orders shows 34.8% — within $4K. |
Download new settlement from Seller Central → Reports → Payments. Compare total fees. |
| ● |
Amazon Fees (2024) |
Settlement reports → fact_amazon_settlement_fees |
35,757 |
92% |
~5% |
39.9% blended. 8% unmatched use average. fact_orders shows 44.4% — gap due to CSV gross revenue being ~$21K lower than settlement gross. |
Cross-check: SUM(total_fees) in settlements vs SUM(platform_fees) in fact_orders for 2024. |
| ● |
Amazon Fees (2026) |
6 settlement files (Dec 16–Mar 10) |
4,543 |
67% |
est. 7% |
67% at 24.8% actual rate, 33% (post-Mar 10) on 32.2% flat estimate. Fee trend: 39.9% → 34.0% → 24.8%. |
Upload next settlement report from Seller Central. Each one closes ~2 weeks of estimates. ▸ Green when full Q1 covered. |
| ● |
Meta Ad Spend |
Meta Ads Manager CSV → load_meta_ads.py |
415 |
100% |
2.5% |
Weekly granularity causes bucket-alignment drift vs daily Windsor pulls. link_clicks used (not clicks all). |
Compare monthly totals to Meta Ads Manager → Campaigns → Date filter. Penny-exact at monthly level. |
| ● |
Google Ad Spend |
Google Ads console CSV → load_google_ads.py |
89 |
100% |
$0.00 |
None. Penny-perfect vs both Adzviser and Windsor pulls. |
Compare to Google Ads → Campaigns → Overview. Should be exact. |
| ● |
Amazon Ad Spend (2025-26) |
Amazon Ads console + Adzviser MCP |
577 |
100% |
<1% |
2025: $105K from console (all 12 months). 2026 Q1: $13K complete (Jan 1-21 console export + Jan 22–Mar 22 Windsor). No gaps. |
Compare to Amazon Ads console → Campaign Manager → date filter. Jan 1-21 from downloaded report. |
| ● |
Amazon Ad Spend (2024) |
Amazon Ads console monthly export |
525 |
100% |
<1% |
$59,455 actual from Amazon Ads console (Session 24). 110 campaigns. Previously estimated ~$82K — actual was $22.5K lower. |
Compare to Amazon Ads console → Campaign Manager → Jan 1–Dec 31, 2024 date range. All months accounted for. |
| ● |
Shipping Cost |
ShipStation CSV export → load_shipstation.py |
293,340 |
95.4% |
<5% |
Shopify 99.4% matched ($988K). Amazon FBM only 100 rows (most Amazon is FBA — shipping in platform fees). 4.6% unmatched are likely cancelled/sample orders. |
Compare monthly totals to ShipStation → Reports → Shipment Cost. Should be within 5% per month. Re-export monthly for ongoing coverage. |
| ● |
COGS (Shopify) |
Nikita's BOM Excel → dim_products.cogs_per_unit |
126 SKUs |
98.3% |
1–11% |
BOM refreshed from Nikita's Purchasing Framework (March 2026). 126 products updated. Costs increased 1–11% (sprays ~1–2%, candles ~7–11%). Still Yellow: labor model is flat $1.16/unit (not task-level), Nikita confirmation pending. |
Nikita to verify final COGS accuracy against actual costs. Build task-level labor allocation using production_log. ▸ Green when verified. |
| ● |
COGS (Amazon) |
Derived: Shopify spray COGS + $1.00/pack → update_amazon_cogs.py |
25 ASINs |
100% |
est. 5-15% |
Rough estimate: component spray COGS from BOM + $0.50 labor + $0.50 materials per pack, split by units. Inherits BOM drift. Packaging cost is a flat estimate. |
Build proper Amazon BOMs with actual pack materials cost per ASIN. Same BOM structure, just more precise packaging/labor. ▸ Green when BOMs built. |
| ● |
Contribution Margin |
Calculated: net_rev − fees − shipping − COGS |
380,759 |
97.7% |
<5% |
Shopify 47.0%, Amazon 14.2%, Faire 38.2%. Amazon compressed by platform fees (24-44%). Inherits COGS drift. 2.3% uncovered = free/sample items. |
Spot-check: pick 5 high-volume SKUs, manually compute margin from source numbers. Should match within $0.50/unit. |
| ● |
Product Catalog |
BOM Excel + map_amazon_packs + manual adds |
186 |
100% |
$0 |
Zero unmapped revenue. All ASINs mapped. 36 free/sample items included. New products need manual adds. |
Run: SELECT product_id FROM fact_orders WHERE product_id NOT IN (SELECT product_id FROM dim_products). Should return 0. |
| ● |
Customer Data |
Shopify order CSV → dim_customers |
65,657 |
100% |
0% |
Shopify customers only. Amazon customers not trackable (no PII). Cohort-ready with order history. |
Compare COUNT(DISTINCT customer_id) to Shopify Admin → Customers → total. |
| ● |
Finance (25 tables) |
Nikita's Excel → load_finance.py, load_budget_and_launch.py |
16,638 |
100% |
<1% |
P&L, BOM, cash flow, budget, seasonal launch, revenue projections. ⚠️ P&L has duplicate-label rows for gross/net — must filter by category column. |
Compare P&L totals to QuickBooks monthly. Must filter by category to avoid 2x. See export_finance_json.py for correct patterns. |
| ● |
Windsor MCP |
Windsor.ai ($99/mo) — 7 sources connected |
— |
7/7 |
— |
Shopify row cap (~1,400/query — use weekly chunks). Amazon Ads has same 60-day lookback. Klaviyo revenue data flowing. |
Test pull: Windsor get_data for Shopify, last 3 days. Should return order-level data. If empty, check connector status. |
| ● |
Klaviyo Attribution |
Windsor MCP → Klaviyo connector (account WS9338) |
15 months |
100% |
— |
$3.5M attributed revenue (Jan 2025–Mar 2026). 51 active flows. Monthly data embedded in QW dashboard. Peak: Nov 2025 ($497K). |
Compare monthly revenue to Klaviyo → Analytics → Revenue. Wired into Quadruple Whale dashboard. |
| ● |
Daily Aggregates |
fact_shopify_daily (78 days) + fact_amazon_daily (733 days) |
811 |
100% |
<0.1% |
Shopify: 2026 YTD, matches Analytics within $136. Amazon: Mar 2024–Mar 2026, matches Business Report within 0.1%. |
Compare any day to Shopify Analytics or Amazon Business Report daily view. |
| ● |
Customer Cohorts |
ETL: build_cohort_module.py → is_first_order, cohort_month, base_order_id |
389,577 |
100% |
2pp (2025) |
190,553 base orders. 183K first / 206K repeat. 2025+ within 2pp. Session 24: 5,901 pre-2024 customers corrected, 2025+ now Green. 2024 still Yellow (sentinel date ~2023-01, approximate). |
Compare returning rate to Shopify Analytics → Customers. 2025+ within 2pp. ▸ Yellow: 2024 still on sentinel dates pending full pre-2022 history export. |