Install on your computer
One command starts the whole product on any machine with Docker. Open the URL it prints and the setup wizard takes over.
On this page
Install Docker
Docker is the free program that runs DispatchSEO in its own sealed box - you install it once and never touch it again.
-
Mac / Windows: download Docker Desktop, install it like any app, and open it once - you'll see a whale icon appear in the menu bar (Mac) or system tray (Windows). The whale means it's running.
-
Linux: paste this in a terminal:
curl -fsSL https://get.docker.com | sh
To confirm it's ready, this should print a version number:
docker --version
Run the command
Open a terminal - the Terminal app on Mac, Git Bash or WSL on Windows (plain PowerShell can't run this) - and paste:
git clone https://github.com/NeoZi12/dispatchseo &&
cd dispatchseo &&
sh start.sh
The first boot downloads the prebuilt images (or builds them from source when it cannot) - a few minutes. Re-runs take seconds.
Open your dashboard
Go to the URL the command printed - usually http://localhost:4005. If the page doesn't answer right away, give it ~20 seconds and refresh.
Choose a dashboard password and the setup wizard walks you through the rest: your site, Search Console, keyword data, and connecting Claude Code.
That's the install. Everything below is reference.
Installing on a VPS instead?
Even shorter - one line installs everything, Docker included, and one
.env line puts the dashboard on your own domain with automatic HTTPS.
See Install on a VPS.
Laptop or always-on machine?
DispatchSEO works on schedules, and schedules only run while the machine is on. A laptop is fine for trying it out: content builds catch up on their own when the machine wakes (the builder checks what's due every 10 minutes), and Search Console stats re-read the last few days on each pass. The one real loss is rank history - positions are sampled live once a day, so a day the machine slept through is a gap in the chart.
And a delay is never dressed up as an error: the health checks know the difference between "this job broke" and "the machine was off" - a red banner or alert email only ever means something failed while the stack was actually running.
To run it seriously, use any machine that stays awake: a ~$5/month VPS with 1 GB of RAM, a Raspberry Pi, or a desktop that never sleeps. Nothing on the internet needs to reach the machine, so a home computer behind a normal router works without any port forwarding.
What's running
| Container | Job |
| --- | --- |
| app | Dashboard, MCP server at /api/mcp, cron endpoints |
| postgres | Your data - persists in the dispatch-pgdata volume |
| postgrest | REST layer between app and database, internal network only |
| migrate | One-shot schema apply on every boot (idempotent, exits when done) |
| cron | Triggers rank checks, GSC snapshots, and weekly research on schedule |
| builder | Headless Claude Code - builds guides and tools, runs research (below) |
Check on it any time - these (and every command below) run inside the
dispatchseo folder the install created:
docker compose ps # everything except the one-shot migrate should be running
docker compose logs app
docker compose logs builder
The builder: automatic content, no public URL
The builder container is your own Claude Code running headlessly inside
the stack. Every 10 minutes it asks the backend what's due and runs it: the
daily guide build, weekly keyword research, approved tool builds, the weekly
AI-visibility scan - and on auto-mode projects it merges green guide PRs. It
only makes outbound connections (to GitHub and Anthropic), which is why a
localhost install is fully automatic with no tunnel or domain.
Turning it on is one token. All three commands run in the dispatchseo
folder:
a. Create the token (builds run on your existing Claude subscription - DispatchSEO bills nothing):
claude setup-token
b. Save it, with your sk-ant-oat... token swapped in. Run this in
the dispatchseo folder - the first part checks you're in the right
place before writing anything:
[ -f start.sh ] &&
echo "CLAUDE_CODE_OAUTH_TOKEN=sk-ant-oat-PASTE-YOUR-TOKEN-HERE" >> .env ||
echo "Wrong folder - run this inside the dispatchseo folder"
c. Start the builder and check on it:
docker compose up -d builder && docker compose logs builder --tail 5
It either starts polling for work, or tells you exactly what it's still waiting for. GitHub access reuses the token from the wizard's One-tap merge step - nothing to configure twice.
Configuration
Only CRON_SECRET is required, and start.sh generates it. Everything
else - dashboard password, MCP token, Search Console, DataForSEO - is
handled in the setup wizard, not in env vars. The optional overrides are
annotated in
.env.docker.example.
Two you might want:
DISPATCH_PORT=4005 # host port the dashboard is published on
POSTGRES_PASSWORD= # your own database password - set BEFORE the first start
Upgrading
git pull && sh start.sh
The script rebuilds what changed; schema changes apply automatically on
boot. Your data lives in the dispatch-pgdata volume and survives rebuilds.
Back up before big upgrades:
docker compose exec postgres pg_dump -U dispatch dispatchseo > backup.sql
Uninstall
docker compose down # stop, keep data
docker compose down -v # stop and DELETE ALL DATA