Skip to content
adapters.io

Xero to BigQuery integration for analytics-ready accounting data

The Xero to BigQuery integration from Adapters loads invoices, bills, payments, contacts, and the chart of accounts from the Xero API into partitioned BigQuery tables on an incremental schedule, so revenue, cash, and margin models read a full ledger history across every organization instead of exporting reports by hand. Field mapping is no-code.

No credit card required.

Field mapping auto-plugged · tap a port to rewire

5 sample records ready

Last updated September 2026

What running Xero to BigQuery by hand costs you

  • The Xero API paginates by page and enforces per-minute and daily rate limits, so backfilling a full invoice and bill history into BigQuery means chaining many throttled calls.
  • Invoices and bills change status after they post (paid, voided, credited), and a naive nightly dump into BigQuery misses those updates.
  • Group reporting across multiple Xero organizations needs one partitioned warehouse table with a consistent chart of accounts, not a stack of per-entity CSV exports.

The field mapping, out of the box

These cables are pre-wired when you pick the pair. Rewire any of them, or add your own, in the same visual data mapping tool you use for every adapter.

Input / XERO

Invoice.InvoiceID
fct_invoice.invoice_id
Invoice.Total
fct_invoice.total
Invoice.Status
fct_invoice.status
Payment.Amount
fct_payment.amount
Account.Code
dim_account.account_code
Invoice.UpdatedDateUTC
fct_invoice.loaded_at

Transforms included

Incremental loads use the Xero UpdatedDateUTC watermark so status changes on invoices and bills flow through on the next run; amounts cast to BigQuery NUMERIC, UTC timestamps become TIMESTAMP, tables partition by updated date, the chart of accounts lands in its own dimension table, and writes MERGE on the Xero GUID so revenue and cash models read one deduplicated ledger.

Xero to BigQuery in depth

The binding constraint on this route is at the Xero end, not the BigQuery end: 5,000 API calls per day per organization. BigQuery adds its own load quotas that decide how often you can land the data. Read from Xero and Google Cloud documentation on 20 August 2026.

Xero allows 5,000 calls per day per organization

The full allocation is 5 concurrent calls, 60 per minute and 5,000 per day per connected organization, with an app-wide ceiling of 10,000 calls per minute across all tenants. Exceeding any of them returns HTTP 429. Every response carries X-DayLimit-Remaining, X-MinLimit-Remaining and X-AppMinLimit-Remaining, so the remaining budget is never a guess. Design the extraction against the daily figure first and the rest follows.

Fetch pages, not documents

The difference between a sustainable sync and one that dies on Thursday is whether the loader requests a page of invoices with a modified-since filter, or fetches each invoice by ID. At 5,000 calls a day, per-document retrieval caps you at roughly 5,000 documents regardless of how small they are. Server-side filtering also means the nightly run gets cheaper as the ledger grows, rather than more expensive.

BigQuery load quotas set your minimum interval

BigQuery allows 1,500 load jobs per table per day and 100,000 per project per day, which is one load every 58 seconds per table at absolute best. For accounting data that is far more headroom than you need, so batch hourly and stop thinking about it. The useful part is that batch load jobs are free on a shared slot pool, so frequent small loads of a ledger cost nothing in compute.

Use NUMERIC for money, never FLOAT64

Xero returns monetary values as decimals, and a ledger has to foot exactly. FLOAT64 introduces drift that shows up as a few cents of variance in a total nobody can trace, which on accounting data is not a rounding artifact but a failed reconciliation. Use NUMERIC for line amounts, tax, totals and outstanding balances, and keep the currency code in its own column even in a single-currency organization.

Partition on the document date, cluster on the tenant

Partition invoices and bills on their document date and cluster on the Xero tenant identifier if you sync more than one organization. BigQuery bills on bytes scanned, so a query for one client in one quarter should not read the whole table. Multi-tenant accounting warehouses are exactly the shape clustering was designed for. The same pattern applies on QuickBooks to BigQuery.

Merge on the Xero identifier, do not append

Invoices are edited, voided, part-paid and credited after they are raised, and their status changes long after the document date. An append-only load ends up with several versions of the same invoice and every revenue total is overstated. Extract on the modified timestamp and MERGE on the Xero identifier into a partition, keeping the status column so models can filter voided documents explicitly rather than assuming.

The chart of accounts is the join nobody plans for

Transaction lines reference account codes, and account codes get renamed, merged and re-typed. Load the chart of accounts as its own table on the same schedule and keep history rather than overwriting it, or a report run in March will attribute February transactions to whatever the account is called today. This is the single most common reason a Xero warehouse disagrees with a Xero report.

Row and file ceilings on the load itself

A load job accepts up to 15 TB and must complete within 6 hours, ndJSON rows cap at 100 MB, and a compressed source file cannot exceed 4 GB. Accounting volumes will not approach any of these, which is worth saying plainly: on this route the ceilings that matter are all at the Xero end. The wider tooling comparison is on best data integration tools.

