AvoMD
Case Study

Astrodata & AvoMD

About AvoMD

AvoMD is a healthcare technology company building AI tools for clinical decision support, led by a team that includes practicing physicians. Fresh off a Series A raise, the company needed its data infrastructure to grow up alongside its business. The goal was the ability to answer two questions with confidence: what is AI usage actually costing us, and who are our genuinely active users?

The Challenge

AvoMD had outgrown Mixpanel. It had gotten the company to a good starting point, but as Nate, AvoMD’s Head of Data Analytics, put it: “There’s a lot of black holes within Mixpanel that we’re struggling with, even just being able to dig into the data ourselves.” Post-Series A, with board members and investors asking sharper questions, AvoMD needed a stronger foundation of metrics, important to scale with the business, not just report on it.

In addition, there was a second, client-facing dimension. AvoMD’s own healthcare clients were increasingly interested in their usage data, but Mixpanel only supported static, view-only dashboards. AvoMD wanted to give clients the ability to explore their own data: filter it, change time periods, dig in themselves.

As Mordechai, AvoMD’s CMIO, framed it, this wasn’t just a tooling swap: “We’re at the precipice of reinvigorating and redoing all of our analytics… almost like a total reset.”

The Approach

Astrodata scoped and delivered a joint Snowflake + Omni implementation built around three goals:

Figure 01 — Built Around Three Goals
  1. 1

    A data platform foundation: reference architecture and documentation designed to make future iterations faster, not just solve immediate-term use cases

  2. 2

    Two priority use cases, fully built: AI cost tracking (token consumption, and cost by model, product, and org) and a formal, reproducible definition of onboarded/active users

  3. 3

    A structured handoff: documentation and prioritized recommendations for future use cases (identity resolution, session tracking, retention, revenue analytics), built for AvoMD’s incoming analytics engineer to pick up and run with

Figure 02 — The Joint Snowflake + Omni Implementation
The joint Snowflake and Omni implementationHubSpot (customer/organization data), Postgres (the system of record for users), and Mixpanel (granular product usage and AI cost events) feed the Snowflake data platform foundation, with OpenFlow ingestion, dbt Core inside Managed Workflows for Apache Airflow, and RBAC with PHI column masking, producing a unified data model. Omni connects with a semantic layer, enabling internal dashboards and a client-facing embedded dashboard with row-level security.HubSpotcustomer/organization dataPostgresPostgresthe system of record for usersMixpanelgranular product usageand AI cost eventsSnowflakedata platform foundationOpenFlow ingestiondbt Core · Apache AirflowRBAC + PHI column maskingUnified data modelHIPAA posture simple to maintainOmnisemantic layerInternal dashboardsClient-facing embeddedrow-level security

Where the real work happened

The project’s technical center of gravity shifted early. The original plan assumed AI usage data lived in AvoMD’s Postgres application database. It didn’t! A gap between AvoMD’s analytics and engineering teams meant the real event-level data was in Mixpanel, and Mixpanel’s interface couldn’t expose it at the granularity AvoMD needed (including parsing raw JSON event data for token-level cost).

This significantly expanded the technical scope beyond what was originally contracted. Rather than pause the project to negotiate a change order, Astrodata’s team chose to absorb the additional work and keep momentum. Astrodata prioritized AvoMD’s timeline and the long-term partnership over short-term margin on this engagement. The team built a foundational data model joining three previously disconnected systems:

  • HubSpot — customer/organization data
  • Postgres — the system of record for users
  • Mixpanel — granular product usage and AI cost events

Connecting them took some creative engineering: mapping email domains from Postgres to HubSpot accounts, then using Postgres as the hub to link those users to their Mixpanel event history.

Figure 03 — Postgres as the Hub
Using Postgres as the hub to join three systemsPostgres, the system of record for users, sits at the center. Email domains map from Postgres to HubSpot accounts on one side, and Postgres links those users to their Mixpanel event history on the other, joining three previously disconnected systems.HubSpotcustomer/organization dataPostgresPostgresthe system of record for usersthe hubMixpanelevent historyemail domains→ HubSpot accountsusers→ event historyA foundational data model joining three previously disconnected systems

On infrastructure, the team also:

  • Evaluated ETL and transformation tooling against AvoMD’s cost, maintainability, and portability needs (ultimately implementing dbt Core inside Managed Workflows for Apache Airflow, avoiding the added cost of a separate dbt Cloud environment)
  • Used Snowflake OpenFlow to stand up ingestion from Postgres and HubSpot
  • Implemented Snowflake RBAC and PHI column masking, centralizing security and compliance controls in Snowflake rather than spreading them across tools — keeping AvoMD’s HIPAA posture simple to maintain
  • Connected Omni to Snowflake with a semantic layer, enabling both internal dashboards and a client-facing embedded dashboard with row-level security — replacing Mixpanel’s static, view-only experience with something AvoMD’s own clients could explore themselves
The Stack — Three Systems, One Data Platform
HubSpotPostgreSQLMixpanelSnowflakedbtOmni
Figure 04 — The Original May–July Timeline
  1. MayOriginal plan
  2. Mid-projectScope expands
  3. JulyDelivered
  1. The original plan assumed AI usage data lived in AvoMD’s Postgres application database.
  2. Rather than pause the project to negotiate a change order, Astrodata’s team chose to absorb the additional work and keep momentum.
  3. Despite the mid-project scope expansion, Astrodata delivered within the original May–July timeline.

The Outcome

Despite the mid-project scope expansion, Astrodata delivered within the original May–July timeline. AvoMD came away with:

  • A unified, SQL-queryable data model spanning HubSpot, Postgres, and Mixpanel
  • Token-level, JSON-granular visibility into AI cost (impossible in Mixpanel’s native UI)
  • A documented, defensible definition of active/onboarded users, built for board and investor scrutiny
  • A client-facing, self-service Omni dashboard with proper row-level security, replacing static Mixpanel reports
  • A clean, documented handoff to AvoMD’s incoming analytics engineer, with a prioritized roadmap for what comes next
Figure 05 — Two Questions, Answered with Confidence
  • What is AI usage actually costing us?

    Token-level, JSON-granular visibility into AI cost (impossible in Mixpanel’s native UI).

    Token consumptionBy modelBy productBy org
  • Who are our genuinely active users?

    A documented, defensible definition of active/onboarded users, built for board and investor scrutiny.

    FormalReproducibleOnboarded/active
Table 01 — Before and After
DimensionBeforeAfter
Client dashboardsStatic, view-only dashboardsA client-facing, self-service Omni dashboard with proper row-level security
AI costImpossible in Mixpanel’s native UIToken-level, JSON-granular visibility into AI cost
Data modelThree previously disconnected systemsA unified, SQL-queryable data model spanning HubSpot, Postgres, and Mixpanel
Active/onboarded usersBoard members and investors asking sharper questionsA documented, defensible definition, built for board and investor scrutiny
Security & complianceControls spread across toolsRBAC and PHI column masking centralized in Snowflake