| Campaign | Spend | Revenue | ROAS | CAC |
|---|
| Item | Type | Signal | Margin impact |
|---|
Every number on the dashboard is defined once, here, and computed on the canonical layer — so it is identical for this client and for any client on a different stack. This is the reference that ends "the formula changed again."
| Metric | Formula | Sources | Refresh | Viz |
|---|---|---|---|---|
| Gross Revenue | Σ (unit price × qty) before discounts | Order lines (storefront + marketplace) | ~real-time | KPI |
| Net Revenue | Gross − Discounts − Refunds/Returns − Cancellations | Orders, refunds | ~real-time | KPI + line |
| Revenue by Channel | Net Revenue partitioned by channel (Shopify / Amazon) | Canonical Order.channel | ~real-time | Donut |
| AOV | Net Revenue ÷ Orders | Orders | ~real-time | KPI |
| Metric | Formula | Sources | Refresh | Viz |
|---|---|---|---|---|
| COGS | Σ (unit cost × qty sold) | Product cost master | daily | Waterfall |
| Gross Margin | Net Revenue − COGS · % = GM ÷ Net Rev | Orders, cost master | daily | KPI |
| Contribution Margin | Net Rev − COGS − Shipping − Payment/COD fees − Ad spend − (RTO prob × RTO cost) − Returns handling − Packaging | All sources | hourly | KPI + waterfall |
| Contribution % | Contribution Margin ÷ Net Revenue | Derived | hourly | KPI |
| Profit per Order | Contribution Margin ÷ Orders | Derived | hourly | KPI |
| Metric | Formula | Sources | Refresh | Viz |
|---|---|---|---|---|
| Ad Spend (blended) | Σ spend across Meta + Amazon Ads (+ Google) | Ad platform APIs | hourly | KPI |
| Blended CAC | Total Ad Spend ÷ New Customers | Ad spend, first-order flag | hourly | KPI + line |
| ROAS | Attributed Revenue ÷ Ad Spend (blended & per channel) | Ads, orders (attribution) | hourly | Bar |
| MER | Total Net Revenue ÷ Total Ad Spend | Orders, ads | hourly | KPI |
| New vs Returning | Revenue split by first-order flag | Customer, orders | daily | Bar / donut |
| Metric | Formula | Sources | Refresh | Viz |
|---|---|---|---|---|
| COD RTO % | COD RTO orders ÷ COD shipped orders | Shipment status | ~real-time | KPI + gauge |
| NDR % | NDR orders ÷ shipped orders | Shipment status | ~real-time | KPI |
| RTO Cost | Σ (fwd freight + reverse freight + handling + blocked-inventory carrying) · ~₹150–300/RTO | Shipping, cost master | daily | Waterfall |
| RTO by Courier / Pincode | RTO % partitioned by courier / pincode | Shipment | ~real-time | Bar / table |
| On-time Delivery % | Delivered ≤ promise ÷ Delivered | Shipment SLA | daily | KPI |
| Metric | Formula | Sources | Refresh | Viz |
|---|---|---|---|---|
| Stock Blocked in Transit (₹) | Σ (units in forward-transit + RTO return-leg × unit cost) | Shipment, cost master | ~real-time | KPI + table |
| Days of Inventory Cover | Sellable units ÷ avg daily units sold | Inventory, orders | daily | Table |
| Settlements Pending (₹) | Captured-not-settled + marketplace payouts pending | Gateway settlement, marketplace disbursement | daily | KPI |
| Cash Conversion (days) | Avg (settlement date − order date) | Orders, settlement | daily | KPI |
The reason a client on WooCommerce + Delhivery + Cashfree gets the same numbers as one on Shopify + Shiprocket + Razorpay: every source is normalized into one canonical model, and every formula runs on that model — never on the raw source. Swap a tool, keep the numbers.
| Canonical entity | Option A | Option B | Option C |
|---|---|---|---|
| Order | Shopify Admin API | WooCommerce REST | BigCommerce Orders |
| Shipment | Shiprocket | Delhivery | Bluedart / Ecom Express |
| Settlement | Razorpay | Cashfree | PayU |
| Marketplace Order | Amazon SP-API | Flipkart Seller API | — |
| AdSpend | Meta Marketing API | Google Ads API | Amazon Ads API |
The dashboard shows what happened; the engine says what to do about it. Version one is a deterministic rules engine over the canonical metrics — using Bee Logical's own KPI thresholds — that ranks recommendations by projected rupee impact and surfaces them as action cards. It graduates to ML as data compounds; it never needs a cold start because the rules are the framework.
| Signal | Condition | Recommended action | Projected impact | Data |
|---|---|---|---|---|
| Budget reallocation | ROAS(A) > blended×1.5 AND ROAS(B) < 1.0 | Shift spend from B → A, up to A's saturation point | + incremental revenue | AdSpend, Orders |
| Scale winner | ROAS > target AND spend < cap AND CM > 0 | Increase budget +15–20% on the campaign | + profitable revenue | AdSpend, CM |
| Creative fatigue | CTR ↓ >30% over 7d AND frequency > 3 | Refresh creative / rotate ad set | − rising CPP | Ad platform |
| RTO pincode | COD RTO(pincode) > 30% | Switch pincode cluster to prepaid-only | + RTO cost saved | Shipment |
| SKU margin leak | Contribution %(SKU) < 0 | Review price or COGS on the SKU | stop the bleed | Orders, cost |
| Inventory reorder | Days cover < supplier lead time | Reorder now to avoid stock-out | avoid lost sales | Inventory |
| Blocked capital | NDR age > 5d OR in-transit value rising | Trigger reattempt / expedite backlog | unlock ₹ tied up | Shipment |
| Margin alert | Contribution % < target (e.g. 15%) | Surface the top driver of the drop | protect margin | Derived |
Bee Logical · Executive Intelligence Dashboard — prototype · figures are illustrative sample data for a ~₹1.25 Cr/month brand on Shopify + Shiprocket + Razorpay + Amazon + Meta/Amazon Ads · charts require an internet connection to render.