Dev.to AI πŸ€– Ai πŸ‘ 0 πŸ“– 6 min read

Track AI answer visibility without a big budget

When a buyer asks an AI answer engine for recommendations, the answer can mention a brand, cite its website, do both, or do neither. That makes these answers worth observing alongside conventional search results. But a m

When a buyer asks an AI answer engine for recommendations, the answer can mention a brand, cite its website, do both, or do neither. That makes these answers worth observing alongside conventional search results. But a mention is not a sale, and a single generated answer is not a reliable ranking. I wanted a small, repeatable way to collect evidence without pretending to measure the whole internet.

I built AI Brand Tracker, an Apify Actor that checks selected questions and engines for a brand and its competitors. This walkthrough starts with the cheapest supported engine, Google AI Overviews, and one question. You can apply the interpretation principles to manual checks too.

Start with one question and a cost estimate

On the Apify Free plan, one successful Google AI Overviews check historically cost about $0.039 in total: $0.035 for the tracker, $0.003 for the engine answer, about $0.00005 for the engine start, and roughly $0.00083 of engine compute/storage. This is an example, not a price guarantee: retries, starts, platform usage and upstream pricing can change it. The engine is billed separately to your Apify account. Check current prices before running.

The tracker charges $0.035 per successful prompt Γ— engine Γ— tracked brand. Competitors in the same project don't add tracker checks. Missing or skipped answers have no tracker fee, although upstream costs may still apply. The $0.10 engine spending gate in the example is not a $0.10 charge; it is separate from the tracker's own per-run charge limit. Limits do not guarantee zero overrun from in-flight requests or upstream final events.

Run the smallest useful check

Open the Actor's Store page and sign in to Apify. Replace the sample brand and question with your own; Pipedrive is simply a neutral example. In the Actor input, switch to JSON and paste:

{
  "brand": "Pipedrive",
  "brandDomain": "pipedrive.com",
  "competitors": ["Zoho CRM | zoho.com"],
  "prompts": ["What is the best CRM for small business sales teams?"],
  "engines": ["google_ai_overviews"],
  "trackingId": "pipedrive-overview-weekly",
  "trackChanges": true,
  "maxChecks": 1,
  "maxEngineSpendUsd": 0.1
}

This selects one brand, one question and one engine: at most one attempted tracker check. brandDomain enables citation matching for that domain and its subdomains. The competitor is analyzed within the same answer, not as a second tracked-brand project. maxChecks caps attempted checks; maxEngineSpendUsd gates engine spending, not tracker fees. Set an appropriate tracker maximum in the run settings too. After reviewing prices and input, start the run and wait for it to finish.

Use a buyer question you genuinely want to monitor, rather than a question designed to force the brand into the answer. If you have a useful set already, begin with a handful of representative questions and calculate the extra cost before expanding. For each new brand, question or engine, think through whether its answer adds a distinct decision you can make.

Read rows and coverage before drawing conclusions

A run provides dataset rows for successful checks only, a JSON OUTPUT summary and an HTML report. Start with OUTPUT.status and the requested and successful counts. complete means the requested answers were analyzed. partial means at least some were missing or skipped; invalid-input and charge-limit need attention too. A missing Google Overview is not evidence that your brand was absent. An empty dataset is not a zero visibility score.

Sample output: a short excerpt from a real Pipedrive Google AI Overviews dataset row from our own test run, observed on 14 November 2026 (an illustration, not client work):

{
  "brand": "Pipedrive",
  "engine": "google_ai_overviews",
  "prompt": "What is the best CRM for small business sales teams?",
  "mentioned": true,
  "mentionCount": 2,
  "position": 1,
  "listRank": 1,
  "cited": false,
  "citationRank": null,
  "checkedAt": "2026-11-14T21:53:45.025027+00:00"
}

The name appeared twice, but the tracked domain wasn't cited. position is the order of first mention among the tracked names, not a search ranking. listRank describes a numbered or bulleted list position when one is detected. A null citationRank here means there was no matching brand citation; it does not mean the answer had no citations at all. Open the full row and report to inspect the excerpt and cited domains. Whole-word matching can still need human review, especially for ambiguous names.

