Tutorial2026-08-136 min read

How to check if ChatGPT recommends your product

ChatGPT recommends products constantly — it just never calls it that. Ask it "best CRM for small business" and it names three to six tools with a line of reasoning each. To find out whether yours is one of them, run the buying-intent queries your customers actually type and read what comes back. The part most checks skip: being named is not the same as being recommended. So don't stop at a yes/no — pull the sentence your brand sits in, because "Acme is the simplest to set up" and "Acme is cheap but limited" are the same mention and completely different outcomes. This guide covers the manual read, the one-call version in curl and Python, the agent version over MCP, and the ways this check goes wrong.

Tutorial

To check whether ChatGPT recommends your product, ask it the questions a buyer asks at the moment of choosing — "best X for Y", "X alternatives", "X vs Y" — and see whether your name appears in the answer. Then do the part that actually decides the outcome: read the sentence around the mention. Being listed is not being recommended, and the difference lives in that one sentence, not in a boolean.

The manual way (and why it stops working)

Open ChatGPT and ask like a buyer, not like a marketer. "Best CRM for small business." "Acme alternatives." "Is Acme worth it for a ten-person sales team?" Read the whole answer, find your name, and read the sentence it sits in — that sentence is the actual result. Do it for the five or six phrasings that matter most to your pipeline and you'll know roughly where you stand today, for free, in about ten minutes.

Then the ceiling arrives, and it arrives quickly:

  • Buying intent fans out. "Best", "cheapest", "alternatives to", "X vs Y", "for [segment]", "for [use case]" — each is a different answer with a different shortlist. Covering that by hand is a morning you'll need to repeat every month.
  • The answers wobble. The same prompt on Tuesday and on Thursday can produce a different shortlist and a different framing of you. One reading can't distinguish a real slip from ordinary variation.
  • You'll read yourself into a conclusion. Scanning prose for your own name, it's genuinely easy to file "also worth a look" under win. Extracting the sentence and judging it deliberately is a different exercise from skimming for a highlight.
  • Nothing is stored. In two months you'll want to know whether the framing improved after you rewrote the pricing page. Chat history is not a dataset.
  • It doesn't fit a workflow. No alert when a competitor takes your slot in the shortlist, no row in the board deck, no check that runs before a positioning change ships.

Do it with one API call

One POST to AgentGEO returns the raw record for that query: the full answer text and every source cited, structured. No headless browser, no selectors to maintain — the managed-scraper engine is maintained for you.

curl -X POST https://api.agentgeo.org/v1/fetches \
  -H "Authorization: Bearer ag_live_..." \
  -H "Content-Type: application/json" \
  -d '{"query": "Acme alternatives", "surfaces": ["chatgpt"]}'

Now write the check that matters. Instead of testing whether the brand is present, split the answer into sentences and keep the ones your brand appears in — you get the framing, quoted, ready to read or to judge:

import re
import requests

KEY = "ag_live_your_key_here"
BRAND = "Acme"

# Buying intent, not brand awareness — these are the queries that decide deals.
QUERIES = [
    "best CRM for small business",
    "Acme alternatives",
    "Acme vs Globex for a 10-person sales team",
    "cheapest CRM with email integration",
]

MENTION = re.compile(rf"\b{re.escape(BRAND)}\b", re.I)


def sentences(text):
    # Split prose *and* bullet lists into readable, quotable units.
    parts = re.split(r"(?<=[.!?])\s+|\n+", text)
    return [p.strip(" -*\t") for p in parts if p.strip()]


for query in QUERIES:
    resp = requests.post(
        "https://api.agentgeo.org/v1/fetches",
        json={"query": query, "surfaces": ["chatgpt"]},
        headers={"Authorization": f"Bearer {KEY}"},
        timeout=200,  # the API waits up to 180s for live surfaces
    )
    resp.raise_for_status()

    for answer in resp.json()["answers"]:
        if answer.get("status") == "failed":
            print(f"{query!r}: no record this run")
            continue

        text = answer.get("answerText") or ""
        hits = [s for s in sentences(text) if MENTION.search(s)]

        print(f"\n{query!r} — {len(hits)} mention(s) of {BRAND}")
        for s in hits:
            print(f"   {s}")
        if not hits:
            print("   not named at all")

The output isn't a score, it's evidence: for each buying query, the exact sentences ChatGPT wrote about you. Four queries against one surface is four delivered records — four credits, with failed records costing nothing. While you're building the script, an ag_test_ key returns clearly labelled demo records at zero credits so you can shape the parser before spending anything.

Being named is not being recommended. The same clause — "Acme is the cheaper option" — reads as a selling point in one sentence and a warning in the next. So extract the surrounding text and judge the framing on purpose: top pick with a reason, one of five in an undifferentiated list, or the option named in order to argue against it. AgentGEO deliberately computes no sentiment — it returns raw text and stops there — so if you want that judgment automated, pass the extracted sentences to your own model with your own definition of "recommended". The rubric stays yours instead of a vendor's.

