Browse the docs

Agent setup guide

Invoice & Quote Generator

Turn a one-sentence request into a checked invoice or quote, emailed after your approval.

Available About 15 min to set up

What it does

Turn a one-sentence request into a checked invoice or quote, emailed after your approval.

  • Receives each request (one sentence is enough) with the client's name and email from your form, Slack workflow or tool through a webhook.
  • Reads your Google Sheets register first: when the request has no number, the next one in your sequence is used, and numbers already used or likely duplicates (same client, same total, last 30 days) are flagged.
  • AI builds the line items and tax lines from the request, and applies your terms and payment instructions.
  • The issue date, the due or valid-until date (7–90 days) and which register rows are from the last 30 days are worked out in code, never by the AI.
  • Totals are recalculated in code before anyone sees them — never by the AI: each line (quantity × rate), the subtotal, markups and the total; anything the AI got wrong is corrected and flagged to the reviewer, and lines it couldn't price stay TBD.
  • If a price, tax rate, number or the client's email is missing, it posts what's missing and the original request to your Slack channel instead of guessing.
  • Complete invoices and quotes wait in Reviews; once approved they're emailed to the client, with replies going to your billing inbox.
  • Every sent document is logged in your Google Sheets register with its number, amounts and due date.

What it needs

  • A paid plan (agents run live on paid plans).
  • An AI provider key (Settings → AI Providers).
  • Slack and Google Sheets, connected in Settings → Integrations.
  • A form or tool that can send requests to a webhook URL.

What it doesn't do

  • It doesn't create PDFs, or invoices in QuickBooks, Xero or Stripe; it emails a plain-text document and logs it in a sheet.
  • It doesn't take payments or create payment links: it includes the payment link or bank details you provide.
  • It never emails a client without a person approving first.
  • It doesn't chase overdue invoices or track payments.
  • Numbering relies on your register: very large registers (several thousand rows) can't be read in one go, so archive old rows to another tab; when the register can't be read, the number is asked for instead of guessed.

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: Slack and Google Sheets.
  • A form, app or system that can send each new item to a webhook URL (the agent starts from a webhook).
  • About 15 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 Slack

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

3. Connect Google Sheets

Connect the Google account that can edit your invoice register (Settings → Integrations → Google Sheets).

4. Paste your business details

Open “Draft the invoice or quote” and replace the placeholder with your business details, tax rates, terms, numbering and payment instructions.

SettingWhat to enterIn step
Your business details, tax rates and payment termsReplace the placeholder with your business name, address and tax id, default currency, tax rates, payment terms (e.g. net 30), quote validity, numbering format and payment instructions or link. It starts as “[PASTE YOUR BUSINESS DETAILS, TAX RATES AND PAYMENT TERMS HERE]” until you replace it.“Draft the invoice or quote”

5. Pick the Slack account and channel

Open “Ask for the missing details 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 missing-detail messages are posted to. Pick your connected Slack account.“Ask for the missing details in Slack”
Finance channelThe channel where requesters see what's missing, e.g. #billing.“Ask for the missing details in Slack”

6. Add your billing email address

Open “Email it to the client” and enter the address clients should reply to.

SettingWhat to enterIn step
Your billing email addressClients' replies to the invoice or quote come back to this address (Reply-to).“Email it to the client”

7. Pick your invoice register

Open “Read your invoice register” and “Log it in your invoice register” and pick the same account, spreadsheet and tab in both. Header row: Issue date, Type, Number, Company, Contact, Email, Subtotal, Tax, Total, Currency, Due / valid until, Status.

SettingWhat to enterIn step
Google account (read the register)The Google account that can open your invoice register. Pick your connected Google Sheets account.“Read your invoice register”
Register spreadsheet (read)The spreadsheet your invoices and quotes are logged in (the same one as below), read to find the next number and spot duplicates.“Read your invoice register”
Register tab (read)The same tab as below, e.g. Invoices.“Read your invoice register”
Google account (register)The Google account that can edit your invoice register. Pick your connected Google Sheets account.“Log it in your invoice register”
Register spreadsheetPaste the link of the spreadsheet sent invoices and quotes are logged in.“Log it in your invoice register”
Register tabThe tab inside the spreadsheet, e.g. Invoices.“Log it in your invoice register”

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, switch the webhook on and point your request form or tool at its URL.

How it works

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

  • New invoice or quote request — Starts when your form or app sends data to the agent's webhook URL. Your internal form, Slack workflow or another tool posts the request (one sentence is enough) with the client's name and email to the webhook URL.
  • Read your invoice register — Google Sheets: Read rows. Reads the invoices and quotes already in your Google Sheets register, so the next number follows your sequence and duplicates are caught.
  • Work out the dates — Step. In code, not AI: today's date (the issue date), the due or valid-until date for common terms (7, 14, 15, 30, 45, 60 and 90 days from today), and the register rows issued in the last 30 days (for the duplicate check). Set timezone to your business's zone (UTC otherwise).
  • Draft the invoice or quote — AI step (runs on your AI provider key). AI turns the request into line items and tax lines, takes the next number from your register, applies your payment terms and writes the email-ready document (the math is checked in code in the next step).
  • Check the math — Step. Recalculates every line (quantity × unit price), the subtotal, each tax line, the tax total and the total in code — not by AI — writes the correct figures into the invoice and email, and flags anything the AI got wrong for the reviewer.
  • Anything missing? — Decision: picks the branch to follow. Requests missing a price, rate, number or client email (or with a line the check couldn't price) go back to whoever asked; complete drafts wait for approval.
  • Ask for the missing details in Slack — Slack: Post a message. Branch: Missing info. Posts what's missing, with the original request, to your finance channel so the requester can resend a complete request.
  • Waiting for details — Kept in the run history. The run history keeps the request and the partial draft.
  • Approve before it's sent — A person approves or rejects it in Reviews (the run waits). Branch: Complete. You check the line items, totals, dates and wording in Reviews, edit if needed and approve; nothing reaches the client before that.
  • Email it to the client — Sends an email from your workspace's sender. Branch: Approved. Sends the approved invoice or quote to the client from your workspace's sender, with replies going to your billing inbox.
  • Sent — Kept in the run history. The run history keeps the document that was emailed.
  • Log it in your invoice register — Google Sheets: Add a row. Branch: Approved. Appends the number, client, amounts and due date to your Google Sheets register, so you can track what's outstanding (and the next number follows on).

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

request, client_name, client_email, client_company, requested_by.

  • 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, switch the webhook on and point your request form or tool at its URL.
  • 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

Does it create a PDF or an invoice in QuickBooks?

No. It emails a clear plain-text invoice or quote and logs it in a Google Sheet. If you need the invoice in your accounting system, enter it there from the register.

Can it take payment?

Only through the payment link or bank details you put in your business details; it doesn't create Stripe payment links by itself.

Is anything sent without me checking?

No. Every invoice and quote waits in Reviews until someone approves it.

Can the AI get the totals wrong?

Not in what your client sees: after the AI drafts, every line (quantity × unit price), the subtotal, each tax line and the total are recalculated in code and written into the invoice, the email and the register row. If the AI's math was off, the review screen shows what was corrected (e.g. “subtotal 8200.00 → 8000.00”).

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 .