Browse the docs

Agent setup guide

Price Change Notice Writer

Drafts a personal notice for every customer affected by a price change and sends them after one batch approval.

Available About 20 min to set up

What it does

Drafts a personal notice for every customer affected by a price change and sends them after one batch approval.

  • Starts once per price change, with the change posted to its webhook: plans with old and new prices, the date, the reason, your grandfathering rule and the customer's options.
  • Reads your customers sheet (up to 50 per run) and AI drafts a personal notice for each affected customer: their plan, old → new price, the date, why, their options and who to contact.
  • Customers your grandfathering rule exempts, whose plan isn't changing, or whose row is unclear are set aside, not emailed.
  • The whole batch waits for one approval, where you can edit any notice or hold it.
  • Dates are worked out in code, never by the AI: today and the days until the effective date, in your time zone; the reviewer is told when the effective date is inside your notice period.
  • Each approved notice is checked in code (one valid recipient, still marked to send, prices and date present, no placeholders) and by an AI wording check that stops only a price or date that differs from the approved ones, invented discounts or options, pressure and legal statements. Then it is emailed with replies to your customer inbox and logged on the HubSpot contact.
  • A summary of sent, exempt and held notices goes to Slack.
  • The summary is counted in code from what each step really did (sent, held, skipped, failed), so it never reports a held message as sent.

What it needs

  • A paid plan (agents run live on paid plans).
  • An AI provider key (Settings → AI Providers).
  • Google Sheets, HubSpot and Slack, connected in Settings → Integrations.
  • A customers sheet (e.g. a billing export) and a way to post the price change once (a form or Run in the canvas).

What it doesn't do

  • It drafts and organises notices for a person to approve; it makes no legal decision. Contractual and consumer-law notice periods are yours to check.
  • It doesn't change prices in your billing system and never offers discounts or options you didn't list.
  • Nothing is emailed before the batch is approved. It reads up to 50 customers per run.

Availability and plans

Available

Its workflow is built and tested, and every app it needs is live. You can get it and set it up now.

Included free on the Enterprise plan; on other paid plans it's a one-time purchase per workspace (the price is on the Agents page). The Agents page in the app always shows its current status.

Before you start

  • A paid plan: agents run live, and the Free plan only runs Dry Runs.
  • An AI provider key (OpenAI, Anthropic, Google and more) in Settings → AI Providers. AI usage is billed by your provider.
  • These apps, connected in Settings → Integrations: Google Sheets, HubSpot and Slack.
  • A form, app or system that can send each new item to a webhook URL (the agent starts from a webhook).
  • About 20 minutes.

Set it up step by step

