Skip to main content

Excel & CSV Integration

UAE E-Invoicing from Excel or CSV — No ERP Required

If your invoices live in Excel, Google Sheets or a CSV export from a POS, TrustBill converts them to compliant PINT-AE XML and submits them to the FTA network through our accredited ASP partner. No accounting SaaS, no ERP migration, no code — just an upload. Free for 50 invoices/month.

How the Excel / CSV workflow works

You upload an Excel workbook (`.xlsx`) or CSV file to TrustBill; the platform reads each row as an invoice, converts it to PINT-AE XML, validates against the 51 mandatory FTA fields, and — for rows that pass — submits through our accredited ASP path. Rows that fail validation land in a fix-and-resubmit queue with row-level error explanations.

The workflow is designed for finance teams that already produce their invoicing in spreadsheets and do not want to add an ERP to the stack just for the mandate. Common patterns: SMEs on Google Sheets, professional-services firms with a per-project invoice tab, retailers exporting nightly POS settlements as CSV, accounting consultancies preparing bulk runs for many client TRNs at once.

The upload is idempotent by invoice number — re-uploading the same row does not create a duplicate submission. Corrections re-submit only the fixed rows.

The TrustBill Excel / CSV template

TrustBill publishes a canonical spreadsheet template that maps 1:1 to the PINT-AE data dictionary. Download it, populate the rows with your invoice data, upload, and TrustBill handles the rest. The template covers all mandatory PINT-AE fields plus the common conditional ones (free-zone flag, advance-payment linking, credit-note reference).

Google Sheets users: File → Download → Comma-separated values (.csv). Excel users: Save As → CSV UTF-8 (Comma delimited) to preserve Arabic characters. Non-UTF-8 CSV exports lose Arabic legal names, which then fails validation — always use UTF-8.

Spreadsheet column → PINT-AE mapping

The exact mapping TrustBill applies when converting each row of your Excel / CSV to PINT-AE XML. The template ships with these column headers pre-populated in row 1 — you fill row 2 downwards. Extra columns are ignored (safe to keep your internal notes); missing mandatory columns fail on upload.

Column header (row 1)PINT-AE / UBL 2.1 fieldNote
invoice_numbercbc:IDYour invoice number. Must be unique across all uploads.
issue_datecbc:IssueDateISO date (YYYY-MM-DD). Must not be in the future.
invoice_type_codecbc:InvoiceTypeCode388 for commercial invoice, 381 for credit note, 386 for advance payment.
buyer_trncac:AccountingCustomerParty/cac:PartyTaxScheme/cbc:CompanyIDBuyer TRN — 15 digits. Missing TRN = #1 rejection cause.
buyer_namecac:AccountingCustomerParty/cac:Party/cac:PartyLegalEntity/cbc:RegistrationNameBuyer's legal name. UTF-8; Arabic supported.
buyer_countrycac:AccountingCustomerParty/cac:Party/cac:PostalAddress/cac:Country/cbc:IdentificationCodeISO 3166-1 alpha-2. AE for domestic; other codes trigger export/reverse-charge treatment.
line_descriptioncac:InvoiceLine/cbc:DescriptionLine-item text. Multiple lines per invoice go on consecutive rows sharing the same invoice_number.
line_quantitycac:InvoiceLine/cbc:InvoicedQuantityNumber of units (integer or decimal).
line_unit_pricecac:InvoiceLine/cac:Price/cbc:PriceAmountUnit price in the invoice currency.
line_tax_categorycac:ClassifiedTaxCategory/cbc:IDS (5% standard), Z (0% zero-rated), E (exempt), or O (out of scope).
line_tax_ratecac:ClassifiedTaxCategory/cbc:PercentNumeric — 5, 0, 0, 0 respectively.
currencycbc:DocumentCurrencyCodeAED for domestic. Non-AED requires an fx_rate column.
fx_ratecac:PricingExchangeRate/cbc:CalculationRateOnly required if currency ≠ AED.
free_zoneExtension namespace flag; VAT category derivedTRUE / FALSE. Set on buyer_ or line_ scope as needed.
advance_uuidcac:DocumentReference (type 386)For invoices that recover a prior advance — populate with the advance-invoice UUID.
parent_invoice_idcbc:InvoiceTypeCode="381"; cac:BillingReference/cac:InvoiceDocumentReferenceRequired on credit-note rows (invoice_type_code=381) — the UUID of the invoice being credited.

Common upload errors and how to fix them

