Query bank
The query bank holds the keywords built from a product’s prompts. These read-only commands show the keyword list, how one targeted keyword’s page is doing, and whether targeting paid off. Pass--scope <org-slug>/<product-slug> to select the product.
--format json, each command prints the response of its /api/v1 route with the field names unchanged. results wraps it as { "comparison": ... }.
List keywords
Example output:
data (each row has id, label, promptCount, searchCount, and target, which is { targetedAt, pageUrl } or null), rankCheck, totalPages, totalItems, and stats.
Show a keyword
Example output:
true or false when a lookup confirmed it, Couldn't confirm when the lookup returned a full page of results, or the engine reported more than it returned, and none was this exact page, and - when there is no lookup result yet or the engine has no page lookup. SOURCE shows search_console when Google’s URL Inspection in your connected Search Console property answered, search when a search for the page answered, and - when it hasn’t been checked. When Search Console answered for Google, the text output adds google reason: (when the page is not indexed), google last crawled: (when Google has crawled the page) and google canonical: (when Google treats a different address as the main version) lines. When Search Console needs reconnecting, it adds a SEARCH CONSOLE: line saying Google checks use a search until you reconnect. When citations are incomplete, the text output adds a CITATIONS: line.
For a targeted keyword, the text output has a GOOGLE SEARCH PERFORMANCE: section from Search Console: the date range with as of, the latest day Search Console has data for, which usually runs 2 to 3 days behind today. Then come the page’s impressions, clicks and average position, and its top 10 searches by impressions, with yes under THIS KEYWORD for this keyword’s searches. When the page has no figures to show, the section is one line instead: Google hasn’t shown the page in this range (no_impressions), the domain isn’t connected to Search Console (not_connected), Search Console needs reconnecting (needs_reconnect), the keyword has no page address (no_target_page), or the lookup failed (error).
When Google doesn’t list the searches that only a few people made, the table and the showed this page line are replaced by one line saying so.
A recommendation with the search_console source is a page of yours that Google showed for the keyword’s searches in the 28 days to page.windowEnd, a date a few days before today. It is only given when the keyword has no target and none of your pages ranks, and the line shows how many times Google showed it and the date the window ended.
JSON fields: keyword, target, rankHistory, rankHistoryTruncated, prompts, recommendation, pageStatus, and searchPerformance. pageStatus holds the page status for the keyword (status, searchConsole, target, engines, rankHistory, rankHistoryTruncated, cited, citedAvailable, links). Each engine has indexed (true, false, or null) and indexInconclusive, which is true when indexed is null because the lookup couldn’t confirm. Each engine also has indexSource (search_console, search, or null), and indexReason, lastCrawledAt and googleCanonical. Every engine carries the last three. They are null for Bing and Brave, and for Google unless Search Console answered. searchConsole has a status of connected, needs_reconnect, or not_connected, and the connected property. citedAvailable is false when citations couldn’t be loaded or hit their row cap, so the page may be cited more than shown. pageStatus is null when the keyword is not targeted. searchPerformance has a state of ok, no_impressions, not_connected, needs_reconnect, no_target_page, or error. With ok it also has impressions, clicks, position (weighted by impressions), asOf, searches (each with keywordSearch), and keywordSearchCount. A failed lookup gives only "state": "error", and searchPerformance is left out for a keyword that is not targeted.
Show results
Example output:
{ "comparison": ... }. comparison is null when nothing is targeted, or when a custom range ends before the first target date. Otherwise it holds from, to, defaultFrom, windows, sov, citedAvailable, and keywords (each with id, label, targetedAt, pageUrl, status, rankBefore, and rankNow). citedAvailable is false when citations couldn’t be loaded or hit their row cap, so a keyword whose status isn’t cited may still be cited. The text output then adds a CITATIONS: line.
Fields
pageStatusisnullwhen the keyword is not targeted, andsearchPerformanceis left out. See how to readsearchPerformance.comparisonisnullwhen no keyword is targeted, or when a custom range ends before the first target date. Text output then prints(no targeted keywords yet).statusis one ofno_page,not_checked,not_indexed,indexed,ranking, orcited, which means an AI engine cited or read the page in the date range. Claude, Sonar, and Perplexity only read pages. See what each status means.- In
rankBeforeandrankNow,nullmeans no Google check covered the keyword by then, or the check that did has no search results for the keyword’s searches. Arankofnullinside means it was checked and none of your pages is in the top 10. A rank is the best position of any of your pages for the keyword’s searches. - Share of voice values are fractions. Before and after run from 0 to 1. A
changeruns from -1 to 1 and is negative when that group’s share of voice fell. Thedifferenceis the targeted change minus the other change, runs from -2 to 2, and is negative when targeted prompts’ share of voice moved less than other prompts’, even if both rose.