What this is for
Many customers have their expense data in one place and the scans in another. The data comes out of an ERP, a travel tool or an accounting system as a CSV or Excel file. The documents sit in a folder on a network drive, in a DMS export, or in a ZIP somebody sent over - not behind a URL VAT4U can reach.
Splitting the work in two is the natural way to import both:
Import the data. Get the expenses into VAT4U - amounts, dates, vendors, countries, categories. This is the part that decides what is potentially claimable.
Add the documents. Upload the expense documents as a ZIP and let VAT4U attach each file to the expense it belongs to.
The only thing phase 1 has to do for phase 2 to work is tell VAT4U where to look for the file name of each expense's document. You map a column that matches (see how matching works below) the file name as Document URL in the import wizard, and instead of a url address you simply put the file name - INV-10231.pdf, or INV-10231, or whatever your folder calls it.
VAT4U will try to fetch those documents at import time, as it does for any import with a Document URL column, and will not be able to do - a bare file name is not something it can download. That is expected. Those rows end up marked as failed in the import's document statuses, and they are exactly the rows this feature fills in.
Before you start
Three things have to be true, or the upload option will not be offered:
|
|
The import included documents | It was run as I have both data and scans/images, with a Document URL column mapped. An import run for data only has nothing to attach documents to |
The data import has finished | The import status is Success. Documents can only be linked to expenses that exist |
Your documents are named after the Document URL values | See How matching works below - the names do not have to be identical, but they do have to be recognisable |
Preparing the ZIP
|
|
Maximum size | 3 GB per archive |
More than 3 GB? | Split the documents into several archives and repeat the upload. There is no limit on the number of archives per import |
Folders | Allowed, up to 5 levels deep. The folder structure is ignored — only file names are matched |
File types | PDF, JPG, JPEG, PNG, TIF, TIFF, HEIC, HEIF, BMP, GIF |
Password-protected archives | Not supported. Entries that are encrypted are skipped |
Anything else in the archive - a spreadsheet, a .msg file, macOS __MACOSX junk, hidden files, empty files - is skipped and listed back to you with the reason, so you can see what was ignored rather than wonder.
Uploading and linking
1. Open the import
Open the Imports list, find the import and open it. In the Documents import status section you will see Upload documents (ZIP).
The same button is available inside the Document statuses table, next to Retry failed and Fetch canceled documents - use whichever you have open.
2. Upload the archive
Drag the ZIP onto the drop area, or click to pick it. The file is uploaded straight to secure storage - it does not pass through the application - and you get a progress bar with the transferred size.
Keep the window open until the upload finishes. Closing it cancels the upload; you will be asked to confirm before it does.
If you have uploaded archives for this import before, they are listed under Previous uploads for this import with their status and result, and you can reopen any of them.
3. Wait for the matching
VAT4U unpacks the archive and matches every file against the Document URL values of the import. For a large archive this takes a few minutes.
You can close the window and come back later - the next time you open Upload documents (ZIP) for this import, the archive is reopened where it left off.
4. Review the matching
Once the analysis is done you get a summary and a preview table. Nothing has been linked yet.
The summary tells you how many of the documents with a failed fetch found a file, how many files in the archive were usable, how many matched and how many did not, and how many files were skipped - with a Show skipped files link listing each one and why.
The table has four columns:
Column | What it shows |
Invoice ID | The expense the document will be attached to, as a link that opens the expense in a new tab. Use it to spot-check a few rows before importing everything |
Imported Document URL | The value that came in from your file - what VAT4U searched for |
Files that will be linked | The file(s) found in the archive, with their size. More than one file means they will be merged into a single document, in archive order |
Status | Import one to link that row on its own; afterwards Linking…, Linked, or Failed with a Retry button |
5. Link the documents
Click Import all (N) to link every pending row, or Import one on a single row to try it first.
The table then refreshes itself every few seconds. Rows tick green as their document is attached. You can leave the window and come back - the linking continues in the background.
How matching works
A file matches when its name answers the imported Document URL value. Comparison ignores upper and lower case, and the folder the file sits in is irrelevant.
Imported value | Matches a file called | Why |
|
| Identical |
|
| Same name, extension supplied by the file |
|
| The file name contains the imported name |
|
| Folders and URL prefixes are stripped — only the file name is used |
| both files, merged into one document |
|
Two consequences worth knowing:
One file can serve several expenses — a shared receipt split across expenses is linked to each of them.
One expense can take several files — they are merged into a single document in the order they appear in the archive.
Values shorter than four characters only ever match exactly. Otherwise an imported value of 12 would attach itself to half the archive.
What happens after a document is linked
Nothing special, and that is the point. A document linked from a ZIP goes through the same processing as a document VAT4U downloaded itself:
several files merged into one document
images converted to PDF
e-invoices detected and their data read
the import's smart checks run on the expense
So the end result is indistinguishable from an import where the documents had been fetched in the first place.
Good to know
Only failed documents are offered. Documents that are already attached, or still being fetched, never appear in the table and are never replaced. You cannot overwrite a good document by accident. If a file in your archive matched an expense that already has its document, it is counted in the summary as skipped.
You can upload as many archives as you like. Each one is analysed against whatever is still missing at that moment. This is how you cover more than 3 GB, and how you send a second batch after chasing up the documents that were missing from the first.
The archive itself is not kept. Once it has been unpacked and matched, the ZIP is deleted. The documents extracted from it are kept, as expense documents.
Nothing is linked until you ask. Uploading and reviewing changes nothing. The preview is a genuine dry run.
Troubleshooting
What you see | What it means |
This import has no remote documents to link | The import was run without a mapped Document URL column, so there is nothing to match file names against. The documents have to be added to the expenses another way, or the import re-run with the column mapped |
Documents can be uploaded once the data import has completed | The data import is still running or did not succeed. Wait for it to finish |
The table is empty, or far fewer rows than expected | The file names in the archive do not resemble the imported Document URL values. Open the Document statuses table, look at a few failed rows, and compare what is in the Document URL column with what your files are actually called |
Files appear under "skipped files" | They are not an accepted document type, are empty, password-protected, hidden, nested deeper than five folders, or larger than 200 MB. The reason is shown next to each one |
This archive was never fully uploaded | The upload was interrupted. Start again and keep the window open until it completes |
A row shows Failed | The document was found but could not be processed — a corrupt file is the usual cause. Hover the status for the reason and use Retry |







