Inspiration

Most teams today don't run on a single cloud or service provider. A typical startup might use AWS for compute, GCP for BigQuery, OpenAI for AI-powered features, and Meta for WhatsApp messaging. Each provider has its own billing console, currency, reporting format, and billing cycle.

As a result, businesses struggle to get a complete picture of their technology spending. Unexpected cost spikes often go unnoticed until days or even weeks later, when the invoice arrives and the damage is already done. And the people who need to know — founders, engineering managers, finance — are rarely sitting in a cost console. They are on WhatsApp.

We built CloudMeter to solve this: one platform that brings cloud infrastructure, AI subscriptions and other technology expenses into a single view, alerts teams the moment spend spikes, and now lets anyone simply ask their cloud bill a question on WhatsApp — answered by an AI agent built on Amazon Bedrock AgentCore.

Our goal is simple: help businesses move from reactive bill checking to proactive cost monitoring, with better visibility, faster alerts and greater control over their technology spending.

What it does

CloudMeter is a multi-cloud cost-monitoring platform with an AI cost agent on WhatsApp.

  • Ask your bill on WhatsApp. Message CloudMeter's WhatsApp number in plain words and an AI agent answers in a few seconds from live CloudMeter data. “How much did we spend this month?” · “s3 cost” · “Production” (an account) · “cost of project” (a tag) · “Any cost spikes?”. It only reads the workspaces and accounts that person is allowed to see, and never changes a cloud account.
  • Invite a teammate from WhatsApp. An Owner or Admin types “invite” to the same number; CloudMeter asks which workspace, the person’s email, and Member or Admin, then emails the invitation through Amazon SES, and the teammate joins in the web portal. One conversation that starts on WhatsApp and finishes in email. Nothing is sent until the role is chosen.
  • Connect your providers read-only: AWS, GCP, Azure, Alibaba Cloud, Huawei Cloud, OpenAI and WhatsApp Business. CloudMeter never gets write access to anything.
  • One dashboard: spend is refreshed on each workspace's chosen schedule (up to six times a day), stored in USD and shown in the workspace's own currency, broken down by account, service, region and tag.
  • Anomaly alerts: CloudMeter learns each service's normal daily spend and flags real spikes. A small percentage jump on a tiny bill doesn't count.
  • Alerts and daily digests where you already are: WhatsApp through AWS End User Messaging Social, email through Amazon SES, and Slack. Each team member only sees the accounts they're allowed to see.
  • Teams and roles: Owner, Admin and Member, with access set per account.
  • Mobile app: Android (Google Play), to check spend and alerts on the go.
  • Staff console: an internal tool where our team manages workspaces, plans and payments.

How we built it

  • Backend: fully serverless on AWS, defined in AWS CDK (TypeScript) — API Gateway, AppSync, Lambda, DynamoDB (single-table, KMS-encrypted), Cognito, Secrets Manager, EventBridge schedules, S3 and CloudFront.
  • AWS End User Messaging Social (WhatsApp): every WhatsApp message — verification codes, daily digests, spike alerts and the agent's replies — is sent with SendWhatsAppMessage from Lambda, authorised by an IAM policy scoped to one phone-number ARN. No Meta access token is stored. Incoming messages arrive through the WhatsApp Business Account's event destination, an Amazon SNS topic.
  • Amazon SES: passwordless sign-in codes, anomaly alerts, daily digests, team invitations and renewal notices.
  • The AI cost agent:
  • Amazon Bedrock AgentCore Runtime hosts the agent (a Node.js 22 code deployment).
  • Amazon Nova 2 Lite on Amazon Bedrock, through the Converse API with tool use, decides which CloudMeter tool to call and writes the reply.
  • Read-only tools — spend summary, account lookup, service and tag costs, open alerts, daily spend over a date range — reuse the dashboard's own code, so the agent quotes exactly the dashboard's figures.
  • Flow: WhatsApp → End User Messaging Social → SNS → Lambda (who is asking, which workspaces) → AgentCore agent → Nova + tools over DynamoDB → SendWhatsAppMessage → WhatsApp.
  • Secure cloud connections: for AWS, the server creates a one-time External ID and the customer creates a role that trusts only that ID. This prevents the "confused deputy" attack, where someone tricks a service into using its access on their behalf. The client can never supply the ID itself.
  • One adapter per provider: a shared interface wraps each provider's billing API — AWS Cost Explorer, GCP via the customer's own BigQuery billing export, Azure Cost Management, and Huawei's API with hand-written request signing, because no usable Node SDK exists.
  • Passwordless login: email one-time codes on Cognito's custom auth flow. The staff console has its own separate, invite-only user pool.
  • Frontend: the customer portal and staff console are plain HTML/JS with no build step, deployed through GitHub Actions. The mobile app uses Expo and React Native.
  • Scheduled jobs (sweeps): syncing runs at :05 past each hour and digests at :30. The :30 offset lets digests read freshly synced data, and it matches half-hour time zones like India's (+5:30).

