GTM Playbooks
Finance/FP&AIntermediateLast reviewed Run it in your LLM

Audit GTM Tool Seats and Credits Against Usage Before Renewal

The problem

GTM tools renew on different dates with different notice periods, seats stay assigned to people who left or stopped logging in, and credit plans are sized for last year's volume, so finance finds unused seats after the notice deadline has passed and pays for another full term.

Copy, paste, run

Run it in your LLM

One prompt for Claude or ChatGPT that runs the quarterly audit on your own contracts and usage exports: it classifies every seat, checks credit pools against a lower plan, and returns a cut, keep, or downgrade list with annualized savings and a renewal calendar, with every assumption stated. Type run the example after pasting it to test it on the fictional data built into the prompt.

Download .mdSKILL.mdExample CSV
# GTM Tool Seat Spend Audit

You are a finance and revenue operations analyst. Once a quarter, compare what the company pays for GTM tool seats and credits (CRM, Clay, sequencer, data providers, call recorders) with what people actually use, and produce a cut, keep, or downgrade list with annualized savings and a renewal calendar that shows when each decision has to be made.

## Rules

- Use only the data in this conversation. Do not invent prices, usage, benchmarks, or vendor terms. Seat prices come from the user's invoices or order forms; a lower tier's price comes from the vendor's current pricing page or the user's quote. If a price is missing, ask for it or leave that saving out and say so.
- Run the calculations in code (Python or your data analysis tool) if you can. If you cannot run code, say so at the top and show the working row by row.
- Show the formula next to every savings number.
- Every default in this prompt (60 unused days, 20% headroom, 14 buffer days) is a starting assumption the user can change, not a benchmark.
- Read only. This run recommends; it does not remove users or change plans. Each cut is checked with the user's manager first, because new hires, leave, and seasonal roles look unused in a 90-day window.
- Format: money to the nearest dollar, dates as YYYY-MM-DD.

## Step 0. Inputs

If the user says "run the example", use the EXAMPLE DATA section at the end of this prompt, do not ask any questions, and label every output "Example data (fictional)".

Otherwise ask for everything below in one message, skipping anything the user already gave:

