📖 About the Project
📌 Inspiration
I was frustrated by how difficult it was to convert my personal M-Pesa statements into a clean, usable format. Every few months, I’d download a PDF statement, expecting a simple conversion process, only to spend hours manually copying and cleaning the data in Excel. When I realized there wasn’t a reliable, easy-to-use tool for this — especially one tailored for mobile money and African financial systems — I knew it was a problem worth solving. That’s how Statement To CSV was born.
📌 What it does
Statement To CSV is a clean, modern web application that converts M-Pesa and bank (mostly local and African) PDF statements into clean, ready-to-use CSV or Excel files. Users can upload their statements, and within seconds, download a structured file ready for analysis, record-keeping, or business accounting. The platform will later expand to support other African mobile wallets and banks.
📌 How we built it
I built Statement To CSV using:
- Next.js for both frontend and backend API routes
- Tailwind CSS for a modern, responsive UI
- pdfjs-dist to extract transactions from PDF statements
- ExcelJS and json2csv to generate downloadable files
- *Stripe/Paystack * for payment integration
- *Supabase * as the backend as a sevice and auth provider
- *Netlify * for hosting
- Modular API route structure for easy parser additions in the future
The system is designed to be serverless-ready, with built-in support for rate limiting, user feedback, and admin tools for monitoring conversions.
📌 Challenges we ran into
- PDF parsing inconsistencies with varied M-Pesa formats
- Stripe’s limited availability in Kenya, prompting research into local payment alternatives like Paystack and Flutterwave. Settled for Paystack
- Handling file uploads and large statement conversions within the limits of serverless functions
- Ensuring clean, reliable CSV/Excel generation from unstructured PDF data
- Designing a flexible system architecture for easy addition of new statement parsers
- Spending an entire day debugging a small issue after Bolt was unable to find the problem in 5 attempts.
- Building the app several times, failing in each of those due to using some old packages.
📌 Accomplishments that we're proud of
- Built a clean, reliable MVP for M-Pesa and bank conversions that actually works
- Created a scalable, modern architecture that can easily grow to support banks and wallets across Africa
- Developed a beautiful, accessible UI optimized for both desktop and mobile
- Integrated a feedback mechanism so users can report conversion issues for continuous improvement
- Designing and developing a fully fledged parser that accepts multiple variations of a statement from the same institution
📌 What we learned
- PDF parsing is messy, and financial data formats vary wildly — but with the right abstractions, it’s manageable
- Building for African markets requires thoughtful payment integration planning
- Next.js is powerful for fullstack web apps, and serverless deployment saves a lot of infrastructure headaches. It does come with it's own headaches also, and they can be something else ;)
- Structuring your backend to support pluggable parsers from day one makes future scaling way easier
- Always build for real users — because if it annoyed me, it’s annoying someone else too
📌 What's next for Statement To CSV
- Expanding support to other African financial providers like Airtel Money, Equity Bank, and Flutterwave wallets
- Enabling bulk uploads and summary reports
- Setting up a mobile-friendly web app and exploring a future native mobile version
- Incorporating AI-powered transaction categorization and insights
Built With
- netlify
- nextjs
- react
- supabase
- typescript
Log in or sign up for Devpost to join the conversation.