

TL;DR: A Purchase Approval Coworker took 53 software purchases, resolved every buyer to their reporting manager, and built five approval tickets with full line-item detail and partial-rejection support. It held back six purchases it refused to route. Two of the six were not approval problems at all.
Month end. The purchase export lands.
A spreadsheet of everything the company bought on cards and subscriptions since the last close. Slack seats, Zendesk, Miro, GitHub Copilot, Grammarly, Notion, Adobe, a Zoom Pro here, a 1Password Teams there. Individually trivial. Hundreds of rows.
Now the work starts, and none of it is finance work.
Download the export. Consolidate it, because it arrives in more than one place. Look up who each buyer reports to, person by person, against the directory. Split the rows by manager, then by employee, then again by cost center so the coding is right. Copy each manager’s block into its own message. Spell out what each line actually is, because a raw product code means nothing to the person approving it. Send them, one at a time. Wait. Chase the half who do not reply, because this is blocking the close.
Then next month, do it again.
This is a skilled finance professional spending days as a human formatting layer. And the worst part is what that formatting produces at the other end.
Sarah Owen gets one of those messages. Fifteen purchases, USD 812.40, across five of her people.
She recognizes about four of them. Does Andrea need Zendesk Suite at 55 dollars, or does the team already pay for it somewhere else? Is John Wise’s LinkedIn Sales Navigator at 99.99 standard for his role? Three Miro licenses for Cathy.
Answering any of that properly means asking five people what they bought and then asking Finance whether the company already owns it. That is an afternoon. She has four minutes and a close to unblock.
So she approves all fifteen.
All that consolidating and splitting and pasting, and the control at the end of it is a signature. The process offered two options: approve everything, or start an argument she does not have time for. She took the rational one.
Now look at what that signature actually covers. From the same estate: four Figma licenses already approved once, a Zoom Pro renewal for an employee who has left, an Asana Premium purchase for a buyer with no manager on record. Paste them into a batch with 47 other rows and they get signed along with everything else. The audit trail certifies all of it as reviewed. Approval that launders the errors the control exists to catch is not control. It is paperwork with a signature.
Ticket APSER-12569. The Purchase Approval Coworker read a CSV of 53 purchases attached to the request. 102 steps.
It resolved every buyer to their reporting manager using the directory, grouped the purchases by manager, created one approval ticket per manager linked back to the parent request, and started the approval workflow with the correct approver already set.
Cathy Boyer, 10 purchases, USD 396.96. Kelli Martinez, 10 purchases, USD 362.45. Justin Fuller, 11 purchases, USD 1,535.93. Patricia Anderson, 12 purchases, USD 353.96. James Morton, 10 purchases, USD 1,249.96. Fifty-three purchases, USD 3,899.26 in total.
Download, consolidate, split, split again, paste, spell out, send. That entire sequence is now one ticket.
Each manager’s ticket opens with the count and the amount in the subject line, so the size of the ask is visible before opening anything. Inside is the full table: purchase ID, employee, product, vendor, quantity, amount, cost center. Slack Business+, Zendesk Suite, 1Password Teams, GitHub Copilot, Grammarly Business, LinkedIn Sales Navigator, Notion, Adobe Creative Cloud. The actual things people bought, itemized, with the total at the bottom. The rows are attached as a CSV so the manager can sort them without asking someone to resend the file.
One line tells the manager why this is theirs: the reporting manager for these employees per the directory. That single line prevents the most common reply an approval request gets, which is “why is this with me.”
And an instruction for partial rejection. Approve to clear the list, or reject and name the line that is wrong, and Finance reissues the rest.
That instruction changes what Sarah does. If rejecting John Wise’s Sales Navigator means bouncing all fifteen purchases and making someone rebuild the batch by hand, she will never do it. Make refusing one line cheap and she has a third option between rubber stamp and argument.
Six purchases did not go to any manager. They came out in their own list, each with a stated reason.
Four Figma purchases, for four different people, already approved. Routing them again would have asked a manager to approve the same spend twice.
One Zoom Pro purchase for Marcus Feld, a separated employee. Someone who has left the company still had a purchase moving through the pipeline.
One Asana Premium purchase with no manager on record. Nobody to route it to.
Only the first category is an approval problem. The other two are data problems wearing an approval costume. A purchase for someone who has left tells you offboarding did not reach the purchasing system, and that is unlikely to be the only place it did not reach. A purchase with no manager tells you the directory has a hole, and that hole will block every future approval for that person, not just this one.
An automation that forced all 53 through would have produced a cleaner-looking result and buried both of those signals. Instead they are sitting in a list with names attached, which is the only form in which anyone fixes them.
The Coworker did not approve anything. All five tickets are still waiting on a human. Approving spend is a decision with a name and a paper trail, and it should stay with the person whose name it is.
None of this makes anyone read the line items carefully. It only removes every excuse not to.
Disclaimer: Demo run in a lab environment, not production. Manager resolution was clean because the directory was clean — a messier directory produces a longer exceptions list, not better routing. Validate outcomes in your own environment.