Xero integration
Post bills, inventory adjustments, and daily cost of goods sold directly to Xero. No CSV exports, no manual journal entries, no copying numbers between systems.
Getting connected
- 1
Connect Xero
Open Settings → Accounting and click Connect Xero. You'll be redirected to Xero to authorize the connection. Pick the organization you want Carpe Inventory IQ to post to — you can always disconnect later without losing posted history.
- 2
Sales-channel tracking is set up automatically
If your Xero organization has no tracking categories yet (the most common case for new Xero accounts), Carpe Inventory IQ creates a "Sales Channel" category for you and pre-fills one option for every sales channel you've already connected — Shopify, Amazon FBM, Amazon FBA, Walmart, and so on. The setup page lands ready to use. If you already have one or two tracking categories, Carpe Inventory IQ leaves them alone and asks you which one to map onto, since picking the wrong one (e.g. "Region") would tag your COGS journals incorrectly.
- 3
Review and save your chart of accounts
On Settings → Accounting → Configure mapping, Carpe Inventory IQ pre-fills likely matches for each posting role from your Xero chart of accounts. Confirm or change Inventory Asset, Accounts Payable, Cost of Goods Sold, Inventory Adjustment, and Landed Cost, then click Save chart of accounts. The Landed Cost role should point at an Inventory Asset sub-account (e.g. "Inventory Asset — Freight In") or your main Inventory Asset account — freight and duties are capitalized to inventory under IAS 2 / ASC 330 and recognized in Cost of Goods Sold when the inventory sells.
- 4
Post a test bill
Receive a purchase order as you normally would. Within a minute the bill appears in Xero as a DRAFT invoice (ACCPAY type) so you can review it before approving. The Reference field is tagged so your accountant can filter for Carpe Inventory IQ–authored documents.
What posts, and when
Bills — from purchase-order receipts
Every goods receipt creates a draft Invoice (ACCPAY) in Xero. Inventory rolls up to one line per receipt ("Inventory received from {vendor} — PO# [{number}]") capitalized to Inventory Asset — your inventory system tracks SKU-level detail, Xero only needs the dollar total. Purchase-order adjustments — shipping, duty, fees — appear as separate invoice lines capitalized to inventory, pro-rated by received quantity on partial receipts. A DISCOUNT adjustment posts as a negative line on Inventory Asset. Due date is computed from the supplier's payment terms. Bills land as DRAFT — you finalize them when you're ready.
Manual Journals — from physical counts
When you post a physical count, any variance against system on-hand creates a draft Manual Journal: shrinkage debits your Inventory Adjustment account and credits Inventory Asset; overage inverts. Your accountant reviews and approves.
Daily Cost of Goods Sold
A scheduled daily job posts one Manual Journal per day for yesterday's shipped orders, broken down by sales channel. Debits COGS (tagged with the sales-channel Tracking Option) and credits Inventory Asset for the total. Posts final — no draft review needed.
When something goes wrong
Failed postings surface in Settings → Accounting with the error message. Click Retry to queue another attempt. A daily health check also verifies the connection and marks it as degraded if your Xero session has expired, so you'll see a prompt to reconnect before any posting silently stalls.
Frequently asked questions
- Why is inbound freight capitalized to inventory instead of expensed?
- Under IAS 2 / ASC 330, inbound freight, duty, brokerage, and insurance are costs directly attributable to bringing inventory to a saleable condition. They are capitalized to inventory on receipt and recognized in COGS when the inventory sells. Expensing them in the period the freight bill is paid would overstate COGS that period and understate inventory on the balance sheet. Map your Landed Cost role to an Inventory Asset sub-account (e.g. "Inventory Asset — Freight In") or your main Inventory Asset account.
- What's a Tracking Category, and why do I need one?
- Xero uses Tracking Categories (and Tracking Options inside them) to segment your P&L by dimensions like sales channel, region, or department. Carpe Inventory IQ uses one category to tag each daily COGS journal entry with the sales channel it came from, so your P&L can show profit by Shopify vs Amazon vs Walmart. Xero limits each organization to two active tracking categories total, so if you already have two, you'll pick which one to map onto rather than creating a third.
- Carpe Inventory IQ created a tracking category in my Xero account. Can I rename or change it?
- Yes. The "Sales Channel" category Carpe Inventory IQ creates is a regular Xero tracking category — you can rename it, add or rename options, or archive it from Xero's Settings → General Settings → Tracking Categories. The setup page in Carpe Inventory IQ also has a "Manage tracking categories in Xero" link that opens your Xero org directly to that page.
- I have an existing tracking category I want to use. What do I do?
- On the Settings → Accounting → Configure mapping page, the picker shows every active tracking category in your Xero account with the option count and names. Click the one you want to use, then save. If your category doesn't yet have an option for each sales channel, you can either add the missing options in Xero (the picker links to that page) or use the "Create another category" flow inside Carpe Inventory IQ to make a fresh one — but be aware Xero limits each organization to two active tracking categories total.
- Why do bills post as DRAFT?
- Xero invoices have an explicit DRAFT status, and posting as DRAFT means nothing hits your accounts payable balance until you (or your accountant) review and finalize the bill. This matches how most teams want to work — Carpe Inventory IQ records the receipt, your bookkeeper checks it, and approval is a deliberate action.
- What if a posting fails?
- Every failed posting appears in Settings → Accounting with the error message and a Retry button. Transient errors retry automatically; persistent errors (e.g., a missing account in your mapping) need your attention. Fix the mapping and click Retry.
- Can I disconnect without losing posted history?
- Yes. Disconnecting stops new postings but leaves everything already posted in Xero untouched. The audit trail in Carpe Inventory IQ is preserved. Disconnecting also revokes the OAuth grant on Xero's side so the next time you reconnect (to the same or a different organization), Xero shows you a clean consent screen rather than "Already connected" — no manual cleanup needed in Xero's Connected Apps settings. When you reconnect later, posting resumes from that point forward.
- Do I need to use the live integration to export to Xero?
- No. The CSV export path is still available on every report. Use the live integration for continuous posting; use CSV export if you prefer batch-importing monthly or your accountant wants to review everything before it hits the books.
- What about QuickBooks Online?
- QuickBooks Online is supported with a separate connector. See the QuickBooks Online integration help page for setup details.
- How are duplicate postings prevented if a retry happens?
- Every posting carries a stable idempotency key derived from the source event (goods receipt ID, count session ID, or date). If a retry reaches Xero after the original attempt already succeeded, Xero returns the original document instead of creating a duplicate.
Ready to connect?
Open Settings → Accounting in your app to get started.