A live, multi-source analytics dashboard that auto-refreshes data from 3+ public APIs - zero manual data entry.
Business analysts waste hours every week copying data from multiple sources into spreadsheets - news sites, financial data portals, economic databases - before any analysis even begins. By the time a report is ready, the data is already stale.
The core question: Can we build a single dashboard that pulls live data from multiple APIs, processes it automatically, and presents decision-ready insights - refreshed on demand, with no manual work?
- Connect to 3+ real-world public APIs and unify their data in a single interface
- Apply real-time analytics logic (aggregations, trend detection, alerting)
- Build an interactive dashboard requiring zero manual data entry
- Demonstrate that automation removes the "data collection" bottleneck entirely
- Design the UX so a non-technical user can extract insights without any help
| API | Data Type | Refresh Rate | Use in Dashboard |
|---|---|---|---|
| Alpha Vantage / Yahoo Finance | Stock prices, FX rates | Real-time | Price tracker, % change |
| World Bank Open Data API | Macro indicators (GDP, inflation, unemployment) | Monthly | Economic context panel |
| NewsAPI / GNews | Financial news headlines | Hourly | Sentiment + news feed |
| Open Exchange Rates | Currency exchange rates | Real-time | FX rate table |
| REST Countries API | Country metadata | Static | Geo context labels |
All APIs use free tiers - no paid subscription required to run this project.
- Live price cards: selected tickers with % change (daily / weekly)
- Sparkline charts for 30-day price history
- Volume trend bars
- GDP growth rates: top 10 economies (bar chart, sortable)
- Inflation vs. unemployment scatter plot (Phillips Curve visualisation)
- Country-level macro table with conditional formatting
- Live currency rate table vs. USD base
- Heatmap of % change across major pairs (last 7 days)
- Trend line: user-selected pair over custom date range
- Latest 20 financial headlines (auto-refreshed)
- Automated sentiment scoring per headline (positive / neutral / negative) using VADER
- Sentiment trend chart: proportion of positive vs. negative news over time
- Keyword frequency bar chart from headlines (topic tracking)
- Built a modular
api_client.pywith dedicated fetch functions per source - Implemented caching (
@st.cache_datawith TTL) to avoid redundant API calls - Error handling for rate limits, timeouts, and malformed responses
.envfile for secure API key management
- Normalised all JSON responses into Pandas DataFrames
- Aligned timestamps across sources (UTC standardisation)
- Computed derived metrics: 7-day rolling average, % change, z-score for anomaly flagging
- Applied VADER (Valence Aware Dictionary Sentiment Reasoner) to news headlines
- Classified each headline as Positive / Neutral / Negative
- Aggregated sentiment scores by day and ticker mention
- Modular panel structure: each panel is an independent component
- User controls: date range picker, ticker selector, country filter, refresh button
- Colour-coded conditional formatting (green = positive, red = negative)
- Mobile-responsive layout using Streamlit columns
- Deployed to Streamlit Community Cloud (free hosting)
- Environment variables managed via Streamlit Secrets
- Refresh interval: on-demand (button) + auto-refresh every 15 minutes
| Category | Tools |
|---|---|
| Language | Python 3.10 |
| Dashboard | Streamlit |
| Visualisation | Plotly Express, Plotly Graph Objects |
| API Handling | Requests, httpx |
| Data | Pandas, NumPy |
| NLP / Sentiment | NLTK (VADER) |
| Env Management | python-dotenv |
| Deployment | Streamlit Community Cloud |
| Version Control | Git / GitHub |
-
API reliability varies significantly. World Bank API is highly stable but slow (~2–3 seconds). Alpha Vantage free tier has rate limits (5 calls/min) - required smart caching to maintain UX.
-
Sentiment diverges from price movement ~30% of the time. Negative headlines often coincided with positive price action - a useful contrarian signal worth exploring further.
-
GDP data lags by 1–2 quarters in the World Bank API - crucial for users to understand so macro context is not mistaken for current conditions. Added a clear data freshness label.
-
Single-source dashboards miss the story. The most valuable insights emerge at the intersection of news sentiment + price movement + macro backdrop - something impossible to see when data lives in three separate tools.
- Live Price Sparklines - 30-day mini-charts per ticker
- FX Change Heatmap - Major currency pairs, 7-day % change
- Sentiment Timeline - Daily sentiment ratio chart
- GDP Bubble Chart - Economy size vs. growth rate
- Keyword Word Cloud - Most discussed topics in news headlines
- Macro Comparison Table With conditional cell colouring
| Stakeholder | Value Delivered |
|---|---|
| Analyst / Trader | Replaces 2–3 hours/day of manual data collection |
| Portfolio Manager | Single-view macro + market context for morning briefings |
| Business Development | Country-level economic signals for market entry decisions |
| Content Creator / Writer | Live data and sentiment trends for market commentary |
This type of integrated dashboard is used by Bloomberg Terminal users, FX desks, and BI teams at major banks — replicated here using entirely free tools.
api-analytics-dashboard/
│
├── api/
│ ├── market_data.py # Alpha Vantage / Yahoo Finance client
│ ├── macro_data.py # World Bank API client
│ ├── news_data.py # NewsAPI client
│ └── fx_data.py # Open Exchange Rates client
│
├── processing/
│ ├── clean.py # Data normalisation
│ ├── sentiment.py # VADER sentiment scoring
│ └── metrics.py # Derived metrics (% change, rolling avg)
│
├── dashboard/
│ ├── panels/
│ │ ├── market_overview.py
│ │ ├── macro_panel.py
│ │ ├── fx_panel.py
│ │ └── news_panel.py
│ └── app.py # Main Streamlit entry point
│
├── .env.example # API key template (never commit real keys)
├── requirements.txt
└── README.md
git clone https://github.com/yourusername/api-analytics-dashboard.git
cd api-analytics-dashboard
pip install -r requirements.txt
# Set up your API keys
cp .env.example .env
# Edit .env and add your API keys
# Launch dashboard
streamlit run dashboard/app.py- Alert System - Email/Slack notifications when a macro indicator or price crosses a threshold
- Database Layer - Store fetched data in SQLite for historical backtesting
- Multi-Currency Portfolio Tracker - Add portfolio input and PnL calculation
- AI Summary Button - Use GPT-4 to auto-generate a daily market summary from live data
- User Authentication - Personalised watchlists and saved preferences via Streamlit Auth
This project is licensed under the MIT License.