Skip to content

Beta Tester Quick Start

Get GoGetEm running locally in ~5 minutes, or deploy to a Raspberry Pi for always-on scraping.

What you get

Job feed Settings
Job feed — search, filter, save jobs, auto-scored by match profile Match profile — configure skills, preferences, deal-breakers
Scrape profiles Setup
Scrape profiles — manage searches, scheduler, run history First-time setup — create your account

Prerequisites

Tool Version Install
Go 1.25+ go.dev/dl — grab the latest gotip or RC build
Python 3.10+ Usually pre-installed on macOS/Linux
SQLite 3.x Usually pre-installed on macOS/Linux
Make any Xcode CLI tools (macOS) or sudo apt install build-essential (Debian/Ubuntu)

Note: Go 1.25 is the latest release. If your distro's package manager only has 1.22/1.23, install from go.dev/dl directly.

Option A: Run locally (Mac or Linux)

Best for trying things out or developing. No systemd, no Pi required.

# 1. Clone and enter the repo
git clone https://github.com/rcopra/GoGetEm.git
cd GoGetEm

# 2. Set up Python scraper
python3 -m venv .venv-jobspy
source .venv-jobspy/bin/activate
pip install -r requirements.txt
pip install -e .
deactivate

# 3. Create config (defaults work as-is)
cp .env.example .env
mkdir -p db

# 4. Build and run
make build-all
bin/gogetem-web

Open http://localhost:8080: 1. Create your account at /setup — the setup wizard walks you through profile, scrapes, and first run 2. Or skip the wizard and configure manually: Settings for match profile, Scrapes for scrape profiles

Stop the server with Ctrl-C. Your data persists in db/jobs.sqlite3.

Updating

git pull origin main
make build-all
bin/gogetem-web

Option B: Deploy to a Raspberry Pi

For always-on scraping with automatic scheduling. Tested on Pi 5 (also works on Pi 4 with 2GB+ RAM).

1. Install dependencies on the Pi

SSH in and run:

# Debian/Ubuntu (Raspberry Pi OS)
sudo apt install golang python3 python3-venv sqlite3

# Verify Go version — needs 1.25+
go version
# If too old, install from https://go.dev/dl/ (pick linux/arm64)

2. Clone and build

sudo mkdir -p /opt/gogetem
sudo chown $USER:$USER /opt/gogetem
git clone https://github.com/rcopra/GoGetEm.git /opt/gogetem
cd /opt/gogetem

# Python scraper
python3 -m venv .venv-jobspy
source .venv-jobspy/bin/activate
pip install -r requirements.txt
pip install -e .
deactivate

# Config
cp .env.example .env
mkdir -p db

# Build
make build-all

3. Install systemd services

The unit files assume user gogetem and path /opt/gogetem — adjust for your setup:

cd /opt/gogetem

# Replace username (e.g., "pi")
sed -i 's/User=gogetem/User='"$USER"'/' deploy/systemd/*.service

# If not using /opt/gogetem:
# sed -i 's|/opt/gogetem|/your/path|g' deploy/systemd/*.service

# Install and start
sudo cp deploy/systemd/gogetem-web.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now gogetem-web

4. Verify

curl -sf http://127.0.0.1:8080/healthz && echo "OK"

Visit http://<pi-ip>:8080 and follow the same setup steps as Option A.

Updating on the Pi

cd /opt/gogetem
git pull
make build-all
sudo systemctl restart gogetem-web

Automated deploys with GitHub Actions (optional)

If you fork the repo and want nightly deploys from dev to your Pi:

The nightly workflow (nightly.yml) runs at 4 AM UTC. It checks if dev has changed since the last run (using a nightly git tag as a marker) and skips entirely if nothing changed. When there are changes, it builds a Docker nightly image and deploys to the Pi. You can also trigger it manually from the Actions tab.

For emergency deploys outside the nightly schedule, use deploy.yml (manual dispatch only).

What you need

  • Tailscale on the Pi (joined to your tailnet)
  • A Tailscale OAuth client (Settings > OAuth clients > Generate) with tag:ci

GitHub secrets

In your fork: Settings > Secrets and variables > Actions:

Secret Value
PI_SSH_KEY SSH private key for the Pi (see below)
PI_HOST Pi's Tailscale hostname or IP
PI_USER Linux username on the Pi
TS_OAUTH_CLIENT_ID Tailscale OAuth client ID
TS_OAUTH_SECRET Tailscale OAuth client secret

Generate a deploy key

# On the Pi
ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N ""
cat ~/.ssh/deploy_key.pub >> ~/.ssh/authorized_keys
# Copy ~/.ssh/deploy_key contents into the PI_SSH_KEY secret

The nightly workflow will cross-compile, SSH to the Pi, deploy, and restart services. Without the secrets above, Pi deploy steps are skipped (the Docker nightly image still publishes).

No Tailscale? Deploy manually

# From your local machine
make build-pi build-mcp-pi
scp bin/*-linux-arm64 <user>@<pi-host>:/opt/gogetem/bin/
ssh <user>@<pi-host> "sudo systemctl restart gogetem-web"

# Or pull the nightly Docker image
docker pull ghcr.io/rcopra/gogetem:nightly

Remote MCP access (optional)

Let Claude Code on your laptop talk to GoGetEm on the Pi:

# On the Pi — generate a token and add to .env
openssl rand -hex 32
# Add to /opt/gogetem/.env: MCP_TOKEN=<token>
sudo systemctl restart gogetem-web

On your laptop, add to ~/.zshrc (or ~/.bashrc):

export GOGETEM_MCP_URL="http://<pi-tailscale-ip>:8080"
export GOGETEM_MCP_TOKEN="<token>"

The project's .mcp.json picks these up automatically.

Troubleshooting

# Check the web server
systemctl status gogetem-web
journalctl -u gogetem-web --no-pager -n 30

# Check scraper logs (scraping is managed by the web server's built-in scheduler)
journalctl -u gogetem-web --no-pager -n 30 | grep -i scrap

# Health check
curl -sf http://127.0.0.1:8080/healthz

# Test MCP endpoint (should return 401 without token)
curl -s -o /dev/null -w "%{http_code}" -X POST http://127.0.0.1:8080/api/mcp

Common issues

Problem Fix
go: go.mod requires go >= 1.25 Install Go 1.25+ from go.dev/dl
make scrape fails with import errors Activate the venv first: source .venv-jobspy/bin/activate
Port 8080 in use Set LISTEN_ADDR=127.0.0.1:9090 in .env
Scraper OOM on Pi Increase MemoryMax in gogetem-scrape.service (default 384 MB)

Memory limits (Pi only)

Defaults in systemd units are tuned for Raspberry Pi 5: - Web server: 128 MB - Scraper: 384 MB

Increase MemoryMax in the service files if you're on a more capable machine.

Further reading