Renewals and Retention

Start Every RenewalThirty Days Early

A renewal is usually lost months before the date. AssistJet reads usage and tickets for each account thirty days out, writes to the healthy ones, and brings the ones at risk to you with the reasons attached.

Starts From
Thirty days before renews_at
Model Use
1 agent step
Your Part
1 question for each account at risk

The First Warning Isthe Cancellation

Your renewal dates are in a spreadsheet, and your usage numbers are in another tool. You pull the two together for your biggest accounts and hope the small ones renew. A customer who went quiet in the spring cancels in the fall, and that is the first you hear of it.

  • Read usage and open tickets for the accountThe automation
  • Summarize how the account is doingThe agent
  • Write to a healthy account about the renewalThe agent
  • Flag an account at risk, with the reasonsThe agent
  • Approve a discount or make the callYou

One Renewal, Thirty Days Out

Thirty days before a renewal, read the account. If it looks healthy, write to them. If it looks at risk, tell me why.

You Set What the Agent May Do

Each tool has one level for each seat, and your rules are enforced in code before the call. These tools are examples, and your own list comes from your app.

  • accounts_healthThe run reads usage and tickets.Read
  • subscriptions_getThe agent reads the plan.Read
  • accounts_tagThe run marks the risk.Auto
  • discounts_createYou approve any discount.Ask First

Turn on classification, and each new thread gets a sentiment tag that your health tool can read.

Describe It, or Ship It as a Recipe

Write the job in plain words, and the agent drafts these steps as a card. If you build apps for other people, ship the same steps as a recipe, and every customer gets the job with no setup.

assistjet_recipes
[
  {
    "id": "renewal-check",
    "name": "Renewal check",
    "trigger_kind": "time",
    "trigger": {
      "collection": "subscriptions",
      "field": "renews_at",
      "offset_minutes": -43200
    },
    "steps": [
      {
        "kind": "tool",
        "tool": "accounts_health",
        "arguments": {
          "id": "{{record.account}}"
        }
      },
      {
        "kind": "branch",
        "field": "result.risk",
        "op": "equals",
        "value": "high",
        "then": [
          {
            "kind": "agent",
            "instructions": "List the reasons this account is at risk, from its usage and its tickets, in three lines."
          },
          {
            "kind": "ask",
            "text": "{{record.name}} renews in 30 days and looks at risk. {{agent}}"
          }
        ],
        "else": [
          {
            "kind": "agent",
            "instructions": "Write a short renewal note that mentions what this account uses most."
          },
          {
            "kind": "send",
            "to": "{{record.email}}",
            "subject": "Your renewal is coming up",
            "text": "{{agent}}"
          }
        ]
      }
    ]
  }
]

What You Can Count On

Every Message Goes Out Once

AssistJet stores one unique key before the first step of each run, so a retry stops right there.

Every Step on the Record

Each run is a thread in your inbox, and each tool call, model, and cost is stored in your database.

A Spending Cap on Every Job

Set a cap on an automation, and it stops for the month once its model use reaches that amount.