Turn accepted Xero quotes into instant client kickoff kits

Every 15 minutes, sweep Xero for newly accepted quotes and spin up a Notion project page, a Slack heads-up, and a draft welcome email for each new client.

Agentic Task
XeroNotionSlack BotGmailSalesOperationsOnboarding AutomationNotifications & AlertsEmail Automation
PromptCreate

Every 15 minutes on a cron schedule, sweep Xero for quotes that have just flipped to ACCEPTED and spin up a full client kickoff kit for each new one. Xero does not fire outgoing webhooks for quote status changes and is not in the platform's poll provider list, so cron polling with a status filter is the correct trigger.

Step 1: pull the candidate quotes. Call the Xero List Quotes operation filtered by Status=ACCEPTED, and pass an updated-since window (e.g. the last hour, or since the previous run's high-water mark) so each sweep only looks at recent movement. Xero quote statuses are DRAFT, SENT, DECLINED, ACCEPTED, INVOICED, and DELETED — only ACCEPTED should trigger this workflow.

Step 2: dedupe against a running Notion index. Use the Notion Query a Database operation against a customer-configured 'processed quote IDs' index (a database or index page holding one row per already-processed Xero QuoteID). Skip any quote whose ID is already in the index. This makes the sweep exactly-once even though cron polling is inherently at-least-once.

Step 3: for each genuinely new accepted quote, fetch the full quote detail with Xero Get Quote (to get the line items, totals, and reference/quote number if the list response is thin) and fetch the customer with Xero Get Contact using the contact ID on the quote. This gives you the customer name, primary contact person, email, phone, and address for personalisation.

Step 4: create the Notion project page with the Notion Create a Page operation, as a child of the customer-configured projects database. The page should contain: a short quote summary (customer, deal size, quote number, accepted date), the full list of accepted line items (description, quantity, unit price, line total), a kickoff checklist tailored to what they actually bought (use judgement here — a services engagement gets different checklist items than a product resale, and different line items imply different first-week actions), and owner assignments pulled from the customer-provided owner mapping (which team member owns which product or service line).

Step 5: post a Slack card to the customer-configured delivery channel using the Slack Bot Send a Message operation. The message should name the customer, the deal size, the account owner, and link back to the Notion project page. Format it as a compact card (Block Kit is fine) so the delivery team can scan the channel and see new kickoffs at a glance.

Step 6: draft a personalised welcome email with the Gmail Create a Draft operation, addressed to the primary contact on the Xero quote. The draft should reference the specific line items the customer accepted (not a generic 'thanks for signing'), name the account owner, and propose two or three kickoff meeting time options. Leave it as a draft in Gmail — do not send. The account owner will review, tweak, and hit send themselves.

Step 7: record the processed QuoteID on the Notion index (create a new row/entry) so the next sweep skips it. Do this last, after the Notion page, Slack card, and Gmail draft have all been created successfully, so a partial failure retries cleanly on the next run rather than silently marking a broken kickoff as done.

Expose these as customer-set variables: the Notion projects database ID, the Notion processed-quotes index page or database ID, the Slack delivery channel, and the account-owner mapping (either a Notion table the agent reads, or a simple JSON/YAML config listing who owns which product line or service category, plus their Gmail sender identity).

Hard rule: do not auto-send the welcome email under any circumstances. The email is always left as a draft for the account owner to review and send. The Notion page and Slack card can be posted automatically, but customer-facing email stays human-in-the-loop.

Additional information

What does this prompt do?
  • Checks Xero every 15 minutes for quotes that just moved to Accepted
  • Creates a Notion project page for each new client with the accepted line items, a tailored kickoff checklist, and owner assignments
  • Posts a card to your delivery Slack channel with a link to the Notion project and the deal size
  • Drafts a personalised welcome email in Gmail that references what the client bought and proposes kickoff meeting times, left in Drafts for the account owner to review and send
What do I need to use this?
  • A Xero login with permission to read quotes and contacts
  • A Notion workspace with a projects database and a running index page for processed quotes
  • A Slack workspace and the channel where kickoff cards should land
  • A Gmail account for the person who owns the welcome email
  • A simple owner mapping (which team member owns which product or service line)
How can I customize it?
  • Point it at your Notion projects database and the index page it should use to remember what has already been processed
  • Set the Slack channel that receives the kickoff cards
  • Configure the account-owner mapping so each new client gets the right owner assigned and the right person listed as sender on the draft email
  • Adjust the sweep frequency if 15 minutes is too tight or too loose for your pipeline

Frequently asked questions

Will this send the welcome email automatically?
No. The email always lands as a draft in Gmail for the account owner to review, personalise if needed, and send. Nothing goes out to the customer without a human clicking send.
What happens if the same quote gets accepted twice or the sweep runs while a kit is already in progress?
Each newly accepted quote is recorded on a Notion index page as soon as it is processed. On every sweep, the agent checks that index first and skips anything it has already handled, so no client gets two kickoff kits.
Which Xero quote statuses trigger a kickoff kit?
Only quotes with status Accepted. Draft, Sent, Declined, Invoiced, and Deleted quotes are ignored. If you want a separate track for Sent quotes, that can be added as a second workflow.
How quickly will the agent notice a newly accepted quote?
Within 15 minutes of the status change. Xero does not send outgoing notifications when a quote is accepted, so the agent polls on a schedule instead of waiting on a push.
Can I run this against more than one Xero organisation?
Yes. Each Xero organisation you connect can be swept on its own schedule, with its own Notion database, Slack channel, and owner mapping.

Stop scrambling every time a quote gets signed.

Every accepted deal shows up ready to run: a project in Notion, a heads-up in Slack, and a draft welcome email waiting for the owner to review.