# Brand health command center for marketing and comms

> Give your whole team a morning dashboard for mention volume, sentiment, reach, and share of voice, without buying extra Brandwatch seats.

- Workflow type: app
- Services: Brandwatch, Slack Bot
- Categories: Marketing, Operations
- Published: 2026-08-16

## What it does

- Opens on a single overview screen where you pick a project, your brand plus each competitor, and a date range, then see mention volume over time, the positive and negative sentiment split, estimated reach, and a side by side share of voice comparison
- Adds a topics tab that shows what people are actually talking about for each brand, including the subjects that are suddenly spiking, so you can spot a story while it is still building
- Lets you drill into the real mentions behind any number, narrow them by sentiment, channel, or country, and jump straight to the original post to read it in context
- Shares a snapshot of the headline numbers and the biggest week over week movers into a Slack channel, so the people who never open the dashboard still get the story

## What you'll need

- A Brandwatch account with saved searches already set up for your brand and each competitor you want to track
- A Brandwatch login that is a regular or admin user, since restricted accounts are not allowed to pull data into outside tools
- A Slack workspace, if you want the share snapshot button to post into a channel
- Everyone else on your team just opens the app, so they do not need their own Brandwatch login

## Prompt

Build me a brand health command center that my marketing and comms team opens every morning. The point is that people without a Brandwatch seat can still explore our social listening data, so the app connects with one Brandwatch account and everyone else just opens the app. It is an explorable dashboard, not a work queue: nobody is assigning or resolving mentions here, they are reading the numbers and clicking through to the evidence behind them.

The app has three tabs and a shared control bar at the top. The control bar has a Brandwatch project picker, a multi select for saved queries (our brand plus each competitor), an optional query group picker, and a date range picker. Populate the project picker with List Projects, and once a project is chosen populate the query and query group pickers with List Queries and List Query Groups for that project. Every Brandwatch date must be sent in short form YYYY-MM-DD.

Tab one is the overview. It shows four panels: mention volume over time as a line per selected brand, a sentiment split showing positive, negative and neutral, estimated reach, and a share of voice comparison showing each brand's percentage of total mentions across the selected set. All four come from Get Chart Data. Use two dimension breakdowns so that one call covers every brand at once rather than one call per brand: days by queryGroups for the volume trend and the share of voice totals, sentiment by queryGroups for the sentiment split, and the reach metric by days for reach. Also fetch pageType and countries breakdowns, which feed the channel and country facets used by the drill down tab.

Important: when the user selects a saved query group, break down by queryGroups so the whole competitor set arrives in a single call. When the user instead picks individual queries, the app has to fetch per query, so show a small note in the UI that the selection costs one pull per brand and suggest grouping the competitor set in Brandwatch to make it cheaper.

The rate limit is the single most important constraint in this app, so design around it first. Brandwatch limits the whole organization, not the user, to about 30 API requests per 10 minutes on a rolling window, and returns HTTP 429 when that is exceeded. Every response carries an x-rate-limit-used header. So: fetch each panel exactly once per refresh, cache every result server side keyed by project, query or query group, date range and breakdown dimension, and share that cache across all users of the app so ten people opening it at 9am costs one fetch and not ten. Switching tabs, changing a sentiment or channel or country filter, sorting, or re-selecting a brand already loaded must never trigger a new fetch, they all read from the cached copy. Show a clear "last refreshed" timestamp with an explicit Refresh button as the only way to pull fresh data. Read x-rate-limit-used from each response, show the remaining budget in the UI, and disable the Refresh button with a plain explanation when the budget is nearly gone. On a 429, do not retry in a loop, show a message saying the organization's Brandwatch budget is used up and when to try again.

Load the topics and mentions tabs lazily. Do not fetch their data until someone actually opens that tab for the first time in a session, then cache it under the same key so returning to the tab is free.

