# Turn expiring free trials into a ranked sales worklist

> Every weekday morning, your reps get a ranked list of trials ending in the next five days, with call talking points and a flag on anyone with no card on file.

- Workflow type: agent
- Services: Chargebee, HubSpot, Slack Bot
- Categories: Sales, Finance
- Published: 2026-08-14

## What it does

- Finds every trial ending in the next five days and works out what each account would be worth over a year, so the biggest opportunities sit at the top
- Looks each account up in your CRM to read its lifecycle stage and assigned rep, so every trial is attributed to a real person rather than landing in a shared pile
- Posts one Slack digest grouped by rep, ranked by value, with two or three specific talking points for each conversion call
- Calls out separately at the top any trial with no payment method saved, because those turn into a failed first invoice unless someone intervenes first
- Writes the talking points back onto the CRM contact record so the outreach plan lives where the rep already works

## What you'll need

- A Chargebee account and an API key, with trials running on your billing site
- A HubSpot account where your trial contacts exist, ideally with owners assigned so the digest can be grouped by rep
- A Slack workspace and a channel where your sales and customer success team should receive the daily digest

## Prompt

Every weekday at 8am, build a prioritized trial conversion worklist for my sales and customer success team from Chargebee, enrich it with HubSpot, and post it to Slack. The goal is that no trial reaches its end date without a named rep knowing about it and having something specific to say.

Start with Chargebee "List Subscriptions" to pull every subscription whose status is in_trial and whose trial_end falls within the next five days. Chargebee timestamps are Unix epoch seconds and filters use operator suffixes, so filter with status[is]=in_trial together with a trial_end range covering now through five days from now. Page through the results using the next_offset token until the list is exhausted, so a busy week does not get silently truncated at the first page.

For each subscription, read the subscription_items to get the item_price_id and quantity being trialed. This is a Product Catalog 2.0 site, so work from item_prices and not legacy plans. Then call Chargebee "Retrieve Customer" for the subscription's customer to get the billing contact email, the company name, and the payment details embedded on the customer record. Use Chargebee "Retrieve Item Price" for each distinct item price so you know its amount, currency, and billing period, since you need the period to compare plans fairly.

Work out the expected annual value for each trial: multiply the item price amount by the quantity, then normalize to a yearly figure using the item price's billing period, so a monthly price is multiplied by twelve, a quarterly price by four, and an annual price is left as is. Chargebee returns money as integers in the currency's smallest unit, so divide by 100 before showing any figure to a human. Rank the whole list by this annual value, highest first.

Determine whether each trial has a payment method on file. The customer record from "Retrieve Customer" embeds the primary card and payment method, so use that as the primary signal, and confirm with Chargebee "List Payment Sources" for the customer when the record is ambiguous. Treat any trial with no usable payment source as high urgency, because when the trial ends the first invoice fails and the account looks like a billing problem when it was really a missing card.

Enrich every account through HubSpot. Call HubSpot "Get Contact" using the billing contact email with the idProperty parameter set to email, and read the lifecycle stage and the assigned owner id. Then call HubSpot "Get Owner" with that owner id to resolve the rep's real name and email, so every trial in the digest is attributed to a person rather than an opaque id. If no contact matches the email, or the contact has no owner, keep the account in the worklist under an "Unassigned" group and say plainly that the CRM record is missing or unowned, since those are the ones most likely to be dropped.

For each account, draft two or three specific talking points for the conversion call. Base them on the actual plan and quantity they picked and on their CRM lifecycle stage, not generic sales advice. A high seat count on an entry tier is an upgrade conversation, a lead-stage contact on an enterprise tier probably needs a decision maker in the room, and a customer already marked as an opportunity needs a close plan rather than an introduction. Reference the plan name and the trial end date in the points so the rep can open the call with something concrete.

Post the digest to our sales channel with Slack Bot "Send a Message". Lead with a clearly separated urgent section listing every trial ending with no payment method on file, including the account, the end date, and the owner, since those need intervention before anything else. Below that, group the remaining accounts by owner so each rep sees only their own accounts in one place, ordered by annual value within each group. For each account show the company name, the plan and quantity, the normalized annual value, the trial end date, the lifecycle stage, and the talking points. Only include a group for a rep who actually has accounts in the window, and use Slack formatting that stays readable on mobile.

Finally, log the drafted talking points against the CRM record using HubSpot "Create Note", associated to the contact you looked up, so the outreach plan lives in HubSpot rather than only in a Slack post that scrolls away. Include the plan, the normalized annual value, the trial end date, and the payment method status in the note body. Skip the note when no matching contact was found. If Chargebee returns no trials ending in the window, post a short message saying there are no trials ending in the next five days rather than an empty digest.

## How to customize

- Change the send time or widen the window from five days to seven or ten, depending on how long your sales cycle needs
- Send the digest to a different channel, or split it so each rep gets their own accounts as a direct message instead of one shared post
- Set a minimum annual value so small self-serve trials stay out of the list, or reorder the ranking to lead with lifecycle stage instead of value

## FAQ

### What happens if a trial customer is not in our CRM yet?

The account still appears in the digest, listed under an unassigned group so nobody quietly drops it. The digest notes that the contact was not found, which is usually a signal that someone needs to create the record before the call.

### Does this work if we sell both monthly and annual plans?

Yes. The workflow reads the billing period for each plan being trialed and converts everything to a comparable yearly figure before ranking, so a monthly plan and an annual plan are judged on the same basis rather than by sticker price.

### Will it message reps who have no trials ending?

No. The digest only includes groups for reps who actually have accounts in the window, so nobody gets an empty section and the post stays short enough to read.

### Does this contact the customer or charge their card?

No. It is an internal briefing only. It reads your billing and CRM data, posts to your own Slack channel, and saves notes in your CRM. It never emails the customer and never takes a payment.

### Why does it flag trials with no payment method separately?

A trial with no saved card cannot convert cleanly. When the trial ends the first invoice fails, and the account looks like a payment problem when it was really a missing card. Surfacing these first gives someone time to collect payment details before the deadline.

Use this prompt in General Input: https://www.generalinput.com/prompts/turn-expiring-free-trials-into-a-ranked-sales-worklist