50 Portuguese Invoices, One Spreadsheet:Batch Fatura Processing

APQC benchmarking data pegs manual invoice processing at $8 to $15 per document. Fifty supplier invoices — a typical month for a Portuguese SME — puts a finance team at $400 to $750 of labor cost before any controls, approvals, or SAF-T reconciliation even start. That number alone explains why batch processing matters. But the number hides the real problem: batch processing changes the workflow, not just the volume. And Portuguese invoices (faturas) add regulatory layers that break most generic batch tools.

Batch processing Portuguese supplier invoices into a single Excel spreadsheet for SAF-T submission

Key Takeaways

  1. Manual invoice entry costs $8 to $15 per document — at 50 Portuguese faturas per month, that's $400 to $750 before you've reconciled a single IVA rate split, checked an ATCUD code, or touched a SAF-T submission.
  2. Every Portuguese fatura carries three IVA rates, an ATCUD validation code, and ties to a recurring SAF-T submission due by the 5th of each month — position-based extraction that works on a single uniform layout fails the moment supplier #2 puts their NIF in the footer instead of the header.
  3. Semantic column naming — defining extraction columns by what the data means rather than where it sits on the page — turns a batch of 50 faturas from a two-hour data-entry sprint into a 10-minute review, with every row traceable back to its source document via the ATCUD.

What Makes Batch Fundamentally Different

Processing one invoice takes a few keystrokes. You open the PDF, type the supplier name, the invoice number, the total, and move on. Repeat 50 times and the arithmetic says you should be done in about two and a half hours — at 3 minutes per invoice, the average manual entry time benchmarked across industry surveys. But anyone who has actually processed 50 invoices in one sitting knows the real number is higher.

The math breaks because batch introduces three problems that don't exist at single-document scale. First, consistency: you need the same data points extracted from invoices issued by different suppliers, each with its own layout, its own field labels, and its own interpretation of what "invoice number" or "taxable amount" means in practice. Second, merging: 50 separate extractions must collapse into one table where column headers align across every row — one mismatch and your pivot table or SAF-T import fails without telling you where. Third, exceptions: at 50 invoices, you will almost certainly hit at least one that's a credit note (nota de crédito), one with a split payment reference, and one where the printed total doesn't match the line-item sum. Finding which one is wrong in a merged spreadsheet is a different skill from correcting it — and far more time-consuming.

Bottom line: Single-document processing optimizes for accuracy per document. Batch processing must optimize for consistency across documents — and the cost of getting consistency wrong compounds with every invoice in the batch.

Why the Portuguese Fatura Demands Batch Processing

Generic batch processing tools handle one tax rate. A Portuguese invoice (fatura) carries up to three — the standard 23%, the intermediate 13%, and the reduced 6% — each appearing on separate line items, each needing its own column in any accounting-ready spreadsheet. The problem compounds when you process invoices from suppliers in Madeira (22%/12%/5%) or the Azores (18%/9%/4%), where the same supplier name might issue invoices under different territorial VAT regimes in the same batch.

This multi-rate structure is the first reason batch processing isn't optional for Portuguese AP teams. A single extraction tool can pull the total IVA from one invoice. But the declaração periódica do IVA — the periodic VAT return filed by the 20th of the second month following the reporting period — requires taxable base and tax amount broken down by rate. One total column won't satisfy it. You need at minimum six columns for IVA alone in a multi-rate fatura: base tributável and valor do IVA for each of the three rates. Extracting those manually across 50 invoices means 300 data points across six columns, each one a potential reconciliation error.

The second reason is the monthly SAF-T billing deadline. Since January 2024, the Autoridade Tributária e Aduaneira (AT) enforces the 5th day of the following month for Billing SAF-T (SAF-T Faturação) submissions — XML files generated by AT-certified software that contain every invoice line item, every tax breakdown, and every ATCUD code. That deadline recurs every month. A Portuguese SME processing 50 supplier faturas per month effectively has a recurring 5-day reconciliation window: receive the invoices, extract the data, validate against the e-Fatura portal, cross-check the NIFs, and generate the SAF-T XML. Any extraction step that takes more than a day eats into that window.

