OpenChargeback
I looked at enterprise FinOps platforms. Slick rounded corner dashboards, AI anomaly detection, and multi-cloud cost optimization galore. They wanted a bunch of money, and ideally a dedicated person to run them and get the whole project off the ground. That person would have to be me if I wanted it to happen.
Research groups are not enterprise operations with billing teams. There’s department admins, but fewer of them than there were and they don’t want to spend their time chasing down receipts and invoices. Centralized purchasing platforms leave much to be desired.
Lots of usage that could or should be charged for falls through the cracks. Over time, this leads to a fundamental misunderstanding from our researchers: that these resources are “free”. From the tech side, we know that “not being charged” and “free” are rarely the same thing. In this case, the costs were borne by that boogeyman, who sallies forth every time that ageless cry of faculty beckons: “That’s what my overhead is for!”
Central teams don’t bill because it’s an obnoxious manual process that has resisted automation attempts and a lack of common interchange format. Distributed academic IT teams don’t bill for much the same reason, and also it’s hard to bill for something that you don’t want them to pay. We gave away so many pieces of hardware to research groups just to keep their labs running smoothly — network cables, RAM, an extra SSD here or there.
If they demanded new stuff, no problem — we send a shopping cart from ‘ye olde trusted VAR’ and they approve it and it shows up a few days later. But if they’re okay with old stuff we have on hand? I don’t want to sit there and haggle with a grad student over what a 2 year old 250GB SSD is worth or 2 8GB sticks of DDR3 that has been on the shelf for 8 years but could make an old machine they need for a project usable.
I just want to give it to them and say “good luck!” and move on with my day. It isn’t about making them pay for it as much as it’s showing the researchers the value your IT staff provided.
So I built the tool I needed to close the gap.
The core insight
Show the list price even when the bill is zero.
If a PI’s HPC allocation is fully subsidized by a departmental grant or free tier access, they still see: List Price $2,400 / Discount -$2,400 / Amount Due $0. That line — the one most billing systems would skip entirely — is the whole point. The moment IT goes to the budget folks asking for $2M to refresh the storage array, someone’s going to ask “Is it worth it?” The zero-dollar statement is the answer. It makes the value of institutional infrastructure legible — for grant budgets, for annual reports, for the conversation that decides whether an upgrade gets funded next year.
Numbers as narrative, not as armor.
How it works
Everything flows through the FOCUS format — the FinOps Foundation’s open billing standard. AWS billing exports, Azure cost data, Slurm job records, storage utilization reports — if it can produce a CSV, OpenChargeback can ingest it. FOCUS is the common interchange; everything normalizes into the same shape before a single charge gets calculated.
Charges go through a two-stage review workflow. Close a billing period and it locks — reviewers can still adjust, PIs can still dispute. Finalize it and the numbers are permanent. That safety window between close and finalize is where institutional trust gets built. Nobody wants to argue about a charge they saw for the first time on a finalized statement.
The output is template-driven. PDF statements for PIs, emailed monthly. GL journal entries for finance, and a workflow to close out each month once the list of charges is received. CSV exports for anything else. Jinja2 templates, so whatever format your institution’s systems eat, you write a template for it. It fits into whatever you already have; it doesn’t try to replace it. Plus, templated text to copy and paste into your institutional agentic coder or web chat so it knows exactly where to look and what questions to ask you to customize it for your needs.
Right-sized by design
SQLite instead of Postgres, because I didn’t want to build a multi-tenant platform before anyone asked for one. SQLAlchemy underneath, so if someone does want to scale it up, that path exists. Python and Flask, no build step (if you don’t want one), no external services, no enterprise contract. 239 unit tests, and end-to-end instructional video production for all major app functions. The kind of tool a single research computing person can deploy, configure, and actually maintain — not the kind that requires a team to babysit.
The thing that became clear after getting the cloud providers figured out was that the same approach works for anything with usage metadata. Kubernetes clusters, Docker hosts, file storage, GPU allocations. If you can attach tags to a resource, you can generate usage invoices from it. The whole application is metadata-driven; the governance model is up to you. The app doesn’t need you to configure it or pre-stage your users — the source of all truth is the FOCUS imports, with all needed metadata (faculty names, email addresses, account numbers, etc) included via billing tag. Convention over configuration. Tag your resources when they’re created in the cloud, and everything else just works. Plus, if you’re into this sort of thing, you can create rules on your cloud platform of choice to enforce a certain tagging schema and get creative on how you monitor compliance. So many choices to make and dials to twist!
The other half
OpenChargeback answers “here’s what it cost.” Its companion, OpenResearchDataPlanner, answers the question that comes first: “what will this cost?” One tool for planning, one for accountability. Both built to be forked and owned — clone it, customize the config for your institution, run it.
I built these because I needed them. Some institutions may already have enterprise solutions in place, but if you don’t, these two projects are designed to help. Both are MIT licensed, giving you complete control. Good luck: we’re all counting on you.