A private assistant that untangles yearly accounting prep
The challenge behind the build
Bank exports, receipt rows, previous Banana transactions, and company-specific account lists arrive in different shapes every year. Reconciling them by hand, across multiple company profiles, is slow and easy to get wrong.
The implementation goal
Build a browser app, with an optional Cloudflare Worker deployment, that accepts bank CSV/TSV exports, AppSheet/WebBuch rows, Banana account lists, and previous Banana transaction exports, then supports review before exporting Banana-compatible rows.
One reviewable pass instead of a manual reconciliation every year
The assistant learns each company's account-list and mapping conventions from prior Banana exports, ingests the year's bank and receipt data, and produces a single reviewable set of rows in Banana's own CSV/TSV format — turning a recurring manual task into a structured, repeatable pass.
Our other projects
The brief was to reduce repeated yearly accounting preparation work across multiple Swiss company profiles while preserving accountant-reviewed Banana output formats.
Bank exports, receipt rows, previous Banana transactions, and company-specific account lists arrive in different shapes. Manually reconciling them every year is slow and error-prone.
Real accounting data must stay private at all times. Any public screenshots use anonymized samples only, and the deployed app has to be access-protected before it handles real workflow data.
SoFlow built a browser app, with an optional Cloudflare Worker deployment shape, for uploading bank CSV/TSV exports, AppSheet/WebBuch rows, Banana account lists, and previous Banana transaction exports, then reviewing and exporting Banana-compatible rows.
JavaScript handles file parsing and normalization directly in the browser, with an optional Cloudflare Workers deployment for hosting and optional Workers AI-assisted mapping suggestions. Company profiles persist each business's account-list and export conventions, keeping every company's data and mappings separate.
- Company profiles that persist mapping conventions across yearly runs
- Bank CSV/TSV normalization into a common working format
- AppSheet/WebBuch receipt-row enrichment
- Learning from Banana account lists and prior transaction exports
- Manual review step before any export is finalized
- Banana-compatible CSV/TSV output ready for the accountant

Recurring accounting preparation is now a structured review workflow instead of a repeated manual reconciliation — publishable with anonymized data and clear privacy framing, not real financial detail.
- Supports multiple company export templates across different business types
- Reuses previous Banana transaction exports as a learning reference layer
- Private-data folder explicitly excluded from version control
Why does this need custom software instead of just spreadsheets?
Because the inputs never match: bank CSV/TSV exports, AppSheet/WebBuch receipt rows, existing Banana account lists, and prior Banana transaction exports all use different shapes, and each company profile has its own mapping conventions. A spreadsheet can't remember those mappings year over year or produce Banana-ready output — this assistant does both.
Why put this in Webflow if external code is involved?
Webflow is the public storytelling and CMS layer. External code should stay in the app, Worker, or integration layer where it can be versioned, secured, and tested.
What is needed before publishing?
Anonymized sample data, privacy-first screenshots with no real company or transaction information, and a deployed instance that's protected before it's referenced publicly.
This shows SoFlow can build serious private operational tooling around messy, real-world file formats and recurring business processes — without forcing every internal tool into a public SaaS product.
Why does this need custom software instead of just spreadsheets?
Because the inputs never match: bank CSV/TSV exports, AppSheet/WebBuch receipt rows, existing Banana account lists, and prior Banana transaction exports all use different shapes, and each company profile has its own mapping conventions. A spreadsheet can't remember those mappings year over year or produce Banana-ready output — this assistant does both.
Why put this in Webflow if external code is involved?
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Block quote
Ordered list
- Item 1
- Item 2
- Item 3
Unordered list
- Item A
- Item B
- Item C
Bold text
Emphasis
Superscript
Subscript
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Block quote
Ordered list
- Item 1
- Item 2
- Item 3
Unordered list
- Item A
- Item B
- Item C
Bold text
Emphasis
Superscript
Subscript
Each yearly accounting pass meant manually joining bank rows, receipt references, and account mappings by hand, separately for every company profile, with no memory of last year's decisions.
Company-specific mappings persist across years, and the assistant produces a single reviewable, Banana-compatible set of rows in a fraction of the manual effort.
This isn't a marketing-page problem — it needs real file parsing, persistent mapping memory per company, review states, receipt evidence linking, and export formats that match Banana Accounting's expectations exactly.