How it goes live

Three steps, minutes end to end, covered by flat data integration pricing from $49 a month.

STEP 01

Pick the pair

Connect Xero and BigQuery with scoped credentials. About a minute each.

STEP 02

Confirm the mapping

The cables above are pre-wired. Adjust any field, preview the transform on sample records, done.

STEP 03

Schedule the sync

Hourly down to every minute, with retries, alerting, and a full log on every run.

Prefer to understand the moving parts first? Our long-form guide to the Xero to BigQuery guide covers the field-by-field detail, the failure cases, and what changes at volume.

Try it in the live demo Preloads XERO → BIGQUERY with sample records

Xero to BigQuery sync: common questions

How do I connect Xero to BigQuery?

Authorize the Xero organization, choose the accounting endpoints you need, map them onto BigQuery tables, and set a schedule. The load runs incrementally on the Xero UpdatedDateUTC watermark and merges on the Xero GUID, so status changes on invoices and bills reach the warehouse without you re-loading the full ledger every night.

What BigQuery type should Xero amounts use?

NUMERIC. BigQuery NUMERIC carries 38 digits of precision with 9 decimal places, which holds currency exactly. FLOAT64 does not: it is binary floating point, so a ledger loaded as FLOAT64 will eventually disagree with Xero by cents, and a finance team that finds one wrong cent stops trusting the whole warehouse.

Can I report across several Xero organizations in BigQuery?

Yes, and it is the main reason to do this at all. Load every organization into shared tables with a tenant column and map the per-entity account codes onto one dimension table. Consolidated revenue, cash and margin then come from a single query rather than from a spreadsheet that somebody rebuilds each month.

How often should Xero sync to BigQuery?

Hourly is plenty for almost every accounting use case, and daily is fine if the reporting is monthly. Xero enforces per-minute and daily API limits per organization, so a very short interval spends your allocation without making the numbers more useful. Match the schedule to when a human actually looks at the report.

How does the Xero to BigQuery sync work?

The Xero to BigQuery integration from Adapters loads invoices, bills, payments, contacts, and the chart of accounts from the Xero API into partitioned BigQuery tables on an incremental schedule, so revenue, cash, and margin models read a full ledger history across every organization instead of exporting reports by hand. Field mapping is no-code.

Is there a prebuilt Xero connector for BigQuery?

Yes. This Xero to BigQuery connector ships prebuilt: the field mapping is wired the moment you pick the pair, transforms are included, and you can try it against sample records in the live demo. No code or engineering sprint required.

How much does the Xero BigQuery integration cost?

Pricing is flat and monthly: Starter at $49, Growth at $149, Scale at $399. Every plan includes this pair, visual field mapping, and per-record logs. There are no per-task or per-row fees, so the bill stays the same as volume grows.

How often can Adapters sync Xero to BigQuery?

Hourly on Starter, every 5 minutes on Growth, and down to every minute on Scale. Failed records retry automatically with backoff, and alerting plus a full per-record log come standard on every run.

Do I need to write code to connect Xero and BigQuery?

No. Fields are auto-mapped the moment you pick the pair, and you can rewire any mapping visually before the first sync. Incremental loads use the Xero UpdatedDateUTC watermark so status changes on invoices and bills flow through on the next run; amounts cast to BigQuery NUMERIC, UTC timestamps become TIMESTAMP, tables partition by updated date, the chart of accounts lands in its own dimension table, and writes MERGE on the Xero GUID so revenue and cash models read one deduplicated ledger.

More pairs from the API connector library

stripe quickbooks integration shopify netsuite integration salesforce hubspot integration airtable google sheets sync postgres to snowflake sync shopify quickbooks integration salesforce netsuite integration paypal quickbooks integration square quickbooks integration stripe netsuite integration hubspot quickbooks integration quickbooks to xero migration shopify xero integration salesforce to snowflake integration square netsuite integration hubspot xero integration salesforce to bigquery integration postgres to bigquery netsuite to snowflake integration quickbooks to bigquery integration stripe to snowflake integration shopify to snowflake integration quickbooks to snowflake integration hubspot to snowflake integration netsuite to bigquery integration stripe to bigquery integration shopify to bigquery integration paypal to snowflake integration square to snowflake integration square to bigquery integration netsuite to postgres integration salesforce to postgres integration xero to snowflake integration hubspot to bigquery integration paypal to bigquery integration stripe to postgres integration snowflake to bigquery migration shopify to postgres integration hubspot to postgres integration bigquery to snowflake migration quickbooks to postgres integration xero to postgres integration square to postgres integration paypal to postgres integration snowflake to postgres mysql to postgres migration mysql to snowflake redshift to snowflake migration mysql to bigquery sql server to snowflake sql server to postgresql migration

Browse the full api connector library, or request a pair you do not see.

Xero and BigQuery, finally in agreement

Map the pair once and let it sync on schedule. Flat price from $49 a month, no per-task fees.

Try the live demo

No credit card required.