<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: FLOW by Vestelon</title>
    <description>The latest articles on DEV Community by FLOW by Vestelon (@vestelonflow).</description>
    <link>https://dev.to/vestelonflow</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3991476%2F2cf94fec-5193-48fa-af66-aa548db3698a.png</url>
      <title>DEV Community: FLOW by Vestelon</title>
      <link>https://dev.to/vestelonflow</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vestelonflow"/>
    <language>en</language>
    <item>
      <title>How I built a PDF bank statement analyzer in 8 languages (and what I learned)</title>
      <dc:creator>FLOW by Vestelon</dc:creator>
      <pubDate>Thu, 18 Jun 2026 20:16:07 +0000</pubDate>
      <link>https://dev.to/vestelonflow/how-i-built-a-pdf-bank-statement-analyzer-in-8-languages-and-what-i-learned-3580</link>
      <guid>https://dev.to/vestelonflow/how-i-built-a-pdf-bank-statement-analyzer-in-8-languages-and-what-i-learned-3580</guid>
      <description>&lt;p&gt;I spent months building FLOW (&lt;a href="https://vestelonflow.com" rel="noopener noreferrer"&gt;vestelonflow.com&lt;/a&gt;) — a tool that analyzes bank statement PDFs and finds forgotten subscriptions, hidden fees, and recurring charges.&lt;/p&gt;

&lt;p&gt;Here's what I learned building it in 8 languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Most personal finance apps require you to connect your bank account. For many people (especially in Europe), that's a dealbreaker. GDPR concerns, privacy fears, and simply not trusting third-party apps with banking credentials.&lt;/p&gt;

&lt;p&gt;My insight: &lt;strong&gt;the data people need is already in their PDF bank statements.&lt;/strong&gt; Every bank generates them. Most people never look past the total.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tech Stack
&lt;/h2&gt;

&lt;p&gt;The core flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User uploads PDF bank statement&lt;/li&gt;
&lt;li&gt;PDF text extraction (pdfplumber + fallback OCR)&lt;/li&gt;
&lt;li&gt;Transaction parsing — this is the hard part&lt;/li&gt;
&lt;li&gt;LLM categorization pipeline&lt;/li&gt;
&lt;li&gt;Subscription detection (recurring charges with same merchant)&lt;/li&gt;
&lt;li&gt;Report generation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The trickiest part was transaction parsing. Every bank formats their PDF differently. German banks look nothing like Slovak banks. We ended up building bank-specific parsers for the most common formats and a fallback generic parser.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 8-Language Challenge
&lt;/h2&gt;

&lt;p&gt;Supporting Slovak, Czech, German, French, Spanish, Polish, Arabic, and Chinese wasn't just about translating the UI. The financial terminology varies significantly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Permanent order" in English = "Trvalý príkaz" in Slovak = "Dauerauftrag" in German&lt;/li&gt;
&lt;li&gt;Subscription detection keywords differ by region&lt;/li&gt;
&lt;li&gt;Date/amount formats are locale-specific&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We ended up with language-specific merchant dictionaries for common subscription services in each market.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Matters
&lt;/h2&gt;

&lt;p&gt;The biggest lesson: &lt;strong&gt;people don't want a budgeting dashboard. They want a specific, actionable number.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"You're spending €137/month on forgotten subscriptions" converts. "Your spending breakdown by category" does not.&lt;/p&gt;

&lt;p&gt;The product is live at &lt;a href="https://vestelonflow.com" rel="noopener noreferrer"&gt;vestelonflow.com&lt;/a&gt; — first report is free, no card required, no bank connection needed.&lt;/p&gt;

&lt;p&gt;Happy to answer questions about the PDF parsing approach, the LLM pipeline, or the localization challenges.&lt;/p&gt;

</description>
      <category>fintech</category>
      <category>python</category>
      <category>showdev</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
