Help center

How Xpactio connects Xero to Attio: what to set up, what each button and workflow block does, and what to check when something fails.

Before you install

You need three things:

  • Admin rights in Attio. Only a workspace admin can install an app.
  • A Xero organisation and a Xero user who can create invoices in it. To try Xpactio safely, use Xero’s free Demo Company.
  • An Attio plan with custom objects, if you want every Xero invoice and quote stored as its own Attio record. Without custom objects, Xpactio still creates documents and writes their number and status onto the record you clicked.

Xpactio is not listed in Attio’s app directory yet. You install it from this site.

Install and connect Xero

  1. Press Install in Attio. Attio shows “Install Xpactio and allow access”. Choose your workspace and press Allow.
  2. Attio opens Xpactio’s Connections tab. Press Connect and sign in to Xero.
  3. On Xero’s screen, open the organisation list and pick the organisation Xpactio should write to. Press Allow access.
  4. Open the Settings tab, section 1. Xero Connection, and press Check Status. The message shows the Xero organisation ID Xpactio uses.
Several Xero organisations? Xero shows every organisation you have ever connected to Xpactio. Xpactio uses the one you chose last. If Check Status shows the wrong one, remove the connection on the Connections tab and connect again, choosing the right organisation.

You don’t need an Xpactio account for the Free plan. You create one only to pay for Pro; see Plans and limits.

Your first invoice in five steps

  1. In 3. Default Invoice Template, set a line description, rate, quantity, currency, payment due days and Xero account code (for example 200, Sales). These defaults fill any field your record doesn’t have.
  2. In 4. Writeback Fields, type a slug for each field, for example xero_invoice_id, xero_invoice_number, xero_invoice_status, xero_invoice_url, xero_last_sync, xero_sync_error.
  3. In 10. Advanced, set Target Objects to the objects you invoice from, for example deals,companies.
  4. Back in section 4, press Create fields. Xpactio adds the missing writeback attributes to your target objects.
  5. Open a deal, press the Xpactio button in the record header and choose Create Xero Invoice.

The invoice appears in Xero. A few seconds later the deal shows its Xero number, status and a link to it.

Settings, section by section

Open Attio → Settings → Apps → Xpactio → Settings.

SectionWhat it controls
Xpactio AccountLinks this workspace to an Xpactio account. Needed only to pay for Pro.
1. Xero ConnectionShows which Xero organisation Xpactio uses.
2. Invoice Modequick creates the invoice in one click from defaults and mapped fields. custom opens a form so you can change the details first.
3. Default Invoice TemplateFallback values: description, rate, quantity, currency, due days, account code, status (Draft or Authorised), branding theme. Also the invoice lines settings: which relationship holds the line records and which attributes are their description, quantity, unit price, item code and account code.
4. Writeback FieldsWhere Xpactio writes the Xero ID, number, status, link, last sync time and error, and the repeating invoice ID and status. “Create fields” adds the missing ones.
5. Source FieldsWhich Attio attributes become the Xero contact, line, currency, due days, account code, address and reference.
6. Invoice Sync“Sync Now” pulls invoice changes from Xero.
7. QuotesQuote mode, expiry, status, branding theme, terms, writeback fields, the Xero Quote object and quote sync.
8. Purchase OrdersSupplier fields, line defaults, delivery days, status, branding theme, writeback fields.
9. Credit NotesLine description, status, branding theme, writeback fields, including the credited amount.
10. AdvancedTarget objects, the Invoice object, linking invoices by Reference, turning off Xero events on record timelines, and a fallback Xero organisation ID.

Set the branding theme explicitly. If you leave it blank, Xero uses whichever theme is first in its list, and reordering that list changes the layout of every new document.

Source fields

A source field tells Xpactio which attribute on the record holds a value. Use the attribute’s API slug, not its display name: in Attio, open the attribute and copy the slug.

  • value — an attribute on the same record, such as the deal value.
  • associated_company.name — an attribute on a linked record, one hop away.

If a record has no value for a mapped field, Xpactio uses the default from section 3. If the record has no customer name at all, Xpactio stops and says “Customer name required” instead of creating an invoice without a contact.

Xpactio finds the Xero contact by name and email and creates it if it doesn’t exist. Contact Address must point at a location attribute. Xpactio writes it to a new contact, and to an existing contact only when that contact has no street address, so addresses on invoices you already sent don’t change.

Invoices with several lines

By default an invoice has one line, built from the fields above. To send one Xero line per related record, for example a deal’s line items:

  1. In section 3, set Invoice lines: relationship attribute on the source record to the relationship slug, for example line_items.
  2. Set the slugs of the line record’s description, quantity and unit price. Blank means description, quantity and unit_price.
  3. Optional: an item code attribute (sent as Xero’s ItemCode) and an account code attribute. A line without an account code uses the template’s.

