Skip to content
All case studies
E-commerce SaaS May 2026 United States

Client: MeshCommerce

How MeshCommerce turned a 13-week BI build into a $1.8M annual revenue line

MeshCommerce's 4,200 merchants kept asking for analytics. We shipped a multi-tenant embedded BI platform on Snowflake + dbt + Cube in 13 weeks — and gave MeshCommerce a brand-new premium tier that now generates $1.8M/year.

13 weeks

Kickoff to production

$42k

Fixed-price engagement

$1.8M

Year-1 ARR uplift

4,200

Merchants served by day 30

Services delivered

Tech stack

SnowflakedbtCubeReact 19Next.js 14pgvectorAirbyte

The brief

MeshCommerce is a US-based e-commerce platform powering 4,200+ DTC merchants — think a focused Shopify alternative for mid-market SMB. Their merchants ran their stores from MeshCommerce's admin all day. And almost every customer-success call ended the same way: "Can you send me a report on…?"

Merchants wanted real analytics. Not just "sales today" — they wanted cohort retention, SKU profitability, channel-attribution, supplier lead-times. MeshCommerce's ops team was running ~340 ad-hoc CSV exports a week to keep merchants happy. The product team kept punting the build because it was big, complex, and didn't have a clear ROI yet.

Then their head of product realized: "If we built this properly and charged for it, this is a new pricing tier." They needed a senior business intelligence team that could ship embedded analytics — fast, multi-tenant, and good enough to be the centerpiece of a paid Pro plan.

The constraints

  • Multi-tenant from day 1. 4,200 merchants, each only sees their own data.
  • Embedded UX, not iframe. Dashboards live inside MeshCommerce's admin, branded as MeshCommerce.
  • Real-time enough. Yesterday's data is fine; last-month's data is not.
  • Custom metrics per merchant tier. Free tier = 4 dashboards. Pro tier = 12 dashboards + custom report builder.
  • White-label embed for enterprise. The top-200 merchants wanted to embed MeshCommerce analytics in their own internal tools.
  • 13-week deadline. Tied to their Q2 earnings narrative.

The architecture

We picked the modern data stack — boring on purpose, because the value was in the product UX, not the infra.

  • Warehouse: Snowflake (already in use for internal ops, easy adoption)
  • Ingestion: Airbyte cloud connectors from their operational Postgres + Stripe + Shopify-Apps + Klaviyo
  • Transformation: dbt for layered models (raw → staging → mart), tested CI/CD via dbt Cloud
  • Semantic layer: Cube — single source of truth for metric definitions, multi-tenant via JWT + row-level security
  • Frontend: custom React 19 + Next.js 14, charting via Tremor + Recharts, branded as MeshCommerce
  • Embed-for-enterprise: a signed iframe + JWT pattern that white-labels the dashboard, used by ~40 of MeshCommerce's biggest merchants

The Cube semantic-layer decision

The biggest call we made early on was using Cube as the semantic layer rather than letting each dashboard query Snowflake directly. Three reasons:

  1. Metric definitions in one place. "Active customer" is defined once in Cube, used in every dashboard. No more "why does retention here say 73% and the board deck say 68%?" conversations.
  2. Multi-tenant out of the box. Cube's JWT-scoped queries meant every dashboard query was automatically filtered by merchant ID — impossible to leak another merchant's data even if the frontend had a bug.
  3. Snowflake costs stayed bounded. Cube's query caching cut our Snowflake warehouse usage by ~62% vs the naive approach.

The 13-week timeline

Total: $42,000 fixed-price, 13 weeks from kickoff to production. Phases:

  • Weeks 1–2: Discovery, KPI catalog, data audit, scope locked
  • Weeks 3–5: Snowflake setup, Airbyte ingestion, first dbt models, base metrics defined in Cube
  • Weeks 6–8: Free-tier dashboards (4 dashboards × 4,200 merchants), multi-tenant smoke tests at scale
  • Weeks 9–11: Pro-tier dashboards + custom report builder + white-label embed
  • Week 12: Load test, security review, RLS pen test (no merchant can ever see another's data)
  • Week 13: Production launch, training session for MeshCommerce's ops + customer-success teams

The product launch

MeshCommerce launched the analytics feature as a free upgrade for all merchants AND as the anchor feature of a new Pro plan ($89/month). Within 30 days:

  • 4,200 merchants had used the new dashboards at least once
  • 1,140 merchants (27%) had upgraded to the Pro plan
  • 40 enterprise merchants activated the white-label embed
  • $1.8M ARR run-rate generated by the Pro plan within 6 months
  • 340 → 12 weekly ad-hoc CSV requests (97% reduction)
We spent 2 years saying "we should build analytics." Paisol shipped it in 13 weeks — for less than what we'd pay one senior engineer for 6 months — and we sold it back to our own merchants as a new pricing tier. Best ROI move we've made this year.

— Head of Product, MeshCommerce

The 4-layer dbt model

For the data engineers reading this — the dbt layering we used:

models/
├── staging/          # 1-to-1 with source systems, lightly cleaned
│   ├── stg_stripe_charges.sql
│   ├── stg_shopify_orders.sql
│   └── stg_merchant_metadata.sql
├── intermediate/     # Business logic, denormalized
│   ├── int_orders_attributed.sql
│   └── int_customer_lifetime_value.sql
├── marts/            # What dashboards query (via Cube)
│   ├── core/
│   │   ├── dim_merchants.sql
│   │   ├── fct_orders.sql
│   │   └── fct_revenue_daily.sql
│   └── analytics/
│       ├── mart_cohort_retention.sql
│       └── mart_sku_profitability.sql
└── metrics/          # dbt metrics layer, mirrored into Cube

Every model is tested with dbt tests (unique, not_null, relationships, accepted_values), and the marts layer has merchant-id-presence tests that fail the build if any model could possibly leak cross-merchant data. RLS by construction, not by configuration.

What we'd do differently next time

  1. Cube earlier, dbt later. We spent weeks 3–5 on dbt models before bringing Cube in. In hindsight, defining the semantic layer first would have saved 6–8 days of model re-shaping.
  2. Performance budgets on every dashboard. We did load testing in week 12. Next time, every dashboard ships with a P95 latency budget from day 1 — and gets blocked from merging if it exceeds.
  3. Ship the report builder later. The custom report builder was 30% of the engineering effort but only 8% of usage in the first 90 days. We'd cut it from v1 and phase it.

Numbers for the math nerds

  • Build cost: $42,000 (fixed)
  • Annual infrastructure (Snowflake + Cube + Airbyte): ~$48,000
  • Annual maintenance retainer (months 1–12): $48,000
  • Year-1 total cost: ~$138,000
  • Year-1 revenue from new Pro plan: $1,800,000
  • Year-1 ROI on the build: 13×
  • Payback period: 28 days from launch

Want embedded analytics shipped like this?

Book a free 30-minute strategy call. We'll look at your data sources, your merchants, your pricing model, and tell you what a multi-tenant BI build would cost in writing within 48 hours. Or read the related guides: What does a SaaS MVP cost in 2026 · our BI service overview.

Want results like MeshCommerce?

Book a free 30-minute strategy call.

No pitch. Walk away with a clear scope, a fixed-price quote, and a 90-day delivery date — even if you don't hire us.

Book My Strategy Call