Bulk Operations in Hisabi — Send, Mark Paid, Cancel, Delete in One Click
Stop clicking the same menu 50 times. Bulk-select invoices, expenses, or clients and act on the lot. Quietly the most-requested feature of the year — now shipping.

Power users have asked for this for months. If you issue 30+ invoices a month, the difference between clicking each one and selecting them all is the difference between a 30-minute Sunday and a 5-minute one. Bulk operations now ship across invoices, expenses, and clients.
What's Available
On /invoices, select rows and act in one click:
- Bulk Send — moves DRAFT invoices to SENT and queues PDF + email for each, isolating per-invoice failures so one bad row doesn't block the rest.
- Bulk Mark Paid — sets status to PAID with today's paidAt for everything eligible (skips already-paid and cancelled rows).
- Bulk Cancel — moves selected invoices to CANCELLED. Skips paid invoices automatically.
- Bulk Delete — hard-deletes the selected rows after a confirmation dialog. Use with care; there is no recycle bin.
On Expenses and Clients
On /expenses, bulk-select to delete in one go — useful for cleaning up test data or re-importing a corrected CSV.
On /clients (shipped this week), bulk-select to delete inactive clients. Their invoices are not deleted; they're simply unlinked, so historical revenue stays intact.
Designed Around Selection
Every list view now has a checkbox column on the left. Select all on a page with the header checkbox. Filter first, then select-all to act on the filtered set. The selected count is shown in a sticky action bar that appears only when at least one row is selected — out of your way otherwise.
Safety Rails
Destructive actions (Delete, Cancel) trigger an explicit confirmation dialog showing the exact count. Bulk endpoints are capped at 100 IDs per call to prevent runaway operations. Every bulk action goes through the same authorisation check as the single-item version, scoped to your account — there is no cross-account leakage even if you somehow guessed someone else's ID.
Failures are reported per row. If 47 of 50 invoices send successfully, you get a green toast for the 47 and a yellow toast naming the 3 that didn't, with the reason. No silent partial successes.
What's Next
Bulk export to CSV (selected rows only), bulk re-issue (clone selected drafts with today's date), and bulk currency conversion are next on the list. If there's a bulk action you want and don't see, write to us — most of these shipped because someone asked.
More on the workflow this enables: The Five-Minute Month-End Close.