Real-data ELT pipeline: World Bank API → Airflow → DuckDB → dbt marts on financial inclusion across WAEMU countries
# west-africa-financial-inclusion
Real-data ELT pipeline: **World Bank API → Airflow → DuckDB → dbt** tracking financial inclusion across the 8 WAEMU countries. No synthetic data — the pipeline hits the live Global Findex / WDI indicators.
```
World Bank API ──▶ ingestion/ (retry, BOM quirk, idempotent load) ──▶ DuckDB ──▶ dbt (staging + marts + 17 tests)
└── Airflow: one mapped extract task per indicator
```
Latest real output of `mart_financial_inclusion` (Findex account ownership, % adults 15+):
| Country | 2011 | 2024 | Change |
|---|---|---|---|
| Senegal | 5.8 | **76.5** | +70.6 pp |
| Côte d'Ivoire | 34.3 (2014) | 57.6 | +23.2 pp |
| Togo | 10.2 | 57.4 | +47.2 pp |
| Mali | 8.2 | 54.7 | +46.5 pp |
| Benin | 10.5 | 51.8 | +41.4 pp |
| Burkina Faso | 13.4 | 51.4 | +38.1 pp |
| Niger | 1.5 | 14.8 | +13.3 pp |
Guinea-Bissau has no Findex coverage — a real data gap, surfaced (not hidden) by the marts.
## Run it
```bash
pip install -r requirements.txt
export WAFI_DB_PATH=./wafi.duckdb
python -m scripts.run_ingestion # pulls live data (~650 rows, 4 indicators)
dbt build --project-dir dbt --profiles-dir dbt
pytest # unit tests, no network needed
```
Indicators: account ownership (FX.OWN.TOTL.ZS), inflation (FP.CPI.TOTL.ZG), mobile subscriptions (IT.CEL.SETS.P2), GDP per capita (NY.GDP.PCAP.CD).