Weekly media coverage desk with share of voice tracking

See every article written about your brand and your competitors in one place, with share of voice, clean readable text, and a weekly recap your team can send.

App
DiffbotGoogle SheetsGoogle DocsSlackMarketingAI ReportsResearch & Monitoring
PromptCreate

Build me a media coverage desk that our comms and marketing team opens every week to see who is writing about us and about our competitors. It is a browsable surface, not a scheduled job: a person opens it, picks a date window, and works through the coverage.

The watchlist lives in Google Sheets, not in the app. On load, a handler reads a Watchlist tab with Google Sheets Get Values. Each row is a brand name plus a label saying whether it is ours or a competitor. Everything the desk searches for comes from that tab, so the team can add or drop a brand by editing the spreadsheet without touching the app.

The main view is a coverage grid built from Diffbot Knowledge Graph DQL Search against the article index, one row per article showing headline, publication, date, which watchlist brand it belongs to, and sentiment. A date window picker sits at the top of the page and drives every query and every view on it. Important Diffbot detail: DQL Search paginates with from and size, and size maxes out at 50 per request, so the handler must page through results until it has the whole window rather than assuming one call returns everything. The Knowledge Graph endpoint is kg.diffbot.com/kg/v3/dql and auth is a token query parameter, not a bearer header. Article records carry a sentiment score already, so sentiment does not need a separate service.

Give the window three views over the same underlying coverage. A coverage timeline showing article volume over the window, broken out by brand so a spike is attributable. A share of voice breakdown measuring each brand's share of total article count in the window. And a ranking of the publications covering the category most, so the team can see which outlets actually drive the conversation and who they should be pitching.

Clicking any article opens a reading pane that pulls the clean full text through Diffbot Extract Article, showing title, author, date, sentiment and body text so nobody has to fight a paywall or a wall of ads to see what was actually said. The pane should also carry a Log to sheet action that appends that article's row to a History tab with Google Sheets Append Values, so coverage accumulates over time rather than resetting each time the window moves.

Put a Draft the weekly recap button on the page that kicks off a background agent. The agent takes the current window's coverage, groups it into themes, notes where a competitor is winning the narrative, then creates a new document with Google Docs Create Document and writes the recap into it with Google Docs Batch Update Document. When the doc is ready it posts the link into the comms channel with Slack Send a Message. The finished recap also gets listed inside the app in a Recaps view, with its date window and a link to the doc, so the team can reread past weeks instead of hunting through Slack history.

Two rules to bake in. First, let the user mark any row as ours, competitor, or irrelevant, and persist that classification. Rows marked irrelevant stay hidden on later loads so the same false matches do not keep reappearing, with some way to review and restore hidden rows. The ours versus competitor labelling should feed the share of voice view rather than being decorative.

Second, filter out syndicated press release wire duplicates. One announcement picked up by twenty outlets must not distort share of voice. Detect near-identical headlines and body text clustered on the same day around one announcement, collapse them into a single canonical entry with a pickup count, and count that announcement once in share of voice and in the timeline. Let the user expand the entry to see which outlets carried it, since the pickup list is genuinely useful to a comms team even though it should not inflate the numbers.

Audience is a comms and marketing team opening this weekly, so favour a dense, scannable grid over a sparse dashboard, and make the date window the one control everything else hangs off.

What does this prompt do?

  • Pulls a watchlist of your brand names and competitor names from a Google Sheet, then builds a coverage grid of every article written about them in the date window you pick, one row per article with the headline, publication, date, brand and sentiment
  • Gives you three ways to read the same window: a timeline of coverage over time, a share of voice breakdown showing each brand's slice of the total articles, and a ranking of the publications covering your category most
  • Opens any article in a clean reading pane with the full text pulled through, so nobody has to fight a paywall or a wall of ads to see what was actually said
  • Drafts a weekly recap on demand: a background agent groups the window's coverage into themes, flags where a competitor is winning the narrative, writes it into a new Google Doc and posts the link to your comms channel in Slack

What do I need to use this?

  • A Diffbot account, which supplies both the article index the desk searches and the clean article text in the reading pane
  • A Google account with a spreadsheet holding your watchlist of brand and competitor names, plus a second tab where logged coverage accumulates
  • Google Docs access for the weekly recap document
  • A Slack workspace and the channel your comms team reads

How can I customize it?

  • Change the default date window the desk opens on, for example last 7 days for a weekly ritual or last 30 days for a monthly board update
  • Edit the watchlist tab in your spreadsheet to add brands, drop them, or move a name between ours and competitor without touching the app
  • Point the recap at a different Slack channel, or change how the recap is organized, for example by theme, by competitor, or by publication tier

FAQs

What do I need before this is useful?
A Diffbot account for the article index and article text, a Google account for the watchlist spreadsheet and the recap document, and a Slack workspace. The watchlist itself is just a tab with brand names, so you can start with your own name plus three or four competitors and grow it later.
How is share of voice calculated?
Each brand's share is its number of articles in the selected date window divided by the total articles across every brand on the watchlist in that same window. Move the window and the whole breakdown recalculates, so you can compare a launch week against a quiet one.
Will one press release picked up by twenty outlets distort the numbers?
No. The desk detects syndicated wire pickups of the same announcement and collapses them into a single entry with a pickup count you can expand. Share of voice counts the announcement once, so a widely syndicated release does not swamp a brand's real coverage.
Can I hide articles that are not actually about us?
Yes. You can mark any row as ours, competitor, or irrelevant. Rows marked irrelevant stay hidden the next time anyone opens the desk, so the grid gets cleaner every week instead of showing the same false matches again.
Does the weekly recap send itself automatically?
No, it runs when someone presses the button. That is deliberate: the recap reflects whatever date window you are looking at, and comms teams usually want to choose the moment. Every recap that has been drafted stays listed in the app so you can reread past weeks.
Does coverage disappear when I move the date window?
Only from the live grid, which always reflects the window you picked. Anything you log to the history tab in your spreadsheet is appended permanently, so coverage accumulates over time rather than resetting each time the window moves.

Related templates

Prospecting desk that builds account lists from the live web

Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.

Hyperbrowser
HubSpot
Google Sheets
App
Influencer campaign roster board with AI creator briefs

Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.

HypeAuditor
Google Sheets
Notion
App
Browse and shortlist creators without burning audit credits

Search creators for free, shortlist the best with your team, and spend an audit credit only when you decide someone is worth a closer look.

HypeAuditor
Airtable
Slack
App
Morning repricing console for Shopify with margin-safe rules

Pick a repricing rule, send an assistant out to check competitor pages, then approve the new prices that clear your margin floor.

Hyperbrowser
Shopify
Google Sheets
App
Pre-flight bounce check before you launch a cold email sequence

See the projected bounce rate for any outbound send before it goes out, and keep the launch button locked until the list is clean enough to be safe.

Hunter
Google Sheets
App
Hiring funnel dashboard for every open Hireflix role

One screen showing invited, completed, and shortlisted counts for every open role, plus the stalled invites that have quietly gone nowhere.

Hireflix
Slack
App

Stop paying per seat to watch your own press coverage.

Build a media desk your comms and marketing team opens every week, with share of voice, clean article text, and a recap that writes itself when you ask for it.