2
9 Comments

I built an OCR bank statement parser to save CAs hours of manual Excel cleanups. Need your brutal feedback!

Hey everyone, I'm the founder of Bank To Ledger (https://banktoledger.com). I built this platform because I kept watching freelance bookkeepers and Chartered Accountants (CAs) spend endless hours manually fixing broken formatting and shifted columns when trying to move bank statement tables from PDFs into Excel, Xero, or Tally.
Instead of hiding behind a sales call or an expensive corporate subscription, I wanted to build a clean, lightning-fast utility.
Here is a quick look at the technical architecture under the hood:
1. Native Text & OCR Handling: The engine parses clean digital text PDFs natively. For scanned documents, cell phone photos, or low-res client copies, it utilizes an OCR pre-processing layer that stabilizes bounding boxes to map the cells back into a perfectly aligned grid.
2. Strict Data Security: Financial data privacy is a massive concern for CAs. To build trust, our backend holds uploaded files strictly in memory during execution. All metadata is stripped, files are parsed, and the records are completely deleted from our system immediately after the session ends. We never store or sell client financials.
Right now, I am actively fine-tuning the regex and table-parsing logic for various complex regional bank layouts (US, UK, and India statement grids).
If you have a messy bank statement layout, please drop it into the tool! If the parser breaks or shifts a column, comment here or send a message on the site. I will jump straight into our server logs and manually deploy an adjustment rule for that bank layout today.
I would love your honest, brutal feedback on our processing layout, user dashboard, or parsing speed!

posted toAvatar for product Bank To Ledger
Bank To Ledger
  1. 1

    Quick public-surface check on Bank To Ledger: HTTPS/HSTS is in place and robots.txt is a real file blocking /api, /app, /admin, sign-in, and sign-up.

    The gaps I'd tighten before more bank-statement uploads: I didn't see CSP/frame protection, nosniff, Referrer-Policy, or Permissions-Policy on the main app response, and /.well-known/security.txt serves the app HTML instead of a public security contact/policy file.

    For a no-sign-in OCR tool with zero-retention/1-hour auto-delete claims, those trust headers and a clear security contact path matter a lot.

    1. 1

      Awesome call on this, thank you again! I just had the routing patched so it properly handles it now.

      If you hit /.well-known/security.txt it should load perfectly as a clean text file instead of falling back to that annoying 404 redirect.

      I also updated the policy copy inside the file to explicitly call out our SOC 2 compliance, TLS 1.3 architecture, and a hard guarantee that zero data is ever used for AI training. When dealing with client books, you really can't be too clear about that stuff.

      Really appreciate you keeping me honest on the public surface controls! i think i fixed it.

  2. 1

    One thing I'd be careful with:

    The interesting question may not be how accurately the parser handles bank statements.

    It may be what role you want it to play in the workflow once the parsing problem is solved.

    Those sound similar, but they can lead to very different product decisions early on.

    I wouldn't make that call casually from parsing feedback alone.

    1. 1

      That's an incredibly smart way to frame it, and you're totally right—down the road, the "what happens next" workflow is where the real sticky value is.

      Honestly, right now we are intentionally keeping our blinders on and focusing purely on the "pass-through" utility side. Since financial data is so sensitive, we built the entire backend to run strictly in-memory (RAM) with AES-256 encryption and a hard 1-hour auto-delete policy. Because we don't store anything on a hard drive, keeping it as a fast, ultra-secure converter fits our compliance model perfectly right now.

      Our immediate niche focus is just getting that extraction accuracy to a flawless 100% across the weirdest, messiest regional bank statement layouts that generic tools constantly choke on.

      Once we absolutely nail that baseline parsing problem for CAs and bookkeepers, we’ll definitely look at how to expand into the broader workflow without breaking our privacy-first setup. Appreciate the stellar food for thought!

      1. 1

        Possibly.

        The reason I'd still be careful is that some product decisions become much harder to revisit once early validation starts accumulating around them.

        That's what I'd want confidence in before treating the parsing signal as permission to expand.

        I wouldn't try to unpack that properly in a thread.

        If you're curious, drop your email and I'll put together the tighter version.

        1. 1

          That is an incredibly fair warning, and it makes total sense. Early validation can absolutely become a trap that blinds you to structural design dead-ends until it's too late to pivot out of them without tearing everything down.

          I don't want to casual-walk into that box. If you're open to dropping the tighter version of your framework right here, I'm all ears and ready to take the notes. Lay it on me.

          1. 1

            The reason I wouldn't put it here is that I don't think it's really a framework.

            I think it's a decision.

            And decisions like that tend to look obvious in hindsight and expensive in real time.

            I'd be careful unpacking it publicly.

            If you're curious, drop your email and I'll send over the tighter version.

            1. 1

              That completely lands. "Expensive in real time" is exactly what I'm trying to avoid here.

              Let's take it offline. You can hit me up directly at support@banktoledger.com if the system lets it through).

              Really looking forward to reading your thoughts on this decision.

              1. 1

                Perfect.

                Sent you a note by email.

                I think the decision underneath the parsing signal matters more than the parsing signal itself right now.