Create Xero Invoice (quick and custom mode), the bulk action and the Create Xero invoice block then send every line. Xpactio refuses to create the invoice when the record has no lines or a line has no description, quantity or unit price, and names the line in the sync error field. In custom mode the form lists the lines instead of the single-line fields.

Reference is the text your customer sees on the invoice. Map it to your deal or project number; it is also how Xpactio links synced invoices back to deals.

Writeback fields

After Xero accepts a document, Xpactio writes its details back to the record you clicked. Each document type has its own writeback fields: invoices in section 4, quotes in section 7, purchase orders in section 8, credit notes in section 9.

  • A slug that doesn’t exist on the object is skipped, and the record shows a warning. The Xero document is still created.
  • If one field fails, Xpactio still writes the others.
  • Create fields adds missing attributes. It never changes the type of an attribute you already have.
  • When Xero rejects a document, Xpactio writes Xero’s message to the sync error field. Read it first when something breaks.

Invoice and quote objects

To see every Xero invoice in Attio, not only the ones you created, turn on Store invoices as Attio records in section 10 and press Run Setup. Xpactio creates an Invoices object with the Xero number, status, contact, dates, total, amount paid and amount due. Quotes have the same option in section 7, which creates a Xero Quote object.

Each record is titled with its Xero number, such as INV-0035. If you set up these objects before November 2026, press Run Setup again: it adds the title field. Older records keep showing an ID until a sync touches them; to refresh invoices now, select them and use Sync from Xero.

Attio doesn’t let an app choose the record title. To see invoice numbers instead of record IDs, open Attio Settings → Objects → Invoices → Configuration and set Record text to Invoice Number. Do the same for Quotes with Quote Number.

Your existing objects are never changed. Amounts and dates on these objects are read-only in Attio: change them in Xero, or with Xpactio’s edit actions, and they come back on the next sync.

The Invoice object unlocks Edit Invoice in Xero, Void in Xero, Create Xero Credit Note and the bulk Sync from Xero. The Xpactio page in the Attio sidebar shows outstanding, overdue and paid totals from this object.

Link invoices to deals

The Invoices tab on a deal or company lists only invoices that are linked to it. To link them:

  1. Map Reference in section 5 to a unique attribute on your deal, for example a deal number.
  2. In section 10, turn on Link synced invoices to a record by Xero Reference.
  3. Set Link: object to search (for example deals) and Link: attribute to match the Reference against.
  4. Run a sync.

Matching is exact. An invoice whose Reference matches no record, or matches more than one, stays unlinked; Xpactio doesn’t guess by name.

Record actions

Open a record and press the Xpactio button in its header.

ActionWhereWhat it does
Create Xero InvoiceAny target object except Invoices and Xero QuoteCreates an invoice from the record. In quick mode a double click within two minutes creates one invoice, not two.
Create Xero QuoteAny target object except Invoices and Xero QuoteCreates a quote; status and expiry come from section 7.
Create Xero Repeating InvoiceAny target object except Invoices and Xero QuoteSets up a subscription in Xero: a form asks for the frequency (weekly to yearly), start date, optional end date, due terms and status. Contact, lines and defaults are the same as for an invoice. See Repeating invoices.
Create Xero Purchase OrderAny object except Invoices and Xero QuoteOrders from the supplier mapped in section 8, not from your customer.
Sync Invoices from XeroAny recordPulls invoices changed in Xero since the last sync.
Sync Quotes from XeroAny recordPulls quote changes. Xero sends no notifications for quotes, so this or a workflow is the only way quotes update.
Attach invoice PDFA record with a Xero invoiceDownloads the invoice PDF from Xero and saves it to the record’s Files.
Email invoice from XeroAn Invoices record, or a record with a Xero invoiceAsks Xero to email the invoice to its contact with your Xero invoice email template. A confirmation names the recipient first. Works for SUBMITTED, AUTHORISED and PAID invoices whose Xero contact has an email; drafts are refused with a message. Free on both plans.
Edit Invoice in XeroInvoices objectChanges the due date, the reference or both; leave a field blank to keep it. Line items can’t be edited here: the Update Xero invoice workflow block replaces them.
Void in XeroInvoices objectVoids an AUTHORISED invoice with no payments or credit notes applied. Delete drafts in Xero instead.
Create Xero Credit NoteInvoices objectCredits the invoice’s customer in the invoice’s currency. The form opens every time.
Edit Quote in XeroXero Quote objectChanges a quote. INVOICED and DELETED quotes can’t change.
Decline in XeroXero Quote objectDeclines a SENT quote.
Convert to InvoiceXero Quote objectTurns an ACCEPTED quote into an invoice and marks the quote INVOICED.
Xpactio never applies a credit note to an invoice. The credit note is created unallocated, and a person applies it in Xero, so a wrong invoice is never credited automatically.

