Work That Delivers Results

Five detailed case studies spanning financial dashboards, Python automation, SQL analytics, IFRS reporting, and business intelligence.

5
Featured Projects
$2.4M+
Revenue Impacted
500+
Hours Automated
1M+
Data Rows Processed
99.8%
Accuracy Rate
01
TOTAL REVENUE $482K ↑ 28.4% vs last month GROSS PROFIT $214K ↑ 14.2% vs last month NET PROFIT $94K ↑ 12.1% vs last month OPERATING EXPENSES $120K ↓ 3.2% vs last month Revenue vs Expenses — 12 Month Trend JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC Revenue Expenses Revenue by Category 50% Retail ● Retail 50% ● Online 25% ● Other 25% Top Products 86% 68% 50% Product A Product B Product C Monthly KPI Summary
📈 Power BI · Finance

Executive Financial Dashboard

"Real-time visibility that transformed decision-making speed by 60%."

A mid-size retail company with 12 locations had no centralised view of their financial performance. Leadership relied on weekly spreadsheet emails that were always 5–7 days out of date — meaning costly decisions were made on stale data. I designed and built a comprehensive Power BI dashboard that aggregates live data from QuickBooks, their POS system, and Excel trackers into a single source of truth.

🎯 The Challenge
Finance team spending 12+ hours/week manually compiling reports from 4 disconnected systems. Leadership making pricing and inventory decisions based on week-old data. No drill-down capability — any follow-up question required another manual report.
⚡ The Solution
Built a 6-page Power BI report with DirectQuery connections to QuickBooks and SQL Server. Designed custom DAX measures for gross margin, YOY comparisons, and rolling averages. Created executive summary, P&L deep-dive, expense analysis, product performance, and location comparison pages.
✅ The Outcome
Dashboard refreshes every 2 hours automatically. Finance team reclaimed 10+ hours/week. CEO identified a low-margin product line that was masked in flat reports — discontinuing it recovered $28K annually. Voted "most impactful internal tool" by the leadership team.
10h
Saved Per Week
$28K
Annual Recovery
6
Report Pages
Tech Stack
Power BI Desktop DAX SQL Server QuickBooks API Power Query (M) Excel
Project Process
1
Discovery & Data Audit
Mapped all data sources, identified quality issues, aligned on KPI definitions with CFO.
2
Data Model Design
Built star schema in Power BI with date dimension, fact tables for sales, expenses, and inventory.
3
DAX Measure Library
Wrote 40+ DAX measures including time intelligence, rolling averages, and variance calculations.
4
Dashboard Design & UAT
Two rounds of user testing with finance team and executives. Iterated on layout and drill-through paths.
02
🤖 Python · Automation

Invoice Automation System

"500+ invoices per month, fully automated — zero manual intervention."

A B2B services company was generating, sending, and reconciling invoices manually using a combination of Excel templates, copy-paste, and Gmail. With 500+ clients billed monthly, the accounts team was spending 25+ hours every month on a purely mechanical task. I built a Python automation pipeline that handles the entire lifecycle — generation, sending, tracking, and reconciliation.

