18 competitive intelligence examples from public 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. Two ChatGPT fields, ads (example 4) and searchQueries (example 18), come back empty on the ChatGPT answers served today.
How to run any example
A synchronous call returns { "success": true, "result": { ... } }:
curl -X POST https://api.answerline.dev/v1/monitor/chatgpt \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{ "prompt": "What is the best invoicing software for freelancers?", "country": "US" }'
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 in other markets 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(free) - 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: anything today. The
adsfield exists, but it comes back empty on the ChatGPT answers served today, so this question can’t be answered from ChatGPT data now. Even with data, it would not show targeting or spend.
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
country: "US" - Query:
bookkeeper austin - Read:
localResults[].title,localResults[].position,localResults[].rating,localResults[].reviews - Cannot tell you: the pack a searcher standing in the city sees, or results for other neighborhoods, unless each is run with its own
location.
SERP features and brand perception
10. Which domains does Google’s AI Overview cite for our category?
- Endpoint: Google Search with
include.aioverview(+$0.00071 on every tier) - 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: brand names matched in
text; 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"})
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()))
ChatGPT also returns entities[], the brands and products the answer names, which gives the named set without matching. Matching names in text works the same on Gemini.
17. Whose pages does ChatGPT cite when it recommends a rival?
- Endpoint: ChatGPT (it decides on its own whether to search)
- Prompt:
Is BillFox good for international invoicing? - Read:
sources[].url,citationPills[].domain,citationPills[].label - Cannot tell you: how much each source influenced the wording. An answer with no sources showed no search, so count citations over answers with sources and report the share without.
18. Which searches does ChatGPT run before answering about competitors?
- Endpoint: ChatGPT with
include.searchQueries: true(free) - Prompt:
ledgerly vs billfox for agencies - Read:
searchQueries[] - Cannot tell you: anything today. The field exists, but it comes back empty on the ChatGPT answers served today. The cited pages in example 17 are the evidence of what ChatGPT found; 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[] (empty today) |
| 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, city in the query | 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 | text |
| 17 | Pages ChatGPT cites | ChatGPT | sources[].url, citationPills[].domain |
| 18 | ChatGPT’s searches | ChatGPT + include.searchQueries |
searchQueries[] (empty today) |
Cost of running the set
Starter prices per request: Google Search $0.00103 (plus $0.00071 with the AI Overview, plus $0.00071 per extra page), Google News $0.0002, ChatGPT $0.0006 (every include flag free). A query with a search operator such as site: costs 5x on Google Search.
Running all 18 examples once, one query each, with the AI Overview only on example 10: 10 Google Search tasks at $0.00103, the site: query of example 7 at $0.00515 and one at $0.00174 ($0.01719), two Google News tasks ($0.0004), and four ChatGPT tasks ($0.0024). That is $0.01999 at Starter prices. New accounts get 100 free requests, more than the 18 tasks of a full run, so you can try the examples before topping up. See pricing for every tier.
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 $0.00071 extra on every tier when Google shows one.
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. Its result.entities[] lists the brands and products an answer names, each with a type and name. On Gemini, 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.