> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reconifyhq.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Reconify's API reference is read-only for customer data. Do not invent endpoints or authentication behavior beyond the OpenAPI contract.
> The public OpenAPI document contains only the documented external /v2 contract.

# FAQ

> Common Reconify setup and reconciliation questions.

## Why do I have so many unmatched rows?

Check the parser fields before touching matching rules. A wrong `date_col`, `amount_col`, `ref_col`, or `name_col` produces rows that look present but never line up.

Run `reconify config check-source --source left_source --file path/to/left-file.csv` for headers and a sample, then `reconify parse --source left_source --file path/to/left-file.csv --format table` to see the normalized rows. See [Create a config](/cli/guides/create-config#prove-the-mapping-against-real-rows).

## Why is `timing_diff` so high?

This is almost always `date_layout`, `tz`, or a mismatch between which date each source records: one side using a settlement date, the other a transaction date. It's rarely a real reconciling item. Check the parser config before widening `date_window`. See [Sources and pairs](/cli/concepts/sources-and-pairs).

## Why did a row become `amount_diff`?

The reference matched and the date was within `date_window`, but the amount difference exceeded `amount_tolerance_minor`. Check gross versus net first: a source that includes fees, refunds, or reserves in one amount column and not the other produces a wall of `amount_diff` rows that have nothing to do with tolerance. See [Read the results](/cli/guides/read-results).

## Why is my `duplicate_count` non-zero?

Reconify groups rows in the same source that share a `group_col` (or `ref_col`, when `group_col` isn't set) and reports the group for visibility. This runs after matching and never excludes a row: every transaction in a duplicate group still participates in matching independently.

Common causes are repeated export rows, reused references, partial settlements, and refunds sharing an original transaction ID. If the rows are legitimate, such as an invoice paid in three installments, set `group_col` to a per-row-unique column like `payment_id` so the shared invoice reference in `ref_col` doesn't get flagged. See [Matching algorithm](/cli/concepts/matching-algorithm#duplicates-are-an-annotation-not-a-filter).

## Every amount is off by 100x.

Check `multiplier`. A source with decimal amounts like `1,234.56` needs `multiplier: 100` to land on `123456` minor units. A source that already emits minor units, like Stripe's `amount` field, needs `multiplier: 1`. Setting `100` on an already-minor-units source puts every amount off by a factor of 100 and turns every row into an `amount_diff`. See [Transactions](/cli/concepts/transactions#amounts-are-integers).

## My dates are off by a day.

Check `tz` and `date_layout`. Go's reference layout is `2006-01-02`, not `YYYY-MM-DD`: a literal `YYYY-MM-DD` layout string fails to parse any real date. If the source records local dates with no offset, set `tz` to the source's IANA timezone so Reconify doesn't parse it as UTC. See [Create a config](/cli/guides/create-config#map-the-columns).

## Which file formats are supported?

CSV, JSON, NDJSON, XLSX, and XLSM. Legacy `.xls` is not supported: save the workbook as `.xlsx` or export it as `.csv` first. For XLSX/XLSM, the first row of the sheet must be headers, not a title or subtitle row, and column lookup is case-insensitive. Set `sheet` if the data isn't on the first sheet. See [Create a config](/cli/guides/create-config#map-the-columns).

## Which side should be left and which right?

The right source is indexed first, so peak memory is set by the right-side index, not the combined file sizes: prefer the smaller file on the right for large runs. Left and right also determine which unmatched bucket a row lands in (`unmatched_left` versus `unmatched_right`), so pick the side that matches how you want to read the results. See [Sources and pairs](/cli/concepts/sources-and-pairs#which-side-is-left).

## How do I set a tolerance without hiding real problems?

Start with `amount_tolerance_minor: 0` and `date_window` set to the smallest gap your source systems actually produce. Widen either only once you've confirmed a specific, known rounding or settlement delay, never as a way to make a bad column mapping look clean. See [Config reference](/cli/reference/config#pairs).

## Does Reconify do fuzzy matching?

No. The closest thing is token-based name matching (`name_mode: tokens`), which compares word-token similarity on the name field, and it only runs on rows that reference matching already failed to resolve. It never searches combinations of rows that happen to sum to the same amount. See [Matching algorithm](/cli/concepts/matching-algorithm).

## Can I run very large files?

Yes. Use a streaming output format (`ndjson`, `csv`, or `json-stream` instead of buffered `json` or `table`), pick an index backend (`auto`, `disk`, or `partitioned`) sized to the right file, and add `--progress` for visibility while it runs. See [Handle large files](/cli/guides/large-data).

## Can I get audit metadata?

Yes. Add `--audit` with `json`, `json-stream`, or `ndjson` output, and Reconify attaches `run_info`: a run ID, timestamp, tool version, SHA-256 and size of each input file, and a snapshot of the applied pair config. Not supported with `csv` or `table`. See [Read the results](/cli/guides/read-results#make-the-run-auditable).

## Can an agent drive this end to end?

Yes. `reconify capabilities` discovers what a build supports, `reconify inspect` profiles a file, `reconify config infer` proposes a mapping, and `--agent` switches defaults to machine-readable diagnostics and NDJSON output. `reconcile --auto` goes from two raw files to a result in one command when the inference gates pass. See [Run it with an agent](/cli/agents).

## Do I need an account or network access?

No. Reconify runs entirely against local files, needs no account, API key, or network call, and produces the same output from the same input every time. This matters for agents as much as for people: there's no auth wall between installing the binary and getting a first result. See [Reconify CLI](/cli).
