Tally reads your contracts, sends the invoices, and chases late payers by email. Your finance team signs off. Tally does the rest.
| Item | Qty | Amount |
|---|---|---|
| Platform, annual tier | 1 | $36,000 |
| Extra seats | 42 | $8,400 |
| API overage, 4.2M calls | — | $4,200 |
northwind_msa_v3.pdf, §4.2Hi Ana, INV-2041 for $48,600 is now 12 days past due. Your team asked for a PO number on Oct 12, so I added PO-77310. Can you confirm a pay date this week?
Finance teams at 600+ SaaS companies bill with Tally
Tally reads the contract once. From then on it bills, reminds and reports without a spreadsheet in between.
Pulls price, term, seats and payment terms from each MSA and order form.
Builds each invoice from the contract and your usage data. You approve the first ten.
Writes polite, specific emails from your domain. Answers questions about the bill.
Spots falling usage, lost champions and slow payers weeks before renewal.
One call turns a signed PDF into invoices, due dates and a chase plan. Every field links to the clause it came from.
import Tally from "@tally/node"; const tally = new Tally(process.env.TALLY_KEY); // Read the contract and build the schedule const plan = await tally.contracts.ingest({ file: "northwind_msa_v3.pdf", customer: "cus_northwind", chase: { tone: "warm", escalateAfterDays: 14 }, approval: "first_10", });
{
"id": "ctr_8fK2xQ",
"annual_value": 48600,
"payment_terms": "net_30", // §4.2
"invoices_scheduled": 12,
"next_invoice": "2026-11-05"
}
Here is INV-2041, start to finish. Each step waits for a reply and adapts to it.
Tally reminds the payer three days before the due date.
No payment yet. Tally checks if the invoice reached the right person.
The payer asks for a PO number. Tally finds it and reissues.
Firmer tone. Asks for a pay date. Copies your account owner.
Writes to the CFO and pings your team in Slack for a call.
“We closed the books four days sooner in our first quarter. Tally caught a seat true-up we had missed for two years.”
Tally runs in dry run mode until you say go.