Guide · 7 min read
FNB bulk payments from a CSV file: a step-by-step guide
To pay many suppliers at once in FNB Online Banking Enterprise, you import a payments CSV file. It has three short header rows (a template line, the payment date, and your paying account with a hash total), a row of column headings, then one line per payment. Build it only from approved payments and verified supplier details, do not re-save it in Excel, and let your FNB authorisers release the batch as usual.
Updated By the EzeFlow team
In short
- One file pays from one account on one payment date.
- Each payment line needs a name, account number, account type, 6-digit branch code, amount and two references of up to 20 characters.
- The hash total is the sum of all account numbers plus your own account, last 12 digits.
- Never open and re-save the file in Excel. It can damage account numbers and branch codes.
- The file only prepares payments. Your FNB authorisers still release them.
How does an FNB bulk payment import work?
Instead of capturing twenty supplier payments one by one, you prepare them in a CSV file and import the file into FNB Online Banking Enterprise. FNB reads the lines, shows you the payments, and they then go through your normal FNB authorisation. Nothing is paid until your authorisers release it.
FNB publishes a payments CSV template and an import guide. The layout below is the one EzeFlow builds, based on that template. FNB can change its rules, so for menu paths, cut-off times and limits, check FNB's current import guide in Online Banking Enterprise.
What does the FNB payment CSV look like?
Here is a shortened example with two made-up payments. In the real file every row has 36 columns, and most of them are empty.
BInSol - U ver 1.00 30-09-2026 62000000000,125000000011 RECIPIENT NAME,RECIPIENT ACCOUNT,RECIPIENT ACCOUNT TYPE,BRANCHCODE,AMOUNT,OWN REFERENCE,RECIPIENT REFERENCE,EMAIL 1 NOTIFY,... Apex Radiator Works,62000000011,1,250655,12480.00,EZF-01174,INV 01174 Karoo Office Supply,1000000000,1,470010,3215.50,EZF-01181,KOS 88213
- Row 1 is the template line. Leave it exactly as FNB supplies it.
- Row 2 is the payment (action) date, written DD-MM-CCYY.
- Row 3 is your own paying account, then the hash total.
- Row 4 holds the column headings.
- Row 5 onwards is one payment per line.
The payment columns, as EzeFlow fills them:
| Column | What goes in | Watch out for |
|---|---|---|
| Recipient name | The supplier's name as you want it on the payment | Up to 20 characters, plain letters and numbers |
| Recipient account | The account number | Digits only, no spaces or dashes |
| Recipient account type | 1 current or cheque, 2 savings, 3 transmission, 4 bond, 6 subscription share | Most business accounts are type 1 |
| Branch code | The recipient bank's branch code | Exactly 6 digits, including a leading zero |
| Amount | Rand and cents, for example 12480.00 | No R, no spaces, no thousands separator |
| Own reference | What shows on your statement | Up to 20 characters |
| Recipient reference | What shows on the supplier's statement | Up to 20 characters |
| Email, fax and SMS notify | Optional payment notifications | EzeFlow fills email 1 only when the supplier has a notification email |
For the references, use something both sides can match. Your own reference should point to your internal record, such as the payment request number. The recipient reference should be the invoice number or your account number with the supplier, because that is what their debtors clerk will look for.
How is the hash total calculated?
Add up every recipient account number in the file, add your own paying account number once, and keep the last 12 digits. If the answer is shorter than 12 digits, pad it with zeros on the left. That is how EzeFlow calculates it, following FNB's guide.
For the example above:
| Apex Radiator Works | 62 000 000 011 |
| Karoo Office Supply | 1 000 000 000 |
| Own account, added once | 62 000 000 000 |
| Sum, last 12 digits | 125000000011 |
The hash total is a control number. If anyone changes an account number in the file after it was built, the hash total no longer matches the accounts in it. That is also why you should not "fix" a line by hand in the file: fix the supplier record and build the file again.
Step by step: from approved invoices to released payments
- Start from approved payments only. Every line should trace back to a request with its invoice and the approvals your policy requires.
- Check the bank details. Compare each supplier against your supplier master file and your beneficiary list in FNB. Anything new or changed must be verified by phone first.
- Choose the paying account and date. One file, one account, one payment date.
- Build the file. Keep names and references short and plain, and amounts in
12480.00format. - Note the control figures: number of lines, total amount and hash total.
- Import the file in FNB Online Banking Enterprise, following FNB's import guide.
- Compare FNB's summary with your control figures before anything is authorised.
- Authorisers release the payments in FNB, as they would for any batch.
- Mark the payments paid once FNB has released them, so your records and the bank agree.
Common problems and how to avoid them
| Problem | How to avoid it |
|---|---|
Account numbers turned into 6.2E+11 or branch codes losing their leading zero | The file was opened and saved in Excel. Build it again and import it untouched. |
| Commas, quote marks or accents in names | A comma splits a column in two. Use plain characters only. EzeFlow strips them out and turns é into e. |
| Names or references cut off | Keep both to 20 characters. Put the invoice number first so it survives. |
| Wrong branch code or account type | Take both from the supplier's bank confirmation letter, not from an invoice. |
Amount written as R12 480,00 | Use 12480.00: a full stop for cents, nothing else. |
| Payment date in the past | Set the date before you build the file. EzeFlow suggests the next business day. |
| A foreign currency invoice in the batch | Keep it out of the rand file and pay it separately. |
What should you check before you import?
A clean file is not the same as a safe payment. The file will happily pay a fraudster if the account number in your system is wrong. Before building it, check:
- Was the request edited after it was approved?
- Were the supplier's bank details changed after the approval?
- Is the supplier's account on your FNB beneficiary list, with the same branch code?
- Is the supplier blocked, or is the account number or branch code invalid?
- Is the same amount going to the same supplier twice, in this batch or recently?
- Is the amount far above what you usually pay this supplier?
How EzeFlow helps
EzeFlow's bank payments module, in the Professional and Enterprise plans, builds this file for you. Your named bank team keeps a supplier master file (bank account numbers stored encrypted, every change recorded) and uploads the FNB beneficiary export to compare. Approved payments go into one batch per organization, paid from that organization's FNB account. A payment can be tagged "new beneficiary" or "changed bank details" so it stays out of the file until the details are set up in EzeFlow and FNB.
Before finalising, EzeFlow runs every check in the list above, including amounts more than three times the supplier's usual payment. Lines with a problem move to a separate list to capture by hand, and warnings must be confirmed. You then download the FNB CSV with its hash total, and mark the lines paid once FNB has released them. EzeFlow never moves money.
Frequently asked questions
What date format does the FNB payment CSV use?
In the FNB payments template that EzeFlow follows, the payment date is on row 2 in the format DD-MM-CCYY, for example 30-09-2026. EzeFlow will not build a file with a date in the past or more than a year ahead. If your template looks different, check FNB's current import guide in Online Banking Enterprise.
How is the FNB hash total calculated?
Add up all the recipient account numbers in the file, add your own paying account number once, and keep the last 12 digits, padded with zeros on the left if the result is shorter. It sits next to your own account number on row 3. EzeFlow calculates it for you.
Can one FNB CSV file pay from more than one account?
No. Row 3 holds one paying account, so every payment in the file comes out of that account. If you pay from several accounts, for example one per branch or company, build one file per account.
Can the file pay suppliers who bank with other South African banks?
Each line carries the recipient's branch code and account type, so the recipient does not have to bank with FNB. Use the universal branch code from the supplier's bank confirmation letter, and check FNB's import guide for any limits on your own banking profile.
Does EzeFlow send the payments to FNB?
No. EzeFlow never moves money and never connects to your bank account. It builds the CSV file from approved, checked payments. Your team imports the file into FNB Online Banking Enterprise and your FNB authorisers release the payments there.
What happens to foreign currency payments?
They do not belong in this rand payments file. EzeFlow keeps any payment that is not in rand out of the CSV and puts it on a separate list to capture by hand, for example through FNB's forex service.
Keep reading
More guides for finance teams
8 min read
How to set up a payment approval process in South Africa
Who may request, who approves, what evidence you keep, and how to prove it at audit time.
Read the guide8 min read
POPIA and payment records: what finance teams should keep
Supplier bank details, invoices and approvals are personal information. Handle them properly.
Read the guide6 min read
Why WhatsApp and email approvals fail at audit time
The five gaps auditors find, and what a proper approval trail looks like instead.
Read the guide