You need three things:
Xpactio is not listed in Attio’s app directory yet. You install it from this site.
You don’t need an Xpactio account for the Free plan. You create one only to pay for Pro; see Plans and limits.
xero_invoice_id, xero_invoice_number, xero_invoice_status, xero_invoice_url, xero_last_sync, xero_sync_error.deals,companies.The invoice appears in Xero. A few seconds later the deal shows its Xero number, status and a link to it.
Open Attio → Settings → Apps → Xpactio → Settings.
| Section | What it controls |
|---|---|
| Xpactio Account | Links this workspace to an Xpactio account. Needed only to pay for Pro. |
| 1. Xero Connection | Shows which Xero organisation Xpactio uses. |
| 2. Invoice Mode | quick 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 Template | Fallback 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 Fields | Where 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 Fields | Which 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. Quotes | Quote mode, expiry, status, branding theme, terms, writeback fields, the Xero Quote object and quote sync. |
| 8. Purchase Orders | Supplier fields, line defaults, delivery days, status, branding theme, writeback fields. |
| 9. Credit Notes | Line description, status, branding theme, writeback fields, including the credited amount. |
| 10. Advanced | Target 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.
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.
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:
line_items.description, quantity and unit_price.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.
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.
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.
The Invoices tab on a deal or company lists only invoices that are linked to it. To link them:
deals) and Link: attribute to match the Reference against.Matching is exact. An invoice whose Reference matches no record, or matches more than one, stays unlinked; Xpactio doesn’t guess by name.
Open a record and press the Xpactio button in its header.
| Action | Where | What it does |
|---|---|---|
| Create Xero Invoice | Any target object except Invoices and Xero Quote | Creates an invoice from the record. In quick mode a double click within two minutes creates one invoice, not two. |
| Create Xero Quote | Any target object except Invoices and Xero Quote | Creates a quote; status and expiry come from section 7. |
| Create Xero Repeating Invoice | Any target object except Invoices and Xero Quote | Sets 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 Order | Any object except Invoices and Xero Quote | Orders from the supplier mapped in section 8, not from your customer. |
| Sync Invoices from Xero | Any record | Pulls invoices changed in Xero since the last sync. |
| Sync Quotes from Xero | Any record | Pulls quote changes. Xero sends no notifications for quotes, so this or a workflow is the only way quotes update. |
| Attach invoice PDF | A record with a Xero invoice | Downloads the invoice PDF from Xero and saves it to the record’s Files. |
| Email invoice from Xero | An Invoices record, or a record with a Xero invoice | Asks 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 Xero | Invoices object | Changes 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 Xero | Invoices object | Voids an AUTHORISED invoice with no payments or credit notes applied. Delete drafts in Xero instead. |
| Create Xero Credit Note | Invoices object | Credits the invoice’s customer in the invoice’s currency. The form opens every time. |
| Edit Quote in Xero | Xero Quote object | Changes a quote. INVOICED and DELETED quotes can’t change. |
| Decline in Xero | Xero Quote object | Declines a SENT quote. |
| Convert to Invoice | Xero Quote object | Turns an ACCEPTED quote into an invoice and marks the quote INVOICED. |
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.
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.
Select records in a table view and open the bulk menu.
Every Xpactio action is also a block in Attio workflows. Add a block, choose the record it acts on, and set any override.
| Block | Inputs | Result |
|---|---|---|
| Create Xero invoice | Record 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 settings | Invoice created |
| Create Xero repeating invoice | Record 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 invoice | Record with a linked Xero invoice | Invoice updated: due date and line from the record’s current fields. The new line replaces all old line items. |
| Email Xero invoice | Record with a linked Xero invoice | Invoice 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 invoice | Invoice record | Invoice voided |
| Sync invoices from Xero | None | Invoices synced |
| Create Xero quote | Record 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 charges | Quote created |
| Update Xero quote | Quote record and fields | Quote updated |
| Decline Xero quote | Quote record | Quote declined |
| Convert Xero quote to invoice | Quote record | Invoice created |
| Sync quotes from Xero | None | Quotes synced |
| Create Xero purchase order | Record | Purchase order created |
| Create Xero credit note | Invoice record and amount | Credit note created |
| Attach Xero invoice PDF | Record with a Xero invoice | PDF 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, Deleted | Starts 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.
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.
The trigger fires when an invoice already in Attio changes status. The first sync, which brings in your existing invoices, doesn’t fire it.
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 it | Plan |
|---|---|
| Sync buttons, record actions, workflow blocks | Free and Pro |
| Every night at 00:00 UTC: invoices, then quotes | Pro |
| Xero reports an invoice change; Attio updates within minutes | Pro |
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.
Xpactio adds an entry to the record’s activity timeline when something happens in Xero:
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.
| Free, $0 | Pro, $39 a month per workspace | |
|---|---|---|
| New documents | 10 a month | Unlimited |
| Document types | All four | All four |
| Buttons, bulk actions, workflow blocks | Yes | Yes |
| Sync | When you click | Also nightly and on Xero changes |
| Trigger “Xero invoice status changed” | No | Yes |
| Step “Wait for Xero invoice payment” | No | Yes |
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.
| You see | Do this |
|---|---|
| “Integration not configured” | Connect Xero on the Connections tab, then press Check Status. |
| Documents go to the wrong Xero organisation | Remove 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 warning | A 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 note | The invoice record has no Xero ID. Sync invoices, then try again. |
| A bulk run stopped early | Xero allows 60 calls a minute per organisation. Wait a minute and run it on the rest. |
| “Attach invoice PDF” fails | Xpactio needs Attio file access. Reinstall the app if you installed it before file access was added. |
| Invoice records show an ID instead of a number | Set 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 message | Xero 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 timeline | Check 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 nothing | Use capitals: PAID, AUTHORISED. |
Email help@xpactio.com with your Attio workspace name, the record link and the text from the sync error field.