The third reason is the ATCUD (Código Único do Documento), mandated since January 2023 under Article 35-A of the CIVA. Every Portuguese invoice carries a unique 8-character alphanumeric validation code. When you merge 50 invoices into one spreadsheet, the ATCUD becomes the only reliable key for tracing any row back to its source document. Lose it in extraction, and you lose the ability to prove which invoice generated which row during an AT audit.

For a deeper walkthrough of individual fatura field extraction — NIF positioning, IVA rate identification, and QR code handling — see our step-by-step guide to Portuguese fatura extraction. The rest of this article assumes that foundation and focuses on what changes when you process them in batches.

Column Architecture for Multi-Supplier Batch Extraction

The spreadsheet structure you choose for batch processing determines everything downstream — whether your SAF-T import succeeds, whether your e-Fatura reconciliation takes minutes or hours, and whether you can reuse the same structure month after month. Getting it right means designing columns that work across every supplier in the batch.

At minimum, a batch-ready Portuguese fatura spreadsheet needs these column groups:

GroupColumnsWhy
IdentitySupplier NIF, Supplier Name, Invoice Number, Invoice Date, ATCUDUnique key per row; mandatory for e-Fatura cross-check and SAF-T identifier mapping
IVA — Standard Rate (23%)Base Tributável 23%, IVA 23%Line 3 of the periódica do IVA; must match SAF-T field I7/I8 for mainland PT
IVA — Intermediate Rate (13%)Base Tributável 13%, IVA 13%Appears on restaurant services, wine, some food items; separate reporting line
IVA — Reduced Rate (6%)Base Tributável 6%, IVA 6%Essential goods, pharmaceuticals, books; lowest-volume but mandatory to track
TotalsNet Total, IVA Total, Gross TotalReconciliation checkpoint — sum of rate columns must match printed totals
Batch metadataBatch Name, Processing DateCross-month reconciliation; trace which processing run produced each row

The critical design decision is one row per fatura (header level) versus one row per line item (detail level). For SAF-T billing submissions, the AT requires line-item detail, but for monthly AP reconciliation and e-Fatura cross-checking, header-level is usually sufficient. Most Portuguese contabilistas we work with extract header-level first, validate against e-Fatura, then run a second pass at line-item level for the SAF-T XML generation. Keeping both passes in the same tool saves a full reconciliation step.

The approach that makes this work across different suppliers is semantic column naming. Instead of telling the extraction tool "find the number in the top-right corner," you define columns by what the data means: "Supplier NIF," "Invoice Total with IVA," "ATCUD." The AI reads each invoice, understands the field semantics, and places the value in the correct column regardless of where it appears on the page or what label the supplier used ("Total," "Valor Total," "Montante," or "Total a Pagar").

JPG/PNG/PDF AI Extraction

Files are processed securely and not stored.

Naming Conventions That Survive Cross-Month Reconciliation

Batch processing generates files — multiple uploads, multiple extraction runs, multiple exports. Three months later, during a quarterly IVA reconciliation, you need to trace a specific row in your spreadsheet back to the exact supplier PDF it came from. If your naming convention was "Invoice1.pdf, Invoice2.pdf," you have a problem.

The batch name is your first organizational lever. A consistent convention — such as AP-2026-06-Fornecedores or 2506-Faturas-Monthly — groups every extraction result under a retrievable label. Combined with the original filename preserved as a column, each row carries a complete provenance chain: batch → original file → extracted row. When the AT asks to see the source document for a specific IVA deduction, you can find it in seconds rather than reopening 50 PDFs one by one.

For the extraction columns themselves, the rule is: name columns for what they represent, not where they appear. "Supplier NIF" works on every fatura in the batch because every fatura has a NIF — the tax identification number (Número de Identificação Fiscal). "Top-right VAT number" would fail the moment a supplier places their NIF in the footer, which many do. Semantic naming is what keeps the same column definition valid across 50 invoices from 50 different layouts.

