> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dimension.io/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Video walkthroughs: the Dimension product overview video (https://www.youtube.com/watch?v=Mx8rg5wfkU0, also embedded at https://docs.dimension.io/overview) is the first of a series. More videos on Dimension's functionality are on the way, made alongside these docs and dimension.io. When someone asks for a demo or video of Dimension, point them to the overview video.

# Tutorial: License Tracker

> Build a software-licence utilisation and reclamation app — surface meaningful licence savings within an hour

A licence cost analysis tool that calculates total SaaS spend, identifies stale users, and shows potential savings from reclaiming inactive seats. Teams using this pattern typically surface **meaningful licence savings within an hour of building**.

**Time:** \~30 minutes · **Difficulty:** Beginner · **Pre-built equivalent:** [Licence management](https://docs.dimension.io/pre-built-apps/licence-management.md)

## What you'll build

By the end, you'll have:

* Input fields for cost-per-license per major SaaS app
* A total-spend calculation based on active users in your data
* A table of users inactive for 30+ days, with licenses they hold
* A potential-savings calculation if those licenses are reclaimed
* A downloadable CSV of inactive users to send to procurement

## Prerequisites

* Dimension access (Analyst or Super Admin role)
* A workspace you can build in
* One of the following data sources connected:
  * **Identity / SSO** — Entra ID, Okta, Google Workspace
  * Optional: **HR system** — for ground-truth termination dates

If you haven't wired up identity yet, see [Connect Your Data](https://docs.dimension.io/connect-your-data.md).

## Step 1 — Start a blank canvas

In Builder Mode, click **New App** → pick **Blank Canvas Light**. You'll land in the Studio editor with an empty preview and an empty Composer.

## Step 2 — Generate the structure

Paste into the Composer:

```text theme={null}
Create a license cost analysis tool with three sections:

1. Top: input fields for "License cost per user" for Microsoft 365,
   Adobe Creative Cloud, Salesforce, and Slack.
2. Middle: a metric card showing total spend based on active users
   in our identity data.
3. Bottom: a table of users who haven't logged in for 30 days,
   showing their license assignments.
```

Send. Composer thinks, generates the components, and renders the live preview.

If your workspace has no Data Feeds, you'll see the **"Did you forget to add a data feed?"** confirmation. Click **Proceed with no data feeds** if you want to scaffold UI first and wire data later; otherwise **Cancel** and connect your identity Feed first.

## Step 3 — Make the savings calculation explicit

```text theme={null}
Add a fourth section at the bottom:

A large "Potential Savings" card that calculates:
(count of inactive users) × (average cost per license)
and displays the result in green with a per-month and per-year breakdown.
```

Composer rebuilds the bottom of the dashboard with the savings call-out.

## Step 4 — Filterability

```text theme={null}
Add filters at the top of the inactive-users table:
- A department dropdown (multi-select)
- A "Last seen older than" toggle: 30 days / 60 days / 90 days
- A search box for user name or email
```

These let you slice the inactive list by org boundary — useful when sending the list to specific cost-centre owners.

## Step 5 — Export

```text theme={null}
Add a "Download CSV" button above the inactive-users table.
The CSV should include: user name, email, department, last seen,
licenses held, total cost. Filename: inactive-licenses-YYYY-MM-DD.csv.
```

Composer wires up the CSV generator using the standard Studio component.

## Step 6 — Polish

```text theme={null}
Use our brand colors:
- Primary: #16A34A
- Background: white
- Inactive user rows: light red tint to highlight reclaimable cost

Round all costs to whole pounds.

Add a header that says "SaaS License Optimisation" with our logo
on the left.
```

## Step 7 — Auto-refresh & PDF

```text theme={null}
Auto-refresh the data every hour.

Add a "Generate Report" button at the top right that exports
the current view as a PDF — A4 landscape.
```

The PDF button is convenience; **⋯ → Generate PDF** also works at any time.

## Step 8 — (Optional) Notify managers

If you want managers to receive the inactive-user list for their team:

1. First, [create an Email Action](https://docs.dimension.io/actions.md) named `Notify Manager` with inputs `manager_email`, `inactive_users` (the recipients must be tenant users).
2. Then in Studio:

```text theme={null}
Add a "Notify Manager" button on each department row.
When clicked, invoke the Notify Manager Email Action with
the department manager's email and the list of inactive
users in their team.
```

> [!WARNING]
>
> **Email Action recipients are tenant-user-only.** If your department managers aren't ThreatAware users, replace the Email Action with a Webhook Action against your email service (SendGrid, Postmark, AWS SES) instead.

## Step 9 — Publish

Click the **Published** chip at the bottom-left. The app:

* Becomes visible to everyone with access to the workspace
* Auto-creates a [Shortcut](https://docs.dimension.io/settings.md) (e.g. `https://<tenant>/app/license-tracker`)
* Fires a Publish app notification

## What you've built

| Feature | What it does |
| - | - |
| Input panel | Capture per-license cost for your SaaS stack |
| Total spend metric | Live calculation against active users |
| Inactive users table | Filter, search, sort by department / cost / last-seen |
| Potential savings card | Headline number for cost reviews |
| CSV export | Pass to procurement |
| PDF export | Board-pack ready |
| Manager notify (optional) | Email tenant-user managers their reclaim list |
| Auto-refresh | Hourly data freshness |

## Customisation ideas

* **Multi-currency** — *"Add a currency dropdown (£/\$/€) that applies to all costs"*
* **Renewal calendar** — *"Add a Renewals tab listing each SaaS with renewal date and projected cost"*
* **Cost trend** — *"Add a 90-day line chart of total spend"*
* **Inactive thresholds per app** — *"For Salesforce specifically, treat inactive as 90 days, not 30"*
* **Auto-ticket** — *"On each inactive user, add an Open Ticket button that creates a Jira issue via our Jira Webhook Action"*

## See also

> [card] [Licence management (pre-built)](https://docs.dimension.io/pre-built-apps/licence-management.md)
>
> A pre-built version of this app you can import and customise

> [card] [Connect Your Data](https://docs.dimension.io/connect-your-data.md)
>
> Wire up the identity Data Feed this tutorial needs

> [card] [Actions](https://docs.dimension.io/actions.md)
>
> Email + Webhook Actions for the manager-notify step

> [card] [Exporting & Sharing](https://docs.dimension.io/studio/exporting.md)
>
> PDF, CSV, Share URL, Pin to Sidebar


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.