Convert financial statements to CSV with intelligent transaction categorization
CAMT-CSV converts financial statement formats (CAMT.053 XML, PDF, Revolut CSV, Selma CSV) into standardized CSV files with AI-powered transaction categorization.
# Homebrew (macOS/Linux)
brew tap fjacquet/homebrew-tap
brew install camt-csv
# Docker (multi-arch: amd64/arm64)
docker pull ghcr.io/fjacquet/camt-csv:latest
# Binary — download from GitHub Releases
# https://github.com/fjacquet/camt-csv/releases/latest
# Build from source
git clone https://github.com/fjacquet/camt-csv.git
cd camt-csv
make build
# For PDF support: brew install poppler (macOS) or apt-get install poppler-utils (Ubuntu)# Convert CAMT.053 XML
camt-csv camt -i statement.xml -o output.csv
# Convert Revolut CSV
camt-csv revolut -i revolut_export.csv -o output.csv
# Convert PDF bank statement
camt-csv pdf -i statement.pdf -o output.csv
# Revolut investment transactions
camt-csv revolut-investment -i investments.csv -o output.csv
# Selma investment CSV
camt-csv selma -i selma.csv -o output.csv
# Generic debit CSV
camt-csv debit -i debit.csv -o output.csv
# Batch process a directory
camt-csv batch -i input_dir/ -o output_dir/
# Use iCompta output format (semicolon-delimited, 10 columns)
camt-csv revolut -i export.csv -o output.csv --format icompta
# Enable AI categorization
camt-csv --ai-enabled --auto-learn camt -i statement.xml -o output.csv
# Check version
camt-csv --versionSettings can be provided via config file, environment variables, or CLI flags (highest precedence).
# Config file
mkdir -p ~/.camt-csv
cat > ~/.camt-csv/camt-csv.yaml << EOF
log:
level: "info"
ai:
enabled: true
categorization:
auto_learn: false
EOF
# Environment variables
export GEMINI_API_KEY=your_api_key_here
export CAMT_AI_ENABLED=true
export CAMT_LOG_LEVEL=debugSee the User Guide for the complete configuration reference.
Four-tier strategy pattern for transaction categorization:
- Direct Mapping - Exact match from
creditors.yaml/debtors.yaml - Keyword Matching - Pattern rules from
categories.yaml - Semantic Search - Vector embedding similarity matching
- AI Fallback - Gemini API for unknown transactions (optional, requires
--ai-enabled)
When --auto-learn is enabled, AI results are saved directly to the main YAML files. When disabled (the default), AI suggestions are saved to staging files (database/staging_creditors.yaml, database/staging_debtors.yaml) for manual review.
Full documentation: https://fjacquet.github.io/camt-csv/
- User Guide - Usage, configuration, troubleshooting
- Developer Guide - Contributing, architecture, adding parsers
- API Specifications - Interfaces and data models
- Architecture Decision Records - Design decisions
make all # Lint, test, and build
make test # Run tests
make lint # Run golangci-lint
make coverage # Generate coverage report
make install-tools # Install dev toolsMIT License - see LICENSE file.