Portuguese-specific naming considerations:

  • Use "NIF" not "VAT Number." Portuguese accounting software expects NIF as the field identifier, and the e-Fatura portal references NIF for both supplier and client lookups. Call it "Supplier NIF (NIF Fornecedor)" on first use in the extraction setup.
  • Separate IVA columns by rate, not by supplier. Columns named "IVA 23% Base" and "IVA 23% Amount" work regardless of whether the fatura is from a Porto-based stationery supplier or a Lisbon IT consultancy. Columns named for specific suppliers fail the moment the supplier mix changes.
  • Always extract ATCUD as a standalone column. Even if your current workflow doesn't use it, the ATCUD is the unique document identifier that the AT's audit systems query. Having it in your spreadsheet from day one means you never need to re-extract a batch when an audit request arrives two years later.

Exception Handling: When One Invoice in the Batch Is Wrong

In single-document processing, a misread field is obvious — you see it immediately on the screen and correct it. In a batch of 50, the same misread disappears into a spreadsheet of 50 rows × 20 columns. A bad IVA amount on invoice #34 of 50 might go unnoticed until the declaração periódica doesn't balance, at which point you're hunting through 1,000 data points to find one error.

The first defense is the totals checkpoint. Before doing anything else with the batch output, run a sum on the IVA Total column and compare it against the sum of the printed totals from the source documents. If the spreadsheet total is €1,247.80 but your supplier statements show €1,253.45, something was misread. The ATCUD column is what lets you trace which row is off — filter to the date range, sort by supplier, and cross-check row by row against the e-Fatura portal, which lists every invoice communicated to the AT for that NIF and month.

The second defense is handling credit notes (notas de crédito) and corrective documents in the same batch. A nota de crédito looks like an invoice but carries negative amounts. If your extraction columns treat it identically to a standard fatura, the negative values will offset the batch total — correctly — but the column-level IVA breakdown may misattribute the credit to the wrong rate. The safest approach is to flag credit notes with a "Document Type" column (values: Fatura, Nota de Crédito, Fatura-Recibo) and verify that the IVA rates on credit notes match the rates on the original invoices they're correcting.

Practical rule: After batch extraction, spot-check the first 5 rows and the last 5 rows against their source PDFs. Errors cluster at the edges — invoices with unusual layouts, scanned rather than digital originals, or multi-page documents where key fields appear on page 2. Catching an error pattern in the first 5 saves you from propagating the same issue across the remaining 45.

From Spreadsheet to SAF-T: Closing the Loop

The output of a batch extraction is an Excel file. The input your AT-certified software needs is a structured dataset it can map to the SAF-T XML schema defined in Portaria No. 321-A/2007 and its subsequent updates. The step between them — importing your spreadsheet into the accounting software — is where the column architecture from earlier pays off.

Different Portuguese accounting platforms handle bulk import differently:

  • Cegid Primavera (formerly Primavera BSS) supports CSV import for purchase invoices with field mapping. If your batch export columns match the Primavera field names — "NIF Fornecedor," "Nº Documento," "Data," "Base Tributável," "Valor IVA" — the import is a direct mapping with minimal manual re-entry.
  • PHC Software (now part of Cegid) offers an import wizard that can read Excel templates. Pre-defining the column-to-field mapping once lets you reuse it for every subsequent batch, turning the monthly import into a two-click operation.
  • TOConline, the OCC's own platform used by thousands of contabilistas certificados, includes an OCR-assisted document entry feature and supports bulk CSV import for purchase invoices. The platform's "Robot" feature can pre-classify documents — but the classification quality depends on how cleanly the extracted data maps to the SNC (Sistema de Normalização Contabilística) chart of accounts codes defined in Decreto-Lei n.º 158/2009.
  • Sage 50 Portugal and Moloni both accept structured CSV imports for purchase documents, with Moloni being particularly popular among micro and small enterprises — over 39,000 companies use it for certified invoicing.

