
Configuring Xero as a Source
In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the Xero option from the list of connectors. Click Next and you’ll be prompted to add your access.1. Add account access
Xero uses managed OAuth2, so you do not need to create an app or copy any credentials. Click the Authorization button and sign in with your Xero account, then choose the organisation you want Nekt to access. Nekt requests read-only scopes, so the connector can only read your data — it cannot modify anything in Xero. The following configurations are available:- Start date: The earliest date from which records will be synced. Records created or updated after this date will be extracted.
- Tenant ID: The Xero tenant (organisation) ID to extract. Leave this empty to use the first organisation connected during authorization.
- Include archived contacts: (Default:
false) When enabled, archived contacts are included in thecontactsstream.
2. Select streams
Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.Tip: The stream can be found more easily by typing its name.Select the streams and click Next.
3. Configure data streams
Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.- Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
- Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
- Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
- Sync Type: you can choose between INCREMENTAL and FULL_TABLE.
- Incremental: every time the extraction happens, we’ll get only the new data - which is good if, for example, you want to keep every record ever fetched.
- Full table: every time the extraction happens, we’ll get the current state of the data - which is good if, for example, you don’t want to have deleted data in your catalog.
4. Configure data source
Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times). Optionally, you can define some additional settings:- Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here.
- Determine when to execute an Additional Full Sync. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.
5. Check your new source
You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.Incremental extraction
Most streams are extracted incrementally. The connector tracks the last value of each stream’s replication key and, on the next run, sends anIf-Modified-Since header to Xero so only records changed after that point are fetched. The replication key is updated_date_utc for most streams, created_date_utc for bank_transfers, and journal_number for journals.
The following streams do not support incremental filtering and are always synced as full table: branding_themes, contact_groups, currencies, organisations, repeating_invoices, tax_rates, and tracking_categories.
Many complex fields (such as
line_items, contact, addresses, phones, allocations, payments, and journal_lines) are delivered as JSON-encoded strings rather than native nested objects. To work with their contents, parse the string downstream (for example with JSON_PARSE/JSON_EXTRACT on AWS or JSON_VALUE/JSON_QUERY on GCP). These fields are noted as “JSON string” in the stream descriptions below.Streams and Fields
Below you’ll find all available data streams from Xero and their corresponding fields. Each accordion lists the stream’s primary key, its sync behavior, and all fields.accounts
accounts
The chart of accounts in the organisation. Primary key:
account_id. Sync: Incremental on updated_date_utc.account_id- Unique identifier for the accountcode- Account codename- Account nametype- Account typeclass- Account classstatus- Account statusdescription- Description of the accountsystem_account- System account indicatorbank_account_type- Type of bank accountbank_account_number- Bank account numbercurrency_code- Currency code of the accounttax_type- Default tax typereporting_code- Reporting codereporting_code_name- Reporting code nameshow_in_expense_claims- Whether the account appears in expense claimsenable_payments_to_account- Whether payments can be made to this accounthas_attachments- Whether the account has attachmentsadd_to_watchlist- Whether the account is on the watchlistupdated_date_utc- Last modified timestamp (replication key)
bank_transactions
bank_transactions
Spend and receive money transactions against bank accounts. Primary key:
bank_transaction_id. Sync: Incremental on updated_date_utc.bank_transaction_id- Unique identifier for the bank transactiontype- Transaction type (e.g. SPEND, RECEIVE)status- Transaction statuscontact- Associated contact (JSON string)line_items- Transaction line items (JSON string)bank_account- Bank account the transaction belongs to (JSON string)is_reconciled- Whether the transaction is reconcileddate- Transaction datedate_string- Transaction date as stringreference- Referencecurrency_code- Currency codecurrency_rate- Currency exchange rateurl- Source URLline_amount_types- Whether line amounts are tax inclusive, exclusive, or no taxsub_total- Sub-totaltotal_tax- Total taxtotal- Total amountprepayment_id- Related prepayment IDoverpayment_id- Related overpayment IDhas_attachments- Whether the transaction has attachmentsexternal_link_provider_name- External link provider nameupdated_date_utc- Last modified timestamp (replication key)
bank_transfers
bank_transfers
Transfers of money between two bank accounts. Primary key:
bank_transfer_id. Sync: Incremental on created_date_utc.bank_transfer_id- Unique identifier for the bank transferfrom_bank_account- Source bank account (JSON string)to_bank_account- Destination bank account (JSON string)amount- Transfer amountdate- Transfer datedate_string- Transfer date as stringcurrency_rate- Currency exchange ratefrom_bank_transaction_id- Source bank transaction IDto_bank_transaction_id- Destination bank transaction IDhas_attachments- Whether the transfer has attachmentscreated_date_utc- Creation timestamp (replication key)created_date_utc_string- Creation timestamp as string
branding_themes
branding_themes
Branding themes used on invoices and other documents. Primary key:
branding_theme_id. Sync: Full table.branding_theme_id- Unique identifier for the branding themename- Branding theme nametype- Branding theme typelogo_url- Logo URLsort_order- Sort ordercreated_date_utc- Creation timestamp
contact_groups
contact_groups
Groups used to organize contacts. Primary key:
contact_group_id. Sync: Full table.contact_group_id- Unique identifier for the contact groupname- Contact group namestatus- Contact group statushas_validation_errors- Whether the group has validation errorscontacts- Contacts in the group (JSON string)
contacts
contacts
Customers and suppliers in the organisation. Primary key:
contact_id. Sync: Incremental on updated_date_utc. Archived contacts are included only when “Include archived contacts” is enabled.contact_id- Unique identifier for the contactcontact_number- Contact numberaccount_number- Account numbercontact_status- Contact statusname- Contact namefirst_name- First namelast_name- Last nameemail_address- Email addressskype_user_name- Skype usernamebank_account_details- Bank account detailstax_number- Tax numberaccounts_receivable_tax_type- Accounts receivable tax typeaccounts_payable_tax_type- Accounts payable tax typeaddresses- Contact addresses (JSON string)phones- Contact phone numbers (JSON string)is_supplier- Whether the contact is a supplieris_customer- Whether the contact is a customerdefault_currency- Default currencycontact_persons- Additional contact persons (JSON string)xero_network_key- Xero network keysales_default_account_code- Default sales account codepurchases_default_account_code- Default purchases account codesales_tracking_categories- Sales tracking categories (JSON string)purchases_tracking_categories- Purchases tracking categories (JSON string)tracking_category_name- Tracking category nametracking_category_option- Tracking category optionpayment_terms- Payment terms (JSON string)contact_groups- Groups the contact belongs to (JSON string)website- Websitebranding_theme- Default branding theme (JSON string)batch_payments- Batch payment details (JSON string)discount- Default discountbalances- Outstanding and overdue balances (JSON string)has_attachments- Whether the contact has attachmentsattachments- Attachments (JSON string)has_validation_errors- Whether the contact has validation errorsvalidation_errors- Validation errors (JSON string)updated_date_utc- Last modified timestamp (replication key)
credit_notes
credit_notes
Credit notes issued to customers or received from suppliers. Primary key:
credit_note_id. Sync: Incremental on updated_date_utc.credit_note_id- Unique identifier for the credit noteid- Identifier aliascredit_note_number- Credit note numbertype- Credit note typestatus- Credit note statuscontact- Associated contact (JSON string)date- Credit note datedate_string- Credit note date as stringdue_date- Due datedue_date_string- Due date as stringline_amount_types- Whether line amounts are tax inclusive, exclusive, or no taxline_items- Line items (JSON string)invoice_addresses- Invoice addresses (JSON string)sub_total- Sub-totalapplied_amount- Applied amounttotal_tax- Total taxtotal- Total amountcurrency_code- Currency codecurrency_rate- Currency exchange rateremaining_credit- Remaining creditallocations- Allocations against invoices (JSON string)branding_theme_id- Branding theme IDreference- Referencesent_to_contact- Whether sent to the contactfully_paid_on_date- Date fully paidhas_attachments- Whether the credit note has attachmentsupdated_date_utc- Last modified timestamp (replication key)
currencies
currencies
Currencies set up in the organisation. Primary key:
code. Sync: Full table.code- Currency codedescription- Currency description
invoices
invoices
Sales invoices (ACCREC) and bills (ACCPAY). Primary key:
invoice_id. Sync: Incremental on updated_date_utc.invoice_id- Unique identifier for the invoiceinvoice_number- Invoice numbertype- Invoice type (ACCREC or ACCPAY)status- Invoice statuscontact- Associated contact (JSON string)date- Invoice datedate_string- Invoice date as stringdue_date- Due datedue_date_string- Due date as stringline_amount_types- Whether line amounts are tax inclusive, exclusive, or no taxline_items- Line items (JSON string)sub_total- Sub-totaltotal_tax- Total taxtotal- Total amounttotal_discount- Total discountcurrency_code- Currency codecurrency_rate- Currency exchange ratereference- Referencebranding_theme_id- Branding theme IDurl- Source URLsent_to_contact- Whether sent to the contactexpected_payment_date- Expected payment dateexpected_payment_date_string- Expected payment date as stringplanned_payment_date- Planned payment dateplanned_payment_date_string- Planned payment date as stringhas_attachments- Whether the invoice has attachmentspayments- Payments applied (JSON string)credit_notes- Credit notes applied (JSON string)prepayments- Prepayments applied (JSON string)overpayments- Overpayments applied (JSON string)amount_due- Amount dueamount_paid- Amount paidamount_credited- Amount creditedfully_paid_on_date- Date fully paidis_discounted- Whether the invoice is discountedhas_errors- Whether the invoice has errorsinvoice_addresses- Invoice addresses (JSON string)invoice_payment_services- Payment services (JSON string)repeating_invoice_id- Source repeating invoice IDupdated_date_utc- Last modified timestamp (replication key)
items
items
Inventory and non-inventory items. Primary key:
item_id. Sync: Incremental on updated_date_utc.item_id- Unique identifier for the itemcode- Item codename- Item namedescription- Sales descriptionpurchase_description- Purchase descriptionis_sold- Whether the item is soldis_purchased- Whether the item is purchasedpurchase_details- Purchase details (JSON string)sales_details- Sales details (JSON string)is_tracked_as_inventory- Whether tracked as inventoryinventory_asset_account_code- Inventory asset account codetotal_cost_pool- Total cost poolquantity_on_hand- Quantity on handupdated_date_utc- Last modified timestamp (replication key)
journals
journals
Posted journals representing the underlying double-entry transactions. Primary key:
journal_id. Sync: Incremental on journal_number. This endpoint does not support the If-Modified-Since header — it is paginated by an offset equal to the highest journal number already seen.journal_id- Unique identifier for the journaljournal_number- Sequential journal number (replication key)journal_date- Journal datecreated_date_utc- Creation timestampreference- Referencesource_id- Source document IDsource_type- Source document typejournal_lines- Journal lines (JSON string)
linked_transactions
linked_transactions
Links between billable expenses and the invoices they are charged on (billable expenses / on-charging). Primary key:
linked_transaction_id. Sync: Incremental on updated_date_utc. This endpoint does not support the If-Modified-Since header, so records are paged through in full and filtered client-side by updated_date_utc.linked_transaction_id- Unique identifier for the linked transactionstatus- Linked transaction statustype- Linked transaction typesource_transaction_id- Source transaction IDsource_line_item_id- Source line item IDsource_transaction_type_code- Source transaction type codecontact_id- Associated contact IDtarget_transaction_id- Target transaction IDtarget_line_item_id- Target line item IDupdated_date_utc- Last modified timestamp (replication key)
manual_journals
manual_journals
Manual journal entries posted directly to the ledger. Primary key:
manual_journal_id. Sync: Incremental on updated_date_utc.manual_journal_id- Unique identifier for the manual journaldate- Journal datestatus- Manual journal statusnarration- Narration / descriptionline_amount_types- Whether line amounts are tax inclusive, exclusive, or no taxjournal_lines- Journal lines (JSON string)url- Source URLshow_on_cash_basis_reports- Whether shown on cash basis reportshas_attachments- Whether the manual journal has attachmentsupdated_date_utc- Last modified timestamp (replication key)
organisations
organisations
The Xero organisation(s) connected to the credentials, including settings and metadata. Primary key:
organisation_id. Sync: Full table.organisation_id- Unique identifier for the organisationapi_key- API keyname- Organisation namelegal_name- Legal nameshort_code- Short codepays_tax- Whether the organisation pays taxversion- Xero versionedition- Xero editionclass- Organisation classorganisation_type- Organisation typeorganisation_entity_type- Organisation entity typeorganisation_status- Organisation statusbase_currency- Base currencycountry_code- Country codeis_demo_company- Whether it is a demo companyregistration_number- Registration numbertax_number- Tax numbertax_number_name- Tax number labelfinancial_year_end_day- Financial year end dayfinancial_year_end_month- Financial year end monthsales_tax_basis- Sales tax basissales_tax_period- Sales tax perioddefault_sales_tax- Default sales taxdefault_purchases_tax- Default purchases taxperiod_lock_date- Period lock dateend_of_year_lock_date- End of year lock datetimezone- Timezoneline_of_business- Line of businessaddresses- Organisation addresses (JSON string)phones- Organisation phone numbers (JSON string)external_links- External links (JSON string)payment_terms- Payment terms (JSON string)created_date_utc- Creation timestamp
overpayments
overpayments
Overpayments recorded against contacts. Primary key:
overpayment_id. Sync: Incremental on updated_date_utc.overpayment_id- Unique identifier for the overpaymentid- Identifier aliastype- Overpayment typestatus- Overpayment statuscontact- Associated contact (JSON string)date- Overpayment datedate_string- Overpayment date as stringline_amount_types- Whether line amounts are tax inclusive, exclusive, or no taxline_items- Line items (JSON string)applied_amount- Applied amountsub_total- Sub-totaltotal_tax- Total taxtotal- Total amountcurrency_code- Currency codecurrency_rate- Currency exchange rateremaining_credit- Remaining creditallocations- Allocations against invoices (JSON string)payments- Payments (JSON string)reference- Referencehas_attachments- Whether the overpayment has attachmentsupdated_date_utc- Last modified timestamp (replication key)
payments
payments
Payments applied to invoices, credit notes, prepayments, and overpayments. Primary key:
payment_id. Sync: Incremental on updated_date_utc.payment_id- Unique identifier for the paymentdate- Payment dateamount- Payment amountbank_amount- Bank amountcurrency_rate- Currency exchange ratereference- Referenceis_reconciled- Whether the payment is reconciledstatus- Payment statuspayment_type- Payment typeaccount- Account paid from/to (JSON string)has_account- Whether an account is setinvoice- Related invoice (JSON string)credit_note- Related credit note (JSON string)prepayments- Related prepayments (JSON string)overpayment- Related overpayment (JSON string)batch_payment_id- Batch payment IDbatch_payment- Batch payment details (JSON string)has_validation_errors- Whether the payment has validation errorsupdated_date_utc- Last modified timestamp (replication key)
prepayments
prepayments
Prepayments recorded against contacts. Primary key:
prepayment_id. Sync: Incremental on updated_date_utc.prepayment_id- Unique identifier for the prepaymentid- Identifier aliastype- Prepayment typestatus- Prepayment statuscontact- Associated contact (JSON string)date- Prepayment datedate_string- Prepayment date as stringline_amount_types- Whether line amounts are tax inclusive, exclusive, or no taxline_items- Line items (JSON string)sub_total- Sub-totaltotal_tax- Total taxtotal- Total amountcurrency_code- Currency codecurrency_rate- Currency exchange ratereference- Referenceremaining_credit- Remaining creditapplied_amount- Applied amountallocations- Allocations against invoices (JSON string)payments- Payments (JSON string)has_attachments- Whether the prepayment has attachmentsupdated_date_utc- Last modified timestamp (replication key)
purchase_orders
purchase_orders
Purchase orders raised against suppliers. Primary key:
purchase_order_id. Sync: Incremental on updated_date_utc.purchase_order_id- Unique identifier for the purchase orderpurchase_order_number- Purchase order numbertype- Purchase order typestatus- Purchase order statuscontact- Associated contact (JSON string)date- Order datedate_string- Order date as stringdelivery_date- Delivery datedelivery_date_string- Delivery date as stringexpected_arrival_date- Expected arrival dateexpected_arrival_date_string- Expected arrival date as stringline_amount_types- Whether line amounts are tax inclusive, exclusive, or no taxline_items- Line items (JSON string)reference- Referencebranding_theme_id- Branding theme IDcurrency_code- Currency codecurrency_rate- Currency exchange ratesent_to_contact- Whether sent to the contactdelivery_address- Delivery addressattention_to- Attention totelephone- Telephonedelivery_instructions- Delivery instructionssub_total- Sub-totaltotal_tax- Total taxtotal- Total amounttotal_discount- Total discountis_discounted- Whether the order is discountedhas_errors- Whether the order has errorshas_attachments- Whether the order has attachmentsupdated_date_utc- Last modified timestamp (replication key)
quotes
quotes
Quotes issued to customers. Primary key:
quote_id. Sync: Incremental on updated_date_utc.quote_id- Unique identifier for the quotequote_number- Quote numberstatus- Quote statuscontact- Associated contact (JSON string)date- Quote dateexpiry_date- Expiry dateline_amount_types- Whether line amounts are tax inclusive, exclusive, or no taxline_items- Line items (JSON string)sub_total- Sub-totaltotal_tax- Total taxtotal- Total amounttotal_discount- Total discountcurrency_code- Currency codecurrency_rate- Currency exchange ratereference- Referencebranding_theme_id- Branding theme IDtitle- Quote titlesummary- Quote summaryterms- Quote termstracking_category- Tracking category (JSON string)updated_date_utc- Last modified timestamp (replication key)
repeating_invoices
repeating_invoices
Templates for recurring invoices. Primary key:
repeating_invoice_id. Sync: Full table.repeating_invoice_id- Unique identifier for the repeating invoiceid- Identifier aliastype- Invoice typestatus- Repeating invoice statuscontact- Associated contact (JSON string)schedule- Recurrence schedule (JSON string)line_items- Line items (JSON string)line_amount_types- Whether line amounts are tax inclusive, exclusive, or no taxreference- Referencebranding_theme_id- Branding theme IDcurrency_code- Currency codesub_total- Sub-totaltotal_tax- Total taxtotal- Total amounttotal_discount- Total discounthas_attachments- Whether the repeating invoice has attachments
tax_rates
tax_rates
Tax rates configured in the organisation. Primary key:
tax_type. Sync: Full table.tax_type- Tax type (primary key)name- Tax rate namestatus- Tax rate statusreport_tax_type- Report tax typetax_components- Tax components (JSON string)display_tax_rate- Display tax rateeffective_rate- Effective tax ratecan_apply_to_assets- Whether it can apply to assetscan_apply_to_equity- Whether it can apply to equitycan_apply_to_expenses- Whether it can apply to expensescan_apply_to_liabilities- Whether it can apply to liabilitiescan_apply_to_revenue- Whether it can apply to revenue
tracking_categories
tracking_categories
Tracking categories and their options for reporting. Primary key:
tracking_category_id. Sync: Full table.tracking_category_id- Unique identifier for the tracking categoryname- Tracking category namestatus- Tracking category statustracking_category_name- Tracking category name (alternate)option- Tracking optionoptions- Available options (JSON string)tracking_option_id- Tracking option IDtracking_option_name- Tracking option name
users
users
Users with access to the organisation. Primary key:
user_id. Sync: Incremental on updated_date_utc.user_id- Unique identifier for the useremail_address- Email addressfirst_name- First namelast_name- Last nameorganisation_role- Role within the organisationis_subscriber- Whether the user is a subscriberglobal_user_id- Global user IDvalidation_errors- Validation errors (JSON string)updated_date_utc- Last modified timestamp (replication key)
Skills for agents
Download Xero skills file
Xero connector documentation as plain markdown, for use in AI agent contexts.