Every one of these follows the same shape: a scheduled job pulls a live public feed, writes it into a database (or a curated file), and a Power BI report or static site reads from that. No servers to babysit.
data-catalog
Live site
A self-checking index of free, no-key data sources
A curated list of 103 free, no-API-key APIs and datasets for student data projects. Dependency-free static site; a Python health-check runs every day on GitHub Actions and badges each source live or unreachable, so the list can't quietly rot.
HTML/CSS/JSPythonGitHub ActionsGitHub Pages
EarthquakeTracker
Public repo
The planet's seismic activity, on a 15-minute loop
Every 15 minutes: pull the USGS global feed, filter to real tectonic events, insert new rows into PostgreSQL keyed on the USGS event id so re-runs never duplicate. Power BI reads the same database and draws the Ring of Fire on its own.
PythonPostgreSQLPower BITask Scheduler
WeatherTracker
Public repo
London and Hamburg weather, logged hourly
An hourly GitHub Actions job pulls current conditions for London and Hamburg from the OpenWeather API into a growing dataset, feeding a Power BI report that tracks how conditions shift across both cities over time.
PythonGitHub ActionsPower BI
MacroConflictTracker
Public repo
Metals, energy and geopolitical conflict, sampled together
Three independent feeds on different schedules — commodity prices, hourly price history, and geocoded conflict events from GDELT 2.0 — feeding a rolling correlation analysis and a Power BI report. Includes a gold-price forecaster (Prophet vs. a naive baseline) with a running accuracy scoreboard.
PythonSQLiteProphetPower BIGDELT
GermanWaterLevels
Public repo
Germany's rivers and waterways, gauged nationwide, every day
A daily ETL against Germany's PegelOnline API has built up 29M+ rows of gauge readings across the country's river and waterway network, on an unattended Task Scheduler job. A Power BI hydrology report reads straight off the growing table.
PythonETLPower BITask Scheduler
HamburgTrainDelays
Public repo
Deutsche Bahn punctuality at Hamburg Hbf, polled live
Polls the Deutsche Bahn API every 15 minutes to track live train delays at Hamburg's main station, with pandas-based delay analysis on top. Built-in retry logic to ride out the API's occasional timeouts without losing a collection run.
PythonpandasGitHub Actions
OpenSkyFlightTracker
Collecting data
Every aircraft in the sky, worldwide, every five minutes
An Azure Functions timer authenticates to the OpenSky Network with OAuth2 and saves a global snapshot of 10,000+ aircraft every five minutes. Raw positions land in daily files in Azure Blob Storage, next to a compact per-country summary built for Power BI. Retries ride out API hiccups, and Application Insights emails an alert if a run ever fails.
PythonAzure FunctionsBlob StorageApplication InsightsOAuth2
Repository private while data collects · dashboard to follow
AISShipTracker
Collecting data
Ships at sea around the world, sampled every five minutes
An Azure Function opens a live AIS stream every five minutes, listens for a minute and keeps the latest position of every vessel it hears — about 7,000 ships per window — along with ship details such as type, destination and size. Daily files in Azure Blob Storage, with a per-window summary for Power BI.
PythonWebSocketsasyncioAzure FunctionsBlob Storage
Repository private while data collects · dashboard to follow