Nobody can say how many tools the company pays for. Here is the model behind a tracker that can, the prompts to build it, and what it takes to run it.
Your private status link is on its way to your inbox.
A SaaS spend tracker needs four things: an inventory of every subscription with an owner, the contract terms including renewal and notice dates, seat counts compared against actual usage, and a renewal calendar that gives you enough warning to act. The number that saves money is not total spend, it is unused seats and auto-renewals nobody diaried. Most companies discover both after the renewal has already happened, which is why the notice date matters more than the renewal date.
Software spend
1.42M
Annual spend
87
Tools in the register
312K
Unused seat value
6
Notice deadlines in 60 days
The three highlighted tools have the worst seat usage: Zoom 540 of 600, Notion 190 of 400, Figma 41 of 120. That gap is 312K a year.
You run finance, procurement or IT, and you have been asked what the company spends on software. You know the big contracts. What you want is the long tail, the renewal dates, and evidence about which seats are actually being used.
What you do with it across a year, and the two moments it saves you money.
Vendor, product, cost, contract dates, notice period and a named owner. An entry with no owner is a finding, not a gap.
The app derives the notice deadline from the contract end and the notice period, and sorts everything by that instead.
Seats bought against seats assigned against seats active in the last 90 days. The gap between the last two has a price on it.
Three configurable warnings before each notice deadline, to the owner, so a renewal becomes a decision instead of an event.
Recurring card and expense charges that match no subscription get surfaced for review. This list keeps producing results.
Renew, renegotiate, downgrade or cancel, with the usage evidence frozen at the time, so next year the reasoning still exists.
A spend tracker is not a spreadsheet of invoices. It is four parts, and the fourth is the one that turns the data into a saving.
Every subscription: vendor, product, what it is for, the team using it, a named owner, and the contract reference. Ownerless entries are a finding, not a gap in the data.
Annual cost, billing frequency, currency, term start and end, auto-renew yes or no, notice period, and where the contract document lives. The notice period is the field most trackers omit and most renewals turn on.
Seats purchased against seats assigned against seats actually active in the last period. The gap between the second and third is the recoverable money.
Ordered by notice deadline rather than renewal date, with enough lead time for the owner to decide, gather usage evidence, and negotiate.
These prompts start from a Helix project, which is what handles sign-in, credentials and hosting. Start with Helix
Paste these into Claude Code, Codex or Cursor in order. Each one leaves you with something that runs, so you can stop after any step.
One list, with the field most trackers leave out.
In this Helix project, build me a SaaS spend tracker.
One record per subscription: vendor, product, what it is for, the owning
team, a named owner, annual cost, currency, contract start and end,
whether it auto-renews, the notice period in days, and a link to the
contract.
Now the important bit. Derive a notice deadline, which is the contract end
minus the notice period, and treat that as the date that governs
everything in this app. Sort by it, warn on it, report on it. A calendar
built on renewal dates shows me contracts I can no longer cancel, which is
an interesting fact and a useless one.
Let me import from CSV with the column mapping in one file I can edit, and
flag any subscription with no named owner. Ownerless tools are the ones
that renew forever, because a shared inbox never feels responsible for
cancelling anything.
I sign in through Helix, so do not build a login page. Read the signed-in
user from the runtime. And do not put any key or connection string in the
code: if this needs to reach another system, tell me and I will create the
connection in my workspace. Worth knowing. Notice deadline as a first-class derived field is the single most useful decision in this build.
Where the money actually is.
Now add usage, because total spend is a board number and unused seats are
an actionable one.
Per subscription, let me load who has a seat and when they were last
active. Then show seats purchased, seats assigned, seats active in the
last 30, 60 and 90 days, and the annual value of the difference.
Give me a reclaim list: assigned seats with no activity past a threshold I
set, grouped by tool, ranked by what reclaiming them is worth.
And flag seats still held by people who have left, if I give you a list of
current staff. That list should be empty. It rarely is, and it is both a
cost problem and an access problem. Turning a renewal from an event into a decision.
Build the renewal calendar next, ordered by notice deadline.
For the next twelve months: vendor, annual cost, owner, and days
remaining. Let me set three warning points, say 120, 60 and 30 days
before the deadline, each one notifying the owner.
Highlight anything auto-renewing that is already inside its notice window.
Those are decided, and somebody should know that before the invoice
arrives rather than after.
When a renewal is decided, record the decision, who made it, the date, and
the usage evidence as it stood at that moment. Six months later nobody can
reconstruct why a renewal looked justified, and this is the fix. Worth knowing. Freezing the usage evidence at the moment of decision is what makes next year's conversation possible.
Shadow spend, and the overlap nobody notices.
Two last reports.
Let me import card and expense transactions and match them against known
subscriptions by vendor name, allowing for the fact that the names will
not match exactly. Anything recurring that matches nothing becomes a
candidate for the register. Show me a review list rather than adding them
automatically, because a recurring charge is not always a subscription.
Then overlap: several subscriptions tagged with the same purpose, which is
usually two teams buying the same category separately. That one tends to
find the single largest saving and it needs nothing more than the purpose
field I filled in at the start. The step that turns a working prototype into something with your data in it.
Now connect it to the systems we actually run, so it works on real data
rather than the rows you seeded.
Anything in angle brackets is a placeholder. Swap it for whatever we use
instead, and have the app name the connection it wants rather than assume
a vendor, so changing my mind later is a config change and not a rewrite.
<Okta>. Read who has an account in each tool and when they last signed in,
which is where unused seats show up.
<NetSuite>. Pull recurring card and invoice transactions, which is how you
find the tools nobody registered.
<each vendor admin API>. Read seat counts and last-active dates for the
tools worth the effort.
<Google Calendar>. Block the notice deadline in the owner's calendar, so
the decision has time in it rather than an alert on the day.
<Coupa>. Read contracts and renewal terms rather than retyping them out of
PDFs.
<Slack>. Warn the owner at each lead time before a notice deadline.
<Snowflake>. Keep a dated snapshot each month, so a renewal-over-renewal
price rise is visible rather than something you notice once.
Only write where I have said to write. Everything else is read only.
Do not write a key, a token or a connection string anywhere in the code,
and do not ask me to paste one. Tell me which connections you need and I
will create each as an authentication in my Helix workspace. Reference
them by alias. Worth knowing. Every name in angle brackets is a placeholder for whatever you run. Helix holds the credential as a workspace authentication, so the app references an alias and never the secret itself.
The last step of every build: a URL, and the right people on it.
Deploy my app. Worth knowing. Your assistant runs helix deploy underneath and the app comes back as a URL. Contract terms and per-person usage are sensitive, so set Access Control before sharing: owners see their own tools, finance sees the whole register.
The register is only accurate if it is checked against what the systems actually report, rather than what somebody typed in.
Okta
Read who has an account in each tool and when they last signed in, which is where unused seats show up.
NetSuite
Pull recurring card and invoice transactions, which is how you find the tools nobody registered.
Each vendor admin API
Read seat counts and last-active dates for the tools worth the effort.
Google Calendar
Block the notice deadline in the owner's calendar, so the decision has time in it rather than an alert on the day.
Coupa
Read contracts and renewal terms rather than retyping them out of PDFs.
Slack
Warn the owner at each lead time before a notice deadline.
Snowflake
Keep a dated snapshot each month, so a renewal-over-renewal price rise is visible rather than something you notice once.
Each line says whether the app reads, writes or both. Anything not described as writing should be read only.
Named systems are the ones most teams actually run, not a list of the only ones that work. Swap in whatever you use.
Each connection is an authentication in your Helix workspace, referenced by alias. The app names the connection it wants and never holds the credential, so nothing here ends up in your code and any of it can be rotated or revoked without a redeploy.
The build gets you a working tracker. It holds contract terms, vendor data and per-person usage, and it will be quoted in renewal negotiations, so it needs running properly.
AI Deployment
One command takes the app from your assistant to a live address, so the people who need it get a link rather than instructions for running it locally.
App Security
Contract terms and per-person usage are sensitive. SSO means people sign in with their existing account, and access is scoped so an owner sees their own subscriptions while finance sees everything.
App Security
Pulling seat activity or card transactions needs real access to those systems. Granting it to the app rather than pasting keys into it means credentials can be rotated or revoked without a redeploy.
App Registry
Every app carries a named owner and an entry IT can see, so the tool does not become nobody's problem when the person who built it changes role.
Cost Management
Per-app spend visibility, with budgets and caps, so an internal tool cannot quietly become a line item nobody can explain.
It is a single inventory of every software subscription the company pays for, with cost, owner, contract terms, seat usage and renewal dates. Its job is to make renewals a decision rather than an event that happens to you.
Because an auto-renewing contract with a 90-day notice period is effectively decided three months before it renews. A calendar built on renewal dates will show you contracts you can no longer cancel.
Reconcile recurring card and expense transactions against the known inventory. Anything recurring that matches no subscription is a candidate. Review them rather than importing them automatically, since a recurring charge is not always a subscription.
Unused seats and overlapping tools, in that order. Total spend is a reporting number. Seats assigned but inactive for 90 days have a specific annual value attached, and two teams paying separately for the same category is usually the largest single line.
A named person, not a team. Ownerless tools are the ones that renew forever, because a shared inbox never feels responsible for cancelling anything. Treat a missing owner as a finding the tracker reports.
Yes. The prompts here are written for Claude Code, Codex or Cursor and stage the build, so you can stop after any of them and still have something useful. The judgement calls are your inactivity threshold and your lead times.
Finance
Show budget owners where they stand before the month closes: committed versus actual, variance by owner, and a forecast they can act on. Prompts to build it, and what it takes to run it.
Finance
Route purchase requests by amount and category, hold an approval trail finance can audit, and stop chasing sign-off in email. Prompts to build it, and what it takes to run it.
IT and Operations
One record per device and licence, with an assignment history, a lifecycle, and a reconciliation against what your systems actually report. Prompts to build it, and what it takes to run it.
Last reviewed September 2026.
Helix is the governed runtime for AI-built apps. Deploy what you build, put SSO in front of it, connect it to your systems with managed credentials, and give it a named owner.
Your private status link is on its way to your inbox.