The workflow before
Mailgun's data engineers locked invoices and handled revenue exceptions by hand each cycle. The revenue pipeline overwrote records in place, so a bad load could lose data. Matillion jobs had no version control, loading and querying shared the same Snowflake compute, and machine learning models were trained and versioned without proper orchestration.
What we built
We audited Mailgun's Matillion and Snowflake setup end to end and designed a revenue pipeline built on append-only tables, so every invoice state is kept and nothing is overwritten.
We laid out the path to Matillion Enterprise for Git version control and high availability, separate Snowflake warehouses for loading and querying, and zero-copy clones for safe testing. For machine learning, we set out a move to a cloud ML environment with automated training and model versioning.
Before and after
| Measure | Before | After |
|---|---|---|
| Revenue records overwritten on reload | Possible on every load | 0, append-only tables |
| Invoice locking and exceptions | Manual each cycle | About 60% less manual work |
| ETL version control | None | Git-backed via Matillion Enterprise |
What's next
A reliable revenue history is the foundation for L2 work: an assistant that answers finance questions over billing data, and anomaly checks that flag revenue exceptions before close.


