Skip to content
Project 01 / 04Analytics EngineeringPayments · Risk Analytics

PayScopeDigital Payments Risk & Merchant Analytics Platform

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

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

    Transactions processed

  • 7

    SQL business marts

  • 69.7%

    Trusted transaction coverage

  • 3

    Live Tableau dashboards

The build

How it came together.

  1. 01

    The system

    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.

  2. 02

    Data quality

    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%.

  3. 03

    The mart layer

    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.

  4. 04

    The finding

    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.

Visuals

What it produced.

03 figures

Fig. 01
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.
  • Fig. 02
    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.
  • Fig. 03
    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.
Tech stack
  • PostgreSQL
  • SQL
  • Python
  • Tableau
View source on GitHub

What's next

Have a similar problem to solve?Let's talk it through.

I'm looking for a junior data analyst or analytics engineer role in Sydney. If something here looks like the work you need doing, get in touch.

Open to opportunitiesSydney, Australia