Get the agent first (buy it, or it's already yours when your plan includes it), then in Agents → My agents press “Set up this agent”. That creates the agent's workflow in your workspace (it counts towards your plan's workflow limit) and opens the canvas with a setup checklist above it. Each item links to the exact place to go and ticks itself off when it's done.

1. Connect your AI provider

The AI steps run on your own key (OpenAI, Anthropic, Google and more). Add one in Settings → AI Providers.

2. Connect Google Sheets

Connect the Google account that can open your customers sheet (Settings → Integrations → Google Sheets).

3. Connect HubSpot

Connect the HubSpot account with your customer contacts (Settings → Integrations → HubSpot).

4. Connect Slack

Connect the Slack workspace your team uses (Settings → Integrations → Slack).

5. Describe your notices

Open “Draft the personal notice” and replace the placeholder with your sheet's columns, tone, contact and sign-off, then open “Check the effective date”, enter your time zone and set your notice period (within.min, 30 days by default).

SettingWhat to enterIn step
Your notice setupReplace the placeholder with your company name, your customers sheet's columns, tone, who customers contact and your sign-off. Your notice period (30 days) is set in “Check the effective date”. It starts as “[PASTE YOUR COMPANY NAME, YOUR CUSTOMERS SHEET'S COLUMN NAMES, YOUR TONE, WHO CUSTOMERS CAN CONTACT AND YOUR SIGN-OFF HERE]” until you replace it.“Draft the personal notice”
Your time zoneYour company's time zone as an IANA name (e.g. America/New_York), so the days to the effective date are counted from your local today.“Check the effective date”

6. Pick the customers sheet

Open “Read affected customers” and pick the account, spreadsheet and tab.

SettingWhat to enterIn step
Google accountThe Google account that can open your customers sheet. Pick your connected Google Sheets account.“Read affected customers”
Customers spreadsheetPaste the link of the spreadsheet with the customers to notify.“Read affected customers”
Customers tabThe tab with one row per customer (up to 50 per run), e.g. Price change Nov.“Read affected customers”

7. Add your inbox, HubSpot and Slack

Open “Email the notice” and enter the Reply-to, then pick the HubSpot account on both HubSpot steps and the Slack account and channel.

SettingWhat to enterIn step
Customer inbox (replies)Customers' replies to the notice come back to this address.“Email the notice”
HubSpot account (find contacts)The HubSpot account with your customer contacts. Pick your connected HubSpot account.“Find the HubSpot contact”
HubSpot account (notes)The same HubSpot account, used to log the notice. Pick your connected HubSpot account.“Note it on the contact”
Slack accountThe Slack workspace your team uses. Pick your connected Slack account.“Post the summary to Slack”
Slack channel for the summaryThe channel the batch summary goes to, e.g. #revenue.“Post the summary to Slack”

8. Test it with Dry Run

Press Dry Run: the agent runs on sample data with no messages sent and nothing written to your apps.

9. Switch the trigger on

Open the trigger and switch the webhook on. Post your price change to its URL (with the signature header) when you're ready to draft the notices.

How it works

The agent is a normal workflow with 19 steps (2 AI steps, with a person approving in Reviews). You can open, edit and monitor it like any other workflow.

  • Run a price change — Starts when your form or app sends data to the agent's webhook URL. Start one run per price change: post what changes, old and new price per plan, the effective date, the reason, your grandfathering rule and the customer's options (from a form, or with Run in the canvas).
  • Check the effective date — Step. In code, not AI: works out how many days from today (in your time zone) the price change takes effect and whether that's at least your 30-day notice period, for the reviewer. Nothing is filtered out. Change the notice period here (within.min).
  • Read affected customers — Google Sheets: Read rows. Reads your customers tab (e.g. a billing or CRM export): name, email, company, plan, current price, billing cycle, start date.
  • Each customer — Repeats the steps below for each item (up to 50 per run). Drafts a notice for every customer row (up to 50 per run).
  • [For each item — “Each customer”] Draft the personal notice — AI step (runs on your AI provider key). AI checks whether this customer's plan is part of the change and whether your grandfathering rule exempts them, then drafts a personal notice: their plan and price now → new, the date, why, their options and who to contact.
  • Approve the notices — A person approves or rejects it in Reviews (the run waits). Every drafted notice waits in Reviews together. Check prices, dates and wording against your terms (including any notice period you promise), edit any, set send to false on any that shouldn't go, and approve.
  • Each approved notice — Repeats the steps below for each item (up to 50 per run). Branch: Approved. Wording check, code checks, send and CRM note for every notice in the approved batch.
  • [For each item — “Each approved notice”] Final check on the wording — AI step (runs on your AI provider key). AI reads each approved notice for a price or date that differs from the approved ones, discounts or options you didn't list, pressure and legal statements — stating the plan, the old and new price, the date, the reason and your options is fine. It must quote the exact sentence it objects to.
  • [For each item — “Each approved notice”] Check before sending — Step. In code: drafted to notify, still marked to send, exactly one valid email, the prices and date present, and a subject and body with no placeholders left — plus the wording check's verdict. Anything that fails is held, with the reason.
  • [For each item — “Each approved notice”] Send it? — Decision: picks the branch to follow. Notices that pass every check are emailed and noted in HubSpot; everything else is held and listed in the summary with the reason.
  • [For each item — “Each approved notice”] Held — Kept in the run history. Branch: Held. Exempt, skipped, on hold, set to not send or stopped by a check; listed in the Slack summary.
  • [For each item — “Each approved notice”] Email the notice — Sends an email from your workspace's sender. Branch: Passes. Sends the approved notice from your workspace's sender, with replies to your customer inbox.
  • [For each item — “Each approved notice”] Find the HubSpot contact — HubSpot: Find records. Finds the customer's HubSpot contact by email.
  • [For each item — “Each approved notice”] In HubSpot? — Decision: picks the branch to follow. Customers with a HubSpot contact get a note; others are listed in the summary.
  • [For each item — “Each approved notice”] Not in HubSpot — Kept in the run history. Branch: Not in HubSpot. Sent, but no HubSpot contact has this email.
  • [For each item — “Each approved notice”] Note it on the contact — HubSpot: Add a note. Branch: Found. Logs the notice (plan, old → new price, date) on the contact's HubSpot timeline.
  • Count what happened — Step. In code, not AI: sorts every approved notice by what really happened — sent (and noted in HubSpot or not), exempt, skipped, held (with the reason) or failed.
  • Post the summary to Slack — Slack: Post a message. Posts the batch summary — counted in code — to your channel.
  • Done — Kept in the run history. The run history keeps the batch, every outcome and the summary.

Test it with Dry Run

Press Dry Run in the canvas. The agent runs on the sample data stored on its trigger (the “Sample data for Dry Run” box), so you can check every step's output before anything is live. Edit the sample to match the fields your own form or app sends.

Sample data fields

change_name, effective_date, reason, plans (a list), grandfathering, options, contact.

  • Nothing is sent or written: app actions, emails and Slack posts are simulated, and AI steps don't call your AI provider.
  • Approval steps use the Dry Run decision you pick in the step's settings (approved, rejected or timeout), so you can try each branch.
  • For-each loops repeat only the first 3 items.

Go live

  • Open the trigger and switch the webhook on. Post your price change to its URL (with the signature header) when you're ready to draft the notices.
  • The webhook is protected by a secret: send it in the header shown in the Activation panel (requests without it are refused with 403). Each request starts one run.
  • The setup checklist adds a “paid plan” item before activation: live runs need a paid plan (the Free plan only runs Dry Runs).
  • When every checklist item is done and the trigger is on, the checklist says “Live — this agent is running”. Follow its runs in the workflow's History tab and in Analytics → Agents.

Questions

What does the run need?

A JSON POST with change_name, effective_date, reason, plans (a list of plan, old_price, new_price, billing_cycle), grandfathering (e.g. “customers on annual contracts keep their price until renewal”), options and contact. Post it from a small form or with Run in the canvas.

Which customers does it read?

Up to 50 rows of the customers tab per run (an export from your billing system or CRM works). For more, split the export into tabs of 50 and run once per tab.

Does it check notice periods?

It works out in code how many days away the effective date is and tells the reviewer when that's inside your notice period (30 days by default — change it on “Check the effective date”). Which contractual and consumer-law notice periods apply is yours to check.

Troubleshooting

  • “No AI provider connected” or a rejected key: connect or fix the key in Settings → AI Providers, then press Test there.
  • A checklist item stays unticked: the setting is still empty or still contains its placeholder text. Open the step from the checklist and fill it in.
  • An app step fails with “Needs reconnect”: the account's access was revoked or expired. Reconnect it in Settings → Integrations.
  • Slack says the app isn't in the channel: in Slack, type /invite @Fluxo Flow in that channel (always needed for private channels).
  • Nothing happens when your form sends data: check the webhook is switched on and the request carries the secret header (403 means it's missing or wrong).
  • A run shows as paused: it's waiting for someone in Reviews to approve or reject it.
  • A step failed: open the run in History and check that step in the Trace tab for the error and what it received.

Generated from the agent's own workflow, so it always matches what the agent does. Last updated .