How to

How to build a renewal tracker

Renewals are found by scanning contract end dates in a spreadsheet, usually too late to change anything. Here is the model behind a tracker, the prompts to build it, and what it takes to run it.

The short answer

A renewal tracker needs four things: contract terms including the notice date, a renewal stage model with entry criteria, an owner and a plan per renewal, and a forecast that separates likely from at risk with a stated reason. The date that matters is not the renewal date, it is the date by which the customer must give notice, and the date by which you must open the conversation to have any chance of changing the outcome. Build the timeline backwards from those.

renewals.helix-app.ai

Renewals

3

Past engagement date

4.1M

Renewing this quarter

108%

Net revenue retention

2

Committed but declining

Not started 2

Halden Foods

410K · overdue 11 days

Kestrel Ltd

64K · engage in 88 days

Value review 1

Northrise Group

240K · engage in 6 days

Proposal 1

Vantor

135K · committed

Negotiation 1

Brightsea

88K · likely

A sketch of the renewal board. Halden is flagged because it is past the date work had to start, which is the only card on this board that cannot be recovered by working harder.

What matters here

  • A renewal tracker is four parts: contract terms with notice dates, a stage model, an owner and plan per renewal, and a forecast with reasons.
  • Work backwards from the notice date. A renewal opened 30 days out is a price negotiation, not a value conversation.
  • Stages need entry criteria. Without them, everything sits in the middle stage until the month it closes.
  • Forecast categories need a stated reason, not a percentage. A reason can be argued with and a probability cannot.
  • Track expansion and contraction alongside renewal. A renewed contract at 60% of its value is not a win.
  • A renewal tracker produces a number leadership quotes in a board meeting, so who may change a forecast category deserves as much thought as the model behind it.

Who this is for

You run customer success, renewals or revenue operations. You already know your contract dates. What you want is for every renewal to be worked on a schedule set by its notice period, and for the forecast to be something you can defend line by line.

How it works in practice

How a renewal gets worked, starting far earlier than most teams start.

  1. 1

    Two dates get derived, and both matter more than the renewal date

    Notice deadline is contract end minus notice period. Engagement date is that minus your own lead time, and it is when work has to start.

  2. 2

    Anything past its engagement date is the first thing you see

    That list is the reason to build this at all.

  3. 3

    Each renewal moves through stages with entry criteria

    Otherwise everything sits in the middle stage until the month it closes and the pipeline tells you nothing.

  4. 4

    Every renewal has an owner and a plan

    The customer decision-maker, the specific risks, the value evidence to present, and the next step with a date.

  5. 5

    Forecast categories carry a reason, not a percentage

    Nobody can argue with 60 percent. Everybody can argue with a stated reason, which is the point.

  6. 6

    Usage and health sit on the record

    So a committed forecast on a declining account is visible as a contradiction rather than a surprise.

What a renewal tracker is made of

A renewal tracker is not a filtered list of contract end dates. It is four parts, and the first one changes when the work starts.

Contract terms

Value, term dates, auto-renew flag, notice period, uplift clauses, and the derived notice deadline. Plus the derived date to open the conversation, which is the notice deadline minus your own lead time.

A stage model

The steps a renewal moves through, each with entry criteria and an expected duration: not started, discovery, value review, proposal, negotiation, closed. Criteria are what stop everything piling in the middle.

An owner and a plan

One named owner, a decision-maker identified on the customer side, the risks specific to this renewal, and the next step with a date.

A forecast

Each renewal categorised with a reason, rolled up by period, with expansion and contraction tracked separately from the base renewal value.

These prompts start from a Helix project, which is what handles sign-in, credentials and hosting. Start with Helix

