A Docker-based control panel for Scrapling β run scrape jobs locally or on a VPS with one toggle.
Built with FastAPI + React. No build step. No dependencies beyond Docker.
This dashboard wraps Scrapling's powerful scraping engine in a web UI you can run on your machine (or a VPS) with docker compose up. You get:
- Task cards with live progress β pages scraped, items found, elapsed time, and ETA countdown
- LOCAL β VPS toggle β switch between your machine and a remote server in one click
- Inline results viewer β JSON, CSV, and table views expand below each task
- One-click CSV export β download results without leaving the Tasks tab
- Live log streaming β WebSocket-powered real-time output from Scrapling
- VPS diagnostics β API health, Docker status, memory, and active jobs at a glance
- All four Scrapling fetchers β StealthyFetcher (anti-bot), DynamicFetcher (JS), Fetcher (HTTP), AsyncFetcher (concurrent)
- Proxy rotation support β configure rotating residential proxies per-job
- Adaptive scraping β Scrapling's smart element tracking survives website redesigns
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Browser (localhost:3000) β
β βββββββββββββ ββββββββββββββββββββββββββββββββββ β
β β Sidebar β β β β
β β ββββββββββ β Task cards with progress bars β β
β β [LOCAL|VPS]β β βΈ View β inline JSON/CSV/Tableβ β
β β Default: β β β¬ CSV one-click download β β
β β VPS IP β β Live log streaming β β
β β or Custom β β β β
β β ββββββββββ β β β
β β Job config β β β β
β β [Start] β β β β
β βββββββββββββ ββββββββββββββββββββββββββββββββββ β
ββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββ
β REST + WebSocket
βΌ
ββββββββββββββββββββββββ ββββββββββββββββββββββββ
β LOCAL Docker β OR β VPS Docker β
β (localhost:8000) β β (your-vps-ip:8000) β
β FastAPI + Scrapling β β FastAPI + Scrapling β
β StealthyFetcher β β StealthyFetcher β
β ProxyRotator β β ProxyRotator β
ββββββββββββββββββββββββ ββββββββββββββββββββββββ
git clone https://github.com/YOUR_USERNAME/scrapling-dashboard.git
cd scrapling-dashboard
cp .env.example .env
docker compose up --buildOpen http://localhost:3000 β that's it.
First build takes 5β10 minutes (pulls the Scrapling Docker image + installs Chromium). After that, starts in seconds.
For detailed step-by-step instructions including Docker installation, VPS setup, firewall config, and troubleshooting, see INSTALL.md.
The dashboard can send jobs to a remote server for long-running overnight crawls.
The API token is a password you create to protect your VPS endpoint. Pick any strong string:
# On your VPS, in /opt/scrapling-dashboard/.env
API_TOKEN=sk-scrapling-8f3a2b7c9d1e4f5aFor local-only use, no token is needed β auth is automatically skipped when the token is the default value.
chmod +x deploy-vps.sh
./deploy-vps.sh root@your-vps-ip- Toggle LOCAL β VPS in the header
- Your default VPS IP is pre-configured (or click Custom IP to enter another)
- Paste your token in the API bearer token field
- Submit jobs β they run on the VPS even if you close your laptop
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/health |
Health check |
POST |
/api/jobs |
Submit a scrape job |
POST |
/api/spiders |
Submit a multi-page crawl |
GET |
/api/jobs |
List all jobs |
GET |
/api/jobs/{id} |
Job status + progress |
GET |
/api/jobs/{id}/results?format=json |
Results (json or csv) |
DELETE |
/api/jobs/{id} |
Delete a job |
WS |
/ws/jobs/{id}/logs |
Live log stream |
curl -X POST http://localhost:8000/api/jobs \
-H "Content-Type: application/json" \
-d '{
"url": "https://quotes.toscrape.com",
"selectors": ".quote",
"fetcher": "stealthy",
"headless": true
}'scrapling-dashboard/
βββ docker-compose.yml # Orchestrates backend + frontend
βββ .env.example # Environment template (copy to .env)
βββ deploy-vps.sh # One-command VPS deploy script
βββ INSTALL.md # Detailed installation guide
βββ backend/
β βββ Dockerfile # Based on pyd4vinci/scrapling
β βββ app.py # FastAPI wrapping Scrapling
β βββ requirements.txt
βββ frontend/
β βββ index.html # React SPA (no build step needed)
βββ nginx/
βββ default.conf # Reverse proxy + WebSocket support
| Fetcher | Use Case | Anti-bot | Speed |
|---|---|---|---|
| StealthyFetcher | Cloudflare, Turnstile, protected sites | β β β β β | β β β |
| DynamicFetcher | JS-heavy SPAs, client-rendered pages | β β β | β β β |
| Fetcher | Simple HTTP, static pages | β β | β β β β β |
| AsyncFetcher | High-volume concurrent scraping | β β | β β β β β |
| Scenario | Recommendation |
|---|---|
| Development / testing selectors | LOCAL |
| Quick scrapes (< 100 pages) | LOCAL |
| Sites with aggressive anti-bot | LOCAL + residential proxy |
| Overnight crawls (1000+ pages) | VPS |
| Scheduled recurring jobs | VPS |
| Scraping from a specific region | VPS in target region + proxy |
- Persistence β Replace the in-memory job store in
app.pywith SQLite or Redis - Scheduling β Add APScheduler or cron for recurring spiders
- Notifications β POST to Slack/Discord webhooks on job completion
- Auth UI β Add a login page if exposing the VPS publicly
- HTTPS β Use Caddy as a reverse proxy for automatic TLS (see INSTALL.md)
This project is a UI wrapper around Scrapling by Karim Shoair (D4Vinci). Scrapling is an adaptive web scraping framework that handles everything from single requests to full-scale crawls, with built-in anti-bot bypass, smart element tracking, and proxy rotation.
- Scrapling GitHub: github.com/D4Vinci/Scrapling
- Scrapling Docs: scrapling.readthedocs.io
- Scrapling License: BSD-3-Clause
- Scrapling Discord: discord.gg/EMgGbDceNQ
This dashboard was designed and built with the assistance of Claude by Anthropic, iteratively scaffolding the FastAPI backend, React frontend, Docker configuration, and VPS deployment tooling.
- FastAPI β REST + WebSocket API
- Scrapling β Web scraping engine
- Nginx β Reverse proxy
- Docker β Containerization
This dashboard is MIT licensed. Scrapling itself is BSD-3-Clause.
Contributions welcome! Please open an issue first to discuss what you'd like to change.
- Fork the repo
- Create a feature branch (
git checkout -b feature/my-feature) - Commit changes (
git commit -am 'Add my feature') - Push (
git push origin feature/my-feature) - Open a Pull Request