Open Cap Table Format
Why I built OCF export into the cap table tool, and what carries across when you take a Hemrock cap table into Carta, Pulley, or any platform that reads OCF.
I added Open Cap Table Format (OCF) export to the cap table web builder because cap tables shouldn't be locked into the tool that built them. Build the model in Hemrock for free, then take it anywhere.
What OCF is
The Open Cap Table Format is an open JSON specification for cap tables, designed and maintained by the Open Cap Table Coalition. The coalition includes Carta, Pulley, Morgan Stanley Shareworks, AngelList, Equity Shift, Nasdaq Private Market, Mantle, Fenwick, Orrick, Goodwin, Gunderson Dettmer, Latham & Watkins, Perkins Coie, Wilson Sonsini, and others whose work touches cap tables daily.
The spec is public, well-organized, and packaged as JSON Schema files anyone can validate against. The official tooling repo at Open-Cap-Table-Coalition/OCF-Tools ships a reference parser and validator on npm.
A cap table in OCF is event-sourced. You don't get a snapshot; you get the full transaction log: every issuance, transfer, conversion, option grant, warrant, and ratio adjustment. The current state is computed by replaying the log. That maps directly to how the Hemrock cap table engine works, which made the export straightforward.
Why this matters
A founder builds a cap table once and lives with it for a decade. They use it to model their first round, share it with prospective investors, hand it to their lawyer for a term sheet review, and eventually migrate it into a managed cap-table platform once the company is real enough to use one. At each step the cap table should be portable, for reliability, transparency, and ease in switching between providers. OCF is the bridge that makes the move possible.
I offer OCF export in addition to Excel export. The point is to make the modeling work transferable. If you outgrow my tool, the data goes with you.
What gets carried across
Every event in the Hemrock cap table builder maps to one or more OCF transactions:
- Common issuances become
TX_STOCK_ISSUANCErecords, one per grant. - Priced rounds become a
Financinggroup plus aTX_STOCK_ISSUANCEper investor, aTX_STOCK_PLAN_POOL_ADJUSTMENTif the round added options, and aTX_STOCK_CLASS_CONVERSION_RATIO_ADJUSTMENTfor each preferred series that hit anti-dilution. - SAFEs and convertible notes become
TX_CONVERTIBLE_ISSUANCErecords with cap, discount, MFN, pre/post timing, and (for notes) interest math captured on the conversion mechanism. - Convertibles converting at a priced round become paired
TX_CONVERTIBLE_CONVERSION+TX_STOCK_ISSUANCEtransactions, with the new preferred shares linked back to the original convertible via security id. - Option pools become
StockPlanobjects plus aTX_STOCK_PLAN_POOL_ADJUSTMENTper top-up. - Option grants become
TX_EQUITY_COMPENSATION_ISSUANCErecords, with RSU vs option carried oncompensation_type. - Warrants become
TX_WARRANT_ISSUANCE. - Secondary sales become
TX_STOCK_TRANSFER.
Every transaction lands in Transactions.ocf.json. Stakeholders, stock classes, stock plans, and the issuer record live in their own files. A Manifest.ocf.json ties the package together, and every transaction carries a human-readable comment pointing back to the Hemrock event that produced it.
What doesn't carry across
OCF is a generous spec but it has opinions. A few Hemrock-specific concepts have no direct equivalent and get dropped or simplified on the way out. The OCF package surfaces these as comments on the affected transactions, so the recipient can see what was lost.
- Convertible
dilutionMode(existing-only vs all) has no OCF equivalent. The resulting share counts are preserved through the conversion transactions, but the choice itself is not represented in OCF. - Fixed-percentage SAFE variants (
post-money-fixedandpost-money-fixed-after) export as regular post-money cap SAFEs. The share count comes out right, but OCF cannot represent a SAFE that locks at a percentage of post-money rather than a price-based cap. If the recipient re-runs the math from the converted shares, they get the same answer. - Pro-rata on priced-round investments is dropped. OCF has a
pro_rataflag on convertible issuance but not on priced-round investments. The resolved investment amount is preserved. - Option-pool % targets resolve to a fixed share count before export. The "top up to 10% of post-money FD" semantic is not carried; the resulting top-up shares are.
- Anti-dilution policy ("broad-based weighted average" vs "full-ratchet") is recorded by Hemrock but only the resulting conversion ratio crosses into OCF. The spec is explicit about this: anti-dilution math happens outside OCF, and the format only captures the outcome.
How to use it
Open any saved cap table and click the OCF button next to the Excel button. You get a <your-model-name>.ocf.zip containing the OCF package plus a README.txt listing the per-model limitations. Unzip it, hand the files to your destination platform's importer, done.
What's next
OCF import is in process. Once that ships, you'll be able to take an OCF package from any platform and load it into the Hemrock builder, run scenarios against it, and (where the math survives) hand it back out. Coming soon.
Going deeper
- Open Cap Table Coalition format page and GitHub spec.
- Equity, SAFEs and Convertible Notes, Option Pools, Anti-Dilution, Exit Waterfalls — the Hemrock concept docs the OCF mapping translates from.
- The cap table web builder — where the export lives.