Ingestion
Configure how Reconify parses CSV, JSON, NDJSON, and XLSX source files into its normalized transaction model.
Reconify can't match transactions until it understands what your source files look like. The parser block in each source definition is where you map your file's column names and number formats to Reconify's normalized transaction model. Getting this right means Reconify reads your amounts, dates, and references correctly. Mistakes here show up as timing differences or unmatched rows, not parse errors.
What you'll learn
By the end of this guide, you know:
- which file types Reconify supports and how to configure each,
- how
multiplier,decimal, andthousandsconvert your amounts to minor units, - and when to use optional fields and what you lose by omitting them.
How it works
Every source row becomes a Transaction with a fixed set of fields: Date, Amount (in minor
units), Currency, Reference, and Name. The parser block maps your source-specific column
names and number formats to those fields. See Transactions for the
full model.
Command
reconify parse \
--config reconify.yaml \
--source bank \
--file data/bank/january.csv \
--format tableRun this to preview how rows are normalized before committing to a full reconciliation.
Steps
Choose the parser type
Set type in the parser block. The auto value infers the parser from the file extension and is the safe default.
parser:
type: auto| Type | When to use |
|---|---|
auto | Infer from file extension. Safe default for most cases. |
csv | Explicit CSV. |
json | JSON array of objects. |
ndjson | One JSON object per line. |
xlsx | Excel workbook (.xlsx or .xlsm). |
auto infers from extension: .csv, .json, .ndjson, .xlsx, .xlsm. Legacy .xls files are not supported. Save them as .xlsx or .csv first.
Map required columns
Every parser needs date_col, date_layout, and amount_col:
parser:
type: csv
date_col: "Date"
date_layout: "2006-01-02"
amount_col: "Amount"date_layout uses Go's reference time: the reference date is 2006-01-02 15:04:05 MST. Common
patterns:
| Source format | Layout string |
|---|---|
2024-01-15 | 2006-01-02 |
01/15/2024 | 01/02/2006 |
15 Jan 2024 | 02 Jan 2006 |
Configure amount parsing
decimal: "."
thousands: ","
multiplier: 100multiplier converts source amounts to minor units:
- Use
100when the file contains1234.56(major units). - Use
1when the file already contains123456(minor units, like Stripe'samountfield).
Parenthetical negatives like (1,234.56) are supported automatically.
Add optional columns
Three optional fields control matching behavior. Omitting them is valid but reduces what Reconify can match.
currency_col: "Currency"
name_col: "Description"
ref_col: "Reference"ref_col is the most consequential optional field. Without it, all rows have empty references and reference matching is disabled entirely. name_col enables name-token matching when name_mode: "tokens" is set on the pair.
Configure XLSX-specific settings
parser:
type: xlsx
sheet: "Transactions"
date_col: "Date"
amount_col: "Amount"If sheet is omitted, Reconify reads the first sheet. CSV and XLSX both use the first row as headers. Column lookup is case-insensitive and trims whitespace.
Skip raw fields for large sources
parser:
skip_raw: trueBy default, parsed transactions include raw, the original row/object fields. Set skip_raw: true when processing large files and you don't need the original fields in output. This reduces allocation pressure significantly.
Verify it worked
Parse a sample file with --format table to confirm dates, amounts, and references look correct:
reconify parse \
--config reconify.yaml \
--source bank \
--file data/bank/january.csv \
--format tableCheck that:
Datevalues match the dates in your file (not shifted by a day or timezone).Amountis in minor units (15000for150.00 USD).Referenceis populated if you configuredref_col. Empty references disable matching.
If something looks wrong, verify date_layout, multiplier, and decimal before running a full
reconciliation. A single wrong multiplier means every amount is off by a factor of 100.