Finance & SaaS SpendSaaS Spend Tracking
On this page0

Unfamiliar word? See Glossary: words used in these docs. Looking for the tasks in order? Begin at Start Here.

Reference

Included in: Advanced. Which Plan Includes What

SaaS Spend Tracking

The SaaS Spend tab in Finance turns your committed invoices into an application-by-application view: what each app costs, whether it is still being paid for, and which renewals are coming due — all derived from data already on your instance, with no external calls.

Per-App Budgets That Gate Approvals

Give any app an annual budget and it becomes a vendor-scoped budget row shared with the Budgets tab. Year-to-date spend is measured against it, and an over-budget app blocks approval unless an explicit, audited override is given.

App: Zoom  ·  Owner: (unset)

Annual budget: $18,000  ·  YTD: $19,240 (107%)

Last invoice: 112 days ago → flagged UNUSED

Over budget → approval blocked (override required)

What The Tab Surfaces

Every signal below is computed from invoices Zonitix has already ingested — it does not log in to Zoom, Salesforce or GitHub to read their usage. An app is called unused when it once had real spend but nothing has been invoiced against it for 90+ days: a candidate to cancel or review, not proof a licence is idle.

For the usage half of that picture, SaaS Discovery (included from Team) reads sign-in signals from your connected identity providers and feeds per-app active-user counts into this Spend view — so reclaimable spend is measured against people who actually sign in, not guessed.

Renewals Timeline

Upcoming contract renewals are bucketed into exclusive windows — due in ≤30, 31–60, and 61–90 days — each with the committed spend at risk, so an auto-renewal is seen before it locks in.

Unused-App Flags

Apps with spend but no invoice in 90+ days are flagged for review, alongside a 90-day-vs-prior-90-day spend trend per app to show which costs are climbing.

Missing-Owner Governance

A count of apps that carry spend but no assigned owner — the accountability gap that lets a subscription outlive the person who bought it.

Duplicate Cleanup

Detects duplicate payments (same vendor and invoice number, or same vendor and amount within 30 days) and lets you merge duplicate vendor records into one canonical app. It does not detect functional overlap — it will not tell you that Slack and Teams do the same job.

Billing Connector Catalog

The catalog lists eight providers. A connector pulls billing and usage data so spend lands in one place — it never touches money or a bank. Only AWS and Microsoft Azure/Entra feed billing data today. The other six have no billing feed yet: if one is connected as an identity hook it shows as identity only and contributes no spend, and connecting it does not turn on a billing feed. In the app, green means billing data is flowing, blue means identity only, and grey means not connected.

Amazon Web Services

Live

Azure / Entra (incl. M365)

Live

Google Cloud

No billing feed yet

Google Workspace

No billing feed yet

Zoom

No billing feed yet

Slack

No billing feed yet

GitHub

No billing feed yet

Other SaaS via SCIM

No billing feed yet

If something here is not working as you expect, start with When something goes wrong.

The plain explanation is above. This part is for IT and developers: the exact settings, permission names, API addresses and data fields behind it. Closed: select the heading above to open it. While it is closed, your browser’s find-on-page (Ctrl+F or Cmd+F) does not search this part.

How Detection Works

The view is derived server-side from committed finance documents grouped per canonical vendor — no separate seat database and no vendor round-trip. The two rules that do the reclaim work:

# Unused-app flag: spent before, silent for 90+ days

unused = last_invoice_age_days > 90 and committed_spend > 0


# Renewal windows are exclusive — an app lands in the first it fits

for window in (30, 60, 90):

if 0 <= days_until_renewal <= window:

bucket[window].count += 1

bucket[window].amount += committed_spend # $ at risk

break

Seats, Utilisation And Reclaimable Spend

  • Seats come from invoice extraction: the largest seat count read from that app’s invoices. An app whose invoices carry no seat count shows none.
  • $/Seat is the app’s spend divided by its seats. Usage is active users (pushed from SaaS Discovery) as a percentage of seats.
  • Reclaimable is idle paid seats × cost per seat: (seats − active users) × (spend ÷ seats). It is blank unless an invoice carried a seat count, the app has spend, Discovery has pushed usage for it, and seats exceed active users.
  • The Reclaimable by department strip rolls that figure up by the app’s owner department, and you can select several apps and assign an owner to all of them at once.

Setting an app’s annual budget writes a vendor-scoped budget row keyed on the canonical vendor name; the same row appears in the Budgets tab and gates over-budget approvals across Finance.

Related reference