A tool to download PDFs from the DOJ Epstein files
Project description
Epstein Files Downloader
A tool to download PDF documents from the DOJ Epstein files.
🚀 Quick Start: Try it live or deploy your own — No server required, 100% client-side, completely free!
Features
| Feature | CLI Tool | Web Interface |
|---|---|---|
| 🔐 Automatic authentication | ✅ | ✅ (via browser) |
| 📄 Smart URL handling | ✅ | ✅ |
| 🔄 Auto-retry on auth expiry | ✅ | N/A |
| 📁 Preserves original extensions | ✅ | ✅ |
| 🚀 Easy to use | CLI commands | One-click deploy |
| 🐍 Python API | ✅ | N/A |
| 🌐 Browser-based | ❌ | ✅ |
| 💰 Hosting cost | Free | Free (Vercel) |
| 🔒 Privacy | Local only | 100% client-side |
Choose Your Path
- Want it now? → Use the live site (fastest) or deploy your own
- Power user? → Use the CLI tool (most features)
- Building something? → Use the Python API
Installation (CLI)
Requirements
- Python 3.9 or higher
- Playwright (installed automatically)
Install from PyPI
pip install epstein-files-downloader
Install from source
git clone https://github.com/hackingbutlegal/epstein-files-downloader.git
cd epstein-files-downloader
pip install -e .
Or install dependencies first with requirements.txt:
git clone https://github.com/hackingbutlegal/epstein-files-downloader.git
cd epstein-files-downloader
pip install -r requirements.txt
pip install -e .
Install Playwright browsers
playwright install chromium
CLI Usage
Quick Start
-
Create a file with URLs (
urls.txt):https://www.justice.gov/epstein/file/123456/dl https://www.justice.gov/epstein/file/123457/dl ... -
Authenticate (one-time setup):
epstein-auth
A browser window will open. Click "Yes" on the age verification page, then press Enter in the terminal.
-
Download files:
epstein-download -i urls.txt
CLI Reference
epstein-auth - Authentication
epstein-auth [OPTIONS]
Options:
--auth-file PATH Custom path for auth state file
epstein-download - Download files
epstein-download -i INPUT [OPTIONS]
Options:
-i, --input PATH Input file containing URLs (required)
-o, --output PATH Output directory (default: downloads)
--auth-file PATH Path to authentication state file
--timeout INTEGER Download timeout in ms (default: 60000)
--no-retry Don't retry with re-auth on failure
-q, --quiet Suppress progress output
--version Show version
-h, --help Show help message
CLI Examples
# Download to custom directory
epstein-download -i urls.txt -o ./my-documents
# Use custom auth file location
epstein-auth --auth-file ~/.epstein-auth.json
epstein-download -i urls.txt --auth-file ~/.epstein-auth.json
# Quiet mode (no progress output)
epstein-download -i urls.txt -q
Python API
You can also use this as a library in your Python scripts:
from epstein_downloader import Downloader, AuthManager
# Authenticate
auth = AuthManager()
auth.authenticate()
# Download files
downloader = Downloader(download_dir="./downloads")
urls = downloader.extract_urls_from_file("urls.txt")
downloaded = downloader.download(urls)
print(f"Downloaded {len(downloaded)} files")
Web Interface
The fastest way to get started! A fully client-side web interface - no server required.
🌐 Live Site: https://epstein-files-downloader.vercel.app
Quick Start (Web)
- Click the "Deploy to Vercel" button above ☝️
- Visit your deployed site
- Click "Open DOJ Website" and complete age verification
- Paste your URLs and download!
Features
- 🌐 100% Client-side - No data sent to any server
- 🔒 Privacy-focused - Your URLs and cookies stay in your browser
- 📋 Paste & extract - Paste text with URLs, automatically extract them
- 📂 Batch open - Open all files in new tabs with one click
- 📱 Mobile friendly - Works on all devices
- 🚫 No proxy - Your browser connects directly to DOJ
- 💰 Free forever - Zero hosting costs on Vercel's free tier
How It Works
The web interface works entirely in your browser:
- URL Processing: JavaScript extracts URLs from your pasted text
- Direct Downloads: Files open in new tabs using your browser's existing cookies
- No Server: Nothing is sent to any server - everything happens locally
Why No Server?
The web interface uses a novel approach to avoid server-side proxying:
- Your browser already has the authentication cookie from visiting justice.gov
- We open PDF URLs in new tabs (
window.open()) - The browser sends cookies automatically with these requests
- Downloads happen directly between your browser and DOJ servers
Benefits:
- Zero server costs
- Perfect privacy - we never see your URLs
- No CORS issues (navigation vs. XHR)
- Works with your existing browser session
- Instant deployment - just static files
Manual Deployment
Don't want to use the button? Deploy manually:
# Install Vercel CLI
npm i -g vercel
# Clone and deploy
git clone https://github.com/hackingbutlegal/epstein-files-downloader.git
cd epstein-files-downloader
vercel
Local Web Development
cd web
npm install
npm start
The web app will be available at http://localhost:3000.
Using the Web Interface
-
First, authenticate with DOJ:
- Visit https://www.justice.gov/epstein (or click the button in the app)
- Click "Yes" on the age verification
- This sets the required cookie in your browser
-
Use the web app:
- Paste text containing DOJ URLs
- Click "Extract URLs"
- Click individual download buttons or "Open All"
- Files will open in new tabs and download automatically
How It Works
CLI Tool
-
Authentication: The tool uses Playwright to open a real browser for age verification. Once you click "Yes", the authenticated session (cookies) is saved to a file.
-
URL Processing: The DOJ website serves files at
/file/{id}/dlURLs. The tool automatically converts these to the PDF endpoint and preserves the original file extension. -
Downloading: Files are downloaded using the authenticated session. If authentication expires during a long download session, the tool automatically re-authenticates and continues.
Web Interface
- Client-side processing: JavaScript extracts URLs from your pasted text using regex
- Browser authentication: Uses your existing browser cookies from visiting justice.gov
- Direct downloads: Opens PDF URLs in new tabs, letting the browser handle authentication and download natively
Troubleshooting
CLI: "No auth file found"
Run epstein-auth first to authenticate.
CLI: "HTTP 403" errors
Your session may have expired. The tool should auto-retry, but you can also run epstein-auth again to refresh.
CLI: Playwright not found
Install Playwright browsers:
playwright install chromium
Web: Downloads not working
- Make sure you visited DOJ first: Open https://www.justice.gov/epstein and click "Yes" on age verification
- Same browser: Use the same browser for both the DOJ site and the web app
- Allow popups: The web app needs to open new tabs for downloads
- Check cookies: Some browsers block third-party cookies which may affect this
Web: Popups blocked
If you see "Popup blocked" errors:
- Look for the popup blocker icon in your address bar
- Click it and allow popups for the site
- Or change your browser settings to allow popups
Development
# Clone the repo
git clone https://github.com/hackingbutlegal/epstein-files-downloader.git
cd epstein-files-downloader
# Create virtual environment
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Install in development mode
pip install -e ".[dev]"
# Run tests
pytest
# Run linting
ruff check .
mypy src/
License
MIT License - see LICENSE file.
Disclaimer
This tool is for educational and research purposes. Please respect the DOJ website's terms of service and rate limits. The authors are not responsible for any misuse of this tool.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file epstein_files_downloader-1.0.1.tar.gz.
File metadata
- Download URL: epstein_files_downloader-1.0.1.tar.gz
- Upload date:
- Size: 20.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa1a1e9236124b6e27e18120f76011a8529288fc0ea7347eefe3a54aa3815d6a
|
|
| MD5 |
4716f83f582fa6121f1f3412e23b1db0
|
|
| BLAKE2b-256 |
a205da2581a35d91d0f48cb8382f49591c63d9b80dc93673fa9c72bdda0f0ce4
|
File details
Details for the file epstein_files_downloader-1.0.1-py3-none-any.whl.
File metadata
- Download URL: epstein_files_downloader-1.0.1-py3-none-any.whl
- Upload date:
- Size: 13.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7c51798051b137b2f693b108e5da4c259b9412596510e6f03c0071fdce09d56
|
|
| MD5 |
a0ef860b5f51ace0dd6ce86aee10ad6c
|
|
| BLAKE2b-256 |
3c88d812cf62818eb1f57ae08b7f58e300e59ef5ec0a0f650e5b5ed40a178a74
|