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.
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.
# 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
- 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.
- Paste the prompt. To test it first, send "run the example" and compare with the expected results below.
- 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.
- 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
| Tool | Decide by | Notice deadline | Status | Savings start | Annual savings |
|---|---|---|---|---|---|
| Data provider | 2026-10-02 | 2026-10-16 | missed | 2027-11-15 | $960 |
| Sequencer | 2026-10-18 | 2026-11-01 | urgent | 2026-12-01 | $2,160 |
| Clay | 2026-11-07 | 2026-11-21 | on track | 2026-11-21 | $3,720 |
| CRM | 2026-11-19 | 2026-12-03 | on track | 2027-02-01 | $6,000 |
| Call recorder | 2026-12-17 | 2026-12-31 | on track | 2027-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
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
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
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
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
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
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
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
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.
| Charge | Listed 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 webhooks | Growth and above |
| Clay data credit top-ups | 30% 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 savings
U 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 quarter
T - 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 date
renewal 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
Related playbooks
- RevOpsIntermediate
Keep Clay Credit Spend Predictable on Enrichment Tables
Clay tables that enrich every row, re-run on every edit, and call providers in no particular order burn through credits faster than planned, and the overspend usually shows up only when the monthly balance runs low.
ClayClaygentHubSpot or SalesforceEstimate: 2 hrs/week - RevOpsIntermediate
Audit Every GTM Automation and Agent for an Owner, a Metric, and a Kill Switch
Clay tables, CRM workflows, Zaps, Make scenarios, and AI agents pile up faster than anyone tracks them, so when one stops running or writes bad data nobody knows who owns it, what it was for, which fields it can change, or how to stop it, and unowned automations keep spending credits and writing to the CRM.
Google SheetsClayHubSpot or Salesforce+2Estimate: 1.5 hrs/week - Finance/FP&AIntermediate
Parse Receipt Emails and Auto-Create Expense Reports
Employees manually forward receipts to finance. Someone re-keys them into expense software.
ZapierGmailGoogle Sheets+1Estimate: 5 hrs/week - Finance/FP&AIntermediate
Plan Sales Capacity with Ramp and Attrition, Not Headcount
Bookings targets are usually funded as headcount times quota, which assumes every rep is fully ramped all year and nobody leaves, so a plan can look covered on paper while new hires are still ramping, leavers' seats sit empty for months, and the shortfall shows up mid-year, too late to hire into.
HubSpot or SalesforceBambooHR, Rippling, or WorkdayGoogle Sheets or Clay+2Estimate: 1 hrs/week - Finance/FP&AIntermediate
Calculate CAC Payback by Acquisition Channel and Find the Ones That Never Pay Back
CAC is usually reported as one blended number, or per channel from ad spend alone, so a channel that costs more in SDR salaries and event fees than its customers will ever earn back in gross margin looks fine in the average, and finance only learns it when the budget is already spent.
HubSpot or SalesforceGoogle SheetsClaude or ChatGPT+1Estimate: 0.5 hrs/week
Need help implementing a playbook?
Our team builds custom Clay workflows and AI automations for revenue teams.
Get it built for you