Repeating invoices

A repeating invoice is a template in Xero that raises a new invoice on every schedule date, for example a monthly subscription. Create one with the Create Xero Repeating Invoice record action or the Create Xero repeating invoice workflow block.

  • Frequency: weekly, every 2 weeks, monthly, quarterly, every 6 months or yearly.
  • Start date is the date of the first invoice. Without an end date, the template repeats until someone stops it in Xero.
  • Due terms: a number of days after the invoice date or after the end of the invoice month, or a day of the current or following month.
  • Draft templates raise draft invoices that someone approves in Xero. Authorised templates raise approved invoices.

The contact, currency, account code, reference, branding theme and lines come from the same settings as a one-off invoice, including invoices with several lines. Xpactio writes the template’s ID and status to the Repeating Invoice ID and Repeating Invoice Status writeback fields in section 4. Xero has no web link for a single template, so none is written; find it on the Repeating tab of Xero’s invoices list.

Creating the template counts as one document towards the Free limit. The invoices Xero raises from it later don’t count, and Xpactio syncs them like any other invoice.

Bulk actions

Select records in a table view and open the bulk menu.

  • Create Xero invoices creates one invoice per selected record, about one every four seconds to stay under Xero’s limit of 60 calls a minute. It stops when you reach the Free limit or Xero asks it to slow down, and shows a summary. An invoice whose Xero ID couldn’t be written to its record is listed as a warning: it exists in Xero, so don’t run the action on that record again.
  • Sync from Xero, on the Invoices object, refreshes the selected invoices. A status change it finds fires the status trigger and finishes payment waits, like any other sync.

Workflows

Every Xpactio action is also a block in Attio workflows. Add a block, choose the record it acts on, and set any override.

BlockInputsResult
Create Xero invoiceRecord to invoice; optional line description and due days; “Skip if this record already has an invoice”; optional lines attribute and line attributes, which override the invoice lines settingsInvoice created
Create Xero repeating invoiceRecord to bill; frequency; optional start date and end date (YYYY-MM-DD), due, due terms, status, line description; “Skip if this record already has a repeating invoice”Repeating invoice created
Update Xero invoiceRecord with a linked Xero invoiceInvoice updated: due date and line from the record’s current fields. The new line replaces all old line items.
Email Xero invoiceRecord with a linked Xero invoiceInvoice emailed, with the recipient’s address. A draft or a contact without an email stops the step with the reason in the sync error field.
Void Xero invoiceInvoice recordInvoice voided
Sync invoices from XeroNoneInvoices synced
Create Xero quoteRecord to quote; optional quote record ID to send one Xero line per quote line, with line attributes, a quantity divisor and up to two one-off chargesQuote created
Update Xero quoteQuote record and fieldsQuote updated
Decline Xero quoteQuote recordQuote declined
Convert Xero quote to invoiceQuote recordInvoice created
Sync quotes from XeroNoneQuotes synced
Create Xero purchase orderRecordPurchase order created
Create Xero credit noteInvoice record and amountCredit note created
Attach Xero invoice PDFRecord with a Xero invoicePDF attached
Wait for Xero invoice payment (Pro)Invoice record, or a record with a Xero invoice ID; optional “Give up after N days”Three exits: Paid, Voided or deleted, Gave up (overdue)
Xero invoice status changed (trigger, Pro)The statuses to watch: Submitted, Authorised, Paid, Voided, DeletedStarts the workflow for that invoice

Blocks that create documents are safe to retry: if Attio retries a step after a network error, Xero receives the same request key and doesn’t create a second document. Convert is never retried, because it makes two changes in Xero.

Workflow recipes

Invoice when a deal is won

  1. Trigger: Record updated on Deals, when Deal stage becomes Won.
  2. Block: Create Xero invoice, record = the trigger’s deal, with “Skip if this record already has an invoice” on.
  3. Optional: a Slack block that posts the invoice number to the deal owner.

Chase until paid (Pro)

  1. After Create Xero invoice, add Wait for Xero invoice payment with “Give up after 30 days”.
  2. Paid exit: move the deal to the next stage. Gave up exit: create a task for the account owner.

The wait finishes when a sync sees the invoice paid or voided: Xpactio syncs every night and when Xero reports a change. The nightly run also ends waits that passed their “Give up after” date. That run is Pro only, so on Free the step stops with an error instead of waiting.

React to payments made in Xero (Pro)

  1. Trigger: Xero invoice status changed, watching Paid.
  2. Blocks: update the linked deal, notify the team, start onboarding.

The trigger fires when an invoice already in Attio changes status. The first sync, which brings in your existing invoices, doesn’t fire it.