🎯 The Challenge
Accounts team manually copying data from a CRM export into Word templates, exporting to PDF, attaching to individual emails, and then tracking payments in a separate spreadsheet. Error rate was 3–4% causing payment delays and client friction. Month-end reconciliation took a full day.
⚡ The Solution
Python script that reads the CRM export (CSV), generates branded PDF invoices using ReportLab, sends personalised emails via SMTP with attachments, logs all activity to a SQLite database, and produces a reconciliation report comparing sent invoices to bank statement entries via fuzzy matching.
✅ The Outcome
Invoice error rate dropped from 3.4% to 0.1%. Month-end reconciliation reduced from 8 hours to 20 minutes. Staff reallocated 25 hours/month to higher-value work. System has processed 6,000+ invoices since deployment with zero outages.
25h
Monthly Savings
0.1%
Error Rate
6K+
Invoices Processed
Tech Stack
Python 3.11 Pandas ReportLab smtplib SQLite FuzzyWuzzy Schedule
Project Process
1
Process Mapping
Documented every manual step, identified edge cases — credits, partial payments, retainer clients.
2
PDF Template Engine
Built dynamic invoice templates matching company branding with ReportLab, supporting multi-line items.
3
Email & Logging Pipeline
SMTP sender with retry logic, delivery confirmation tracking, and full audit trail in SQLite.
4
Reconciliation Module
Bank statement parser with fuzzy matching against invoice records, flagging discrepancies automatically.
invoice_automation.py # Invoice Automation Pipeline v2.1 import pandas as pd from reportlab.pdfgen import canvas import smtplib, sqlite3 def generate_invoice (client_data, invoice_id): # Build PDF with dynamic client fields c = canvas.Canvas( f"inv_{invoice_id}.pdf" ) c.setFont( "Helvetica-Bold" , 18) c.drawString(60, 750, f"Invoice #{invoice_id}" ) def send_invoice_email (to_email, pdf_path): server = smtplib.SMTP( 'smtp.gmail.com' , 587) server.starttls() server.sendmail(FROM, to_email, msg) ▶ Running pipeline — April 2025 batch... ✓ Loaded 512 client records from CRM export ✓ Generated 512 PDF invoices (4.2s) ✓ Sent 512 emails via SMTP (18.4s) ✓ Logged all records to invoice_db.sqlite ⚠ 3 emails bounced — flagged in exceptions.log ✓ Reconciliation report saved → reconcile_apr25.xlsx ✦ Pipeline complete. Duration: 23.1s | Errors: 0.6%
03
PostgreSQL sales_analytics SELECT c.customer_id, c.segment, SUM (o.order_value) AS lifetime_value, COUNT (o.order_id) AS total_orders, AVG (o.order_value) AS avg_order_value, NTILE (4) OVER ( ORDER BY SUM (o.order_value) DESC ) AS value_quartile FROM customers c JOIN orders o ON c.customer_id = o.customer_id GROUP BY c.customer_id, c.segment HAVING COUNT (o.order_id) > 1 /* 1,024,847 rows · 2.3s execution */ customer_id segment lifetime_value total_orders quartile C-00247 Enterprise $284,420 47 1 C-00891 Mid-Market $142,810 31 1 C-01204 Enterprise $98,340 22 2 C-00562 SMB $34,200 18 2 C-01788 SMB $12,440 9 3 ...and 14,392 more rows Query returned 14,397 rows in 2.312 seconds
🗄️ SQL · Analytics

Sales Insights Engine

"Unlocking customer lifetime value from 1M+ rows of dormant data."

An e-commerce company had 3 years of transactional data sitting in a PostgreSQL database — completely unexploited. Their sales team was guessing which customers to prioritise for upsell. I designed a suite of SQL analytics queries, an ETL pipeline, and a segmentation model that gave the sales team a ranked, actionable customer list every Monday morning.

🎯 The Challenge
Over 1M rows across 5 tables with no analysis layer. Sales team using gut feel for upsell targeting. No way to identify at-risk customers before they churned. Basic reporting only — revenue totals with no segmentation or trend insight.
⚡ The Solution
Built 12 complex SQL views in PostgreSQL using CTEs, window functions (NTILE, LAG, LEAD, ROW_NUMBER), and correlated subqueries. Created an RFM (Recency, Frequency, Monetary) segmentation model. Automated weekly ETL to push results into a Google Sheet accessible to sales reps.
✅ The Outcome
Sales team increased Q3 upsell conversion by 34% by focusing on top-quartile customers. Identified 180 at-risk accounts — retention campaigns saved an estimated $420K in ARR. Leadership had segment-level profitability for the first time.
34%
Upsell Lift
$420K
ARR Saved
1M+
Rows Analysed
Tech Stack
PostgreSQL 15 CTEs & Window Functions Python ETL Google Sheets API RFM Modelling
04
📋 Reporting · IFRS

Annual Financial Reports

"Audit-ready IFRS financials delivered in half the usual time."

A manufacturing SME needed IFRS-compliant annual financial statements for the first time — their bank required them for a £2M facility renewal. Their books were in QuickBooks but had never been presented to IFRS standards. I prepared the full suite: Statement of Financial Position, Income Statement, Cash Flow Statement, Statement of Changes in Equity, and 22 pages of notes.