What the answer doesHow to read itWhat to work on
Names you first, with a reasonA genuine recommendation for this intentProtect it — check the page in sources[] still says what earned it
Lists you among five, no detailAwareness without preferenceGive the model one crisp, extractable differentiator sentence
Names you only as an alternative to a competitorThey own the query; you're the follow-upPublish the head-to-head comparison they haven't written
Names you with a caveat ("pricey", "limited")Framing risk, usually traceable to one source pageFind that page in sources[] and correct or out-publish it
Doesn't name you at allInvisible for this intentCoverage first — answer this exact question somewhere you control

Let your agent do it

If you'd rather not write the parser at all, hand the whole job to an agent — it can fetch the answers and read the framing in the same turn. The MCP server is one command away:

claude mcp add agentgeo -- npx -y agentgeo-mcp --key ag_live_...

That's the install: agentgeo-mcp over stdio, zero npm dependencies, Node.js 18+, one tool called fetch_raw_answers. From there the ask is just the task in plain language:

  • "Fetch ChatGPT's answer for 'best CRM for small business'. Quote the sentence that mentions Acme and tell me honestly whether that reads as a recommendation."
  • "Run our four buying-intent queries through ChatGPT and rank them by how favourably Acme is described."
  • "Pull 'Acme alternatives' from ChatGPT. If a competitor is described more warmly than us, find the source page behind it and draft the page that would answer it."

Notice where the judgment sits. AgentGEO returns answerText and nothing more; your agent — which knows your positioning, your pricing and what you'd consider a fair description — decides what counts as a recommendation. That split is deliberate, and it's the whole argument for a data layer rather than a dashboard.

Common problems

Five things that will make this check lie to you, in rough order of how often they do:

  • Substring matching over-reports. A bare "acme" in text also fires on "AcmeBank", "Acme Freight" and the phrase "the acme of design". Use a word-boundary regex, and keep an explicit ignore list for the namesakes you know exist in your category.
  • "Best" and "top" are different queries. They pull different shortlists and different framings. Freeze the query set that mirrors how your buyers actually phrase it, then hold it steady — a casual rewording quietly invalidates every comparison to last month.
  • One run is not a verdict. Answers vary between identical calls, so a mention that disappears once has probably not disappeared. Re-fetch two or three times before you act, especially before you tell anyone the framing got worse.
  • Named in the prose is not cited as a source. If your brand appears in answerText but your domain is nowhere in sources[], the model is describing you without reading you today — so the description is coming from elsewhere. That's a positioning problem with a different fix from a content gap.
  • Some chatbot fetches exceed the sync budget. Requests wait up to 180 seconds; a scrape that runs longer returns status: "failed" at zero credits with a providerFields.snapshot_id. Retry with that id and the same single surface to redeem the finished answer instead of paying to re-scrape it.

Summary

For a one-off answer to "does ChatGPT recommend us?", ask it yourself and read the sentence. When the question has to be asked every month, across the queries that actually drive revenue, and answered with quotes rather than impressions — fetch the answers through the API or let an agent do it, keep the sentences, and judge the framing with a rubric you wrote down.

Find out how ChatGPT actually describes your product. [Start free — no credit card](/onboarding) and pull the sentences behind your buying queries.

Start for free

Frequently asked questions

Does ChatGPT recommend products?
In practice, yes. For buying-intent prompts like "best CRM for small business" or "alternatives to Acme", ChatGPT names specific products and usually gives a short reason for each. It doesn't present that as an endorsement, but for the person reading it, a named shortlist with reasoning functions exactly like a recommendation.
How do I know if ChatGPT recommends my product?
Run your buying-intent queries and check two things: whether your brand appears in the answer, and how the sentence around it reads. The fastest repeatable version is one API call — POST the query to https://api.agentgeo.org/v1/fetches with "surfaces": ["chatgpt"], then split answerText into sentences and keep the ones that match your brand name.
Why does ChatGPT mention my brand but not recommend it?
Because a mention and a recommendation are different outcomes. You can be listed among five options with no differentiator, named only as an alternative to whoever owns the query, or named with a caveat like "limited" or "pricey". Reading the surrounding sentence is what separates those cases, which is why the useful check extracts context rather than a yes/no.
Can I check ChatGPT recommendations for many queries at once?
Yes. Loop your query set over the same endpoint — one call per query — and collect the sentences that mention your brand. One delivered record costs one credit and failed records cost nothing, so a twenty-query sweep against ChatGPT is twenty credits. An AI agent connected over MCP can run the same sweep from a plain-language instruction.
Does AgentGEO tell me whether the mention was positive?
No, and that's deliberate. AgentGEO returns raw answer records — the text and its sources — and computes no sentiment, scores or rankings. Judging tone is a job for your own agent or model, using your definition of a favourable description; keeping that judgment in your code means the rubric stays yours and stays auditable.

Keep reading