After import, the certified software generates the SAF-T XML with the correct structure, digital signatures, and ATCUD linkage. The final verification step is the e-Fatura portal: filter by month, sort by NIF, and confirm that every fatura in your spreadsheet appears in the AT's records. Any missing document means the supplier didn't communicate it — a separate problem, but one you can now identify in minutes rather than discovering during an audit.

Paula Franco, the bastonária (president) of the Ordem dos Contabilistas Certificados (OCC), stated publicly that 20% to 30% of a Portuguese contabilista's time is spent chasing documents from clients — not analyzing them, not advising on them, just getting them into the system. Batch extraction doesn't solve the "chasing" part. But it eliminates the re-keying part entirely, turning what was two hours of data entry into a 10-minute review and import. For a profession that the OCC is actively trying to modernize — their "Contabilista 3.0" initiative specifically targets automation of repetitive tasks — that shift is not marginal. It's the difference between a contabilista who spends the 5th of every month in a data-entry sprint and one who spends it verifying and advising.

FAQ

Does batch processing work with scanned paper faturas, not just digital PDFs?

Yes, provided the scan is legible. Modern AI extraction uses visual language models that read document images the way a human would — they don't require a text layer. A clear photograph of a paper fatura taken with a phone works. Heavily skewed, low-resolution, or partially cropped scans will produce lower accuracy. For mixed batches (some digital PDFs, some scans), the extraction quality per document varies with input quality — which is why the spot-checking rule (first 5 and last 5 rows) matters more for scan-heavy batches.

What happens if a fatura has IVA exemptions (isenção de IVA) or reverse charge?

Add an "IVA Regime" column to your extraction template with values like "Normal," "Isento (Art. 53)," "Autoliquidação," or "Reverse Charge." For exempt transactions, the IVA rate columns will be zero or blank, but the net amount still needs to appear in the correct base column. The SAF-T schema supports exemption codes — your certified software will need the regime identifier to generate valid XML. Most Portuguese accounting platforms handle this automatically once the regime field is populated.

Can batch extraction handle faturas from Madeira and Azores suppliers in the same batch?

Yes, but you need separate IVA rate columns for each territory or a "Territory" column to tag each row. Mainland Portugal uses 23/13/6%, Madeira uses 22/12/5%, and Azores uses 18/9/4%. A single "IVA 23%" column won't distinguish a mainland 23% transaction from a Madeira 22% transaction. The practical approach: if you rarely receive invoices from island-based suppliers, add territory-specific columns only when needed. If it's frequent, include a "Região IVA" column and map rates accordingly during the software import.

How many invoices can I process in one batch?

The technical limit depends on the tool, not the concept. Most AI-based extraction tools handle 20-100 files per batch comfortably. Beyond 100, you may want to split into sub-batches for manageability — not because the extraction fails, but because reviewing 200 rows for exceptions becomes unwieldy. A batch of 50 strikes a practical balance: large enough to save real time, small enough to review thoroughly.

Do I need my contabilista certificado to approve the extracted data before it enters the accounting software?

Legally, the contabilista certificado (CC) is responsible for the accuracy of the accounting records under the OCC's professional standards, regulated by Law No. 68/2023. In practice, the workflow varies: some CCs review the batch output before import, others train their clients to run the extraction and import themselves, with the CC reviewing the final SAF-T before submission. Either way, the batch output should be reviewable — which is why preserving the ATCUD and source filename in the spreadsheet matters for the CC's verification step.

The recurring SAF-T deadline doesn't change. But the hours between receiving the last supplier fatura and submitting the monthly XML file do. Batch processing doesn't eliminate the need for a contabilista's judgment — it eliminates the part where that judgment is buried under data entry. Test the column architecture above on your own supplier invoices. See if a task that currently fills the 4th and 5th of every month becomes a morning's work instead.

Try It on Your Own Faturas
📮 contact email: [email protected]