Turn accepted Xero quotes into instant client kickoff kits

By General Input

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.

Integrations

  • Xero
  • Notion
  • Slack Bot
  • Gmail

Type

Agentic Task

Categories

  • Sales
  • Operations

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.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentWin back LiveChat visitors whose chats went unansweredA 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 reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client account