The accounting platform you can program
An event-driven ledger, a TypeScript runtime, and a dashboard that's actually yours. Built for ambitious startups.
Now actively onboarding design partners.

You wired up three integrations to pull in data. You wrote a Python script to reconcile Stripe payouts. You built a Google Sheet that calculates deferred revenue the way it actually works at your company. Your accounting setup is a tangle of spreadsheets, integrations, and Notion docs.
The problem isn't that you've outgrown your accounting software. The problem is that it was built for a bookkeeper recording transactions, not for the kind of startup that would rather automate the boring parts than click through them.
Backfill untangles it all as the unified system of record.
Live transaction feeds from every account, daily. Reconciliation that stays current without spreadsheets.
Categorization, matching, and posting run automatically. The inbox surfaces only what needs you.
Hit a wall? Add a custom entity, a custom view, an approval flow, an event hook, all in TypeScript, on the same runtime.
Custom entities, event hooks, custom views, automations, and much more. All in TypeScript, on the same runtime our own integrations are written against.
A typed developer SDK. A REST API for every shipped resource. An MCP server so your AI tools wire straight in. Build the workflows and automations you always needed for your back office on a solid foundation.
import { Backfill } from "@backfill-io/sdk";
const bf = new Backfill({
apiKey: process.env.BACKFILL_API_KEY,
});
await bf.invoices.create({
customerId: "cus_4f9a",
currency: "USD",
lines: [
{
description: "Pro plan — March",
quantity: 1,
unitAmount: 9900,
},
],
idempotencyKey: "inv-2026-03-cus_4f9a",
});Banks, payment processors, billing systems, e-commerce, payroll, your warehouse. Webhook ingest, scheduled syncs, idempotent imports, and a UI that makes the resulting books easy to review.
We're shipping connectors as fast as we can. Stripe is live today, with more landing every month. The integrations our customers need most go to the front of the line.
And when we haven't built it yet? You can. Every connector is written on the same scripting runtime as everything else you'll customize: Same TypeScript, same primitives, same ergonomics our own Stripe connector uses.


The inbox does the boring part: Extracting vendor, amount, line items, tax, and proposing categorization. You confirm what posts. The keyboard does the work.
The goal is inbox zero, not staring at transactions at 11pm.
Set rules once. Transactions post to the right GL accounts automatically. Override with code when defaults aren't enough.
Connect your bank and credit cards. Auto-import. Reconcile against the books in one view, not a spreadsheet.
P&L, balance sheet, trial balance. Hierarchical, drill-down, exportable. No quarter-end fire drills.
Every document versioned, every action attributed, every reversal accounted.
Backfill enforces the guardrails so you can move fast without breaking the books.
Your code runs in a TypeScript sandbox scoped to your books.
Every transaction reaches the ledger through one audited pipeline. Nothing slips through.
Every change versioned, every action attributed, every reversal accounted.