Tutorial

How to Track LLM Share-of-Voice vs Google Ads

An r/DigitalMarketing post asked if LLMs are killing Google Ads. Walk-through: track brand presence in ChatGPT/Claude/Perplexity over time.

An r/DigitalMarketing post asked if marketers are stopping Google Ads because LLMs are eating the funnel. This walks a tracking pipeline that measures LLM share-of-voice for the same queries running on paid search.

Prerequisites

  • Scavio API key
  • An LLM API key (or two — Claude + OpenAI for cross-check)
  • A list of 10-50 brand-relevant queries

Walkthrough

Step 1: Define your query set

10-50 phrases your buyers actually type/say.

Python
QUERIES = [
    'best email deliverability tool',
    'how to fix dmarc',
    'cold email warmup software',
    # ...your buyer queries
]

Step 2: Pull AI Overview citations via Scavio

Scavio's include_ai_overview returns the citation set.

Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def ai_overview_cites(q):
    r = requests.post('https://api.scavio.dev/api/v1/search',
        headers=H, json={'query': q, 'include_ai_overview': True}).json()
    return r.get('ai_overview', {}).get('citations', [])

Step 3: Poll Claude / GPT directly

Ask each LLM the same query; check if your brand appears in the answer.

Python
import anthropic
client = anthropic.Anthropic()
def claude_answer(q):
    return client.messages.create(model='claude-sonnet-4-7', max_tokens=500,
        messages=[{'role':'user', 'content': q}]).content[0].text

Step 4: Score brand presence per query

Citation hit / mention hit / position rank.

Python
def brand_score(text, brand):
    text = text.lower(); brand = brand.lower()
    if brand not in text: return 0
    pos = text.index(brand)
    return 1.0 if pos < 200 else 0.5  # earlier mention = stronger

Step 5: Cron weekly + chart over time

Track brand-presence trend per query, per LLM.

Text
# Save daily/weekly to SQLite or Postgres; chart in Streamlit / Grafana.
# Watch the trend; the absolute number matters less than the slope.

Python Example

Python
# Per-query weekly cost: 1 Scavio call + 2-3 LLM calls = ~$0.02-0.05. 50 queries: ~$1-2.50/wk.

JavaScript Example

JavaScript
// Same pipeline in TS.

Expected Output

JSON
Weekly chart of brand presence in AI Overviews + ChatGPT/Claude/Perplexity answers. The slope reveals whether the LLM channel is gaining or losing for your brand — the data point most marketers don't yet have.

Related Tutorials

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

Scavio API key. An LLM API key (or two — Claude + OpenAI for cross-check). A list of 10-50 brand-relevant queries. A Scavio API key gives you 500 free credits per month.

Yes. The free tier includes 500 credits per month, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Start Building

An r/DigitalMarketing post asked if LLMs are killing Google Ads. Walk-through: track brand presence in ChatGPT/Claude/Perplexity over time.