Track which pages and brands win your buyers' questions

By General Input

A board of the questions your buyers ask, showing where your pages land, which competitors show up instead, and what you lost since the last check.

Integrations

  • Internet Search
  • General Input Database
  • Google Docs
  • Slack Bot

Type

App

Categories

  • Marketing

Build me an app my marketing team works out of, where we track the buyer questions we want to own and see, question by question, which pages and brands the live web actually surfaces. Everything the app stores lives in General Input Database (Execute SQL, with Create or List Databases to set the database up on first load), and every check runs through Internet Search (Search the Web). Do not describe this as reading answers out of ChatGPT or Gemini anywhere in the interface. It reports the ranked pages the web returns for a question, with titles, URLs, snippets and relevance scores.

The main surface is a board of tracked questions, one row per question, with questions phrased the way a buyer would ask them: "best CRM for recruiting agencies", "how much does field service software cost", "HubSpot vs Salesforce for small teams". Each row shows the question text, whether one of our own pages appears in the latest results and at what rank (or a clear "not appearing" state), the URL of our best-placed page, which competitor brands appear instead and at what ranks, that question's share of voice for us as a percentage, the movement since the previous check, the owner, and a link to the content brief if one has been generated. The default sort is the biggest visibility drop since the last check, so the questions we are losing sit at the top. Above the board, show headline numbers for the whole tracked set: total questions, how many we appear on, our overall share of voice as a percentage, the leading competitor's share of voice, and the date of the last check.

A Run check button at the top re-runs every tracked question. Before it starts, show a confirmation that states how many questions will be checked and that each question costs one search credit, since a run is one search per tracked question and the team should never be surprised by the size of a run. On confirm, call Internet Search (Search the Web) once per question, walking the list with visible progress and writing results as they come back so a partial run still saves something useful. Each run creates one dated snapshot: store the full ranked result list per question (rank position, title, URL, snippet, relevance score) plus the computed per-question metrics, so the board can draw a trend line across snapshots rather than only showing today.

Clicking a question opens its detail view: the full ranked result list from the latest snapshot with titles, clickable URLs and snippets so people can read what is actually winning, with each result visibly tagged as one of our pages, a named competitor, or neither. Below that, a small chart of our best rank and our share of voice for that question across every snapshot we have, and a list of past checks so someone can compare a specific date. The question's content brief link and the date it was generated sit here too.

A settings page holds the matching rules, configured once. Our own domains go in one list, and each competitor is a named brand with one or more domains under it, so a brand that runs several sites still counts as one competitor. When results come back, normalize each result URL down to its registrable domain (drop the scheme, drop www, ignore the path) and match it against those lists to decide whether a result is ours, a named competitor's, or unattributed. Share of voice is the percentage of ranked result slots across all tracked questions held by each brand, so our number and each competitor's number are directly comparable. Let settings choose whether that counts every returned result or only the top few positions, and how many results each check requests. Settings also holds the Slack channel that gets brief notifications.

Tracked questions are owned by whoever added them. Adding a question captures the question text, optional notes about the page or product it relates to, and stamps the current user as owner. The board has a filter for showing only my questions alongside the full team view, plus filters for questions where we do not appear at all and for questions where a named competitor appears. Anyone can see everything; ownership is about each marketer being able to work their own set.

Every row also has a Win this question button that kicks off a background agent. The agent runs deeper Internet Search (Search the Web) passes: the question itself at greater depth with page content included, a few close variations of the question, and follow-up searches against the top-ranked pages and their domains to understand what those pages actually cover. It also searches our own domains for the page of ours that comes closest to answering the question. From that it works out what the winning pages cover, how they are structured, which facts, numbers and entities they all include, and what none of them answer well. It then writes a content brief covering the recommended angle, the section-by-section outline, the specific facts and entities to include, the questions the page must answer, and a clear recommendation on whether to write a new page or refresh an existing one, naming the exact URL when it is a refresh. The agent creates the brief with Google Docs Create Document, fills it in with Google Docs Batch Update Document, saves the resulting document link and a generated-at timestamp back onto the question row in the app so the board shows it, and posts a short note to the content channel with Slack Bot Send a Message: the question, our current rank or that we are not appearing, the brand currently winning it, and the link to the doc. Show brief status on the row while the agent is running so people know one is in flight.

For storage, set up tables in General Input Database on first load: tracked questions (question text, owner, notes, brief doc URL, brief status, brief generated at, created at); checks (one row per run, with its date and how many questions it covered); results (check id, question id, rank position, title, URL, snippet, relevance score, and whether it matched us, a named competitor, or nobody); per-question snapshot metrics (check id, question id, our best rank, our share of voice, the competitor brands present); and settings tables for our domains, competitor brands with their domains, and the notification channel. Keep every snapshot so the trend line and the movement column are computed from real history rather than recalculated guesses.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonChat quality review board for LiveChat support leadsCompetitor LinkedIn ad watchlist with a permanent archiveLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsA searchable RFP answer library your bid team drafts from