Zhivko Todorov
ALL CASE STUDIES

CASE 50 · CASCADE · 2025

MULTI-TENANTCURCHARGEBACKATHENA

Per-tenant cost, calculated from the CUR.

A B2B SaaS company knew their gross margin but not their per-customer margin. The largest customer was suspected to be unprofitable, the smallest was suspected to be highly profitable, and nobody could prove either. We built a cost-allocation pipeline that produces per-tenant cost reports nightly.

INDUSTRY

B2B SaaS

DOMAIN

COST

DELIVERED

2025

STACK

COST AND USAGE REPORT·ATHENA·GLUE·QUICKSIGHT·DYNAMODB STREAMS·EVENTBRIDGE

RESULTS

What changed, by the numbers.

TENANT MARGIN VISIBILITY

100%

WAS GROSS-ONLY

UNPROFITABLE TENANTS

14

IDENTIFIED + RENEGOTIATED

PRICING-MODEL CHANGES

3

INFORMED BY DATA

NIGHTLY REPORT

AUTO

TO FINANCE + CS LEADS

HOW IT WENT

The technical challenge was attribution. Compute and storage were tagged with tenant IDs (mostly). Networking, observability, and shared services were not. We built a multi-step allocation model in Glue that combined CUR data with application-emitted usage events stored in DynamoDB Streams.

Shared costs allocated proportionally to attributable usage. Tenant-specific costs (their dedicated RDS, their CloudFront distribution) were direct. The output landed in QuickSight, with finance and customer-success leads each getting their own view.

The largest customer turned out to be marginally profitable — not loss-making, but underpriced. Renegotiation followed. Of the other 14 unprofitable accounts, six were renegotiated, four churned (intentionally), and four had product changes that reduced their cost profile. Gross margin improved 7 points within a quarter.

READY WHEN YOU ARE

Let's get your AWS bill (and architecture) in order.

The discovery call is free. You walk away with at least one concrete idea — even if we never work together.

Or email directly →