Competitor war room board for weekly competitive reviews

By General Input

Run your weekly competitive review from one board where every competitor page change lands as a card you triage, document, and share.

Integrations

  • Ahrefs Firehose
  • Notion
  • Slack Bot

Type

App

Categories

  • Marketing
  • Product

Build me a competitor war room board that our product marketing team runs the weekly competitive review out of, instead of scrolling back through a Slack alert channel. The board is organized as one lane per competitor domain, and inside each lane the page changes we pick up from Ahrefs Firehose arrive as cards.

Data source. Use Ahrefs Firehose. Firehose uses a two key model: the credential holds a management key, so first use List Taps to find an existing tap and its token, or Create Tap if there is none, and hold on to that tap token for everything else. Use List Rules with the tap token to read the rules that scope what we are watching, and show the user which competitor domains are currently covered. When the user adds a new competitor lane, write a domain scoped rule with Create Rule using Lucene syntax against the domain keyword field, for example domain:competitor.com, and optionally narrow it with url wildcard or regex patterns when the user only cares about certain sections of a site. Use Update Rule when the user edits a lane's scope. Read the change events with Stream.

Important storage constraint. The Firehose stream is Server Sent Events and there is no history endpoint, so nothing can be re-fetched after the fact. Every card the board has ever seen, its review state, the per lane and per type mute settings, and each user's last session timestamp must live in the app's own storage. Persist each incoming change event as a card row as it arrives, and de-duplicate on the source URL plus publish time so the same change does not land twice.

Card contents. Each card shows the page title, the URL as a clickable link, the text that was added and the text that was removed from the diff, the publish time, and an auto-assigned change type. Derive the change type from the URL path combined with the page_category and page_type labels that come back on the event, and classify into one of: pricing, product or feature, blog or press, careers, legal or terms, or investor relations. Show the change type as a visible label on the card so the user can scan a lane and immediately see the shape of what changed.

Review state. Every card carries a review state of New, Reviewed, or Material. The state persists per card and records who set it and when, and it is shared across the team so two people never review the same card twice. The board header shows, per competitor, how many unreviewed changes have arrived since that user's last session, and updates the user's last session timestamp when they leave the board.

Muting. Let the user mute an entire lane, and separately mute individual change types within a lane. Legal, careers, and press pages change constantly and are mostly noise, so muting has to be granular enough that the user can silence those without losing the pricing and product changes from the same competitor. Muted cards are hidden from the default view and excluded from the unreviewed counts, but stay retrievable behind a toggle.

Action one, document it. From any card the user can push the change into our Notion battlecard database using Create a Page, filling in the competitor, the change type, the quoted diff text, the source URL, and the date the change published. Let the user edit the fields in a small form before it is written, and mark the card as documented afterwards so it is obvious which changes have already been turned into battlecards.

Action two, share it. From any card the user can share the change to our #competitive Slack channel using the Slack Bot Send a Message operation. This is for material findings, so the message should carry the competitor, the change type, a short quote of what changed, and the source link. Let the user add a line of commentary before it sends.

Read back what we already know. Each lane also reads the Notion battlecard database with Query a Data Source, filtered to that competitor, and shows what we have already documented about them. This is the part that lets the user tell a genuinely new strategic move from a rehash of something we wrote up months ago, so surface the existing battlecard titles and dates next to the incoming cards rather than hiding them behind a click.

Weekly review mode. Build a dedicated mode that filters the board to changes published since a date the user chooses, defaulting to their last session, and then walks them card by card through everything unreviewed. In this mode each card is presented one at a time with the review state buttons, the document to Notion action, and the share to Slack action all immediately available, so a full weekly review is a single uninterrupted pass. Show progress through the queue and let the user exit and resume where they left off.

Nothing is written to Notion or Slack automatically. Every outbound action is triggered by the user from a card.

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 reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seatsPause marketing emails to escalated customers, then restore them