Limelit Open v0.1.0-rc.14 is a self-hosted Go binary for LLM brand visibility you can audit. Paid dashboards sell a score. This guide installs the open-core build, finishes the wizard, runs a first pass, then covers verify, fix, upgrade, and wipe – not another AEO essay.
You’ll leave with a local SQLite store, a dashboard on port 1515, and optional MCP hooks into Claude. Mentions are text-matched on stored answers, so you can re-check every figure from the raw text.
What you’re installing (and why it matters now)
Limelit Open is the Apache-2.0 open core of Limelit. One process (see the official repo) creates SQLite, serves http://localhost:1515, and exposes MCP so Claude reads the same metrics as the UI.
As of the v0.1 pre-release line (tag v0.1.0-rc.14 on GitHub Releases), six of eleven providers are live; five scraper adapters are still open issues. API surfaces and scraped consumer surfaces stay labeled separately – never averaged together.
System requirements
Official quick start: macOS or Linux only. No published hardware matrix; the design stays thin on purpose.
- OS: macOS/Linux curl binary; Docker or Go 1.25+ elsewhere (no first-party Windows binary in the documented quick start)
- Runtime: single static binary – no Node, no Postgres, no cgo
- Storage: SQLite under
./data(or a Docker volume); grows with full answer text - Network: outbound HTTPS to engine APIs or Limelit Cloud (free-key path)
- Port:
1515free on the host - Optional: Go 1.25+ for
go install; Docker Engine + volumes for the container path
In practice: a small always-on box or laptop, disk for weeks of answer text, and one API key (or the free Cloud key) before you hit Run.
Official download source
Use only these (pre-release; re-check latest before you pin):
- Binaries + checksums: github.com/limelit-co/open/releases
- Latest tag at write time: v0.1.0-rc.14 (or
releases/latest) - Container:
ghcr.io/limelit-co/open - Read-only reference: demo.limelit.co
Install Limelit Open (recommended: binary)
Maintainers document this first – nothing to install beforehand on macOS/Linux.
mkdir -p ~/limelit && cd ~/limelit
curl -fsSL https://github.com/limelit-co/open/releases/latest/download/limelit_$(uname -s | tr A-Z a-z)_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz | tar xz limelit
./limelit version
./limelit serve
Open http://localhost:1515. On start the process prints browser + MCP client lines with paths filled in. DB lands in ~/limelit/data – back it up by copying that directory.
Alternatives
# Go 1.25+
go install github.com/limelit-co/open/cmd/limelit@latest
limelit serve
# Docker - data in named volume
docker run -d --name limelit -p 1515:1515 -v limelit:/data ghcr.io/limelit-co/open
First-time configuration
Nothing bills until Run. Finish the browser wizard: domain (public brand name from your site), category, up to five competitors, starter prompts, then one key.
Free monthly allowance – second terminal, same folder: ./limelit login. Or mint a key at limelit.co/settings/open-key and paste it. That path reaches ChatGPT, Gemini, Perplexity, and Google AI Overviews/Mode through Limelit Cloud; answers still sit on your disk. Allowance gone? Failed rows say so. Drop in your own provider key and continue.
Bring-your-own keys (env wins over dashboard paste):
export OPENAI_API_KEY=sk-...
# also supported: ANTHROPIC_API_KEY, PERPLEXITY_API_KEY, GOOGLE_API_KEY,
# OPENROUTER_API_KEY, DATAFORSEO_LOGIN/PASSWORD, SEARCHAPI_KEY, ...
Optional committed config (limelit.yaml – no secrets):
property:
name: Acme
domain: acme.com
aliases: [Acme Inc, acme.io]
competitors:
- { name: Globex, domain: globex.com }
targets:
- chatgpt:openai:online
- perplexity:perplexity:sonar
- ai_overview:dataforseo
limits:
runs_per_day: 200
schedule: daily # daily | hourly | off
LIMELIT_DATA_DIR overrides the SQLite path (default ./data). UI settings can override limits/schedule at runtime.
The catch: keep
runs_per_daylow on day one. One pass multiplies active prompts × enabled targets. Default ceiling is 200; it refuses the whole evaluation before any provider spend and tells you how far over you’d go.
Verify the install works
./limelit version– build info for the binary you pulled.- Browser: dashboard on 1515; wizard completes clean.
- Click Run (or
./limelit run). Overview fills as engines reply – often under a minute for a small prompt set. - Every metric should show
n(sample size). Under 20, the UI calls that out. Four answers aren’t a trend. - Optional MCP: use the lines
limelit serveprinted, or./limelit mcpfrom the same directory as serve. Ask Claude: “Get started with Limelit.”
Spot-check one answer detail page: full text, brand highlights at matcher offsets, citations classified, query fan-out if the engine exposed it.
Common install errors and fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| MCP tools show empty / 0% forever | limelit mcp cwd ≠ serve data dir |
Start MCP where serve runs, or set LIMELIT_DATA_DIR to the real folder |
/mcp refuses every request |
No bearer token | Generate token in Settings, or set LIMELIT_MCP_TOKEN |
| Run refused before any calls | runs_per_day ceiling |
Raise limit in Settings/yaml, drop targets/prompts, or limelit run --target ... for one engine |
| Failed answers after free-key path | Monthly Cloud allowance exhausted | Add a vendor key; failed rows already explain the miss |
| Headline visibility “ignores” branded prompts | By design | Prompts naming your brand are tagged branded and excluded from the headline metric |
| ChatGPT % ≠ what you see in the app | API vs consumer surface | Use a scraped target for the person-facing surface; labels stay api/scraped |
| curl binary 404 / wrong arch | OS/arch string mismatch | Matching asset from Releases, or Docker / go install |
| Port bind failure | 1515 in use | Stop the other process or reverse-proxy in front (binary default stays 1515) |
Five provider adapters still aren’t built in v0.1 – Settings lists them with key-page links. A missing scraper isn’t a broken install.
Board decks hate silent methodology. Weird number? Open the answer rows and recompute from text. That’s why you self-host the matcher.
Upgrade and uninstall
Upgrade the binary: stop serve, re-run the curl install (or go install ...@latest / newer ghcr.io/limelit-co/open tag), start against the same data dir. Watch Releases – still pre-release, moves fast.
Optional Cloud move (not a binary upgrade). Local data stays; provider keys never upload; safe to re-run after a dropped connection:
./limelit upgrade --key <your-limelit-cloud-api-key>
# optional: --since YYYY-MM-DD
Uninstall / cleanup:
# binary install
# Ctrl+C the serve process, then:
rm -rf ~/limelit # or keep ~/limelit/data if you only want the binary gone
# Docker
docker stop limelit && docker rm limelit
docker volume rm limelit # destroys SQLite history
Export first if you might need history: ./limelit export > backup.json.
FAQ
What’s the latest Limelit Open version I should install?
Pull releases/latest, or pin v0.1.0-rc.14 when you need a known tag. Pre-release – treat upgrades as routine.
Do I need Docker for LLM visibility tracking with this tool?
No. Recommended path: one downloaded binary + SQLite. Want a volume-backed container anyway?
docker run -p 1515:1515 -v limelit:/data ghcr.io/limelit-co/open
Go 1.25+ only if you build via go install.
Why did my first visibility score look “wrong” after a clean install?
Usually not a bug. Branded prompts are excluded from the headline rate on purpose (methodology docs). Rows where Google never rendered an AI Overview drop out of the denominator instead of counting as misses. And every chart carries n – low-n figures get called out so you don’t crown a four-answer “trend.” Open one answer, confirm the text match, then scale prompts once the pipeline is honest.
Next: curl block → wizard + limelit login → one Run → wire Claude with the MCP lines the server printed.