Skip to content

Repository files navigation

AI Visibility Tracker

Find out whether AI search engines discover, mention, and cite your brand.

AI Visibility Tracker is a local-first, open-source workspace for checking how a brand appears in answers from ChatGPT, Gemini, Perplexity, Claude, and Google AI results.

Imagine a potential customer asking:

Which companies in Turkey have experience building mobile software for the automotive industry?

Would an AI assistant mention your company? Would it link to your website? Would the answer change next week?

AI Visibility Tracker gives SEO and marketing teams a simple way to ask those questions repeatedly, save the answers, and follow visibility over time.

Start manually. Automate when you're ready.

AI Visibility Tracker project overview

What problem does it solve?

People increasingly use AI assistants to discover products, compare providers, research industries, and create shortlists. Traditional rank tracking tells you where a page appears in search results, but it does not tell you whether an AI-generated answer recommends your brand or uses your website as a source.

This project helps answer four practical questions:

  1. Was the prompt checked? Missing data is kept separate from a negative result.
  2. Was the brand mentioned? The saved answer is checked against the project’s brand name.
  3. Was the domain cited? Links in the answer and manually entered sources are checked against the project’s domain.
  4. Is visibility changing? Every result is stored as a dated observation, so earlier and later answers can be compared.

It is not an automatic scraper and it does not pretend that one AI answer represents every user. It is a repeatable research workspace for collecting real evidence.

Who is it for?

  • SEO specialists tracking discovery beyond conventional search rankings
  • Content and brand teams learning how AI engines describe their company
  • Digital agencies managing visibility work for several clients
  • B2B marketing teams monitoring recommendation and shortlist questions
  • Product marketers checking whether products appear in solution research
  • Local and international teams comparing results by market and language
  • Researchers building a reliable history of AI-generated answers

How different sectors can use it

The workflow is sector-independent: define the questions a real buyer would ask, check the same questions regularly, and record what changed.

Sector Example discovery question What a team may track
Automotive & mobility “Which software companies have experience with connected vehicle or automotive mobile projects?” Provider mentions, project experience, and links to relevant case studies
Heavy equipment “What software providers build field applications for equipment dealers and service teams?” Industry expertise, field-service terminology, and cited product pages
Logistics & delivery “Which platforms can help manage courier tracking and last-mile delivery operations?” Product discovery, comparison language, and domain citations
Retail & e-commerce “What companies can build a mobile commerce experience that integrates with existing systems?” Recommendation visibility, technical capabilities, and regional relevance
Field-service operations “Which tools support technicians working with limited connectivity?” Solution mentions, offline capabilities, and supporting sources
Software and digital agencies “Which development companies should I shortlist for a complex enterprise mobile app?” Agency discovery, positioning, location, and specialist expertise
Enterprise AI “What on-premise AI tools let business teams query internal databases in natural language?” Product mentions, privacy claims, deployment options, and documentation citations

These are examples, not fixed templates. Useful prompts should sound like real customer research in the project’s selected language and market.

How it works

Create a project
        ↓
Add or import keywords
        ↓
Analyze and review company context
        ↓
Group demand into buyer needs
        ↓
Generate and evaluate buyer-situation prompts
        ↓
Open a prompt in an AI engine
        ↓
Paste and save the answer
        ↓
Review mentions, citations, coverage, and history

OpenAI can help group keywords and generate the first prompts, but it is optional. Projects, keywords, intents, prompts, and observations can all be created manually.

Main features

  • Separate projects for different brands, markets, and languages
  • Single-entry, pasted-list, TXT, and CSV keyword import
  • Support for common Ahrefs and Semrush-style keyword columns
  • Duplicate keyword prevention within each project
  • Editable company context covering services, capabilities, industries, products, use cases, customer needs, situations, and buyer roles
  • On-demand website analysis with a review-before-apply workflow that never silently overwrites manual edits
  • A lightweight, same-domain crawl with private-network blocking, redirect and response limits, timeouts, and boilerplate removal
  • Editable buyer-need intents with keyword assignments
  • OpenAI-assisted context analysis and intent grouping using structured output
  • Generation of 1–50 natural-language discovery prompts from a larger buyer-and-situation candidate set
  • Independent candidate evaluation for naturalness, discoverability, company relevance, and buyer realism
  • Deterministic quality, duplicate, length, brand, domain, and diversity guardrails before prompts are saved
  • Deterministic protection against generated prompts naming the tracked brand
  • Prompt-to-keyword and prompt-to-intent relationships
  • One-click prompt copying and links to supported AI engines
  • Manual observations with full raw answers, dates, notes, result URLs, and sources
  • Automatic brand mention and normalized domain citation detection
  • Google checks that record whether an AI Overview appeared—even when it did not
  • Complete prompt history with engine filtering
  • Latest-result visibility reporting without treating unchecked prompts as failures
  • Local SQLite storage with no account, analytics, or telemetry