🎯 The Challenge
Books maintained on a cash basis rather than accrual. Several lease agreements needed IFRS 16 treatment for the first time. Fixed asset register was incomplete. Tight 6-week deadline before bank submission. Previous accountant unfamiliar with IFRS requirements.
⚡ The Solution
Performed opening balance conversion from cash to accrual basis. Applied IFRS 16 lease model with amortisation schedules. Rebuilt fixed asset register and calculated depreciation under IAS 16. Prepared all primary statements and 22 disclosure notes in a branded, board-ready Excel workbook.
✅ The Outcome
Financials delivered in 5 weeks — 1 week ahead of deadline. Bank approved the facility. Auditor's management letter had zero material findings. Client retained for ongoing quarterly management accounts. Package passed Big 4 due diligence review 6 months later.
5wk
Delivery Time
£2M
Facility Secured
0
Audit Findings
Standards & Tools
IFRS 16 (Leases) IAS 16 (Fixed Assets) IAS 7 (Cash Flows) Excel (Advanced) QuickBooks
STATEMENT OF FINANCIAL POSITION As at 31 December 2024 IFRS Compliant · Audit Ready NON-CURRENT ASSETS Property, Plant & Equipment (IAS 16) £1,240,000 £1,180,000 Right-of-use Assets (IFRS 16) £380,000 £— Intangible Assets £84,000 £92,000 Total Non-current Assets £1,704,000 £1,272,000 CURRENT ASSETS Inventories (IAS 2) £421,000 £388,000 Trade Receivables £284,000 £302,000 Cash & Cash Equivalents £142,000 £98,000 Total Current Assets £847,000 £788,000 TOTAL ASSETS £2,551,000 £2,060,000 EQUITY Share Capital £500,000 £500,000 Retained Earnings £894,000 £740,000 Total Equity £1,394,000 £1,240,000 ✓ IFRS Compliant Prepared under International Financial Reporting Standards ✓ Audit-Ready Zero material findings ✓ Bank Approved £2M facility secured
05
TABLEAU | Marketing ROI Tracker — FY2024 12 Channels · Live Data · Drill-down enabled LIVE DATA TOTAL AD SPEND $840K ↑ 18% YOY REVENUE DRIVEN $3.2M ↑ 34% YOY BLENDED ROAS 3.81x ↑ 0.42x vs target BEST CHANNEL ROI 6.2x Email Marketing ROI by Channel (Revenue / Spend) Email 6.2x SEO 5.3x Social 4.1x PPC 3.4x Display 2.5x Affiliate 2.1x Podcast 1.6x Monthly Spend vs Revenue — Revenue – Spend Spend vs ROAS Scatter Email SEO PPC Disp Soc
🎯 Tableau · BI

Marketing ROI Tracker

"Reallocating $200K of ad spend to channels with 2× better ROAS."

A DTC e-commerce brand was spending $840K/year across 12 marketing channels with no clear view of which channels were actually driving revenue. Their attribution was last-click only and their reporting was fragmented across three tools. I built a unified Tableau dashboard that aggregated spend and revenue data from all channels, applied multi-touch attribution, and delivered weekly channel-level ROAS reports.

🎯 The Challenge
Marketing team working with last-click attribution only — systematically over-crediting Google PPC and under-crediting email nurture sequences. Spend decisions based on gut feel. No unified view across Meta, Google, SEO, Email, Affiliate, and 7 other channels.
⚡ The Solution
Built ETL pipeline pulling from Meta Ads API, Google Ads API, Klaviyo, and 9 other sources into a central data warehouse. Applied linear and time-decay multi-touch attribution models. Built 4-page Tableau dashboard with channel comparison, trend analysis, budget optimisation simulator, and cohort performance.
✅ The Outcome
Brand reallocated $200K from low-ROI display and podcast to email and SEO. Overall ROAS improved from 3.1x to 3.8x within 2 quarters. Marketing team reduced weekly reporting time from 6 hours to 30 minutes. Dashboard presented to Series A investors as evidence of operational maturity.
3.8x
Final ROAS
$200K
Spend Reallocated
12
Channels Tracked
Tech Stack
Tableau Desktop Python (ETL) Meta Ads API Google Ads API Klaviyo API PostgreSQL

Let's Build Your Next
Success Story

Every project above started with a conversation. Tell me about your data challenge and let's figure out the best approach together.