Monday Morning in Marketing
The weekly sweep of work that requires knowing the client well but follows a predictable pattern. Nobody wants to do it manually. Skipping it compounds badly. This skill does it in one run.
Invocation
Accepted forms:
- "Run Monday morning for Client A"
- "/monday Client B"
- "Monday briefing, all clients"
- "MMM for Clients A and B, skip the freshness scan"
Inputs:
- Client name(s) (required). If omitted, ask which client or offer "all active clients".
- Module overrides (optional). the operator can skip or isolate modules ("just the intel sweep").
- Fresh data uploads (optional). A Google Ads export CSV activates Module 7.
Hard rules
- Never use em dashes anywhere in output. Use periods, commas, or colons instead.
- Every module output must be scannable in under 30 seconds: short lines, bolded leads, no filler.
- Never pad a module with generic advice. If nothing changed, say "No change" in one line and move on. A short honest briefing beats a long inflated one.
- Flag uncertainty explicitly. "Could not verify" is a valid finding.
Workflow
Step 0: Load or create the client profile
- Search Notion for a page titled "[Client] Client Profile" (use notion-search).
- If found, fetch it and extract: industry/vertical, site URL, competitors (names + URLs), messaging house doc link, active channels, current workstreams, key people, known open loops.
- If NOT found: create one from
references/client-profile-template.md via notion-create-pages, pre-fill everything already known from conversation context and memory, then tell the operator which fields are blank and ask their to fill them (or answer inline). Do not block the run: execute whichever modules have enough context and mark the rest "Skipped, profile incomplete".
- If the profile is stale (workstreams clearly outdated based on conversation), note it in the briefing footer and suggest updates. Update the profile only with the operator's confirmation.
Step 1: Run the modules
Run modules in this order. Core modules (1 to 4) always run. Conditional modules (5 to 7) run only when their inputs exist; otherwise emit a one-line skip note with what would activate them.
Module 1: Competitive intel sweep (core)
For each competitor in the profile (cap at 5, prioritize by threat level if more):
- Web search + fetch their site: homepage messaging, pricing page, product/feature announcements, new content.
- Check Meta Ad Library (facebook.com/ads/library) and LinkedIn ad library via web search for active ads: new creative themes, offers, formats.
- Search for news: funding, launches, hires, partnerships in the last 7 days.
Output per competitor: What changed / What it probably means / Respond or ignore. If nothing changed: one line, "No visible change."
Module 2: Week-ahead calendar prep (core)
- Pull this week's events from Google Calendar (search tools first via tool_search).
- For each client-relevant meeting: cross-reference Notion for prior notes on the same people or project, list what was promised or left open last time.
- Output: table of meetings with a one-line prep note each, plus a "needs real prep" flag for anything high-stakes (pitches, deliverable reviews, new prospects).
If Calendar is unavailable or empty, skip with a note.
Module 3: Industry pulse, last 7 days (core)
- Web search the client's vertical for the past week: trends, platform changes (Meta, Google, TikTok, LinkedIn), notable campaigns, discourse.
- Intersect with the client's active workstreams: only include items that touch something the client is actually doing or should be doing.
- Output: 3 to 5 pulse items max, each with "Why it matters for [client]" in one line. Flag any item that doubles as a LinkedIn or newsletter topic for the operator with a 🖊 marker.
Module 4: Open loops audit (core)
- From the profile's known open loops, conversation memory, and (if connected) recent Gmail threads and Notion tasks: list blocked items, pending assets, unanswered threads, promises made.
- For each loop: What's blocked / Who owns the next move / Suggested unblock action.
- Anything blocked more than 2 weeks gets an ⚠️ escalation flag.
Module 5: Content/site freshness scan (conditional: needs site URL)
- Fetch the client's key pages (homepage, pricing, FAQ, top blog posts if listed in profile).
- Scan for: outdated stats or dates, broken links (spot-check outbound links), FAQ gaps versus current product state, claims that contradict current positioning.
- Output: prioritized fix list, effort-tagged (quick fix / needs owner / needs rewrite). Cap at 10 items.
Run this module in full at most every other week per client; on off weeks, output "Skipped, ran [date]" unless the operator asks.
Fallback: if the site cannot be fetched directly, web search the domain and fetch the result links instead. If the site does not appear in search results at all, log that as a visibility finding rather than failing silently.
Module 6: Copy consistency check (conditional: needs messaging doc + queued copy)
- Requires two inputs: the messaging house doc (linked in profile) and copy queued to launch this week (the operator pastes it, uploads it, or points to a Notion page).
- Check every piece against the messaging house: voice, claims, terminology, offer framing, banned phrases.
- Output per piece: Pass / Flag with the specific line and the fix. No vague "consider tightening" notes; quote the problem, propose the replacement.
Module 7: Performance drift handoff (conditional: needs fresh ads data)
- Activates when the operator uploads a Google Ads export or mentions fresh performance data.
- Do NOT duplicate analysis here. Read and follow the
account-health-diagnostics skill (Drift Scan mode) and run it on the data.
- Output: the diagnostics summary embedded as this module's section, with anything requiring a decision promoted to Decisions Needed.
Step 2: Assemble and publish the briefing
- Build the briefing using
references/briefing-template.md.
- Decisions Needed goes first. Pull every item across all modules that needs the operator's call: respond-to-competitor decisions, escalated open loops, copy failures, performance actions. Number them. If empty, say "Nothing needs a decision this week" (this is a valid and good outcome).
- Publish as a Notion page titled "[Client] Monday Briefing, [date]", nested under the client profile page (or a "Monday Briefings" section if one exists).
- In chat, give a 5-line-max summary: number of decisions needed, the single most important finding, link to the Notion page. Do not restate the whole briefing in chat.
Multi-client mode
When run for multiple clients: execute the full workflow per client sequentially, publish one Notion page per client, then give ONE combined chat summary ranking clients by urgency (most decisions needed first).
Failure and degradation behavior
- A failed tool call never kills the run. Mark that module "Could not complete: [reason]" and continue.
- If Notion is unavailable, deliver the briefing as a markdown file instead and say so.
- If web search returns thin results for a niche competitor, say "Low signal" rather than inventing findings.
References
references/client-profile-template.md: the Notion client profile structure. Read when creating a new profile (Step 0.3).
references/briefing-template.md: the Monday Briefing page structure. Read at Step 2 before assembling output.
1---2name: monday-morning-marketing3description: the operator's weekly client sweep. Runs the boring-but-compounding Monday work for any client in any industry through seven modules: competitive intel sweep, week-ahead calendar prep, industry pulse, open loops audit, content/site freshness scan, copy consistency check, and performance drift handoff. Reads client context from a Notion client profile page (creates one if missing) and publishes a Monday Briefing back to Notion with a Decisions Needed section on top. Trigger whenever the operator says "run Monday morning", "Monday briefing", "MMM", "/monday", "weekly sweep", "Monday morning in marketing", "start my week", "what changed for [client] this week", or asks for a weekly client rundown, competitive check-in, or week-ahead prep for any client (any active client). Also trigger on Mondays when they asks some variant of "catch me up on [client]". Can run for one client, a named subset, or all active clients.4---56# Monday Morning in Marketing78The weekly sweep of work that requires knowing the client well but follows a predictable pattern. Nobody wants to do it manually. Skipping it compounds badly. This skill does it in one run.910## Invocation1112Accepted forms:13- "Run Monday morning for Client A"14- "/monday Client B"15- "Monday briefing, all clients"16- "MMM for Clients A and B, skip the freshness scan"1718Inputs:19- **Client name(s)** (required). If omitted, ask which client or offer "all active clients".20- **Module overrides** (optional). the operator can skip or isolate modules ("just the intel sweep").21- **Fresh data uploads** (optional). A Google Ads export CSV activates Module 7.2223## Hard rules2425- **Never use em dashes anywhere in output.** Use periods, commas, or colons instead.26- Every module output must be scannable in under 30 seconds: short lines, bolded leads, no filler.27- Never pad a module with generic advice. If nothing changed, say "No change" in one line and move on. A short honest briefing beats a long inflated one.28- Flag uncertainty explicitly. "Could not verify" is a valid finding.2930## Workflow3132### Step 0: Load or create the client profile33341. Search Notion for a page titled "[Client] Client Profile" (use notion-search).352. If found, fetch it and extract: industry/vertical, site URL, competitors (names + URLs), messaging house doc link, active channels, current workstreams, key people, known open loops.363. If NOT found: create one from `references/client-profile-template.md` via notion-create-pages, pre-fill everything already known from conversation context and memory, then tell the operator which fields are blank and ask their to fill them (or answer inline). Do not block the run: execute whichever modules have enough context and mark the rest "Skipped, profile incomplete".374. If the profile is stale (workstreams clearly outdated based on conversation), note it in the briefing footer and suggest updates. Update the profile only with the operator's confirmation.3839### Step 1: Run the modules4041Run modules in this order. Core modules (1 to 4) always run. Conditional modules (5 to 7) run only when their inputs exist; otherwise emit a one-line skip note with what would activate them.4243#### Module 1: Competitive intel sweep (core)4445For each competitor in the profile (cap at 5, prioritize by threat level if more):461. Web search + fetch their site: homepage messaging, pricing page, product/feature announcements, new content.472. Check Meta Ad Library (facebook.com/ads/library) and LinkedIn ad library via web search for active ads: new creative themes, offers, formats.483. Search for news: funding, launches, hires, partnerships in the last 7 days.4950Output per competitor: **What changed / What it probably means / Respond or ignore**. If nothing changed: one line, "No visible change."5152#### Module 2: Week-ahead calendar prep (core)53541. Pull this week's events from Google Calendar (search tools first via tool_search).552. For each client-relevant meeting: cross-reference Notion for prior notes on the same people or project, list what was promised or left open last time.563. Output: table of meetings with a one-line prep note each, plus a "needs real prep" flag for anything high-stakes (pitches, deliverable reviews, new prospects).5758If Calendar is unavailable or empty, skip with a note.5960#### Module 3: Industry pulse, last 7 days (core)61621. Web search the client's vertical for the past week: trends, platform changes (Meta, Google, TikTok, LinkedIn), notable campaigns, discourse.632. Intersect with the client's active workstreams: only include items that touch something the client is actually doing or should be doing.643. Output: 3 to 5 pulse items max, each with "Why it matters for [client]" in one line. Flag any item that doubles as a LinkedIn or newsletter topic for the operator with a 🖊 marker.6566#### Module 4: Open loops audit (core)67681. From the profile's known open loops, conversation memory, and (if connected) recent Gmail threads and Notion tasks: list blocked items, pending assets, unanswered threads, promises made.692. For each loop: **What's blocked / Who owns the next move / Suggested unblock action**.703. Anything blocked more than 2 weeks gets an ⚠️ escalation flag.7172#### Module 5: Content/site freshness scan (conditional: needs site URL)73741. Fetch the client's key pages (homepage, pricing, FAQ, top blog posts if listed in profile).752. Scan for: outdated stats or dates, broken links (spot-check outbound links), FAQ gaps versus current product state, claims that contradict current positioning.763. Output: prioritized fix list, effort-tagged (quick fix / needs owner / needs rewrite). Cap at 10 items.7778Run this module in full at most every other week per client; on off weeks, output "Skipped, ran [date]" unless the operator asks.7980Fallback: if the site cannot be fetched directly, web search the domain and fetch the result links instead. If the site does not appear in search results at all, log that as a visibility finding rather than failing silently.8182#### Module 6: Copy consistency check (conditional: needs messaging doc + queued copy)83841. Requires two inputs: the messaging house doc (linked in profile) and copy queued to launch this week (the operator pastes it, uploads it, or points to a Notion page).852. Check every piece against the messaging house: voice, claims, terminology, offer framing, banned phrases.863. Output per piece: **Pass / Flag** with the specific line and the fix. No vague "consider tightening" notes; quote the problem, propose the replacement.8788#### Module 7: Performance drift handoff (conditional: needs fresh ads data)89901. Activates when the operator uploads a Google Ads export or mentions fresh performance data.912. Do NOT duplicate analysis here. Read and follow the `account-health-diagnostics` skill (Drift Scan mode) and run it on the data.923. Output: the diagnostics summary embedded as this module's section, with anything requiring a decision promoted to Decisions Needed.9394### Step 2: Assemble and publish the briefing95961. Build the briefing using `references/briefing-template.md`.972. **Decisions Needed goes first.** Pull every item across all modules that needs the operator's call: respond-to-competitor decisions, escalated open loops, copy failures, performance actions. Number them. If empty, say "Nothing needs a decision this week" (this is a valid and good outcome).983. Publish as a Notion page titled "[Client] Monday Briefing, [date]", nested under the client profile page (or a "Monday Briefings" section if one exists).994. In chat, give a 5-line-max summary: number of decisions needed, the single most important finding, link to the Notion page. Do not restate the whole briefing in chat.100101### Multi-client mode102103When run for multiple clients: execute the full workflow per client sequentially, publish one Notion page per client, then give ONE combined chat summary ranking clients by urgency (most decisions needed first).104105## Failure and degradation behavior106107- A failed tool call never kills the run. Mark that module "Could not complete: [reason]" and continue.108- If Notion is unavailable, deliver the briefing as a markdown file instead and say so.109- If web search returns thin results for a niche competitor, say "Low signal" rather than inventing findings.110111## References112113- `references/client-profile-template.md`: the Notion client profile structure. Read when creating a new profile (Step 0.3).114- `references/briefing-template.md`: the Monday Briefing page structure. Read at Step 2 before assembling output.