A simulated data pipeline for an African fashion marketplace. Pulling data from multiple systems, cleaning it, joining it, and turning it into numbers a business would actually use.
# Loshodey
A simulated data pipeline for an African fashion marketplace. Pulling data from multiple systems, cleaning it, joining it, and turning it into numbers a business would actually use.
## Why I built this
I interviewed for a Financial & Operational Analyst role at a real company called Losode, an African fashion e-commerce marketplace. They needed someone who could build their reporting systems from scratch. Instead of waiting around for feedback, I decided to build a project that simulates exactly that kind of work. I made up a fictional company, Loshodey, and built out a full pipeline around it.
## What it is
Loshodey is a marketplace, not a single-store retailer, so the numbers work differently than a normal shop. Sellers list products, customers buy them, and Loshodey takes a commission on each sale. That means GMV (total value of everything sold) is not the same as revenue (what Loshodey actually earns). Getting that distinction right shapes almost every model in this project.
## Data sources
Two systems, on purpose, because they represent two different real-world patterns:
- **Shopify** (Admin API) - orders and products. This is how most real order platforms work, so I pulled data the same way a real integration would: authenticate, hit the API, handle pagination.
- **Postgres** (running in Docker) - sellers, seller payouts, and logistics costs. This represents the kind of internal database a finance or ops team would query directly, no API in between.
40 sellers, a dev Shopify store with 101 products, 58 test orders (122 line items across them), and a year of payout and shipping history generated to reconcile with the sales data.
## The pipeline
```
Shopify + Postgres -> Python (extract/load) -> BigQuery (raw) -> dbt (staging, intermediate, marts) -> Power BI
```
This is ELT, not ETL. Data lands in BigQuery raw and untouched first, then gets transformed inside the warehouse using dbt. Nothing gets cleaned before it's loaded.
**Staging** c …