Skip to main content

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.
With --format json, each command prints the response of its /api/v1 route with the field names unchanged. results wraps it as { "comparison": ... }.

List keywords

Lists the keywords with their prompt and search counts and the page each one targets, if any. Example output:
JSON fields: data (each row has id, label, promptCount, searchCount, and target, which is { targetedAt, pageUrl } or null), rankCheck, totalPages, totalItems, and stats.

Show a keyword

Shows one keyword with its prompts, rank history (grouped by engine, newest first within each, up to 20 per engine), recommendation, and, when it is targeted, the page status. Example output:
INDEXED shows 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

Compares share of voice before and after targeting, for targeted and other prompts, and lists each targeted keyword with its status and rank before and now. Example output:
JSON is always { "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

  • pageStatus is null when the keyword is not targeted, and searchPerformance is left out. See how to read searchPerformance.
  • comparison is null when no keyword is targeted, or when a custom range ends before the first target date. Text output then prints (no targeted keywords yet).
  • status is one of no_page, not_checked, not_indexed, indexed, ranking, or cited, 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 rankBefore and rankNow, null means no Google check covered the keyword by then, or the check that did has no search results for the keyword’s searches. A rank of null inside 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 change runs from -1 to 1 and is negative when that group’s share of voice fell. The difference is 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.
The same data is available to your agent. See Which Query bank keywords should I work on next?.