The eight most-hit upload errors when a spreadsheet row fails PINT-AE checks, with the exact fix in your Excel or CSV file. TrustBill's upload UI highlights each affected row with a plain-English error message; the table below is the reference version.

Error codeMeaningFix in Excel / CSV / Google Sheets
PAE-BR-01buyer_trn column is missing or not 15 digits on this row.In your spreadsheet, set the buyer_trn cell to the 15-digit TRN. Format the column as Text so Excel doesn't drop leading zeros.
PAE-BR-04Seller TRN missing in TrustBill company settings.Set your TRN once in TrustBill → Settings → Company. It is not carried in the spreadsheet; it applies to every uploaded invoice.
PAE-BR-11Line-total mismatch (qty × unit_price ≠ line total from the sheet).Correct rounding on line_quantity or line_unit_price so the line total reconciles. TrustBill recomputes; if the recomputed value differs from your sheet by more than 0.01, the row fails.
PAE-BR-12Unrecognised line_tax_category value.Only S / Z / E / O are accepted. Replace any freeform values (e.g. "5%", "Zero Rated", "Exempt") with the single-letter code.
PAE-BR-14currency ≠ AED but no fx_rate provided.Add an fx_rate column and populate it with the rate as of the invoice's issue_date.
PAE-BR-21Credit-note row (invoice_type_code=381) missing parent_invoice_id.Set parent_invoice_id on the credit-note row to the UUID of the invoice being credited. This is the UUID from TrustBill's response, not your local invoice_number.
PAE-BR-22Advance-recovery row missing advance_uuid reference.Set advance_uuid to the UUID of the earlier advance-payment invoice (invoice_type_code=386).
PAE-BR-31free_zone=TRUE but buyer address is not in a free zone.Correct the buyer's address in TrustBill's Contacts, or set free_zone=FALSE on the row.

Key features for Excel and CSV users

TrustBill's Excel / CSV workflow includes:

- **Idempotent uploads** — Re-uploading the same invoice_number does not duplicate the submission. - **Fix-and-resubmit queue** — Failed rows appear in a dashboard with row-level errors; fix the sheet, re-upload, only the failed rows re-submit. - **Google Sheets compatibility** — Native `.csv` export works. UTF-8 required to preserve Arabic. - **Bilingual template** — Column headers ship in EN + AR; either variant is accepted on upload. - **Bulk validation** — All 51 mandatory PINT-AE fields checked per row before any submission. - **API-optional** — The same JSON payload the API accepts can also be posted as CSV; both paths land on the same accredited ASP. - **Multi-tenant** — Accounting firms upload one file with a client_trn column and invoices route to the right client automatically. - **VAT 201 aggregation** — Uploaded invoices feed the same VAT 201 draft as API- and ERP-connector-sourced ones.

Pricing for Excel / CSV users

The free tier — 50 invoices/month, no credit card — was built for exactly this profile: a small business, sole trader or per-project consultant who invoices in a spreadsheet and needs mandate coverage without an accounting SaaS subscription. Paid plans start at AED 200/month for 500 invoices; larger runs and accounting-firm multi-tenant plans scale in AED-transparent tiers. No setup fees. No commitment.

Frequently asked questions

Do I need to buy Excel to use this?

No. Any spreadsheet that can save as CSV works — Google Sheets, LibreOffice Calc, Numbers, or Excel. The template is a CSV; you can open it in whatever tool you already have.

What if I have hundreds of invoices per month — is CSV still practical?

Yes. TrustBill's CSV pipeline handles tens of thousands of rows per file. High-volume shops typically automate the upload via API instead of a manual file drop, but the same CSV format works either way.

Do line items need to be on the same row as the invoice header?

No. Multiple line items go on consecutive rows sharing the same invoice_number — TrustBill groups them into one PINT-AE document at upload time. Header-level fields on rows 2..N are ignored (only row 1 for the invoice_number carries them).

How is Arabic preserved in the CSV?

Save as CSV UTF-8. In Excel: File → Save As → CSV UTF-8 (Comma delimited). Non-UTF-8 (Windows-1252, etc.) will corrupt Arabic legal names and fail validation. Google Sheets exports UTF-8 by default.

Can accounting firms upload one file for many client TRNs?

Yes. Add a client_trn column; TrustBill routes each row to the correct client tenant in a multi-tenant consultancy workspace. This is one of the reasons UAE accounting firms use TrustBill instead of one-per-client ERPs.

Related integrations