The summary reports visibility and citation percentages over successful checks. With one successful answer, each is based on a denominator of one; it is a useful inspection point, not a statistically solid estimate. Look at the requested and successful counts whenever you compare percentages, and don't compare a partial run as if it covered all the questions.

Repeat weekly with the same inputs

Save your input as an Actor task in Apify Console. Open Schedules, create a weekly schedule, and attach the saved task. Check its time zone and cost limits before enabling it. For change tracking, keep the same tracking ID, prompts, brands, domains, competitors, engines and locale. Changes to these inputs create a new baseline. Only complete projects replace history, so a failed check doesn't become a false loss. Avoid overlapping runs with the same tracking ID.

A practical review is to note the observation date, compare the same questions, and inspect the actual answer before making a change. If a mention disappears once, wait for more observations rather than assuming a trend. If a citation appears, review the cited page and whether it is genuinely relevant to the question.

Run a small check from Python

The following standard-library example starts a billable run. Set APIFY_TOKEN in your environment using a secret manager, then replace the brand and question. It prints successful dataset rows, not coverage status; inspect the run's OUTPUT record in Apify to distinguish a complete run from a partial one. If the request times out, inspect the run before retrying: it may still be running.

import json
import os
from urllib.request import HTTPRedirectHandler, Request, build_opener

class NoRedirect(HTTPRedirectHandler):
    def redirect_request(self, req, fp, code, msg, headers, newurl):
        return None

payload = {
    "brand": "Pipedrive",
    "brandDomain": "pipedrive.com",
    "prompts": ["What is the best CRM for small business sales teams?"],
    "engines": ["google_ai_overviews"],
    "maxChecks": 1,
    "maxEngineSpendUsd": 0.1,
    "trackChanges": False,
}
request = Request(
    "https://api.apify.com/v2/acts/xyventures~ai-visibility-tracker/"
    "run-sync-get-dataset-items?maxTotalChargeUsd=0.05",
    data=json.dumps(payload).encode(),
    headers={
        "Authorization": "Bearer " + os.environ["APIFY_TOKEN"],
        "Content-Type": "application/json",
    },
)
with build_opener(NoRedirect).open(request, timeout=300) as response:
    for row in json.load(response):
        print(row["brand"], row["mentioned"], row["cited"])

The $0.05 tracker limit and $0.10 engine gate are separate. A returned empty list does not mean the brand was absent; investigate coverage and warnings in the run. Don't put tokens in scripts or share them with your output.

Add other engines deliberately

ChatGPT, Perplexity, Gemini and Google AI Mode cost about $0.20 per answer on Free, separately from tracker fees; on Bronze the listed rates are roughly $0.005–$0.013. Google AI Overviews is about $0.003 Free or $0.002 Bronze per answer. Starts and other platform usage are additional. Gemini also needs at least a $0.50 child-run cap plus headroom; that cap is not a fixed fee. Check the current pricing pages because other plans and rates differ.

Claude and Grok are opt-in. The tracker uses Claude Haiku 5.5 or Grok 4.3 by default through Apify's OpenRouter proxy, with Exa web search; these are API answers, not scrapes or replicas of the consumer chat apps. A Free-plan test measured roughly $0.08 and $0.13 per answer respectively; paid-plan proxy usage is about one tenth, depending on tokens and search. Proxy starts, platform usage and the tracker fee are extra. The engine budget reserves an allowance, not a hard ceiling: search text and in-flight calls can exceed it. The country setting is metadata only for Overviews, Claude and Grok; language is metadata for all engines, so write the question in the desired language.

Treat the result as a snapshot

Answers vary by time, wording, retrieval and provider. Different interfaces and personalization may produce different results. A mention, a citation and a list position are separate observations, and none guarantees traffic, sales or future placement. I use this as a prompt to investigate, not as proof that an optimization worked.

AI helped me draft this article; I reviewed and edited it.

πŸ“° Read the original article on Dev.to AI

Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes β€” full credit and traffic to the original publisher.