Beancount CaixaBank Importer
beancount-caixabank provides a Beancount importer for converting CaixaBank Excel
statement exports to the Beancount format.
Features
- Format Support: Handles CaixaBank Excel exports (.xls and .xlsx)
- Robust Parsing:
- Flexible header detection (handles statements with metadata rows)
- Supports both Excel date serial numbers and DD/MM/YYYY string dates
- European number format parsing (comma as decimal, dot as thousands separator)
- Full Beancount Integration: Creates proper transactions with metadata, payee, and narration
Installation
pip install beancount-caixabank
Usage
Getting Your CaixaBank Statement
- Log in to CaixaBank online
- Navigate to your account
- Export statement as Excel file (.xls or .xlsx)
- The file should contain columns: Fecha, Fecha valor, Movimiento, Más datos, Importe, Saldo
Beancount 3.x
Beancount 3.x uses a script-based workflow. Create an import.py file in your Beancount
directory:
from beancount_caixabank import CaixaBankImporter
from beangulp import Ingest
importers = [
CaixaBankImporter('Assets:CaixaBank:Checking'),
]
if __name__ == '__main__':
ingest = Ingest(importers)
ingest()
Then run:
python import.py extract path/to/statement.xls
Beancount 2.x
Add the following to your config.py:
from beancount_caixabank import CaixaBankImporter
CONFIG = [
CaixaBankImporter('Assets:CaixaBank:Checking'),
]
Configuration
Account Name
The importer requires you to specify the Beancount account name where transactions will be imported:
CaixaBankImporter('Assets:MyBank:CaixaBank:Main')
Example Configuration
For a typical Beancount 3.x setup:
from beancount_caixabank import CaixaBankImporter
from beangulp import Ingest
importers = [
CaixaBankImporter('Assets:CaixaBank:Checking'),
CaixaBankImporter('Assets:CaixaBank:Savings'),
]
if __name__ == '__main__':
ingest = Ingest(importers)
ingest()
File Format
CaixaBank Excel statements should contain the following columns:
| Column | Description | Format |
|---|---|---|
| Fecha | Transaction date | DD/MM/YYYY |
| Fecha valor | Value date | DD/MM/YYYY |
| Movimiento | Transaction description/payee | Text |
| Más datos | Additional details/reference | Text |
| Importe | Amount | European format (comma decimal, dot thousands) |
| Saldo | Account balance | European format |
Note: The importer automatically detects the header row, so metadata rows before the headers are handled correctly.
Development
Prerequisites
- Python 3.9 or higher
- uv - Fast Python package installer and resolver
Setup
-
Clone the repository:
git clone https://github.com/rogiia/beancount-caixabank cd beancount-caixabank
-
Install dependencies:
uv sync -
Run tests:
uv run pytest
-
Run linting:
uv run task lint
Using a Python environment
If you prefer to use a specific Python version:
uv sync --python 3.11
Testing
The importer includes comprehensive tests covering:
- File identification and validation
- Single and multiple transaction extraction
- Date parsing (string and Excel formats)
- European number format parsing
- Edge cases and error handling
Run the test suite with:
uv run pytest
Or with verbose output:
uv run pytest -v
Contributing
Contributions are welcome! Please feel free to submit a PR.
License
This project is licensed under the MIT License - see the LICENSE.txt file for details.
Disclaimer
This importer is provided as-is. Always verify imported transactions against your bank statements to ensure accuracy.
Support
For issues, questions, or suggestions, please create an issue on the GitHub repository.
Related Projects
- Beancount - Command-line accounting system
- beancount-n26 - N26 bank importer
- beangulp - Beancount importer framework
Metadata
Release files for beancount-caixabank 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| beancount_caixabank-1.0.0.tar.gz | 39.8 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| beancount_caixabank-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 46.7 kB
Release files / beancount_caixabank-1.0.0.tar.gz
| Download URL | beancount_caixabank-1.0.0.tar.gz |
|---|---|
| Size | 39.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
95e69cdef63d5936950d105230f01ba87e961c09e6748d61a15bc210694d4a59
|
|
BLAKE2b-256 checksum How to use checksums |
bc8ed04be8f74b71e125746ab8de7e635f3e6300fe276358f32569882eae9276
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 3, 2026.
Transparency logRelease files / beancount_caixabank-1.0.0-py3-none-any.whl
| Download URL | beancount_caixabank-1.0.0-py3-none-any.whl |
|---|---|
| Size | 6.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d4f29eba8b7fa7021fa247696e1e60dff4414aee216967c106d3fb21c13161ae
|
|
BLAKE2b-256 checksum How to use checksums |
e956dea4b977d0899c6bf0774579ec6f66360fcf01d53ae5c5d006a385459048
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 3, 2026.
Transparency logSecurity for beancount-caixabank 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for beancount_caixabank-1.0.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 3, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.