Set up an automated (SFTP) invoice feed

Last reviewed: 2026-08-03

Scope: How an automated SFTP invoice feed works: onboarding, folder structure, the file cycle, return files, and who does what.

An automated feed lets your POS, ERP, or billing system send invoice files to JomeInvoice without anyone uploading them by hand. You drop files into an agreed folder; JomeInvoice collects them on a schedule, imports the invoices, and reports the outcome of every row back to you. It is the high-volume alternative to Direct Upload.

Supported file formats are CSV, JSON, and XML.

How a feed is set up

An automated feed is configured together with the JomeInvoice team - it is not self-service in the app. Onboarding covers:

  1. Sample files. You share real sample files, and details such as delimiter and encoding, for each invoice type you send.
  2. Field mapping. You agree how your columns map to JomeInvoice invoice fields, and the mapping is configured for you.
  3. Connection. Either JomeInvoice connects to your SFTP server and collects new files on a regular schedule, or you upload files to a drop area JomeInvoice provisions for you.
  4. Folders and file naming. You agree the folder layout and an exact file-naming pattern - depending on your setup, the pattern can encode your company TIN, branch code, invoice type, or date.
  5. Return files. You agree whether JomeInvoice writes outcome files back to your folder, and what they should contain.
  6. Test run. The feed is tested with your sample data before going live.

Contact JomeInvoice to start an onboarding - the more representative your sample files are, the faster the setup.

The folders

Your feed has a folder per invoice type - consolidated and non-consolidated - and JomeInvoice moves each file through the cycle:

  • new - where you drop files. Only files in new are picked up.
  • processing - the file has been collected and is being imported.
  • completed, error, or invalid - where the file ends up: imported successfully, finished with failures, or not recognised (wrong name or wrong folder).

If your account is set up with branch or department folders, drop each file in the folder for the branch or department it belongs to. The exact paths are agreed during onboarding - use them exactly as provisioned.

The feed cycle

  1. Your system writes a file into the new folder, named per the agreed pattern.
  2. JomeInvoice picks it up - on the agreed schedule, or as soon as it arrives, depending on your setup - and starts the import.
  3. The invoices are validated, matched to your customers and suppliers, and imported - the same checks as any other import. How matching works, and whether unmatched parties are created automatically, follows your matching settings.
  4. You track progress and results in the Import Log: each file shows its status and per-invoice outcomes.
  5. If return files are enabled, JomeInvoice writes outcome files back for you to collect.

Return files

Return files report what happened to every invoice in a file you sent. They are generated once the file finishes processing, named after your original file with a status prefix:

  • [completed]-... - invoices that imported and submitted successfully
  • [error]-... - invoices that failed, with the reason
  • [invalid]-... - rows that could not be processed

The columns are agreed during onboarding; typical outcome fields include the invoice's status, the failure reason if any, LHDN identifiers and the validation link, and a link to the invoice PDF where available.

Who does what

You JomeInvoice
Produce files in the agreed format and naming, and place them in new Collects and imports files on the agreed schedule
Keep invoice data complete and valid (TINs, codes, totals) Maintains your field mapping and feed configuration
Fix rejected rows at the source and send them again through the feed Writes return files with per-invoice outcomes (if enabled)
Tell JomeInvoice before sending files for a new company or branch Adds new companies or branches to your feed setup

When an invoice from the feed fails, correct the data in your source system and send it again through the feed. Editing the failed row in the web app does not re-run matching - see Fixing buyer not matched errors.

When something goes wrong