Skip to main content

SFTP Bank format

This page specifies the bank transaction files you send to Monk over SFTP, for Cash App. Each file lists your bank transactions, and Monk matches the incoming payments in it to your open invoices, the same way it matches payments from any other bank connection. For how the integration works, see File integration (SFTP), and for how to connect and authenticate, see Connecting. Bank files are separate from the batches your ERP sends. They have their own folder, need no manifest, and can arrive on their own schedule, such as when your bank’s prior-day file is ready each morning. If your bank exports transactions in any other format, whether CSV or its own, talk to your Monk contact.

Folders and file names

Upload each file directly into the bank folder, with no subfolders. Each file is imported on its own, and file names are lowercase:
  • Files are named <timestamp>_transactions.csv, where <timestamp> is when your job produced the file, in UTC, as yyyymmdd-hhmmss. Each file has its own timestamp, and Monk processes files in timestamp order.
  • A file whose name Monk already processed is ignored. File names are case-sensitive, so a name with uppercase letters is not picked up.
  • Upload each file under a temporary name ending in .tmp and rename it once the upload is complete. Monk ignores .tmp files, so it never reads a partly written file.

File conventions

The CSV conventions are the same as for the files your ERP sends; see File conventions. In short: CSV (RFC 4180), UTF-8, comma-delimited, with a header row using the exact column names below, in any order. Columns not on this page are ignored and listed as warnings. In addition:
  • posted_at as an ISO 8601 date and time with a time zone, such as 2026-10-19T14:32:00Z. If your bank reports only a date, send midnight in your bank’s time zone, such as 2026-10-19T00:00:00-05:00.
  • Amounts as decimals in major units with a dot, such as 1234.50, with no currency symbols or thousands separators, below 100,000,000.00. Amounts are signed: positive for money into the account, such as a customer payment, and negative for money out.

Columns

One row per transaction, as it appears on your bank statement. Monk imports rows marked pending or processing but does not create a payment-reconciliation task for them yet. When a later file re-sends the same transaction as posted, Monk updates it and creates its task.
  • Money out. Send every transaction, including debits. Monk imports them with the rest, but only matches money in to invoices.
  • Who paid. Monk uses counterparty, bank_description, and note to identify the customer who paid. When counterparty is blank, Monk reads the payer from bank_description where it can.
  • Invoice references. Monk matches invoice numbers and amounts found in note, memo and bank_description, so pass the bank’s remittance text through as it is.

Example

Sending transactions again

Monk recognizes a transaction by the date of its posted_at, its amount, and its counterparty (compared ignoring case and extra spaces). When several rows in one file match on all of these, such as two equal payments from the same customer on the same day, Monk tells them apart by their order in the file. A row that matches a transaction Monk imported from an earlier file on all of these, and also on memo and bank_description, is the same transaction sent again, such as when two of your bank’s files overlap. It is not imported twice: Monk updates that transaction’s note and status from the latest file and counts the row as already imported in sync history. A row that matches on posted_at, amount, and counterparty but has a different memo or bank_description is never merged: Monk imports it as a separate transaction and flags both for review in sync history. If your bank rewrites descriptions between files, these flags show where. Files only add or update transactions, so a transaction missing from a later file stays in Monk. Do not change a transaction’s counterparty between files, or Monk imports it as a new transaction.

Validation

A rejected file blocks nothing. Fix it and send it again with a new timestamp. Every file appears in Monk’s sync history with the rows accepted and rejected, any warnings, and a downloadable error report. During setup, upload test files to validate your export without importing anything.