Invoicing Annual SaaS Contracts and Renewals, Step by Step

· 6 min read

An annual SaaS invoice is not a monthly charge with an extra zero. It is a single document, often five or six figures, that has to clear a procurement queue, match a purchase order to the cent, hit the customer's fiscal calendar, and arrive again twelve months later without anyone forgetting. Get one field wrong and a 45,000 dollar invoice sits in AP for six weeks while your CFO refreshes the bank feed.

Here is the workflow that actually works, from the moment sales says "they're in" to the renewal invoice going out next year.

Before you invoice: pin down what the contract actually says

Pull the signed order form and read it as if you were AP. You are looking for seven things: legal billing entity (not the trading name), billing address, AP email or vendor portal, PO requirement, contract start date, billing frequency (annual upfront is the default but some deals are annual paid quarterly), and the exact currency. If any of these are missing, the deal is not ready to invoice. Email the account owner and get them on record.

If the customer signed a quote with an accept step, most of this is already captured. The accepted quote becomes the source of truth for line items and pricing on the invoice. If sales sent a Word doc instead, you are reconstructing from email threads, which is where mistakes start.

Step 1: build the invoice from the order form

Open a new invoice and copy the line items directly from the order form. For an annual SaaS deal that usually means one or two lines: the subscription itself ("Acme Platform, Growth tier, annual subscription, 1 Jan 2025 to 31 Dec 2025") and any one-time fees (onboarding, data migration, premium support). Spell out the service period in the line item description. AP teams match invoices to POs on dates, so "annual subscription" alone is not enough.

Set the invoice date to the contract start date or the date sales told the customer billing would begin. Set payment terms to whatever the contract says, usually Net 30 or Net 45 for mid-market and up. If you are unsure what those terms mean in cash flow terms, the cash flow side of Net 30 is worth a read before you commit.

Lock your invoice number format before you send the first one. An annual SaaS book of business with renewals, co-terms, and the occasional credit note gets ugly fast if your numbering is ad hoc. A scheme like INV-2025-0042 keeps things sortable and audit-friendly.

Step 2: send the link, not just a PDF

Email the invoice link to your primary contact (usually the buyer or a finance ops person on their side) and cc the account owner. The recipient opens the link in a browser. They do not need to sign up.

Two things happen next that save you a week of back-and-forth. First, the customer adds their PO number directly on the invoice. No "can you reissue with PO 88234 at the top" email. Second, if their AP team lives in a different inbox or a vendor portal, the contact forwards the link to AP themselves. This is the part of the workflow that Stripe Billing won't do for B2B SaaS: it assumes the cardholder and the approver and the AP contact are the same person. For a 60,000 dollar annual contract they almost never are.

If the customer's AP team insists on a PDF for their system, download it from the invoice. The link stays live either way, and any later edits are reflected in both.

Step 3: handle the inevitable change request

Expect one of these within 48 hours of sending: wrong billing entity (their parent company pays, not the subsidiary that signed), missing PO line, currency mismatch (they want EUR not USD because the contracting entity is Dutch), or a request to split the annual into two semi-annual invoices.

Billing entity, address, and AP contact edits the customer can make themselves. You get notified and can revert if something looks wrong. Anything that changes the money, currency, pricing, payment terms, due date, comes in as a formal change request you approve or decline. Approving creates a new version (V2), and the previous version is preserved. If you want the longer version of why that matters, see how to handle change requests without chaos.

Step 4: track to approved, then leave it alone

The invoice moves through Sent, Viewed, Change Requested, Approved. Once approved, that version is locked permanently. "Approved" is the signal you can give finance that the receivable is real. Watching the status beats refreshing your bank feed.

If the invoice has been Viewed but sits there for ten days with no PO and no movement, that is when a follow-up matters. A short note to the buyer, copying the AP contact, citing the invoice number and the agreed terms. No drama. The follow-up plan for an unmoved invoice covers the cadence.

Step 5: set the renewal reminder the day the contract starts

This is the step most teams skip and regret. The moment the annual invoice is approved, put a calendar reminder 60 days before the contract end date, and a second one at 30 days. The 60-day reminder is for your customer success team to confirm the renewal is happening and whether the customer wants to add seats, change tier, or co-term with another contract. The 30-day reminder is for you to issue the renewal invoice.

For the renewal invoice itself, do not just clone last year's. Confirm three things first: has the legal entity changed (mergers and rebrands happen), is the PO process the same (some customers move from PO-not-required to PO-required mid-year), and is the price right (any auto-escalator from the contract, like a 5 percent annual uplift, needs to be on the line item). Then issue the new invoice with a new invoice number, dated to the new service period.

Co-terms are where this gets fiddly. If a customer added 20 seats six months into the year, you likely issued a pro-rated invoice for the partial period. At renewal, those seats roll into the full annual at the standard rate. The line items on the renewal should reflect the combined seat count, not two separate lines that look like an upsell.

What this workflow costs you

About fifteen minutes per new annual invoice once your template and numbering are set up, plus the renewal reminders. The customer-side edits and AP forwarding remove most of the email overhead that usually eats half a day per deal. If you want to wire this into your billing automation or your CRM, the REST API and MCP server let you create invoices, watch for the Approved status, and trigger renewals programmatically. Start your next annual invoice on the create invoice screen and you will see where each of these steps lives.

Send an invoice your customer can actually respond to

JupiterInvoice lets recipients add PO numbers, update billing details, request changes, and approve for payment, all from a private link. No account needed on their side.

Create an invoice