Skip to main content
Process dozens of invoices in one go by uploading a ZIP file containing your PDFs and images.

How It Works

1

Prepare Your ZIP

Gather your invoice files (PDFs, images) into a single ZIP archive. Nested folders are supported—VATextract will find all valid files inside.
2

Upload the ZIP

Go to Dashboard → Upload and select the Bulk Upload tab. Choose your ZIP file and click Upload ZIP File.
3

Automatic Processing

Each file is extracted, uploaded to secure cloud storage, and processed individually through the OCR pipeline. A progress bar tracks the overall upload.
4

Review Results

Once complete, you’ll see a summary showing how many invoices were queued, skipped, or encountered errors. Processed invoices appear in your dashboard.

Supported File Types

Files inside your ZIP can be any of the following formats:
FormatExtensions
PDF.pdf
JPEG.jpg, .jpeg
PNG.png
GIF.gif
WebP.webp
BMP.bmp
Hidden files (dotfiles) and macOS system files (__MACOSX) are automatically skipped.

Upload Summary

After processing, you’ll see a detailed breakdown:
StatusDescription
QueuedSuccessfully submitted for OCR processing
SkippedFile was unsupported or a hidden/system file
ErrorProcessing failed for this file
Files that are skipped or encounter errors include a reason so you can fix and re-upload if needed.

Client Assignment

You can assign all invoices in a bulk upload to a specific client. Select a client from the dashboard before uploading, and every invoice in the ZIP will be tagged automatically.

Usage Limits

Each invoice file inside the ZIP counts towards your monthly invoice limit. If you reach your plan’s limit mid-upload, remaining files will not be processed.
Check your remaining invoice allowance in Dashboard → Usage before uploading large ZIP files.

Bulk Upload via API

You can also trigger bulk uploads programmatically:
1

Get a Signed URL

POST /api/upload/signed-url
Content-Type: application/json

{
  "fileName": "invoices.zip",
  "fileType": "application/zip"
}
Returns a signedUrl and gcsUri.
2

Upload the ZIP to Cloud Storage

PUT {signedUrl}
Content-Type: application/zip

[ZIP file binary data]
3

Trigger Processing

POST /api/upload/bulk
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN

{
  "gcsUri": "gs://bucket/user/invoices.zip",
  "clientId": "client_abc123"
}

API Response

{
  "success": true,
  "summary": {
    "total": 15,
    "queued": 12,
    "skipped": 2,
    "errors": 1
  },
  "results": [
    {
      "fileName": "invoice-001.pdf",
      "status": "queued",
      "invoiceId": "inv_abc123"
    },
    {
      "fileName": ".DS_Store",
      "status": "skipped",
      "reason": "Hidden or system file"
    }
  ]
}

Best Practices

Organise Before Upload

Remove non-invoice files from your ZIP to avoid unnecessary skips and speed up processing.

Check Your Limit

Verify your remaining invoice allowance before bulk uploading to avoid partial processing.

Use Supported Formats

Stick to PDF and high-resolution images for the best extraction accuracy.

Assign a Client

Select a client before uploading so all invoices are tagged automatically.