{"id":40892251,"url":"https://github.com/staticaland/beancounters","last_synced_at":"2026-01-22T02:10:12.237Z","repository":{"id":333400969,"uuid":"1126367945","full_name":"staticaland/beancounters","owner":"staticaland","description":"Demo project showing how to use Norwegian Beancount importers together","archived":false,"fork":false,"pushed_at":"2026-01-08T16:13:11.000Z","size":94,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-19T11:38:38.034Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/staticaland.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-01T19:00:17.000Z","updated_at":"2026-01-08T16:13:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/staticaland/beancounters","commit_stats":null,"previous_names":["staticaland/beancounters"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/staticaland/beancounters","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/staticaland%2Fbeancounters","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/staticaland%2Fbeancounters/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/staticaland%2Fbeancounters/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/staticaland%2Fbeancounters/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/staticaland","download_url":"https://codeload.github.com/staticaland/beancounters/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/staticaland%2Fbeancounters/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28650889,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-22T02:10:11.510Z","updated_at":"2026-01-22T02:10:12.223Z","avatar_url":"https://github.com/staticaland.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# beancounters\n\nDemo project showing how to use Norwegian Beancount importers together.\n\n## Included Importers\n\n- **beancount-no-sparebank1** - SpareBank 1 deposit accounts (CSV)\n- **beancount-no-dnb** - DNB Mastercard (Excel)\n- **beancount-no-amex** - American Express Norway (QBO)\n\n## Demo Data\n\nThe `data/` directory contains sample bank statements split into monthly exports,\nplus an overlapping export to demonstrate deduplication:\n\n```\ndata/\n├── sparebank1/\n│   ├── 2025-01.csv\n│   ├── 2025-02.csv\n│   ├── 2025-03.csv\n│   ├── 2025-04.csv\n│   ├── 2025-05.csv\n│   ├── 2025-06.csv\n│   └── 2025-02-15_to_2025-04-15.csv\n├── dnb/\n│   ├── 2025-01.xlsx\n│   ├── 2025-02.xlsx\n│   ├── 2025-03.xlsx\n│   ├── 2025-04.xlsx\n│   ├── 2025-05.xlsx\n│   ├── 2025-06.xlsx\n│   └── 2025-02-15_to_2025-04-15.xlsx\n└── amex/\n    ├── 2025-01.qbo\n    ├── 2025-02.qbo\n    ├── 2025-03.qbo\n    ├── 2025-04.qbo\n    ├── 2025-05.qbo\n    ├── 2025-06.qbo\n    └── 2025-02-15_to_2025-04-15.qbo\n```\n\n## Quick Start\n\n### 1. Install dependencies\n\n```bash\nuv sync\n```\n\n### 2. Preview imports\n\n```bash\n# Preview all files\nuv run import-transactions extract data/\n\n# Preview specific importer\nuv run import-transactions extract data/sparebank1/\nuv run import-transactions extract data/dnb/\nuv run import-transactions extract data/amex/\n```\n\n### 3. Import transactions\n\n```bash\nuv run import-transactions extract data/ \u003e imports/2025-02.beancount\n```\n\n### 4. View in Fava\n\n```bash\nuv run fava main.beancount\n```\n\nOpen http://localhost:5000 in your browser.\n\n## Project Structure\n\n```\nbeancounters/\n├── pyproject.toml\n├── main.beancount           # Main ledger file\n├── data/                    # Demo bank statements\n│   ├── sparebank1/\n│   ├── dnb/\n│   └── amex/\n├── imports/                 # Imported transactions\n└── src/beancounters/\n    └── importers.py         # Importer configuration\n```\n\n## Importer Configuration\n\nSee `src/beancounters/importers.py` for the full configuration. Key features demonstrated:\n\n### Pattern Matching\n\n```python\nmatch(\"KIWI\") \u003e\u003e \"Expenses:Groceries\"\nmatch(r\"REMA\\s*1000\").regex \u003e\u003e \"Expenses:Groceries\"\nmatch(\"starbucks\").ignorecase \u003e\u003e \"Expenses:Coffee\"\n```\n\n### Amount-Based Rules\n\n```python\nwhen(amount \u003c 50) \u003e\u003e \"Expenses:PettyCash\"\nwhen(amount.between(100, 500)) \u003e\u003e \"Expenses:Medium\"\n```\n\n### Field Matching (SpareBank 1)\n\n```python\nfield(to_account=\"11112222333\") \u003e\u003e \"Assets:Savings\"\ncounterparty(\"56712345678\") \u003e\u003e \"Income:Salary\"\n```\n\n## Related Projects\n\n- [beancount-no-sparebank1](https://github.com/staticaland/beancount-no-sparebank1)\n- [beancount-no-dnb](https://github.com/staticaland/beancount-no-dnb)\n- [beancount-no-amex](https://github.com/staticaland/beancount-no-amex)\n- [beancount-classifier](https://github.com/staticaland/beancount-classifier)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstaticaland%2Fbeancounters","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstaticaland%2Fbeancounters","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstaticaland%2Fbeancounters/lists"}