finances-ingest
Parse new source files into the normalized transaction ledger.
Quick Start
- Drop new export files into
~/Documents/finances/source/subdirectory:
- Bank exports → source/bank/ - Crypto exports → source/crypto/ - Brokerage exports → source/brokerage/ - Or sync from Moneta: uv run python scripts/sync_moneta.py
- Run ingest:
cd ~/Documents/finances && uv run python scripts/ingest.py
Supported Sources
| Source | File pattern | Target |
|---|---|---|
| BofA | source/bank/bofa*.csv | data/transactions/bofa.jsonl |
| Strike | source/crypto/strike*.csv | data/transactions/strike.jsonl |
| River | source/crypto/river*.csv | data/transactions/river.jsonl |
| Robinhood | source/brokerage/robinhood*.csv | data/transactions/robinhood.jsonl |
Note: Copilot transactions are ingested via scripts/backfill.py (one-time) or by dropping new exports in the root of ~/Documents/finances/.
Deduplication Rules
- Transaction IDs:
sha256(source+date+amount+description)[:16]— deterministic - Re-ingesting the same file is always safe — duplicates are counted and skipped
- Copilot is the primary source for banking (BofA checking, Apple Card, Apple Cash, Apple Savings). The raw BofA CSV is supplemental detail — don't double-count spend.
Flags
uv run python scripts/ingest.py --dry-run # Count without writing
uv run python scripts/ingest.py --source bofa # Single source onlyAfter Ingest
Run /finances-report to see updated analytics with the new data.