# Spend management software

> A budget reserves money at checkout and settles it on payment. Released if the order is cancelled or abandoned. One currency per budget, no double counting.

Updated 2026-11-06. Source: https://atta.sh/spend-management

Spend management software tracks what a company has committed and what it has paid against a budget. In Atta, checkout reserves the amount and the store's payment confirmation settles it. A cancelled or abandoned order gives the reservation back, so the budget shows what's actually left.

## Committed and spent are different numbers

A budget that only counts paid orders lets a team overspend on orders placed but not yet charged. A budget that counts every cart blocks money that was never spent. Atta tracks both.

> **Atta:** Operations has $4,200 left this month. This order is $640, so it'd leave $3,560 once paid.

Here is what happens to a $640 order:

| Moment | Budget effect |
| --- | --- |
| Checkout is handed off | $640 reserved |
| The store confirms payment | Reservation kept, now spend |
| The order is cancelled | $640 returned |
| A payment arrives after a release | $640 held again |
| Nothing happens for too long | Released by a sweep |

A checkout reserves the budget and payment settles it. Atta never decrements a budget as if a handoff were a payment.

## How Atta learns what the store did

The store reports to a webhook, which is verified with an HMAC signature before anything reads it. Atta matches the event to the order on the cart token Shopify assigns. The attribute Atta stamps on the cart at handoff is still required, but it's only a hint, because a buyer can edit it.

- `paid` keeps the reservation.
- `cancelled` gives it back.
- A payment after a release holds the money again.
- The first event pins the store's order id. If a later event's total differs, it's logged at error level. If it's higher than the row's total, the difference is held too.

Two buttons on the orders page, one to mark paid and one to release, cover a store that never reports. A sweep releases checkouts nobody answers: it runs when pages load and hourly on a schedule.

## Budgets by team and project

A request's cost centre defaults to the requester's team, and finance can set a GL code. A budget ladder shows who approves what at each amount.

A project can also have a budget, but that one is a plan, not a control. It's measured against spend read from orders and against the items shortlisted for the project, and the agent is told the figures. It doesn't gate a purchase. The workspace budget that gates spend is the one the reservation runs against.

## One currency per budget

A budget refuses a spend in a different currency from its own. The spent total is one counter, and subtracting a euro amount from a dollar budget one for one would make the cap wrong. Multi-currency budgets would need a counter per currency. Until that exists, the refusal is deliberate.

## Cards

With a card program on, each order gets a single-use virtual card capped at the reserved total. For a card order, the card's own events are the only thing that moves the budget. The store's webhook moves status. The card is cancelled before a reservation is released, so a released budget can't be spent by a live card.

## Analytics

The queue shows figures for the whole workspace: waiting on you, open, past needed-by, approved and not ordered, and exceptions. Each figure links to the filtered table that lists those rows, so the count and the list can't disagree. Tables export to CSV.

Atta is in an invite-only beta and is free during it. [Purchase approvals](https://atta.sh/purchase-approvals) covers the step before the reservation, and [virtual cards](https://atta.sh/virtual-cards) covers the card.

## Questions

### What is spend management software?

Software that tracks company spending against budgets, usually with approvals, cards and reporting. The useful distinction is between money committed and money actually spent.

### When does a budget go down?

When checkout reserves the amount. It becomes spend when the store confirms payment, and it's returned if the order is cancelled or abandoned.

### What happens to an order the buyer never pays?

A sweep that runs on page loads and hourly releases checkouts nobody answers, which gives the reservation back.

### Can a budget hold more than one currency?

No. A spend in a different currency from the budget is refused, because one counter can't hold two currencies without lying about the cap.