Challenges we ran into

  • Every cloud bills differently. GCP has no direct cost API. AWS Cost Explorer can inflate month-to-date figures with projected charges. AWS Organizations can count the same spend twice. Each one needed its own fix.
  • Alerts people trust. Our first anomaly model blew a one-off $46 domain renewal up into a $414 "monthly projection". We redesigned the rules: a spike must cross a dollar threshold or a percentage threshold, new services aren't projected forward, and a spike that's still going doesn't re-alert every hour.
  • An AI agent that never guesses. In testing, the model answered a follow-up question from the shape of its previous reply — with figures that weren't in the data — and once added up tag values wrongly. Now the first model call must use a tool, totals are computed in code, and a name the tools can't find comes back with the real list instead of a guess.
  • A WhatsApp pipeline that can't loop. The same SNS topic carries delivery receipts for our own replies. Receipts and our own number are dropped before anything runs, each message is handled once, each number is limited to 20 questions an hour, the Lambda never retries and runs at most 5 at a time, and a CloudWatch alarm watches for a runaway.
  • People in many workspaces. One person can belong to a dozen organisations, each with its own currency and role. The agent answers for all of them unless one is named, each read with that person's own permissions.
  • Slack and WhatsApp. WhatsApp only allows pre-approved templates for messages we start. Slack DMs had to be stored per workspace, because one person can belong to many workspaces, and Slack reports most errors as HTTP 200 with ok: false in the body.
  • Billing in two worlds. Stripe for global customers and Razorpay for India, with GST, recurring payment mandates and webhooks that don't always carry the data you'd expect.
  • Fail-safe plan limits. If a plan's data is missing or wrong, CloudMeter still sends the alert rather than going silent.

Accomplishments that we're proud of

  • CloudMeter is live in production with paying customers, across dev, UAT and prod environments.
  • The WhatsApp AI agent works end to end: a question typed on a phone is answered in 2–5 seconds from live data, through AWS End User Messaging Social and Amazon Bedrock AgentCore — and it quotes exactly the dashboard's figures.
  • Two AWS Communication Developer Services working together: WhatsApp through End User Messaging Social and email through SES, for verification, alerts, digests, conversation and team invites that start on WhatsApp and finish in email.
  • Multi-cloud monitoring and Adhoc Spend monitoring under one roof, extending cost visibility beyond infrastructure bills to AI and software subscriptions — for growing businesses that don't have a FinOps team but still need to understand and control their technology spending.

What we learned

Cloud cost management is not just about collecting billing data. Businesses need context, timely alerts, clear explanations and practical next steps.

Building the agent taught us that the model is the easy part. Deciding whose data a WhatsApp message may read, keeping every number traceable to a tool result, and making sure a messaging pipeline can never loop took most of the work — and they are what make an AI agent safe to put in front of customers. AI insights are only useful when they are grounded in reliable data, and automation needs the right permissions, validation and human oversight, especially where it could touch production infrastructure or spending.

What's next for CloudMeter

  • Explanations with every alert: the agent sends the likely cause and what to check alongside each spike.
  • Recommendations: potential savings from rightsizing, idle resources and unused subscriptions.
  • More confirmed actions on WhatsApp, after team invites: “pause the digest for a week”, “snooze this alert” — always confirmed before anything happens.
  • More channels through AWS End User Messaging: SMS and RCS for people who aren't on WhatsApp.
  • Deeper AI and SaaS subscription tracking, including usage and spending limits where supported.
  • AWS Marketplace listing, so customers can subscribe through their AWS bill.

Our long-term vision is to turn CloudMeter from a cloud cost monitoring platform into an intelligent cost assistant that helps businesses understand, predict and control their technology spending — making FinOps accessible to organisations of every size.

Built With

Share this project:

Updates

Submission history