Understand the key terms

  • Prompt: A natural question that a potential customer might ask an AI assistant.
  • Company context: A factual, editable profile of the company’s offer, customers, buyer roles, and common project situations.
  • Intent: A buyer need or practical business situation behind a group of demand signals, such as “Finding an automotive software partner.”
  • Observation: A snapshot of an engine’s answer for one prompt at a specific time. The original answer is always preserved.
  • Brand mention rate: The percentage of checked prompt-and-engine results whose latest observation mentions the brand.
  • Domain citation rate: The percentage of checked results whose latest observation includes or cites the project domain.
  • Coverage: The percentage of active prompts that have actually been checked. Coverage is separate from visibility.

For example, if 4 of 10 prompts were checked and 2 of those 4 mentioned the brand:

  • Coverage is 40%
  • Brand mention rate is 50%, not 20%

Quick start

Requirements

  • A current Node.js LTS release
  • npm

No Docker, external database, user account, or OpenAI key is required.

Install and run

npm install
npm run dev

Open http://localhost:3000.

npm run dev applies pending local database migrations before starting the application.

Optional demo project

To add a fictional project with sample keywords, an intent, and a prompt:

npm run db:seed

The seed is optional and never runs during a normal installation.

Your first visibility check

  1. Select Create project.
  2. Enter the project name, tracked brand, domain, market, and language.
  3. Open Keywords and paste one keyword per line, or import a CSV/TXT file.
  4. Open Context and select Analyze website, or describe the company manually. Review suggestions before applying and saving them.
  5. Open Intents and create buyer-need groups manually or select Generate intents.
  6. Open Prompts and add a real customer question or select Generate prompts.
  7. Select an engine such as ChatGPT. The prompt is copied and the engine opens in a new tab.
  8. Ask the question, copy the complete answer, and return to the tracker.
  9. Select the save-result action beside that engine.
  10. Paste the answer, add any source URLs, and save the observation.
  11. Review the detected brand mention and domain citation in the project overview and prompt history.

Repeat the same prompts daily, weekly, or at another interval that makes sense for your market. Consistency is more valuable than checking a large number of prompts once.

Writing useful prompts

The best visibility prompts represent genuine discovery behavior. They do not give the engine the answer in advance.

Good discovery prompt:

Which Turkish software companies have experience building mobile applications for automotive businesses?

Weak visibility prompt:

Is Example Brand a good automotive software company?

The second question forces the brand into the conversation and cannot show whether the engine would discover it independently. OpenAI-generated prompts therefore avoid the tracked brand and domain by design.

Useful prompt sets normally include a mix of:

  • Recommendations and shortlists
  • Provider and product comparisons
  • Problem-oriented solution research
  • Industry experience questions
  • Location or market-specific research
  • Technical capability questions
  • Buying and evaluation criteria

Avoid keyword stuffing and ten near-identical versions of the same question.

The generator treats uploaded keywords as evidence of demand and market terminology—not as sentence templates. It first combines verified company capabilities with likely buyer roles and realistic business situations. It then creates a larger candidate pool, scores whether each question could naturally surface the company, removes weak or repetitive candidates, and saves only the strongest mix.

OpenAI configuration

OpenAI is only used for actions you explicitly start: analyzing company context, generating intents, and generating prompts. All OpenAI requests run on the server.

The easiest setup is inside the application:

  1. Open Settings.
  2. Open the OpenAI section.
  3. Enter an API key and an optional model.
  4. Select Save, then Test connection.

The key is stored locally in .data/secrets.json. The full stored key is never returned to the browser.

You can instead create .env.local:

OPENAI_API_KEY=sk-...
OPENAI_MODEL=gpt-5-mini
DATABASE_URL=.data/ai-visibility-tracker.db

