# Competitor war room board for weekly competitive reviews

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

- Workflow type: app
- Services: Ahrefs Firehose, Notion, Slack Bot
- Categories: Marketing, Product
- Published: 2026-08-14

## What it does

- One lane per competitor, with page changes arriving as cards that show the page title, the link, what text was added and removed, when it published, and an automatic change type: pricing, product or feature, blog or press, careers, legal or terms, or investor relations.
- Mark every card New, Reviewed, or Material. The board remembers who set what, and the header shows how many unreviewed changes each competitor has piled up since your last session.
- Push a card into your Notion battlecard database or share it to your competitive Slack channel in one click, with the competitor, change type, quoted change, source link, and date already filled in.
- Each lane also shows what you have already documented about that competitor, so you can tell a genuinely new move from a rehash of something you wrote up months ago.
- Weekly review mode filters to everything since a date you pick and walks you through the cards one at a time.

## What you'll need

- An Ahrefs Firehose account for watching competitor websites
- A Notion workspace with a battlecard database, shared with your Notion connection
- A Slack workspace where the bot can post to your competitive channel
- The list of competitor website addresses you want to track

## Prompt

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.

## How to customize

- Add or retire competitor lanes as your market shifts, and scope a lane to only the sections of a site you care about.
- Mute the change types that are pure noise for your team, such as careers or legal pages, and keep the ones that signal strategy.
- Point the share button at a different Slack channel, or send battlecards to a different Notion database.
- Change what counts as a material change and what gets written into each battlecard field.

## FAQ

### How is this different from a Slack alert channel for competitor changes?

An alert channel gives you a firehose you scroll back through and lose track of. This is a board with memory: every change stays put as a card, each card has a review state, and the header tells you what you have not looked at yet. Slack still gets the material findings, but it stops being the place you try to review from.

### How does the board decide what type of change something is?

It looks at the section of the website the page lives in and the category of the page itself, then sorts the change into pricing, product or feature, blog or press, careers, legal or terms, or investor relations. You can mute whole types once you know which ones never matter to you.

### Why does muting matter so much?

Because change rates differ enormously by page type. Industry research on competitor monitoring found the large majority of tracked pages change within six months, with investor relations, blog and press, and legal pages changing most of all. Those are mostly noise, so a flat feed buries the pricing and product moves you actually care about.

### Can several people on the team use the same board?

Yes. Review states are shared and record who set them, so nobody re-reviews a card a colleague already cleared, and the unreviewed counts in the header are tracked against your own last visit.

### Does anything get written to Notion or Slack automatically?

No. Nothing leaves the board unless you press the button on a card. You decide what becomes a battlecard and what gets shared to the competitive channel.

Use this prompt in General Input: https://www.generalinput.com/prompts/competitor-war-room-board-for-weekly-competitive-reviews