Search visibility used to mean checking a rankings report. That is no longer enough. A buyer can now ask ChatGPT, Claude, Gemini, Perplexity, or Google AI Mode which tools solve a problem and receive a synthesized shortlist without opening ten search results.
The technical question is simple: how often does an AI answer mention your brand, which competitors appear instead, and what pages does it cite? The operational question is harder. You need to run a stable prompt set, keep the raw answers, normalize citations, calculate trends, and repeat the process without creating a maintenance nightmare.
Enterprise tools such as Profound can do this as a managed service. But they are not the only path. Here are five ways to build an AI visibility workflow, ordered from the least infrastructure to the most control.
What are we actually measuring?
Before choosing a tool, define the output. A useful AI visibility dataset contains at least:
- the exact prompt;
- answer engine and model;
- run time and, when relevant, location;
- full response text;
- whether the brand and competitors appear;
- brand position or prominence;
- cited URLs and normalized domains;
- enough history to distinguish a trend from one unusual answer.
Do not compress everything into one score too early. Store the evidence first. You can change a scoring formula later; you cannot reconstruct an answer you never saved.
1. Run prompts manually
The lowest-cost proof of concept is a spreadsheet and a browser. Write 15 to 25 questions that represent actual buyer intent, run them across a few AI products, and record mentions, competitors, and citations.
Use multiple types of prompts:
- “What are the best tools for [category]?”
- “What is an alternative to [competitor]?”
- “How can I solve [problem] without [constraint]?”
- “Compare [brand] and [competitor] for [use case].”
- “Which [category] tools support [technical requirement]?”
This method is useful because you see the consumer interface directly. It is also difficult to reproduce. Sessions can be personalized, browsing modes can differ, and copying results becomes tedious. Manual checks are a baseline, not a monitoring system.
Use this when: you need a one-day snapshot before deciding whether the problem deserves automation.
2. Build a small API script
The core automation loop is not complicated:
for each prompt: for each configured model: response = run(prompt, model) store(prompt, model, response, timestamp) detect brand and competitor mentions extract and normalize cited URLsStore results in SQLite for a personal experiment or PostgreSQL when multiple workers and reports are likely. Keep provider-specific response payloads in a raw column and extract normalized records into separate tables. A basic schema might include prompts, runs, responses, brands, mentions, and citations.
The trap is assuming API output equals the answer in a consumer search product. It may not. The consumer product can use different system instructions, web retrieval, models, location, or personalization. API monitoring is still useful if you apply the same method consistently, but label the collection source honestly.
Then come the maintenance tasks: retry policies, rate limits, token budgets, provider changes, URL canonicalization, brand aliases, scheduled jobs, historical calculations, and dashboards. A weekend script can become a small internal product surprisingly quickly.
Use this when: the measurement method is intentionally narrow or you need a custom research experiment.
3. Assemble a low-code automation stack
Tools such as n8n can schedule prompts, call APIs, transform responses, and write rows to a database or spreadsheet. A dashboard tool can visualize mention rate and citation counts. This removes some boilerplate while preserving flexibility.
A practical workflow looks like this:
- Cron trigger selects enabled prompts.
- One branch calls each model provider.
- A parsing step detects aliases and extracts URLs.
- A database node writes the raw and normalized records.
- A weekly job computes visibility and competitor share.
- An alert fires when an important source appears or disappears.
This is better than manual tracking, but complexity has not disappeared. It has moved into workflow definitions. Versioning, tests, error replay, provider payload changes, and metric definitions still need an owner. Citation extraction is also harder than a simple regular expression when providers return structured annotations, redirect URLs, or references that do not appear inline.
Use this when: your team already operates an automation platform and needs a modest internal workflow.
4. Extend an SEO platform
Large SEO platforms now include AI mention, citation, competitor, and prompt data. This is attractive when the same team already uses the platform for keyword research, backlinks, site audits, and reporting.
The benefit is context. You can compare the pages cited by AI engines with pages that rank in search, then connect gaps to an existing content process. Large prompt indexes can also reveal topics you did not think to track.
The limitation is control. The data model, collection schedule, platform coverage, and scoring formula belong to the vendor. An index of market-wide prompts also answers a different question from a fixed library of custom prompts. One is discovery; the other is monitoring.
This option is not necessarily cheap, but it can be cheaper operationally than maintaining a separate system when the organization already pays for the suite.
Use this when: AI visibility is an extension of an established SEO operation and self-hosting is not a requirement.
5. Self-host an open-source AI visibility platform
The middle ground between an internal script and enterprise SaaS is a maintained open-source application. Elmo’s GitHub repository provides a complete AI visibility platform under an open-source license. It is designed to track prompts, mentions, competitors, share of voice, citations, query fan-out, and content or outreach opportunities.
Elmo uses a Docker Compose deployment with PostgreSQL, a TypeScript web application, and background workers. It supports multiple ways to collect answers, including model APIs and scraping providers. That matters because a team can choose a method based on the answer surface it wants to approximate, instead of treating every provider as interchangeable.
The main advantage over a custom script is that the unglamorous parts already exist: a UI, prompt management, scheduled evaluations, competitor configuration, citation normalization, trend views, and reporting. The main advantage over closed SaaS is that the code and data layer remain inspectable.
The cost model needs one caveat. Elmo is free to self-host in the sense that there is no software license fee. You still pay for a server and any API or scraping usage. You also own backups, updates, credentials, and monitoring. For a technical team, that can be an acceptable trade; for a marketing team without engineering support, a hosted tool may be cheaper in total.
Use this when: you want a Docker-deployable AEO dashboard, own-infrastructure data retention, and more functionality than a homegrown script.
A practical Elmo deployment checklist
Read the current getting-started documentation before using any copied command because releases and configuration can change. At a high level, plan for the following:
- Host: Use a VPS or container host with persistent storage.
- Database: Back up PostgreSQL and test restore procedures.
- Secrets: Keep application, encryption, provider, and scraper credentials outside source control.
- Collection targets: Start with only the answer engines your customers use.
- Prompt budget: Estimate runs as prompts Ă— engines Ă— frequency, then add retries.
- Aliases and competitors: Configure spelling variants and domains before trusting mention counts.
- Observability: Alert on failed jobs, provider errors, and unexpected cost growth.
- Upgrades: Assign an owner and review release notes before updating production.
Start small. Twenty well-chosen prompts across three engines create more useful evidence than hundreds of vague questions nobody reviews.
How to choose among the five approaches
| Approach | Setup | Ongoing work | Data control | Best use |
|---|---|---|---|---|
| Manual checks | Very low | Very high | Medium | Baseline |
| Custom API script | Medium | High | High | Narrow experiment |
| Low-code automation | Medium | Medium-high | High | Existing automation stack |
| SEO platform | Low | Low | Low | Integrated SEO workflow |
| Self-hosted Elmo | Medium | Medium | High | Repeatable open-source AEO program |
Choose based on total effort, not subscription price alone. If the team spends ten hours every week fixing a “free” script, it is not free. If an enterprise platform generates reports nobody acts on, it is not valuable.
What to do with citation data
Tracking is only useful when it changes the web evidence available to answer engines. For each important prompt:
- Identify the cited pages that define the category.
- Separate your site, competitors, editorial publications, communities, and institutional sources.
- Look for questions the cited pages answer clearly and your pages do not.
- Improve the relevant owned page with direct, factual, well-structured information.
- Pitch genuinely useful additions to third-party resources where your product belongs.
- Repeat the prompt set and evaluate the trend over several runs.
Do not optimize for citations in isolation. A brand mention with the wrong positioning can be worse than no mention. Store the response text so you can analyze both inclusion and narrative.
Final recommendation
Use manual checks to understand the problem, but do not scale them. Build a custom script only when the custom method is the point. Extend an SEO suite when consolidation matters more than data control. For technical teams that want a serious tracker without an enterprise SaaS subscription, self-hosted Elmo is the most balanced route: it provides a working visibility application while leaving the code, infrastructure, and historical data under your control.
The broader lesson is familiar to anyone who runs a homelab or internal platform. Self-hosting is not the absence of cost; it is a decision about where control and operational responsibility should live.