Browse the docs

Agent setup guide

Donor Thank-You Writer

Every new gift gets a personal thank-you with your receipt wording, a HubSpot gift note and a “call this donor” alert for major gifts.

Available About 20 min to set up

What it does

Every new gift gets a personal thank-you with your receipt wording, a HubSpot gift note and a “call this donor” alert for major gifts.

  • Starts from each new row in your donations sheet (your donation form or payment processor's export writes one row per gift).
  • AI writes a personal thank-you naming the amount and what the gift supports, using only your own descriptions of each fund.
  • Adds your receipt wording, copied word for word with only the blanks (name, amount, date, reference) filled in from the row.
  • Creates or updates the donor's HubSpot contact and logs the gift on their timeline.
  • Posts a Slack “call this donor” alert for gifts at or above your major-gift amount, and a “thank by phone or letter” alert for gifts without an email.
  • By default every thank-you waits for approval in Reviews; switch review off and only major gifts, gifts without an email and unusual gifts (e.g. goods received in return) wait.

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 donations sheet your form or processor adds a row to per gift, and your own receipt wording.

What it doesn't do

  • It drafts and organises for a person to approve; it makes no tax decision — it never decides whether or how much of a gift is tax-deductible, and gifts with something received in return are flagged for you.
  • It uses your receipt wording as written and isn't tax or legal advice; have your accountant confirm your template.
  • It doesn't read Stripe or your processor directly (a Stripe-triggered version can follow when Stripe is approved), and rows already in the sheet before activation aren't processed.
  • It doesn't create deals or donation records in HubSpot — it updates the contact and adds a note.
  • It never invents amounts, impact figures or promises.

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.
  • The app it watches, connected in Settings → Integrations (the agent starts from an app event).
  • 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 donations sheet (Settings → Integrations → Google Sheets).

3. Connect HubSpot

Connect the HubSpot account your donors are kept in (Settings → Integrations → HubSpot).

4. Connect Slack

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

5. Pick your donations sheet

Open the trigger, pick your Google account, paste the spreadsheet link and the tab gifts are added to.

SettingWhat to enterIn step
Google account (donations sheet)The Google account that can open your donations sheet. Pick your connected Google Sheets account.“New gift in your donations sheet”
Donations spreadsheetPaste the link of the spreadsheet with your donations (the trigger watches it for new rows).“New gift in your donations sheet”
Donations tabThe tab gifts are added to, one row per gift, e.g. “Donations”.“New gift in your donations sheet”

6. Describe your organisation and paste your receipt wording

Open “Write the thank-you” and replace the placeholder with your funds, signer, major-gift amount and receipt wording.

SettingWhat to enterIn step
Your organisation and receipt wordingReplace the placeholder with your organisation's name, who signs thank-yous, each fund or campaign and one sentence on what it does, your major-gift amount (e.g. $1,000) and your receipt wording, word for word, with blanks for name, amount, date and reference. It starts as “[DESCRIBE YOUR ORGANISATION, WHO SIGNS THANK-YOUS, YOUR FUNDS OR GIFT PURPOSES, YOUR MAJOR-GIFT AMOUNT AND PASTE YOUR RECEIPT WORDING HERE]” until you replace it.“Write the thank-you”

7. Pick your HubSpot account

Pick the same HubSpot account in “Create or update the donor in HubSpot” and “Log the gift on the contact”.

SettingWhat to enterIn step
HubSpot account (contacts)The HubSpot account your donors are kept in. Pick your connected HubSpot account.“Create or update the donor in HubSpot”
HubSpot account (gift notes)The same HubSpot account, used to log the gift note. Pick your connected HubSpot account.“Log the gift on the contact”

8. Pick the Slack channel

Open “Alert the team in Slack” and pick your account and channel. Invite the app to private channels first (/invite @Fluxo Flow).

SettingWhat to enterIn step
Slack accountThe Slack workspace your development team uses. Pick your connected Slack account.“Alert the team in Slack”
Development channelWhere “call this donor” alerts go, e.g. #development.“Alert the team in Slack”

9. Add your development inbox

Open “Email the thank-you” and enter the address donors' replies should go to.

SettingWhat to enterIn step
Your development inbox (Reply-to)Donors' replies to the thank-you come back to this address.“Email the thank-you”

10. Test it with Dry Run

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

11. Switch the trigger on

Open the trigger and click “Activate app trigger”. New rows are picked up on your plan's schedule interval; rows already in the sheet aren't processed.

How it works

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

  • New gift in your donations sheet — Starts on “New row” in Google Sheets (an app event). Starts a run for each row added to your donations sheet (your donation form or payment processor's export writes one row per gift), checked on your plan's schedule interval.
  • Write the thank-you — AI step (runs on your AI provider key). AI reads the gift, writes a personal thank-you that names what the gift is for, adds your receipt wording filled in from the row, and decides whether it needs a person (major gifts always do).
  • Call this donor? — Decision: picks the branch to follow. Major gifts and gifts without an email address are posted to Slack so a person calls or writes by hand.
  • Alert the team in Slack — Slack: Post a message. Branch: Major gift or no email. Posts “call this donor” (major gift) or “thank by phone or letter” (no email) with the details from the row.
  • Team alerted — Kept in the run history. The run history keeps the alert that was posted.
  • No call needed — Kept in the run history. Branch: No call needed. Not a major gift and the donor has an email address: no Slack alert.
  • Email address? — Decision: picks the branch to follow. Gifts without an email address are logged and thanked by hand; the rest are logged in HubSpot and get the thank-you email.
  • No email address — Kept in the run history. Branch: No email. No email or CRM contact can be created; the Slack alert asks for a call or letter.
  • Create or update the donor in HubSpot — HubSpot: Create or update a contact. Branch: Has email. Finds the donor's HubSpot contact by email (or creates it) with their name.
  • Log the gift on the contact — HubSpot: Add a note. Adds a note with the amount, date, purpose and reference to the donor's HubSpot timeline.
  • Logged in HubSpot — Kept in the run history. The run history keeps the contact id and the note.
  • Review first? — Decision: picks the branch to follow. Branch: Has email. With review switched on (the default) every thank-you waits for approval; with it off, major gifts and unusual gifts still do.
  • Approve the thank-you — A person approves or rejects it in Reviews (the run waits). Branch: Review first. A person checks the thank-you and the receipt wording in Reviews, edits them if needed and approves; nothing is sent before that.
  • Email the thank-you — Sends an email from your workspace's sender. Branch: Send without review / Approved. Sends the thank-you (with your receipt wording) to the donor from your workspace's sender, with replies going to your development inbox.
  • Thank-you sent — Kept in the run history. The run history keeps the thank-you that was sent.

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. The sample has the same shape as a real event from the app.

Sample data fields

sheet, row._row, row.Date, row.First name, row.Last name, row.Email, row.Phone, row.Amount, row.Fund, row.Frequency, row.Transaction ID, row.Donor note, row_number.

  • 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.

Go live

  • Open the trigger and click “Activate app trigger”. New rows are picked up on your plan's schedule interval; rows already in the sheet aren't processed.
  • Activating the app trigger needs the trigger's connected account. The first check only remembers what's already there, so older items don't start runs; the same item never starts two runs.
  • 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

Does it decide what is tax-deductible?

No. The receipt section is your own wording, copied word for word with only the blanks (name, amount, date, reference) filled in from the row. Gifts where the donor received something in return, or non-cash gifts, are flagged for a person to decide.

What should the donations sheet have?

One row per gift with the donor's name, email, amount, date and — if you have them — the fund or campaign, a reference number, phone and a donor note. Column names can vary; the agent reads them from the header row.

Can it send thank-yous without review?

Yes. Change “REVIEW EVERY THANK-YOU: yes” to “no” in the AI step: routine gifts are then thanked at once, while major gifts, gifts without an email and unusual gifts still wait for approval.

Does it work with Stripe directly?

Not yet. Today it reads a sheet your form or processor writes to. A Stripe-triggered version can follow once Stripe is approved.

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).
  • No runs start: activate the app trigger with a connected account. Only items created after activation start runs.
  • 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 .