Environment variables take precedence over values saved in Settings. DATABASE_URL is optional.

The integration uses the official OpenAI JavaScript SDK, the Responses API, Zod validation, and structured outputs. Choose a model that supports structured outputs.

Importing keywords

Paste one keyword per line, import a .txt file, or upload a .csv file.

Recognized CSV columns include:

  • keyword, keywords, query, search term, phrase
  • search_volume, search volume, volume
  • cpc, cost per click
  • difficulty, kd, keyword difficulty
  • country, location, market

If the keyword column is unclear, the application shows an import preview and asks you to select it. Optional search volume, CPC, difficulty, and country values are retained.

Duplicate checks normalize casing, whitespace, trailing punctuation, and diacritics inside the same project.

Google AI Overview checks

Google does not show an AI Overview for every query. When saving a Google observation, record whether one appeared.

  • Yes: save the visible AI Overview answer and its sources.
  • No: save the check without an answer.

This keeps “Google was checked and no AI Overview appeared” separate from “Google was never checked.”

Data, privacy, and backups

AI Visibility Tracker is local-first.

  • Application data is stored in .data/ai-visibility-tracker.db.
  • Locally configured OpenAI settings are stored in .data/secrets.json.
  • .data/ and .env files are excluded from Git.
  • There is no login, cloud database, analytics, telemetry, or tracking pixel.
  • No AI engine is scraped automatically.
  • External requests happen only when you analyze a website, initiate an OpenAI action, or open an engine.

Back up the .data/ directory if the observation history is important. Deleting a project requires typing its name and removes its dependent local data.

Architecture

The MVP is a single Next.js App Router application built with React and strict TypeScript.

  • Next.js route handlers provide server-side application APIs.
  • SQLite and Drizzle ORM store projects and observation history locally.
  • Zod validates forms, API requests, and OpenAI structured output.
  • OpenAI Responses API powers optional intent and prompt generation.
  • Domain modules keep website safety and extraction, prompt quality selection, CSV parsing, engine definitions, entity detection, and metrics reusable.

Engine links and behavior are centralized in lib/domain/engines.ts. Every observation has a captureMethod, with manual as the V1 default. A future manual or browser-automation runner can therefore produce the same observation structure without rewriting reporting and history.

Development commands

npm run db:migrate
npm run db:seed
npm run lint
npm run typecheck
npm test
npm run build
npm run db:generate

Screenshots

Screenshots will be added as the interface evolves.

Roadmap

V1 — Manual visibility tracking

Projects, keywords, intents, natural discovery prompts, manual observations, citations, history, and latest-result metrics.

V1.1 — Deeper reporting

Competitors, share of voice, data exports, and improved trend reporting.

V2 — Optional automation

Playwright/headless-browser runners, scheduled observations, and automation that produces the same observation records as the manual workflow.

V1 intentionally excludes scraping, scheduling, accounts, teams, cloud sync, billing, competitor intelligence, sentiment analysis, and complicated share-of-voice algorithms.

About Rast Mobile

AI Visibility Tracker is an open-source project from Rast Mobile, a software company building mobile, web, and enterprise applications since 2014. Rast Mobile works across mobile and web product development, backend services, system integrations, DevOps, Dynamics 365/Dataverse, field operations, and enterprise AI.

Its sector experience includes automotive and mobility, heavy equipment, logistics and delivery, retail and e-commerce, and field-service operations.

Related enterprise AI work

ThinkHub AI Studio is a separate Rast Mobile product for on-premise enterprise AI. It connects to existing company databases so business teams can ask questions in natural language, with an architecture designed to keep the application, model, and database connection inside company infrastructure.

ThinkHub AI Studio and AI Visibility Tracker solve different problems:

  • AI Visibility Tracker measures how public AI search and answer engines represent a brand.
  • ThinkHub AI Studio helps internal teams explore company data through natural-language questions.

Contact and related links

For questions about the project, implementation support, or related AI and software work, contact mehmet.alp@rastmobile.com.

Contributing

Issues and focused pull requests are welcome. Keep the product practical, calm, local-first, and understandable to SEO and marketing teams.

Read CONTRIBUTING.md for the local setup, branch guidance, and pull request checklist.

Before submitting a change, run:

npm run lint
npm run typecheck
npm test
npm run build

License

MIT © Rast Mobile. See LICENSE.

Releases

Packages

Contributors

Languages