Skip to content
Back to projects

PayScope: Digital Payments Risk & Merchant Analytics Platform

End-to-end payments analytics and risk monitoring on PostgreSQL, from raw data to live Tableau dashboards.

Role
Solo project / independent build
Stack
PostgreSQL, SQL, Python, Tableau
Scope
100K+ transactions · 10K customers · 1.2K merchants
PayScope Tableau chargeback-analysis dashboard with KPI tiles, chargebacks by reason, dispute outcomes, and a chargeback amount trend line
PayScope Tableau chargeback-analysis dashboard with KPI tiles, chargebacks by reason, dispute outcomes, and a chargeback amount trend line

I wanted to build a payments platform the way a real analytics team would run one: not a single notebook, but a system where raw data flows through clear stages and every number on a dashboard can be traced back to its source. So I engineered PayScope end to end on PostgreSQL, moving data through a layered raw → clean → mart architecture across 3 schemas, and put 100K+ transactions across 10K customers and 1.2K merchants through it.

The core of it is a Python ETL and data-quality framework (pandas, SQLAlchemy, psycopg2) that deliberately injects realistic problems like nulls, duplicates, broken foreign keys, invalid codes, then detects and flags them. The decision I care about most here: invalid records are flagged instead of deleted, so the audit trail stays intact and analysts can see exactly what was wrong. That discipline lifted trusted transaction coverage to 69.7%.

On top of the clean layer I developed 7 SQL business marts using an aggregate-before-join pattern to stop grain-mismatch double-counting, the kind of silent bug that quietly inflates every metric downstream. Those marts power merchant-performance, chargeback, and customer-risk reporting.

The finding I'm proudest of came from the explainable rule-based risk engine I designed. Its behaviour-driven merchant segmentation (Critical / High Risk / Monitor / Low Risk) surfaced that the source-system risk tiers diverged from how merchants actually behaved: the labels the data arrived with weren't telling the truth. I wired the whole thing into 3 interactive Tableau dashboards (Transaction Monitoring, Merchant Risk, and Chargeback Analysis), all connected live to the mart layer.

PayScope Transaction Monitoring dashboard: KPI tiles for transactions, total amount, approval rate and failure rate above a dual-axis weekly volume and approval-rate chart
Transaction Monitoring: KPI tiles over a dual-axis weekly volume vs. approval-rate time series.
Merchant Risk dashboard scatter plot of chargeback rate against failure rate, coloured by risk segment
Merchant Risk: chargeback rate vs. failure rate, coloured by behaviour-driven segment.
Chargeback Analysis dashboard: chargebacks by reason, dispute outcomes, and a weekly chargeback amount trend
Chargeback Analysis: chargebacks by reason, dispute outcomes, and weekly amount trend.
PostgreSQLSQLPythonTableauView on GitHub