Tools Reference

ai_visibility

Measure how a domain or a keyword is mentioned in one AI assistant's answers, from DataForSEO's LLM Mentions data. Pick a subject: "domain" (pass target…

Cost: 90 credits.

ai_visibility measures how a domain or a keyword is mentioned in one AI assistant's answers, using DataForSEO's LLM Mentions data. It answers a question no other SeoGrep tool touches: not what a search engine ranked, but what a language model said. It is synchronous — everything comes back immediately, with no background job to poll.

What it does

Pick a subject and a platform. The subject is required and has no default, because the two ask different questions and take different inputs:

subjectWhat it measuresWhat you pass
domainHow a site is mentionedtarget or project_id
keywordHow a search phrase is mentionedkeyword

The platform is chat_gpt or google, and it is required too — there is no "all assistants" option, because no such measurement exists here.

Each row comes back with DataForSEO's own fields under DataForSEO's own names, in the order DataForSEO sent them. No field is renamed and none is computed.

What this answer is scoped to

Every answer states its own limits, in full, on every run:

  • One assistant. A chat_gpt measurement says nothing about Google's AI answers, and neither says anything about an assistant DataForSEO was not asked about.
  • One locale. The location and language you asked under are named; if you passed neither, the answer says so rather than naming a default nobody chose.
  • One moment. The timestamp is DataForSEO's own, printed with the vendor key it came from. When the vendor reports no time, the answer says that — SeoGrep does not put its own clock in place of a missing vendor timestamp.
  • No period. This DataForSEO endpoint takes no date range, so there is none to ask for and none to state. The answer says so rather than leaving "now" to be assumed.

Whose numbers these are

SeoGrep computes no visibility score, no share of voice and no sentiment, ranks nothing by a formula of its own, and re-orders nothing: this endpoint publishes no ordering field, so the rows arrive in the vendor's order and stay in it.

A field DataForSEO did not report is printed as unreported, never as 0 — "the vendor reported no mentions" and "the vendor did not measure mentions" are different answers, and only the first one is about your brand. A genuine zero the vendor did send is printed as 0.

Where DataForSEO sends a nested object or list, it is not folded into the row; the answer names those fields instead, so you know there is more in the vendor's response than what you are reading.

Example

Ask your MCP client in plain language:

Does example.com come up in ChatGPT answers?

Or ask about a phrase rather than a site:

How is "project management software" mentioned in Google's AI answers, in the United States?

Input

FieldTypeRequiredDescription
subjectstringYesWHAT to look for in the assistant's answers — required, with no default, because the two answer different questions. "domain": how a site is mentioned (pass "target" or "project_id"). "keyword": how a search phrase is mentioned (pass "keyword"). Passing a field that belongs to the other subject is rejected, not ignored.
targetstringNoThe domain to measure AI mentions for, e.g. "example.com" or "https://example.com" — any public domain, including a competitor's. Pass this OR project_id, not both.
project_idstring (uuid)NoOne of your projects (from setup_project / list_projects) — the domain is taken from it. Pass this OR target, not both.
keywordstringNoSUBJECT "keyword" ONLY: exactly one search phrase to measure mentions for. This endpoint takes one at a time, not a list — run the tool again for another.
platformstringYesWHICH assistant DataForSEO is asked about — required, with no default, because a measurement of one says nothing about the other. "chat_gpt": mentions observed in ChatGPT answers. "google": mentions observed in Google's AI answers. There is no "all assistants" option here, and no answer covers an assistant the vendor did not query.
internal_list_limitintegerNoHow many entries DataForSEO may put inside its internal sources_domain and search_results_domain arrays (1-20, default 20) — the vendor's own internal_list_limit, whose published ceiling is 20 on this endpoint. It controls how much supporting detail comes back, NOT what the lookup costs you. Asking for fewer rows costs the same; asking for more is refused.
location_namestringNoOPTIONAL DataForSEO location_name — a NAME, e.g. "United States", not the numeric location_code the other SeoGrep tools take (DataForSEO publishes a location_code for this endpoint too, defaulting to 2840; SeoGrep sends the name). Omitted by default, in which case the lookup runs in DataForSEO's own published default — the United States — and the answer says so rather than leaving you to guess. Spell it as DataForSEO names it (e.g. "Turkiye", not "Turkey"): the vendor matches this name exactly and rejects an unknown one AFTER the paid request has gone out, so on platform "google" a spelling SeoGrep has measured to be wrong is refused before anything is charged, naming the vendor's own. On platform "chat_gpt" the default above is the ONLY location the vendor has data for, and any other value is refused before anything is charged.
language_codestringNoOPTIONAL DataForSEO language_code, e.g. "en". Omitted by default, in which case the lookup runs in DataForSEO's own published default — "en", English — and the answer says so rather than leaving you to guess. On platform "chat_gpt" that default is the ONLY language the vendor has data for, and any other value is refused before anything is charged.

Returns

A heading naming what was looked up and the DataForSEO LLM Mentions function behind it, then the scope paragraph above — platform, locale, the vendor's own timestamp, and the absence of any date range.

Then the rows, captioned with the row cap they came back under and DataForSEO's own whole-set count kept separate from them. This endpoint offers no paging: there is no offset to advance, so a wider set is a wider request rather than a next page. When the vendor gave no total, the caption says that instead of back-filling one from the rows in hand.

A lookup that matched nothing says so plainly and you are still charged for the delivered lookup — and it is stated as an answer about this platform, this locale and this moment, not as a claim that nobody ever mentions you. A missing or foreign subject field, a row cap above the ceiling, a call naming neither target nor project_id (or both), and a project_id that is not yours are all rejected before anything is charged; while live data is off you get a "not yet enabled" message instead — also free.

Billing

One call is one flat price, charged once, and behind it is one DataForSEO request. If it fails, the whole call fails and you are not charged.

A failed lookup is not a lookup that found nothing, and the refusal keeps the two apart: it quotes DataForSEO's own status code and message rather than reporting an empty result. It also says the half that "you were not charged" leaves out — the attempt did go out to DataForSEO and used part of SeoGrep's own daily third-party data allowance. That is our cost, not yours, and saying only the first half read as the whole truth.

ai_visibility needs a paid credit balance. It reads live data from a paid third-party provider, so it is not available on trial credits; the refusal arrives before anything is reserved and says outright that you were not charged. Buy any credit pack and it unlocks straight away; your existing credits are untouched and keep working for crawls, audits, reports and Search Console tools.

internal_list_limit is not a price control. It is the vendor's own field, and the vendor's own words for it are "maximum number of elements within internal arrays" — it caps two nested arrays inside the aggregate, not the rows returned and not the rows billed. An earlier version of this page called it the price control; that claim is withdrawn rather than restated. What was always true is kept: asking for fewer entries costs the same, and asking for more than the vendor's published ceiling is refused before anything is charged.

Limitations

Every delivered lookup is recorded: SeoGrep keeps a row saying what was looked up, when, under which settings, and a capped summary of what came back. The Lookups page of your dashboard lists them, so a lookup you paid for an hour ago is still something you can point at.

That record is history, not a live surface. No call here reads a previous run, nothing is refreshed for you, and there is no "changed since last time" — so to see the current picture, run it again.

This is a measurement, not a prediction. It does not tell you what an assistant will say next, why it said what it said, or what to change to be mentioned more — and a measurement on one platform does not carry over to another.

The location is a name (location_name), not the numeric location code the other SeoGrep tools take. DataForSEO does publish a numeric location_code for this endpoint as well — its default is 2840, the United States — but this tool sends the name.

chat_gpt is measured in one locale only. DataForSEO publishes ChatGPT mention data for the United States, in English, and for nothing else. A chat_gpt lookup naming any other location_name or language_code is refused before any credits are reserved and before anything goes out to the vendor — the vendor rejects it anyway, and without this check that rejection costs a paid attempt to discover. google is not restricted to one locale — DataForSEO publishes many locations for it — but the vendor matches a location NAME exactly, and rejects an unknown spelling only after the paid request has gone out. So spell it as DataForSEO does (Turkiye, not Turkey): a spelling SeoGrep has measured the vendor rejecting is refused before anything is charged, and the refusal names the vendor's own. That is a spelling check against SeoGrep's short table of measured names, not a check against this family's own list of supported locations — SeoGrep does not hold that list, and every answer says so.