Chase overdue Stripe invoices from your Front billing inbox

By General Input

Every weekday morning, we email customers with overdue Stripe invoices from your shared Front inbox, so when someone replies it reaches a real person on your team.

Integrations

  • Front
  • Stripe
  • Slack Bot

Type

Agentic Task

Categories

  • Finance
  • Operations

Every weekday at 9am, chase my overdue Stripe invoices by emailing each customer from our shared Front billing inbox, instead of relying on Stripe's automatic no-reply dunning emails. The whole point is that when a customer replies, the reply lands in Front where a teammate can pick up the conversation and save the account. Trigger: cron, every weekday at 9am in my local timezone.

Step 1. Pull the overdue invoices from Stripe. Call Stripe List Invoices with status set to open, and paginate through every page. Stripe list responses use a data array with has_more, and the default limit is only 10, so set limit to 100 and keep paging with starting_after until has_more is false. Note that Stripe has no past due status: an invoice is overdue when its status is open and its due_date is earlier than today. due_date is a Unix epoch timestamp, so compute days overdue from it. Ignore invoices that have no due_date set, and ignore anything not yet past its due date.

Step 2. Decide who to chase. Skip anything less than 3 days overdue so nobody gets chased the moment an invoice slips. For everyone else, call Stripe Retrieve Customer with the invoice's customer id to get the billing contact's name and email address. If the customer record has no email address, skip that invoice and include it in the final Slack summary as needing a billing contact on file. If one customer has several overdue invoices, treat them as a single person to contact: send one email listing every overdue invoice, never one email per invoice.

Step 3. Check we are not double chasing. Before writing to anyone, call Front Search Conversations to look for an existing conversation with that contact's email address in the last 7 days. Front's search uses its own query filter syntax and supports filtering by contact and by date range. If there is any recent or open thread with that contact, skip them entirely for this run, including both the email and the tag. This 7 day quiet window is what keeps the workflow from feeling like spam, so make it an obvious value to change at the top of the workflow.

Step 4. Send the reminder. Use Front Send Message (New Conversation) from our billing channel. Keep it short and politely worded, and always name the invoice amount, the original due date, and how many days overdue it is. Stripe returns amounts in the smallest currency unit, so an amount_due of 250000 is $2,500.00: divide by 100 and format it with the invoice currency before putting any number in front of a customer. Escalate the tone gently by age. At 3 to 6 days overdue, a light friendly heads up that assumes it was simply missed. At 7 to 13 days, a clearer reminder that asks for a payment date. At 14 days or more, a direct but still courteous note asking them to confirm when payment will be made and offering to sort out any problem with the invoice. Never threaten service suspension or late fees unless I add that language myself.

Step 5. Tag the conversation. Apply an overdue-invoice tag using Front Add Tags to Conversation so finance can filter the queue. Important: Front's send endpoint returns 202 Accepted with only a partial message envelope and a temporary message id, because the conversation is created asynchronously. Do not assume the send response contains a usable conversation id. Resolve the real conversation id before tagging, for example by searching Front for the conversation with that contact immediately after sending. Look up the tag id for overdue-invoice once at the start of the run and reuse it for every conversation.

Step 6. Post one Slack summary. Use Slack Bot Send a Message to post a single message to our finance channel. List every account contacted with the amount and how many days overdue it is, give the total value at risk across everyone chased, and separately call out any single invoice above $2,000 so a person can pick up the phone instead of waiting on email. Also list anyone who was skipped and why, either recently contacted or no billing contact on file. The $2,000 threshold should be easy to change.

Notes for the workflow author:

- Use the Slack Bot integration rather than Slack user auth, since the finance summary is automated output and not a person-authored message.

- Respect Front's rate limits. They are per company and start at 50 requests per minute on the Starter plan, and Search Conversations counts 2.5 times against the quota, so pace the search calls and honor the retry-after header on a 429.

- Be defensive. If Stripe returns no overdue invoices, still post a short Slack message saying every account is current. If a Front send fails for one customer, carry on with the rest and report the failure in the Slack summary rather than aborting the run.

Related prompts

Explore more prompts
Let support send one-off Loops emails without an engineerA brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonCustomer lifecycle inspector for Loops, Stripe and PostHogLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client account