Tab two is topics. For each selected brand, call Get Topics over the chosen date range and show the trending and bursting topics, with volume and sentiment for each. Let the user switch between brands with a segmented control rather than refetching, since all selected brands are already loaded. Visually separate topics that are bursting from those that are merely large, because a spiking topic is the thing worth acting on.

Tab three is the mention drill down. Use Retrieve Mentions for the selected query or query group and date range, and show a readable list with author, channel, date, sentiment, excerpt and a link that opens the original post in a new tab. Retrieve Mentions supports sentiment and page type filters at the source, but to honor the caching rule the default behavior is to fetch one page of mentions per refresh and then apply the sentiment, channel and country filters client side over that cached set, which costs nothing. Country in particular is a client side facet built from the country data on the returned mentions. If someone wants a filter applied at source to reach deeper than the cached page, make that an explicit action that clearly spends part of the refresh budget. Use cursor pagination if you page beyond the first set.

Add a "Share this snapshot" button in the header. It opens a small dialog with a Slack channel picker populated by the Slack Bot List Channels operation, a preview of the message, and a send button that posts with the Slack Bot Send a Message operation. The message contains the headline numbers for the selected period (total mentions, sentiment split, estimated reach, and share of voice per brand) plus the biggest week over week movers. Compute those movers without spending an extra API call: request the days breakdown over the selected range plus the immediately preceding equal length period in a single Get Chart Data call, then split the series in the handler to derive the deltas. Format the Slack message with clear headings and the brand name, direction and percentage change for each mover, and include a line saying which date range it covers.

Persist each user's last selected project, queries, date range and Slack channel so the app reopens exactly where they left it. The cached Brandwatch results themselves stay shared across the whole team, since the rate limit is organization wide.

Design it as a dense but legible morning dashboard: the overview should be readable at a glance without scrolling on a laptop, charts should have consistent brand colors across every panel and tab so the same competitor is always the same color, and the last refreshed timestamp plus remaining budget should be visible but understated in the header.

## How to customize

- Change which saved searches count as your competitive set, and group them so a whole competitor set loads in one go
- Set the default date range the dashboard opens on, such as the last 7, 30, or 90 days
- Pick which Slack channel the shared snapshot posts into, and adjust which headline numbers it leads with
- Adjust how long results stay cached before the dashboard suggests a refresh

## FAQ

### Does everyone who uses this need their own Brandwatch seat?

No, and that is the main reason teams build this. The app connects once using a single Brandwatch account, then anyone you share it with can explore the data inside the app. This matters because Brandwatch restricted accounts cannot pull data into outside tools at all, so the usual workaround of handing out limited logins does not actually work.

### Why is there a Refresh button instead of the data updating by itself?

Brandwatch gives your entire organization a small shared budget of data pulls per ten minutes, and that budget is shared by every person and every tool connected to it. If the dashboard reloaded every time someone switched tabs, a few people browsing at once would exhaust it and everything would start failing. Instead the app loads each panel once, remembers the result, shows you exactly when it was last refreshed, and only fetches again when someone asks it to.

### If ten people open it at 9am, does that use ten times the data budget?

No. Results are cached on the server and shared across everyone using the app, so the first person to open it that morning warms the data for the whole team. Changing filters or moving between tabs reads from that same cached copy rather than going back to Brandwatch.

### Can we compare several competitors at once?

Yes. You select your own brand plus as many competitor searches as you want, and the share of voice panel compares them side by side over the same date range. Grouping your competitor set together in Brandwatch is worth doing, because the app can then load the whole set in a single pull instead of one per brand.

### Can we still get to the original posts?

Yes. The drill down tab lists the individual mentions behind the numbers, and each one links straight out to the original post so you can read the full thread and reply from your usual account.

### What if we track different brands in different Brandwatch projects?

The dashboard works within one project at a time, since that is how the underlying data is organized. You switch projects from the picker at the top, and the app remembers which one you were last looking at.

Use this prompt in General Input: https://www.generalinput.com/prompts/brand-health-command-center-for-marketing-and-comms