Quote, then invoice when accepted

  1. Create Xero quote from the deal. Send it from Xero.
  2. A scheduled workflow runs Sync quotes from Xero.
  3. When the quote status becomes ACCEPTED, run Convert Xero quote to invoice.

How sync works

Your Xero sign-in is stored in Attio’s own connection store, and only the Xpactio app inside Attio talks to Xero. Each sync asks Xero for documents changed since the last sync and updates the matching Attio records.

What starts itPlan
Sync buttons, record actions, workflow blocksFree and Pro
Every night at 00:00 UTC: invoices, then quotesPro
Xero reports an invoice change; Attio updates within minutesPro

Xero statuses arrive in capitals: DRAFT, SUBMITTED, AUTHORISED, PAID, VOIDED, DELETED. Filter by PAID, not Paid. A part-paid invoice stays AUTHORISED; look at amount paid and amount due.

Xero events on the timeline

Xpactio adds an entry to the record’s activity timeline when something happens in Xero:

  • Created: “Xero invoice INV-0042 created — $1,200.00” on the record you created the invoice, quote, purchase order or credit note from, by button, form, bulk action or workflow block.
  • Emailed: “Xero invoice INV-0042 emailed to ap@acme.com” when you send the invoice from Attio. Each send is its own entry.
  • Paid and voided: “Xero invoice INV-0042 paid” on the invoice record and on the deal it is linked to, when a sync sees the status change. The first sync, which brings in your existing invoices, adds nothing.

Each event appears once: running the same sync twice updates the entry instead of adding another. The entries are of the activity type Xero events, which Xpactio creates in your workspace the first time it needs it.

To stop adding entries, turn on Turn off Xero events on record timelines in section 10. A timeline entry that can’t be written never stops a document from being created or a sync from finishing.

Custom activity types depend on your Attio plan. If Attio refuses to create the Xero events type, Xpactio skips timeline entries and asks Attio again a day later.

Plans and limits

Free, $0Pro, $39 a month per workspace
New documents10 a monthUnlimited
Document typesAll fourAll four
Buttons, bulk actions, workflow blocksYesYes
SyncWhen you clickAlso nightly and on Xero changes
Trigger “Xero invoice status changed”NoYes
Step “Wait for Xero invoice payment”NoYes

Creating an invoice, quote, purchase order, credit note or repeating invoice counts towards the 10; converting a quote counts too. Editing, voiding, declining, emailing and syncing don’t. At the limit, Xpactio stops creating new documents until the next month or until you upgrade. Documents you already created keep syncing.

To upgrade, open Settings → Xpactio Account → Link Account, create an account and pay with Stripe. Cancel in any month; documents stay in Xero.

Troubleshooting

You seeDo this
“Integration not configured”Connect Xero on the Connections tab, then press Check Status.
Documents go to the wrong Xero organisationRemove the connection and connect again, choosing the right organisation. See Install.
“Customer name required”Map Contact Name in section 5, for example associated_company.name, or fill the name on the record.
Invoice created, but the record shows a warningA writeback slug doesn’t exist. Press Create fields in section 4.
The Invoices tab says “Invoices aren’t linked to records”Turn on linking by Reference. See Link invoices to deals.
“Only an AUTHORISED invoice can be voided”Drafts and submitted invoices are deleted in Xero, not voided.
“Cannot void an invoice with payments or credit notes applied”Remove the payment or credit allocation in Xero first.
“Invoice line … is missing unit_price”A line record has no price, quantity or description. Fill it in, or check the line attribute slugs in section 3.
“Invoice … has no lines”Invoice lines are on in section 3, but this record has no related line records. Add them, or clear the lines setting to send one line.
“Invoice isn’t in Xero yet” on a credit noteThe invoice record has no Xero ID. Sync invoices, then try again.
A bulk run stopped earlyXero allows 60 calls a minute per organisation. Wait a minute and run it on the rest.
“Attach invoice PDF” failsXpactio needs Attio file access. Reinstall the app if you installed it before file access was added.
Invoice records show an ID instead of a numberSet Record text to Invoice Number in the object’s settings. See Invoice and quote objects.
“Xero emails only approved invoices”The invoice is a draft. Approve it in Xero, or set the default status to Authorised in section 3, then send it again.
“… has no email address”Add an email to the contact in Xero, or map Contact Email in section 5 before creating the next invoice.
Email fails with a daily limit messageXero limits how many emails an organisation sends a day, and demo or trial organisations get very few. Try the next day, or send the invoice from Xero.
No Xero events on the timelineCheck that section 10 doesn’t turn them off, and that your Attio plan includes custom activities. Paid and voided entries appear only after a sync sees the change.
Status filter finds nothingUse capitals: PAID, AUTHORISED.

Contact

Email help@xpactio.com with your Attio workspace name, the record link and the text from the sync error field.