Weekly competitor SEO digest in Slack

By General Input

Every Monday at 9am, get a short Slack message highlighting what changed in your competitors' SEO over the last week.

Integrations

  • Semrush
  • Slack Bot

Type

Agentic Task

Categories

  • Marketing

Build an agent workflow that posts a weekly competitor SEO digest to Slack every Monday at 9am, replacing the manual Monday ritual of opening Semrush, clicking through each competitor, and writing it up by hand.

Trigger: cron, every Monday at 9:00am in the user's timezone.

Configurable inputs (expose these as parameters at the top of the agent instructions):

1. competitor_domains: a list of competitor root domains to track, for example ["competitor-a.com", "competitor-b.com", "competitor-c.com"]. Default to a placeholder list the user is expected to edit.

2. database: the Semrush regional database to query. Default to "us". Common alternatives: "uk", "de", "fr", "ca", "au".

3. slack_channel: the Slack channel (name or ID) where the digest should be posted.

4. our_domain: the user's own domain, used to detect keywords competitors have just taken from us.

Each Monday, for every domain in competitor_domains, the agent should:

A. Call Semrush "Get Domain Organic Pages" against the configured database to fetch the competitor's top-ranking URLs (page URL, organic traffic share, number of keywords). Cap at the top 50 pages per domain to keep API unit spend reasonable.

B. Call Semrush "Get Domain Organic Search Keywords" to fetch keywords the competitor ranks for in the top 100, including position, previous position, search volume, and the URL that ranks. Cap at the top 200 keywords.

C. Call Semrush "Get Domain Paid Search Keywords" to fetch the keywords the competitor is currently bidding on in Google paid search, including position and traffic share. Cap at the top 100 keywords.

After collecting this week's data, load last week's snapshot from the agent's persistent memory (keyed by domain and database). If no prior snapshot exists, store this week's data as the baseline and post a short "baseline established" Slack message instead of a diff.

When a prior snapshot exists, diff this week against last week per competitor and identify meaningful changes such as: a new page in the top 10 that did not exist last week (likely a fresh pillar page), an organic keyword that climbed into the top 10 this week (especially if our_domain previously held that keyword, which signals a position we just lost), a paid search keyword the competitor started bidding on this week that they were not bidding on last week, and any large traffic share jump on an existing page.

Rank all detected changes by impact (search volume, traffic share, whether it is a take from our_domain, whether it is a brand-new investment). Pick the top three or four overall, across all competitors. The point is a tidy digest, not a data dump.

Compose a single Slack message that opens with a one-line summary ("3 meaningful moves from your competitors this week"), then lists each highlighted change as its own short bullet. Each bullet should name the competitor, describe what changed in plain English, and explain why it matters in one sentence. Use Slack mrkdwn formatting (*bold* for competitor names, <url|text> for links to the ranking page or keyword). End with a single italic footer noting the regional database and the snapshot date so the reader has context.

Send the message using the Slack "Send a Message" operation to the configured slack_channel. Then overwrite the stored snapshot with this week's data so next Monday's run can diff against it.

Handling: if Semrush returns "ERROR 50 :: NOTHING FOUND" for a competitor, treat it as an empty result and skip that competitor in the digest. If the API unit balance is exhausted, post a single Slack message noting that Semrush units ran out instead of failing silently.

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