18 competitive intelligence examples you can answer from public search and AI data
Competitive intelligence from public data means asking a narrow question that a search result page or an AI answer can settle, then reading one specific field. “Who bids on our brand?” is answered by ads[].domain on a Google search for your brand. “Which rival pages does the AI Overview cite?” is aioverview.citationPills[].domain. The 18 examples below each give the endpoint, an example query or prompt, the field to read, and the limit of what that field can tell you.
All examples use this API’s Google Search (POST /v1/monitor/google, task type GOOGLE), Google News (POST /v1/monitor/google/news, GOOGLE_NEWS) and ChatGPT (POST /v1/monitor/chatgpt, CHATGPT) endpoints. Brand names are placeholders: “Ledgerly” is you, “BillFox” and “InvoicePro” are rivals.
How to run any example
A synchronous call returns { "success": true, "result": { ... } }:
curl -X POST https://api.answerline.dev/v1/monitor/google \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{ "query": "ledgerly", "country": "US", "hl": "en" }'
For recurring collection, send the same body as the payload of an async task and receive results by webhook (async, webhooks). A small Python helper used below:
import os, requests
from urllib.parse import urlsplit
API = "https://api.answerline.dev"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
def call(path, body):
r = requests.post(f"{API}{path}", json=body, headers=HEADERS, timeout=400)
r.raise_for_status()
return r.json()["result"]
def host(url):
return (urlsplit(url or "").hostname or "").removeprefix("www.")
Several Google fields are omitted when the results page has no such block (localResults, knowledgeGraph, shoppingCards, peopleAreSaying), and aioverview is null when requested but not shown. Read them with defaults.
Paid search
1. Who bids on our brand name?
- Endpoint: Google Search
- Query:
ledgerly, andledgerly pricing,ledgerly login - Read:
ads[].domain,ads[].blockPosition(top,bottom,middle,rhs),ads[].title - Cannot tell you: spend, bids, impression share or how often the ad shows. One request is one auction outcome.
r = call("/v1/monitor/google", {"query": "ledgerly", "country": "US"})
rivals = {a.get("domain") for a in r.get("ads", []) if a.get("domain") not in (None, "ledgerly.com")}
Run it several times a day for a week and report, per domain, the share of samples it appeared in.
2. What ad copy do competitors run on category keywords?
- Endpoint: Google Search
- Query:
invoicing software for freelancers - Read:
ads[].title,ads[].description,ads[].displayedUrl,ads[].sitelinks[].title - Cannot tell you: which variant performs better, or the landing-page conversion rate. New copy appearing is evidence of testing, not of results.
Hash title plus description per domain; a hash you have not seen in 30 days is a new creative.
3. Which competitors run shopping ads, and at what price?
- Endpoint: Google Search
- Query: a product query, for example
standing desk 60 inch - Read:
ads[]items withtypeSHOPPING_CARD:store,title,price.raw,oldPrice.raw; and the unpaidshoppingCards[]:store,title,price.raw,rating - Cannot tell you: stock, margins, or prices shown to other locations and devices unless you request them.
Group sponsored shopping cards by store, not by url, because their URL is a Google redirect.
4. Is a rival advertising inside ChatGPT answers?
- Endpoint: ChatGPT with
include.ads: true(+2 credits) - Prompt:
What is the best invoicing app for a two-person agency? - Read:
ads[].brand.name,ads[].brand.url,ads[].cards[].title,ads[].rendered - Cannot tell you: targeting or spend. Several candidate ads can be returned for one answer;
rendered: truemarks the ones shown, so count only those.
Tracking ads in AI answers covers this surface in depth.
Organic search
5. Who owns the top 10 for our category keywords?
- Endpoint: Google Search,
pages: 1 - Query: each keyword in your category set
- Read:
organicResults[].link(derive the domain),organicResults[].position,organicResults[].page - Cannot tell you: traffic or clicks each position receives. Weight positions with your own click curve if you need a share-of-voice number.
r = call("/v1/monitor/google", {"query": "invoicing software for freelancers", "country": "US"})
ranked = sorted(r.get("organicResults", []), key=lambda o: (o.get("page", 1), o.get("position", 0)))
top10 = [host(o["link"]) for o in ranked[:10]]
6. Which rival pages rank for comparison and “alternatives” searches?
- Endpoint: Google Search
- Query:
billfox alternatives,ledgerly vs billfox - Read:
organicResults[].title,organicResults[].link,organicResults[].snippet - Cannot tell you: whether the ranking page converts, or who paid for placement on a third-party listicle.
These searches show who intercepts a rival’s churn-intent demand, including review sites and affiliates you might pitch.
7. Which of a competitor’s pages does Google associate with a topic?
- Endpoint: Google Search
- Query:
site:billfox.com recurring invoices - Read:
organicResults[].link,organicResults[].title - Cannot tell you: the full set of their pages. Google interprets operators in the query, and a
site:search returns what Google chooses to show, not an index export.
Useful for finding a rival’s feature pages, docs and help articles on a theme before writing your own.
8. Which forum threads discuss a competitor?
- Endpoint: Google Search
- Query:
billfox review - Read:
peopleAreSaying[].title,peopleAreSaying[].link,peopleAreSaying[].date, plus forum domains inorganicResults[].link - Cannot tell you: sentiment. You need to read or classify the threads yourself.
9. Where does a local competitor appear in the map pack?
- Endpoint: Google Search with
location,device: "desktop" - Query:
bookkeeper,location: "Austin,Texas,United States" - Read:
localResults[].title,localResults[].position,localResults[].rating,localResults[].reviews - Cannot tell you: results for other neighbourhoods, or mobile map packs; local results are returned for desktop only.
SERP features and brand perception
10. Which domains does Google’s AI Overview cite for our category?
- Endpoint: Google Search with
include.aioverview(+2 credits) - Query:
how to invoice international clients as a freelancer - Read:
aioverview.citationPills[].domain,aioverview.citationPills[].url,aioverview.sources[].url - Cannot tell you: why a page was chosen, or how many clicks the citation sends.
r = call("/v1/monitor/google", {"query": "how to invoice international clients as a freelancer",
"country": "US", "include": {"aioverview": {"markdown": False}}})
aio = r.get("aioverview") or {}
cited = sorted({p["domain"] for p in aio.get("citationPills", [])})
11. What do searchers ask about a competitor?
- Endpoint: Google Search
- Query:
billfox pricing - Read:
peopleAlsoAsk[].question; fortypeLINK,peopleAlsoAsk[].linkshows whose page answers it - Cannot tell you: how often each question is asked. PAA is not search volume.
Questions such as “Does BillFox charge per invoice?” are objections to address on your comparison page.
12. Which searches does Google pair with a competitor’s name?
- Endpoint: Google Search
- Query:
invoicepro - Read:
relatedSearches[].query - Cannot tell you: demand. A related search like “invoicepro outage” may be rare; check volume elsewhere before acting.
13. How does Google describe a competitor as an entity?
- Endpoint: Google Search
- Query:
billfox - Read:
knowledgeGraph.title,knowledgeGraph.type,knowledgeGraph.website,knowledgeGraph.attributes[](key,value),knowledgeGraph.profiles[](name,link) - Cannot tell you: anything when no panel is shown;
knowledgeGraphis then absent. Attributes are what Google displays, not verified company data.
News
Request fields for these examples are on the Google News engine page.
14. Which publishers covered a competitor this week?
- Endpoint: Google News
- Query:
"BillFox" - Read:
newsResults[].source,newsResults[].title,newsResults[].date,newsResults[].link - Cannot tell you: reach, readership or sentiment of each article.
15. Did a rival announce funding, a launch or a price change?
- Endpoint: Google News
- Query:
BillFox funding,BillFox launches,BillFox pricing - Read: new
newsResults[].linkvalues not seen in earlier runs, withtitleanddate - Cannot tell you: the facts of the announcement. Headlines need confirmation from the rival’s own press page.
AI answers
16. Which brands does ChatGPT recommend for our category?
- Endpoint: ChatGPT
- Prompt:
What is the best invoicing software for freelancers? - Read:
entities[].nameandentities[].type; recommendation order from first appearance of each brand intext - Cannot tell you: what every user sees. Answers vary between runs, so sample the same prompt repeatedly and report a presence rate.
r = call("/v1/monitor/chatgpt", {"prompt": "What is the best invoicing software for freelancers?", "country": "US"})
named = [e["name"] for e in r.get("entities", [])]
text = r.get("text", "").lower()
order = sorted((b for b in ["Ledgerly", "BillFox", "InvoicePro"] if b.lower() in text), key=lambda b: text.index(b.lower()))
entities[] exists only on ChatGPT. On Gemini, Copilot, Grok, Perplexity and AI Mode, match brand names in text.
17. Whose pages does ChatGPT cite when it recommends a rival?
- Endpoint: ChatGPT (web search is forced by default)
- Prompt:
Is BillFox good for international invoicing? - Read:
sources[].url,citationPills[].domain,citationPills[].label - Cannot tell you: how much each source influenced the wording. With
disableWebSearch: true, sources are often empty, so keep one setting per series.
18. Which searches does ChatGPT run before answering about competitors?
- Endpoint: ChatGPT with
include.searchQueries: true(+2 credits) - Prompt:
ledgerly vs billfox for agencies - Read:
searchQueries[] - Cannot tell you: which of those searches produced the cited sources. Feed them into Google Search runs to see who ranks for them; see query fan-out.
Summary table
| # | Question | Endpoint | Field |
|---|---|---|---|
| 1 | Who bids on our brand? | Google Search | ads[].domain |
| 2 | Competitor ad copy | Google Search | ads[].title, ads[].description |
| 3 | Shopping ads and prices | Google Search | ads[].store, ads[].price.raw, shoppingCards[] |
| 4 | Ads inside ChatGPT | ChatGPT + include.ads |
ads[].brand.name, ads[].rendered |
| 5 | Top 10 owners | Google Search | organicResults[].link |
| 6 | Alternatives and comparison pages | Google Search | organicResults[].title, link |
| 7 | Rival pages on a topic | Google Search, site: |
organicResults[].link |
| 8 | Forum discussion | Google Search | peopleAreSaying[] |
| 9 | Local pack | Google Search + location |
localResults[] |
| 10 | AI Overview citations | Google Search + include.aioverview |
aioverview.citationPills[].domain |
| 11 | Questions about a rival | Google Search | peopleAlsoAsk[].question |
| 12 | Searches paired with a rival | Google Search | relatedSearches[].query |
| 13 | Entity description | Google Search | knowledgeGraph.attributes[] |
| 14 | Press coverage | Google News | newsResults[].source |
| 15 | Announcements | Google News | new newsResults[].link |
| 16 | Brands ChatGPT recommends | ChatGPT | entities[], text |
| 17 | Pages ChatGPT cites | ChatGPT | sources[].url, citationPills[].domain |
| 18 | ChatGPT’s searches | ChatGPT + include.searchQueries |
searchQueries[] |
Cost of running the set
Credits per async task: Google Search 3 (plus 2 with the AI Overview, plus 2 per extra page), Google News 3, ChatGPT 5 (plus 2 once if ads, searchQueries, shopping or rawResponse is requested). Synchronous calls add 2.
Running all 18 examples once as async tasks, one query each, with the AI Overview only on example 10 and ChatGPT add-ons only on examples 4 and 18: 11 Google Search tasks at 3 plus one at 5 (38), two Google News tasks (6), two ChatGPT tasks without add-ons (10), and two ChatGPT tasks with add-ons (14). That is 68 credits, well within the free tier’s 500 monthly credits. See pricing for plan allowances.
What public result data cannot answer
Keep these questions out of a SERP and AI answer pipeline, or pair it with other sources:
- Traffic, clicks, conversions. Not on the page. Use your own analytics for your site; third-party estimates for others.
- Search volume and keyword difficulty. This API does not return them.
- Backlinks. Not returned.
- Ad spend and bids. Only presence and copy are observable.
- Revenue, headcount, pipeline. Company databases, filings and your CRM.
- Why you lost a deal. Win/loss interviews; see the tools guide for platforms built for that.
Turning examples into a program
- Pick the five or six questions your team would act on this quarter.
- Write fixed keyword and prompt sets for each, with IDs, per market.
- Schedule them as async batches with idempotency keys, sampling ads and AI answers several times.
- Store raw results, derive rates, and alert on transitions that persist for two runs.
- Record each finding in a competitive analysis template so it has an owner and a refresh date.
The metric definitions for share of voice, ad presence rate and AI citation share are on the competitor analysis page. Field-level details for every request are on the Google Search engine page.
Questions
What is an example of competitive intelligence from public data?
Searching your own brand name on Google and reading the advertiser domains in the ads block shows which competitors bid on your brand. Repeated over days and samples, it becomes an ad presence rate per competitor.
Which response field shows who is cited in a Google AI Overview?
aioverview.citationPills[].domain, with url and label per citation, and aioverview.sources[] for the full source list. The AI Overview is returned when include.aioverview is set on the Google Search request, for 2 extra credits.
Can public SERP data show a competitor's traffic or ad spend?
No. A result page shows who ranks, who advertises and who is cited at the moment of the request. It contains no traffic, spend, click, conversion, search volume or backlink data.
Which AI engine returns the brands named in an answer as structured data?
ChatGPT, through result.entities[] with type and name. On Perplexity, Gemini, Copilot, Grok and AI Mode, detect brands by matching names in result.text.
How many samples do I need before trusting a competitive signal?
Ads and AI answers vary between requests, so take several samples per keyword or prompt and report rates rather than a single yes or no. Organic positions are commonly tracked with one sample per run, daily or weekly, with alerts only on changes that persist across runs.