Quick Overview
This scheduled workflow pulls competitor domains from Google Sheets, collects their ads from Meta, Google, and LinkedIn via Adyntel, compares this week’s ad copy to last week’s snapshot, uses OpenAI to summarize messaging changes, logs results back to Google Sheets, and alerts Slack on high-urgency shifts.
How it works
- Runs on a schedule and reads competitor rows marked as Pending from a Google Sheets spreadsheet.
- For each competitor domain, fetches current ads from Meta, Google Ads, and LinkedIn Ads using the Adyntel API and combines the results.
- Extracts and deduplicates this week’s ad titles and body copy, then aggregates them into a single text context per competitor.
- Loads last week’s stored ad snapshot for the same domain from Google Sheets and computes new and dropped ad titles.
- If no ads are found this week, writes a “no active ads” delta entry to the messaging_deltas sheet in Google Sheets.
- If ads are found, sends last-week vs this-week context to OpenAI to detect messaging deltas, then parses and appends the structured delta results to the messaging_deltas sheet.
- Appends this week’s ad rows to the ad_copy_snapshots sheet, marks the competitor row as Done in the competitors sheet, and posts a Slack alert when the delta urgency is High.
Setup
- Connect credentials for Google Sheets, Adyntel, OpenAI, and Slack in n8n.
- Update the Google Sheets document and tab names/IDs for competitors, ad_copy_snapshots, and messaging_deltas, and ensure the columns used in the workflow (domain, competitor_name, status, week_of, ad_title, ad_body, platform, captured_at, row_number) exist.
- Add competitor domains to the competitors sheet and set status to Pending (with a valid row_number) so they are picked up for processing.
- Configure the schedule interval and set the Slack channel/target in the Slack posting node used for high-urgency alerts.