The prompts

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.

  1. Work backwards from the date that actually decides it

    Two derived dates, and the list they produce.

    In this Helix project, build me a renewal tracker.
    
    Load contracts: account, product, annual value, currency, term start and
    end, whether it auto-renews, the notice period in days, any contractual
    uplift, payment terms, and an owner.
    
    Now derive two dates and treat both as more important than the contract
    end. The notice deadline, which is term end minus notice period. And the
    engagement date, which is the notice deadline minus a lead time I
    configure per contract value band. A large enterprise renewal needs to
    open six months out and a small one needs six weeks, and one global
    setting serves neither.
    
    Then show me the next twelve months ordered by engagement date, with days
    remaining, value, owner and stage. And put anything already past its
    engagement date and not started at the very top. That list is the entire
    reason for building this.
    
    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. Sorting by contract end shows you renewals you can no longer influence. Sorting by engagement date shows you the ones you still can.

  2. Stages with entry criteria

    A process rather than a date and some optimism.

    Add stages, in a config file: an ordered list with entry criteria and an
    expected duration. Start with not started, discovery, value review,
    proposal, negotiation, closed won, closed lost, and let me edit them.
    
    Show the entry criteria when somebody moves a renewal into a stage, and
    record who moved it and when. Without criteria, everything piles up in the
    middle stage until the month it closes and the pipeline tells you nothing
    you did not already know.
    
    Give each renewal a plan: the customer decision-maker and their role, the
    known risks, the value evidence to present, and the next step with a date
    and an owner.
    
    Flag any renewal that has been in a stage longer than its expected
    duration.
  3. A forecast someone can interrogate

    Reasons instead of probabilities.

    Now the forecast, and do one thing differently from every CRM.
    
    Categories are committed, likely, at risk and lost. Whenever a renewal is
    set to at risk or lost, require a reason chosen from a short editable
    list. Not a probability. Nobody can argue with 60 percent, and everybody
    can argue with "champion left and the replacement has not engaged", which
    is the conversation you actually want.
    
    Roll up by quarter: base renewal value, expansion, contraction, and the
    net. Derive gross renewal rate and net revenue retention from those rather
    than letting anyone type them. A contract renewed at 60 percent of its
    size is not a win, and a tracker that only asks whether it renewed will
    record it as one.
    
    Show the forecast three ways, committed only, committed plus likely, and
    full pipeline, so a leadership conversation can happen without anyone
    arguing about which number is meant. Snapshot it weekly and chart how each
    quarter's number moved. The shape of that line teaches a team more about
    its own optimism than any coaching.

    Worth knowing. A reason from a fixed list beats a probability every time. It can be discussed, disputed and acted on.

  4. Connect it to what the account is doing

    The mismatch alert, which is the whole reason to build this next to a health score.

    If I connect them, pull per-account signals onto the renewal record: usage
    trend, open escalations, ticket volume, health score, days since the last
    meeting.
    
    Then build the single most useful alert in the app: any renewal where a
    signal is deteriorating and the forecast category is still committed.
    That contradiction is what a renewal tracker can see and a health
    dashboard on its own cannot.
    
    On closure, record the outcome, the final value, a reason from a fixed
    list, and free text. Then report renewal rate by segment, owner and
    contract size, loss reasons over time, and how accurate each forecast
    category turned out to be once quarters closed. Flag any lost renewal
    above a value threshold for a post-loss review with an owner and a due
    date.
  5. Connect it to real systems

    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.
    
    <Salesforce>. Read renewal opportunities and write the forecast category
    and decision back.
    
    <Stripe>. Read subscription term dates, billing schedule and value, which
    is where the engagement date comes from.
    
    <Amplitude>. Pull the usage trend, so a committed forecast on a declining
    account shows as the contradiction it is.
    
    <Google Calendar>. Put the engagement date in the owner's calendar, so
    preparing for the conversation is scheduled rather than remembered.
    
    <Okta>. Resolve owners and their manager chain, which is what the app uses
    to show a rep their renewals and leadership the roll-up.
    
    <Zendesk>. Read open escalations, so a committed forecast on an unhappy
    account shows as the contradiction it is.
    
    <Snowflake>. Read the usage and payment history behind each renewal, which
    is the evidence for the conversation.
    
    <Slack>. Warn the owner at the engagement date, which is months before the
    renewal date.
    
    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.

  6. Ship it

    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. At-risk reasons and contract values are commercially sensitive, so set Access Control before sharing: owners see their renewals, leadership sees the roll-up.

What it connects to

Renewals are worked from contract data and decided on account behaviour, and those live apart.

  • Salesforce

    Read renewal opportunities and write the forecast category and decision back.

  • Stripe

    Read subscription term dates, billing schedule and value, which is where the engagement date comes from.

  • Amplitude

    Pull the usage trend, so a committed forecast on a declining account shows as the contradiction it is.

  • Google Calendar

    Put the engagement date in the owner's calendar, so preparing for the conversation is scheduled rather than remembered.

  • Okta

    Resolve owners and their manager chain, which is what the app uses to show a rep their renewals and leadership the roll-up.

  • Zendesk

    Read open escalations, so a committed forecast on an unhappy account shows as the contradiction it is.

  • Snowflake

    Read the usage and payment history behind each renewal, which is the evidence for the conversation.

  • Slack

    Warn the owner at the engagement date, which is months before the renewal date.

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.

Running it for real

The build gets you a working tracker. It holds contract terms, feeds a revenue forecast and shapes customer conversations, so it needs to be run properly.

AI Deployment

Get it to a URL people can open

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

Put your identity provider in front of it

Contract values and at-risk reasons are commercially sensitive. SSO means people sign in with their existing account, and access is scoped so an owner sees their renewals while leadership sees the roll-up.

App Security

Connect the system of record with managed credentials

Reading contracts, usage and health signals 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

Put a name on it

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

Know what it costs to run

Per-app spend visibility, with budgets and caps, so an internal tool cannot quietly become a line item nobody can explain.

Questions people ask

What is a renewal tracker?

It works renewals backwards from the notice deadline, moves each through defined stages with an owner and a plan, and produces a forecast with reasons rather than probabilities. Its purpose is to start the conversation while the outcome can still change.

Why work from the notice date instead of the renewal date?

Because a contract with a 90-day notice period is effectively decided three months before it ends. Adding your own lead time on top gives the engagement date, which is when work actually has to start.

What should a renewal stage model include?

Ordered stages with explicit entry criteria and an expected duration: discovery, value review, proposal, negotiation, closed. Without criteria, everything sits in the middle stage until the month it closes and the pipeline tells you nothing.

Should renewal forecasts use probability percentages?

Reasons work better. A category of at risk with "champion left and the replacement has not engaged" can be discussed and acted on. A 60% probability cannot be argued with, so nobody does.

How do expansion and contraction fit in?

They need separate fields from the base renewal value, because a contract renewed at 60% of its previous size is recorded as a win by a tracker that only asks whether it renewed. Net revenue retention should be derived from those fields, not typed in.

Can I build this without an engineering team?

Yes. The prompts here are written for Claude Code, Codex or Cursor and stage the build from a CSV import. The judgement calls are your lead times per contract band and your stage entry criteria.

Last reviewed September 2026.

Build it, then run it properly

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.