1. Seat contracts, one row per tool: tool, plan, seats paid, annual price per seat, renewal date, notice period in days, term in months (12 for annual), the usage metric that matters (for example records updated, emails sent, calls recorded, contacts exported), the under-use threshold over 90 days, and the lower tier and its annual price per seat if one exists.
2. Credit pools, one row per credit-based plan (for example Clay or a data provider sold by credits): plan, annual cost, credits per year, credits used in the last 90 days, actions per year and actions used in the last 90 days where the vendor meters them, renewal or next billing date, notice days, term in months, and the lower plan with its annual cost, credits, and actions per year.
3. A seat usage export as CSV, one row per user per tool: tool, user_email, employment_status (active or left, from the HRIS), last_active_date (blank if never), usage_90d (the tool's usage metric over the last 90 days). Most admin consoles have a user list with a last login or last active date; use that where there is no usage report.
4. The as-of date (today), and any changes to the defaults.

Then report a data check before any analysis: rows read, rows dropped and why (tool not in the contracts, no user), users per tool against seats paid, and tools with no usage rows.

## Step 1. Classify every seat

For each usage row, in this order:

1. cut, if employment_status is left.
2. cut, if last_active_date is blank or more than 60 days before the as-of date (unused).
3. downgrade, if usage_90d is below the tool's under-use threshold and the tool has a lower tier. Saving = annual price per seat minus the lower tier's annual price per seat.
4. review, if usage_90d is below the threshold and there is no lower tier. Keep the seat, flag it, and count no saving.
5. keep, otherwise.

Paid seats with no user (seats paid minus usage rows for that tool, if positive) are cut. A cut saves the annual price per seat.

## Step 2. Credit pools

- Annualized usage = used in the last 90 days x 365 / 90, for credits and, where metered, actions.
- Utilization = annualized credits / credits per year.
- Downgrade candidate if a lower plan exists and annualized usage x 1.2 (20% headroom) fits within the lower plan's credits per year and, where metered, its actions per year. Saving = annual cost minus the lower plan's annual cost.
- Before recommending a lower plan, list the features the user's workflows rely on and tell the user to check that the lower plan includes them. For Clay, its pricing page lists CRM integrations and webhooks on Growth and above.

## Step 3. Renewal calendar

For every seat contract and credit pool:

- Notice deadline = renewal date minus notice days.
- Decide-by = notice deadline minus 14 days (time to get sign-off).
- Status: missed if the as-of date is after the notice deadline; urgent if it is on or after decide-by; otherwise on track.
- Savings start = the renewal date, or one term later if missed (assume the contract renews for another term unless the user says otherwise, and label that as an assumption).

Sort by decide-by, earliest first.

## Step 4. Output

Start with a short summary:

- Headline: "Annualized savings {total}: {cut seats} seats to cut, {downgrade seats} to downgrade, {plan changes} plan changes."
- The urgent and missed renewals, with dates and the savings at stake.
- Seats to review with their managers.
- One line: "Savings land at each renewal, not today; check each cut with the user's manager before acting."

Then these tables:

1. Data check
2. By tool (tool, seats paid, keep, cut, downgrade, review, annualized savings)
3. Seat list (tool, user, decision, reason, annualized saving)
4. Credit pools (plan, annualized credits, utilization, annualized actions, downgrade candidate, saving, features to check)
5. Renewal calendar (tool, renewal date, notice deadline, decide-by, status, savings start, annualized savings)
6. Assumptions, each labeled as an assumption

If you can create files, offer the seat list and the renewal calendar as CSV downloads.

## EXAMPLE DATA (fictional, for testing this prompt)

Use this only when the user says "run the example". The company, users, usage, seat prices, renewal dates, and notice periods are made up. The Clay plan prices and allowances are Clay's listed pricing, checked on 2026-10-21.

- As-of date: 2026-10-23
- Defaults: all as written above

Seat contracts (example inputs, not vendor pricing):

| Tool | Plan | Seats paid | Annual price per seat | Renewal | Notice days | Term months | Usage metric | Under-used below (90 days) | Lower tier |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| CRM | Sales seat | 8 | $1,200 | 2027-02-01 | 60 | 12 | records updated | 25 | view-only seat, $0 a year |
| Sequencer | Standard seat | 6 | $1,080 | 2026-12-01 | 30 | 12 | emails sent | 150 | none |
| Call recorder | Recorder seat | 6 | $1,440 | 2027-03-31 | 90 | 12 | calls recorded | 10 | viewer seat, $360 a year |
| Data provider | Seat | 4 | $960 | 2026-11-15 | 30 | 12 | contacts exported | 50 | none |

Credit pool:

- Clay Growth, billed monthly: $5,940 a year ($495 a month), 72,000 data credits and 480,000 actions a year. Used in the last 90 days: 5,400 credits and 27,000 actions (example inputs). Next billing date 2026-11-21, notice 0 days, term 1 month (example inputs).
- Lower plan: Launch, billed monthly, $2,220 a year ($185 a month), 30,000 data credits and 180,000 actions a year.

Seat usage export:

```csv
tool,user_email,employment_status,last_active_date,usage_90d
CRM,ana@example.com,active,2026-10-22,140
CRM,ben@example.com,active,2026-10-21,96
CRM,cara@example.com,active,2026-10-20,12
CRM,dev@example.com,active,2026-10-22,210
CRM,eli@example.com,active,2026-07-30,0
CRM,fay@example.com,active,2026-10-19,8
CRM,gus@example.com,left,2026-09-12,30
Sequencer,ana@example.com,active,2026-10-22,620
Sequencer,ben@example.com,active,2026-10-21,480
Sequencer,dev@example.com,active,2026-10-22,900
Sequencer,hal@example.com,active,2026-08-10,40
Sequencer,ivy@example.com,active,2026-10-18,90
Sequencer,gus@example.com,left,2026-09-12,210
Call recorder,ana@example.com,active,2026-10-22,48
Call recorder,ben@example.com,active,2026-10-20,36
Call recorder,dev@example.com,active,2026-10-21,52
Call recorder,cara@example.com,active,2026-10-14,4
Call recorder,jo@example.com,active,2026-10-02,2
Data provider,ana@example.com,active,2026-10-15,320
Data provider,ben@example.com,active,2026-06-30,0
Data provider,dev@example.com,active,2026-10-20,410
Data provider,kim@example.com,active,2026-10-01,20
```

How to run it

  1. Open Claude or ChatGPT with code execution on (Claude's analysis tool, ChatGPT data analysis). Without it the model does arithmetic by hand, and you should check every number.
  2. Paste the prompt. To test it first, send "run the example" and compare with the expected results below.
  3. Give it your seat contracts and credit pools from invoices and order forms, and attach a usage export: one row per user per tool with last active date and 90-day usage. The prompt lists the columns.
  4. Start with the urgent and missed renewals, check each cut with the user's manager, and put the decide-by dates in the finance calendar.

Before you paste usage data

Pasting an export sends it to the LLM vendor. Check your company's AI and data policy, prefer a business or enterprise plan, and replace emails with user IDs if you can: the prompt only needs a user key, employment status, last active date, and usage count per tool. It recommends; it removes no users and changes no plans.

Expected results on the example data

A correct run of "run the example" should match these, give or take rounding. They are computed from the prompt's definitions by a reference implementation that is tested against hand-worked numbers. The data is fictional.

Seats to cut
7, $8,160 a year
Seats to downgrade
4, $4,560 a year
Seats to review with managers (under-used, no lower tier)
ivy (Sequencer), kim (Data provider)
Clay Growth, billed monthly
30.4% of credits used; Launch, billed monthly fits with 20% headroom, $3,720 a year if no workflow needs a Growth feature
Annualized savings
$16,440
Savings delayed by a missed notice deadline
Data provider, $960 from 2027-11-15
Expected renewal calendar
ToolDecide byNotice deadlineStatusSavings startAnnual savings
Data provider2026-10-022026-10-16missed2027-11-15$960
Sequencer2026-10-182026-11-01urgent2026-12-01$2,160
Clay2026-11-072026-11-21on track2026-11-21$3,720
CRM2026-11-192026-12-03on track2027-02-01$6,000
Call recorder2026-12-172026-12-31on track2027-03-31$3,600

The data provider cut is right, but its notice deadline passed a week before the audit, so on these example terms the seat renews for another year. That is why the calendar is sorted by decide-by date, not renewal date.

Before you move to a lower Clay plan, enter your monthly records and steps to check that its data credits and actions cover your usage with room to spare. Open the Clay credit calculator.

Implementation steps

  1. 1

    Build the contract list from invoices and order forms, not memory: one row per GTM tool (CRM, Clay, sequencer, data providers, call recorder) with plan, seats paid, annual price per seat or plan price, term, renewal date, notice period in days, and the lower tier and its price from the vendor's current pricing page or your rep's quote

  2. 2

    Pull usage exports from each admin console in the same week each quarter: the user list with last login or last active date for every seat tool, the tool's own usage count over the last 90 days (records updated, emails sent, calls recorded, contacts exported), and credits and actions used for credit plans such as Clay

  3. 3

    Join seats to people: match usage rows to the contract by user email, add employment status from the HRIS, and count paid seats with no user as unassigned

  4. 4

    Classify every seat with written rules: cut if the user has left, has no activity for more than 60 days, or the seat is unassigned; downgrade if the user is active but below the tool's 90-day usage threshold and a lower tier exists; review if under-used with no lower tier; keep otherwise (60 days and the thresholds are assumptions you set per tool); check each cut with the user's manager, because new hires, leave, and seasonal roles look unused in a 90-day window

  5. 5

    Check credit pools against the plan below: annualized usage = last 90 days x 365 / 90, and a lower plan is a candidate only if annualized credits and actions x 1.2 (20% headroom, an assumption) fit within it and no workflow needs a feature only the current plan has; for Clay, its pricing page lists CRM integrations and webhooks on Growth and above

  6. 6

    Produce the cut, keep, or downgrade list with annualized savings: cut seats x annual price per seat, plus downgrade seats x (seat price - lower tier price), plus any plan change; run it with the copy-paste prompt on this page in Claude or ChatGPT, or with formulas in the template

  7. 7

    Build the renewal calendar: notice deadline = renewal date - notice days, decide-by = notice deadline - 14 days for sign-off (an assumption), status missed, urgent, or on track, and savings start at the renewal, or one term later if the notice deadline has passed; put decide-by dates in the finance calendar and post urgent ones to Slack

  8. 8

    Close the loop at each renewal: compare the new invoice with the planned saving, record what was actually cut, and rerun the audit next quarter with fresh exports; keep each quarter's list as the audit trail for tool spend

Template outline

The structure to recreate in your own workspace. Field names and thresholds are starting points.

Google Sheet: GTM tool seat audit FYxx Qx (finance owns it; RevOps pulls the exports)

Tab contracts (from invoices and order forms):
  tool, plan, seats_paid, annual_price_per_seat, term_months, renewal_date, notice_days,
  usage_metric, underused_below_90d, lower_tier, lower_tier_annual_price_per_seat, source (invoice or quote)

Tab credit_pools:
  tool, plan, annual_cost, credits_per_year, credits_used_90d, actions_per_year, actions_used_90d,
  lower_plan, lower_plan_annual_cost, lower_plan_credits_per_year, lower_plan_actions_per_year,
  features_needed (for Clay: CRM integrations or webhooks need Growth and above)

Tab usage (one row per user per tool, pulled the same week):
  tool, user_email, employment_status (HRIS), last_active_date, usage_90d

Tab seats (formulas):
  decision = IF(left, "cut", IF(days_since_active > 60, "cut",
             IF(usage_90d < underused_below_90d, IF(lower_tier <> "", "downgrade", "review"), "keep")))
  unassigned = seats_paid - COUNTIF(usage.tool, tool) -> each is "cut"
  annual_saving = cut: annual_price_per_seat; downgrade: annual_price_per_seat - lower_tier_annual_price_per_seat

Tab pools (formulas):
  annualized = used_90d x 365 / 90; utilization = annualized_credits / credits_per_year
  downgrade_candidate = annualized x 1.2 <= lower plan allowance (credits and actions) AND features_needed check
  saving = annual_cost - lower_plan_annual_cost

Tab calendar (sorted by decide_by):
  notice_deadline = renewal_date - notice_days; decide_by = notice_deadline - 14
  status = IF(today > notice_deadline, "missed", IF(today >= decide_by, "urgent", "on track"))
  savings_start = IF(status = "missed", EDATE(renewal_date, term_months), renewal_date)

Worked example (fictional; seat prices and terms are example inputs, Clay prices as listed 2026-10-21):
  As of 2026-10-23
  Tool            Paid  Keep  Cut  Downgrade  Review  Annual savings
  CRM               8     3    3       2         0        $6,000   (cut $1,200 each; view-only at $0)
  Sequencer         6     3    2       0         1        $2,160
  Call recorder     6     3    1       2         0        $3,600   (viewer seat saves $1,080 each)
  Data provider     4     2    1       0         1          $960
  Clay Growth monthly: 5,400 credits in 90 days -> 21,900 a year (30.4% of 72,000); x 1.2 = 26,280
    fits Launch's 30,000, and actions 109,500 x 1.2 = 131,400 fit 180,000 -> $5,940 - $2,220 = $3,720
    a year, only if no workflow needs CRM integrations or webhooks
  Total annualized savings $16,440
  Calendar: data provider notice deadline 2026-10-16 -> missed, its $960 starts 2027-11-15;
    sequencer decide by 2026-10-18 -> urgent, notice deadline 2026-11-01

Slack to #finance-ops when a decision turns urgent:
"Renewal decision due: {{tool}} renews {{renewal_date}}, notice deadline {{notice_deadline}}.
 Proposed: cut {{cut}} seats, downgrade {{downgrade}}, saving {{annual_savings}} a year.
 Owner: {{owner}}. Sheet: {{sheet_url}}"

Cost, time saved, and break-even

Seat prices and contract terms are on your own invoices and order forms, so they are inputs. Clay's plan prices are listed below as checked on 2026-10-21. Every other number is an example input; replace each with your own figure.

Listed prices
ChargeListed price
Clay Launch, billed monthly: 2,500 data credits and 15,000 actions$185/mo
Clay Growth, billed monthly: 6,000 data credits and 40,000 actions$495/mo
Clay plans with CRM integrations and webhooksGrowth and above
Clay data credit top-ups30% above plan credits

Inputs (all assumptions)

Replace each value with your own figure.

  • THours per quarter to run the audit by hand (admin exports, matching users, checking renewals, write-up)16AssumptionTime the next manual renewal review from first export to sent summary.
  • VHours per quarter with the template and the prompt3AssumptionTime the first quarterly run.
  • RLoaded hourly cost of the finance or RevOps analyst$75AssumptionSalary plus benefits, divided by working hours.
  • USeats to cut (left, inactive, or unassigned)6AssumptionCount them in the first audit, after managers confirm.
  • PAverage annual price per seat cut$1,000AssumptionFrom your invoices: annual contract value divided by seats, per tool.
  • GSeats to downgrade3AssumptionCount under-used seats on tools with a lower tier.
  • QAverage annual saving per downgraded seat$600AssumptionSeat price minus the lower tier price, from your quote or the vendor's current pricing page.
  • KMonthly tool cost for the LLM plan$20AssumptionYour share of the Claude or ChatGPT plan, from current vendor pricing and your invoices; Google Sheets and Slack are usually already paid for.

Formulas

Annualized seat savingsU x P + G x Q
6 x $1,000 + 3 x $600 = $6,000 + $1,800 = $7,800 a year
Clay plan change, if usage fits(Growth monthly - Launch monthly) x 12
($495 - $185) x 12 = $3,720 a year, only if 90-day usage x 365 / 90 x 1.2 fits Launch's 30,000 credits and 180,000 actions a year and no workflow needs CRM integrations or webhooks
Time saved per quarterT - V
16 - 3 = 13 hours
Time saved per week(T - V) / 13
13 / 13 = 1 hour, the time-saved estimate on this page
Value of time saved per quarter(T - V) x R
13 x $75 = $975
Break-even seats per quarter(V x R + 3 x K) / P
(3 x $75 + 3 x $20) / $1,000 = $285 / $1,000 = 0.29, so one cut seat a quarter covers the review
Decide-by daterenewal date - notice days - 14
2027-02-01 - 60 days = 2026-12-03 notice deadline, - 14 = decide by 2026-11-19
  • Savings land at each renewal, not when the list is made. Whether seats can come off mid-term depends on your order form; the math here assumes they come off at renewal.
  • A missed notice deadline on a contract that auto-renews moves the saving out by a full term, which is why the calendar is sorted by decide-by date.
  • Keep the 20% headroom on credit plans: Clay prices top-ups 30% above plan credits, so a plan cut that forces regular top-ups can cost more than it saves. Check the monthly cost of a lower plan in the Clay credit calculator.
  • The math counts license spend and analyst time only. A cut that removes a tool someone needs costs more than the seat, so every cut goes through the user's manager first.

Common questions

What counts as an unused GTM tool seat?
A seat whose user has left, has no activity for more than 60 days, or has no user at all. The 60 days is an assumption you can change. Each cut is checked with the user's manager first, because new hires, leave, and seasonal roles look unused in a 90-day window.
How are annualized seat savings calculated?
Seats to cut x annual price per seat, plus seats to downgrade x (seat price - lower tier price), plus any plan change. With the example inputs on this page, 6 x $1,000 + 3 x $600 = $7,800 a year.
When do I have to decide on a renewal?
By the decide-by date: renewal date - notice days - 14 days for sign-off. For a renewal on 2027-02-01 with 60 days' notice, the notice deadline is 2026-12-03 and the decide-by date is 2026-11-19. A missed notice deadline on a contract that auto-renews moves the saving out by a full term.
Should I move to a lower Clay plan?
Only if 90-day usage x 365 / 90 x 1.2 fits the lower plan's data credits and actions, and no workflow needs a feature only the current plan has; Clay lists CRM integrations and webhooks on Growth and above. Moving from Growth at $495 a month to Launch at $185 a month, both billed monthly, saves $3,720 a year.

Keep going

View all Finance/FP&A

Need help implementing a playbook?

Our team builds custom Clay workflows and AI automations for revenue teams.

Get it built for you