Vendors & Customers — track who owes you and who you owe
We just shipped vendors and customers. With aging reports. With AP/AR settlement. With statements. And recurring transactions baked into every plan. This post is the honest version of what we built, why we waited this long, and what we deliberately left out of v1.
Why we waited
For two years we kept telling people Expensely is "not QuickBooks." That was honest and important — QuickBooks is a different product for a different user. Full double-entry general ledger, chart of accounts, payroll, tax filings, a small army of accountants who’ve built careers on knowing every corner of it. We didn’t want to be that. We still don’t.
But over the last six months a specific complaint kept showing up in our support inbox: I love Expensely, but I have no idea who hasn’t paid me yet. Or: I paid the printer last week. Or did I? I can’t tell from my transaction list.
What “vendors and customers” actually means in Expensely
A vendor is anyone you pay. A customer is anyone who pays you. Same data model, two roles — one contact can be both. (Your freelance designer who also rents you a meeting room? One contact, both roles ticked.) Each contact has a name, optional email/phone/address/tax ID, and a running list of every transaction tagged to them.
Settle in full, partial, or bulk
Every transaction now has a settled amount. Set it to the full amount when you receive payment. Leave it at zero when you’re still waiting. The contact’s outstanding balance updates instantly. Need to settle 12 invoices at once? Tick the boxes, hit “Settle selected,” done. The backend does it as one transaction — all or nothing, capped at 200 per call to keep things sane.
Aging buckets
0–30 days, 30–60, 60–90, 90+. The industry-standard buckets for a reason. Open Reports → Aging, see which customers are slipping past due, export to CSV, send a reminder. It also lets you see your own aging on the vendor side — how many of your suppliers are politely waiting.
Statements you can actually send
One button, date range, CSV or PDF, optional email-to. The statement includes contact details, tx list, totals, aging breakdown. Goes out via your existing mail integration. (Yes, you can send a vendor a list of every payment you’ve made them this quarter without leaving Expensely.)
Recurring transactions, free for everyone
We hesitated on this one. Recurring transactions is the kind of feature you’d normally gate behind a paid plan because it’s genuinely useful and the maths-on-paper is you should charge for it. We thought about it. We decided it’s a generic enough capability that gating it behind Team would feel mean. It’s free on every plan including the permanent Free plan.
On the Team plan you can also tie a recurring template to a contact (so the monthly rent transaction auto-tags to your landlord) and bake in a default settled amount (so the direct-debit rent is marked paid the moment it spawns). The cron runs once a day at 03:00 UTC. We catch up if your machine was offline. We stop when the end date hits.
A real walkthrough: Faisal’s grocery store
Faisal runs a mid-sized grocery store in Lahore. Fifty regular customers run tabs — some weekly settlers, some who pay once a month, a couple who keep meaning to come back. Eight suppliers deliver on Net-15 terms. Before Expensely, the entire operation lived in a paper notebook by the till. Once a month the totals didn’t reconcile. A few times a year a regular would “forget” they owed him and he’d quietly write it off, because chasing it would cost him the customer.
Day one in Expensely is twenty minutes of setup. He adds his top ten regulars as customer contacts — name and phone, nothing else. He adds his three biggest suppliers as vendor contacts. The rest he’ll add as they come in.
The daily flow is the part that matters. A customer takes goods worth Rs 4,500 without paying. Faisal opens the Expensely PWA on his phone, taps the customer’s name, taps + Add transaction, types the amount, leaves it unsettled. Twelve seconds, no notebook, no risk of a smudged page. That same customer comes back Friday with Rs 3,200 in cash. Faisal opens her, taps the unsettled tx, types Rs 3,200 into the partial-settle field. The remaining Rs 1,300 stays outstanding and her balance updates instantly — no separate ledger to keep in sync.
Every Sunday morning before he opens the shop, he checks /reports/aging. The 0–30 bucket is normal noise. The 30–60 bucket has two names he’ll mention next time they walk in. The 60+ bucket has one customer who is clearly drifting. He hits the statement button, picks a date range, and emails her a polite breakdown of every transaction and the outstanding total. She pays the following Tuesday. He didn’t have to argue or remember — the statement did the work.
The supplier side is the quieter half. When a delivery arrives unpaid, he logs the expense linked to that vendor and leaves it unsettled. Two weeks later when he actually pays, he marks it settled. Now his cashflow on the dashboard is honest, not optimistic. He stops over-ordering inventory because he can see, at a glance, what he actually owes this month versus what he thinks he owes.
What we deliberately didn’t ship in v1
- Invoicing. We’re not sending PDFs to your customers asking them for money. Yet. This is on the roadmap but it’s a different product motion.
- Payment processing. No Stripe-connect, no card capture. You record the settle when payment arrives by whatever means. We’re not a payment processor.
- Chart of accounts. Still no general ledger. Categories stay global. Vendors and customers don’t change that.
- CSV import of existing vendor lists. On the roadmap. For now, contacts can be created inline as you tag transactions — which is how most users build the list naturally anyway.
- Multi-currency on a single contact. Vendors and customers are scoped to your workspace currency. Cross- currency settle is a separate problem we’ll solve when it shows up in support tickets.
Pricing
Vendors, customers, aging reports, and statements are on the Team plan — $7/month per workspace (yes, that’s the same flat $7 we’ve always charged Team plan, no surprise add-ons). Recurring transactions are free on every plan.
For comparison: QuickBooks Online Simple Start starts at $30/month for one company. Wave puts settlement behind their Payments paywall. Most of our users were doing this in spreadsheets. They’re not anymore.
Try it
If you’re already on Team, the feature is live — new sidebar entries for Contacts, Recurring, and Aging. If you’re on Free or Solo, recurring is yours now, and you can upgrade to Team for $7/mo when you’re ready for the rest. See /vendors-customers for the feature page or /pricing for plan details.
Related reading
Try Expensely
If this article was useful, the product behind it is probably worth a look. Free forever for solo users.
Start free — no card