A complete system for tracking Epic Games Store free games since 2018, featuring automated scraping, SQLite database storage, and a beautiful static website with search and filtering.
Live Website: https://evenwebb.github.io/epic-free-games-scraper/
- 584+ PC games tracked from December 2018 to present
- SQLite database with full promotion history
- Automatic image fetching and storage
- All games have optimized images
- No manual updates needed
- Timeline view of all free games by year and month
- Search by game name
- Filter by year and sort options
- Statistics dashboard with charts
- Lazy loading for fast performance
- Countdown timers for current free games
- Responsive design (mobile-friendly)
- Uses official Epic Games API (no web scraping)
- Runs automatically daily at 4pm UK time via GitHub Actions
- Downloads high-quality game images
- Updates database and website automatically
- Pushover notifications (optional)
- SQLite database for efficient querying
- JSON export for compatibility
- 584+ optimized game images
- Historical data since 2018
- Price tracking with regional support (GBP/USD)
- Scraper (
scrape_epic_games.py) fetches free games from Epic API (GB region for GBP pricing) - Database (
output/epic_games.db) stores games, promotions, metadata, prices, and images - Website Generator (
generate_website.py) creates static HTML/CSS/JS site with all data - GitHub Actions automatically runs the process daily at 4pm UK time and deploys to GitHub Pages
# Clone the repository
git clone https://github.com/evenwebb/epic-free-games-scraper.git
cd epic-free-games-scraper
# Install dependencies
pip install -r requirements.txt
# Run the scraper
python3 scrape_epic_games.py
# Generate the website
python3 generate_website.py
# View the website locally
cd website
python3 -m http.server 8000
# Open http://localhost:8000If you're starting fresh without the database:
# Run scraper (creates database and tables automatically)
python3 scrape_epic_games.py
# Fetch images for games missing them (optional; requires STEAMGRIDDB_API_KEY)
python3 fetch_missing_images.py
# Generate website
python3 generate_website.pyThe website is automatically deployed to GitHub Pages via GitHub Actions.
-
Enable GitHub Pages:
- Go to repository Settings โ Pages
- Source: "GitHub Actions"
-
Commit and Push:
git add . git commit -m "Initial setup" git push origin main
-
GitHub Actions will automatically:
- Run the scraper daily at 4pm UK time
- Update the database
- Generate the website
- Deploy to GitHub Pages
- Commit database updates back to the repository
-
View your site at:
https://[username].github.io/epic-free-games-scraper/
You can manually trigger the workflow:
- Go to Actions tab โ "Scrape Epic Games and Deploy to GitHub Pages"
- Click "Run workflow"
Fetches current and upcoming free games from the Epic API, downloads images, and updates the database.
python3 scrape_epic_games.pyDownloads images for games that don't have them (uses SteamGridDB when STEAMGRIDDB_API_KEY is set).
export STEAMGRIDDB_API_KEY="your_key"
python3 fetch_missing_images.py
# Re-fetch specific games (e.g. wrong aspect ratio)
python3 fetch_missing_images.py --re-fetch <epic_id> [epic_id ...]Generates the complete static website from the database.
python3 generate_website.pyCreate settings.json:
{
"pushover": {
"enabled": true,
"user_key": "your_user_key",
"app_token": "your_app_token",
"notify_always": false
}
}enabled: Turn notifications on/offnotify_always: Notify for all games (true) or only new games (false)
- games: Game information (name, link, rating, image, platform)
- promotions: Free game promotion periods (start, end, status)
- scrape_history: Audit trail of scraper runs
- statistics_cache: Pre-computed statistics for website
from db_manager import DatabaseManager
db = DatabaseManager()
# Get current free games
current = db.get_current_games(platform='PC')
# Get all games chronologically
all_games = db.get_all_games_chronological()
# Get statistics
stats = db.get_statistics()- All games organised by year and month
- Lazy loading (50 games at a time)
- Game images with fallback placeholders
- Links to Epic Store pages
- Search by game name
- Filter by year (2018-2025)
- Sort by: Newest, Oldest, A-Z, Rating
- Total games tracked
- Total value of free games
- Average game price
- Current year value
- Games per year chart
- Average games per week
- Current free games count
- Hero section at top
- Countdown timers
- Direct "Get It Free" links
- High-quality images
The workflow (.github/workflows/scrape-and-deploy.yml) runs automatically:
Schedule: Daily at 4pm UK time (15:00 and 16:00 UTC to cover BST/GMT)
Triggers:
- Scheduled (cron)
- Manual dispatch
- Push to main branch
Steps:
- Check out repository
- Set up Python 3.11
- Install dependencies
- Run scraper (creates database automatically on first run)
- Generate website
- Commit database updates
- Deploy to GitHub Pages
- Python 3.9+
requestslibrary (only dependency!)
pip install -r requirements.txtThis project is licensed under the GPL-3.0 License - see the LICENSE file for details.
- Data sourced from Epic Games Store API
- Historical data from community tracking
- Not affiliated with Epic Games