Open source, bring your own keys

Know when AI assistants mention your brand

CitePrism asks ChatGPT, Claude, Gemini and Perplexity the questions your buyers ask, on a schedule, and measures how often your brand shows up in the answer and which URLs get cited. It stores every raw answer forever, so a change to what counts as a mention recomputes your whole history instead of orphaning it.

The hosted app runs on your own provider keys: no seat pricing, no markup on the AI spend. MIT licensed, so you can run the same thing on your own Postgres and Redis.

app.citeprism.com
The CitePrism overview: visibility rate, share of voice, first-mention rate, runs and spend, a visibility-by-day chart per engine and the top cited domains

ChatGPT

Responses API with web search

Claude

via OpenRouter, native web search

Gemini

Google Search grounding

Perplexity

Sonar, native citations

How it works

Three moving parts, none of them magic.

  1. 01

    Describe your brand

    Point CitePrism at your site. It reads the page, proposes a starter prompt set for your category, and you keep the questions that match how buyers actually ask.

    The prompts table: each question with its tags, runs per day, visibility rate and a per-engine bar
  2. 02

    Sample on a schedule

    Every prompt runs against each engine a few times a day. The full raw answer is stored forever, along with the citations, the search queries the engine issued, and what the call cost.

    A stored Gemini answer rendered as Markdown with the brand mentions highlighted, plus the citations and the cost of the call
  3. 03

    Read the evidence

    Visibility rate, share of voice, average rank, first-mention rate and citation share, per prompt and per engine, over time. Every number is one click from the answer it came from.

    The citations page: which domains the engines cite in your category, bucketed by type

What this measures, and what it does not

This category is full of vendors overselling. Here is the plain version.

It measures synthetic sampling

CitePrism asks the questions itself. Every number in the product comes from runs it generated, on a schedule you control, with a sample size shown next to every rate. A rate built on fewer than 10 runs is greyed out rather than dressed up as a trend.

It does not measure real user queries

No provider exposes what real people typed. Anyone selling "real AI search analytics" is either reporting referral traffic, which is a downstream proxy, or making it up. CitePrism will not pretend otherwise.

Sampling is still worth doing, because the alternative is zero visibility. It just means reading the numbers as a directional signal about how the models talk about your category, not as a traffic report.

Hosted, or on your own box

Sign up at app.citeprism.com, paste your vendor keys (or one OpenRouter key for every engine) in Settings, and the first runs land in minutes. Or run the same code yourself: one compose file with Postgres, Redis, the API, the worker, and the dashboard behind nginx. Either way the provider spend is yours and there is no per-seat markup in the middle.

  • Runs entirely on the free deterministic stub provider until you turn real engines on, so you can explore the product before spending a cent.
  • Every run records what it cost in micro-dollars. A per-workspace daily cap and a lifetime install cap are enforced before a job is ever enqueued.
  • Provider keys are encrypted at rest, and the API only ever returns the last four characters back to you.
git clone https://github.com/vernu/citeprism.git
cd citeprism/docker
cp .env.example .env      # add two secrets: openssl rand -hex 32
docker compose up -d
open http://localhost:8080

Read the code before you trust the numbers

The matcher, the metric SQL and the cost table are all in the repository. If a definition looks wrong to you, open an issue, or change it and recompute your history.