A South African market intelligence tool built in pure Python. SYNC BEAT aggregates live economic and commodity data, scores overall market health using a custom weighted quantitative model, detects risk signals against a 30-day historical baseline, and generates a professional one-page PDF analyst brief.
# SYNC BEAT: SA Market Intelligence
A South African market intelligence tool built in pure Python. SYNC BEAT aggregates live economic and commodity data, scores overall market health using a custom weighted quantitative model, detects risk signals against a 30-day historical baseline, and generates a professional one-page PDF analyst brief.
## Why it exists
Junior analysts at Corporate and Investment Banking desks spend their mornings doing exactly what SYNC BEAT automates pulling macro data, scoring conditions, flagging anomalies, and producing a brief for stakeholders. SYNC BEAT is a working prototype of that workflow.
## How it works
| Layer | What it does |
|---|---|
| PULSE | Fetches live ZAR/USD, ZAR/GBP, ZAR/EUR and gold price from free APIs |
| CORTEX | Scores market health 0–100 using a custom weighted quantitative model |
| SIGNAL | Detects deviations from 30-day historical averages stored in SQLite |
| BRIEF | Generates a professional PDF analyst brief with one click |
## SA Market Health Score
A composite index built on four weighted indicators:
| Indicator | Weight | Rationale |
|---|---|---|
| ZAR / USD | 40% | Primary measure of SA investor confidence |
| Gold (USD/oz) | 35% | SA is a top global gold producer — directly impacts export earnings |
| ZAR / GBP | 15% | Secondary EM sentiment indicator |
| ZAR / EUR | 10% | EU is SA's largest trading partner |
Each indicator is normalised against a defined reference range and weighted to produce the composite score.
## Stack
- Python 3.10+
- Tkinter — GUI and canvas animation
- SQLite — 30-day historical data persistence
- ReportLab — PDF brief generation
- Frankfurter API — ECB exchange rates (free, no key)
- CoinGecko API — commodity price proxy (free, no key)
- Threading — non-blocking data fetches
## Run it
```bash
pip install requests reportlab
python sync_beat.py
```
## File structure
```
sync-beat/
├── sync_beat.py # Main application and GUI
├── scoring_engine.py …