DEV Community

Zain Khan
Zain Khan

Posted on

The Messaging Delta Tracker: Your Competitor Changed Their Ad Strategy Last Week. Did You Notice?

Competitors don't announce strategy shifts. They just start running different ads.

A new headline here. A dropped value prop there. Suddenly they're talking to "enterprise teams" instead of "small businesses," or leading with a price point they never mentioned before. By the time it's obvious enough to notice by eye, it's been true for weeks.

This build closes that gap. It's an n8n workflow that quietly watches a list of competitors every Monday, pulls their live ads, and asks an AI agent one blunt question: what changed, and should anyone care? Grab the full workflow JSON here and follow along.

It runs entirely on n8n Cloud, no local install, no docker. Sign in, import the workflow, plug in your credentials, and it's live.

The Solution
At the center of this workflow is Adyntel, an ad intelligence node that fetches live ad data from Meta, Google, and LinkedIn using nothing but a company's domain. That alone is useful. The interesting part is what happens next.

Every week, the workflow saves a snapshot of a competitor's ad copy. The following week, it pulls last week's snapshot back out and hands both weeks, old and new, to an AI agent trained to think like a competitive intelligence analyst. It doesn't just list differences; it interprets them. Did the angle shift from features to social proof? Did a new audience segment show up? Is this a minor tweak, or does it smell like something bigger — a repositioning, a new product, a fundraising push?

The agent scores its own answer with an urgency rating. Low and Medium urgency shifts get logged quietly for the record. High urgency shifts get pushed straight to Slack, because that's the kind of thing you want to know about before your next planning meeting, not after.

What We'll Build

Trigger: A weekly schedule fires every Monday at 9 AM — no one has to remember to run this.
Load: Pull competitors marked "Pending" from a Google Sheet.
Collect: Fetch this week's live ads for each competitor across Meta, Google, and LinkedIn.
Normalize: Extract clean ad titles and body copy, deduplicated, from three very differently shaped API responses.
Recall: Pull last week's snapshot of the same competitor's ads back out of storage.
Compare: Work out exactly which ad titles are new this week and which ones quietly disappeared.
Interpret: Hand both weeks to an AI agent that names the strategic shift, not just the text difference.
Store: Save this week's snapshot and the AI's delta analysis to Google Sheets.
Escalate: If the urgency rating comes back High, fire a Slack alert immediately.

Set Up the Weekly Trigger and Competitor List

Add a Schedule Trigger node set to the cron expression below, every Monday, 9 AM, no manual kickoff required.

0 9 * * 1
Enter fullscreen mode Exit fullscreen mode

Right after it, a Google Sheets node reads a competitors tab, filtered to rows where status equals Pending. That filter matters: it's what lets you pause a competitor without deleting their row, just by flipping the status. Each row only needs a domain and a competitor_name, everything downstream keys off the domain.

A Split In Batches node then loops through competitors one at a time, so a slow API response from one competitor never blocks the rest of the list.

All three connect to the same Adyntel credential, so you only need to authenticate once. A Merge node (combine by position) brings all three results back together into a single stream before the real work starts.

From there, a Code node called Extract This Week's Copy does the unglamorous part: Meta, Google, and LinkedIn all shape their ad payloads differently, and this node normalizes all three into one consistent structure, platform, ad title, ad body, while deduplicating anything that shows up twice. If a competitor genuinely has no active ads that week, it doesn't error out; it returns a sentinel row so the rest of the workflow can handle "gone dark" as a real outcome instead of a crash.

Set Up the Comparison and the AI Delta Analysis
This is where last week meets this week.
A Google Sheets node reads the previous snapshot for the same domain from an ad_copy_snapshots tab, filtered by domain and the prior week's date. A Code node called Build Comparison Context lines the two weeks up side by side and works out exactly which ad titles are new and which ones dropped off, plain set comparison, no AI needed yet.
Then it gets handed to the model.

Get an API key from OpenAI and add it under Credentials > OpenAI in n8n.
Add an AI Agent node (with an OpenAI Chat Model attached) named AI Agent — Detect Messaging Delta.
Its system message positions it as a competitive intelligence analyst, told specifically to watch for angle changes (features vs. benefits vs. social proof vs. urgency), audience shifts, new product or feature names, value proposition changes, and tone shifts.
The prompt passes in both weeks of ad copy plus the new/dropped title lists, and asks for a strict JSON response:

{
  "angle_shift": "one sentence describing any pivot in core message angle",
  "new_audiences": "comma-separated audience segments targeted by new ads",
  "new_value_props": "comma-separated new value propositions or features",
  "urgency_signal": "High or Medium or Low",
  "urgency_reason": "one sentence explaining the urgency rating",
  "delta_summary": "2-3 sentence plain-English summary of what changed",
  "new_ad_titles": "semicolon-separated list of new ad titles",
  "dropped_ad_titles": "semicolon-separated list of dropped ad titles"
}
Enter fullscreen mode Exit fullscreen mode

A Parse Delta Result Code node handles the model's response, including the messy cases where it doesn't return perfectly clean JSON, falling back to regex extraction and keyword-based urgency detection if needed, so one oddly formatted response doesn't take down the run.

Set Up Storage and the Slack Escalation

Two Google Sheets nodes handle the record-keeping: Prepare Snapshot Rows / Append to Snapshots logs this week's raw ad copy for next week's comparison, and a second append step logs the AI's delta analysis, angle shift, urgency, reasoning, and summary, as its own row.

An If node (Urgency = High?) checks the AI's rating. Anything Medium or Low loops quietly back to the next competitor. Anything High routes to Format Slack Alert, which builds a message with a color-coded emoji (🔴 High, 🟡 Medium, 🟢 Low), the competitor name, what changed, the new angle, and the specific ads added or dropped — then a Slack node sends it to whichever channel your team actually watches.

Either path loops back to Loop Over Competitors, and the cycle continues until every competitor on the list has been checked for the week.

Trigger the Workflow
Host it in n8n Cloud and let the Monday schedule handle itself, or click "Test Workflow" to run it on demand the first time. It'll pull your competitor list, gather ads from three platforms, compare this week against last, and, if anything crosses the urgency threshold, land in Slack before you've had a chance to check LinkedIn yourself.

Conclusion
Most competitive intelligence tools tell you that something changed. This one tries to tell you what it means, and only interrupts your day when it actually matters. Point it at a longer competitor list, tighten the urgency criteria to match what your team cares about, or swap Slack for email, the pattern holds either way. Build the version that watches what you can't afford to miss.

Top comments (0)