adlibrary.com Logoadlibrary.com
Share
Competitive Research,  Guides & Tutorials

n8n Competitor Ad Monitoring: 6 Workflows on the AdLibrary API

Build n8n competitor ad monitoring with 6 workflows on the AdLibrary API: daily digests, Slack alerts, Sheets logs, enrichment, and winners scans.

n8n competitor ad monitoring workflow dashboard showing multi-platform ad tracking automation

Set up n8n competitor ad monitoring once and the most tedious job in performance marketing disappears: checking what rivals launched while you slept. Six workflows, each built from a Schedule Trigger, an HTTP Request node, and a credit-based ad API, will watch every competitor on eleven ad platforms and report back on your terms. No service to write. No server to babysit beyond the n8n instance you already run.

TL;DR: Point n8n's HTTP Request node at the AdLibrary API with a Bearer key and you can build all six monitoring workflows in this guide: a daily new-ads digest, Slack alerts on fresh creative, a Google Sheets ad log, a multi-brand weekly rollup, AI enrichment on every new ad, and a monthly winners-scan report. A five-competitor setup costs roughly 240 credits a month, which fits comfortably inside the Business plan's 1000+ monthly credits.

This guide covers ad intelligence ingestion only: pulling competitor data in, filtering it, and routing it to the places your team already looks. If you want to automate your own campaign management through Meta's Marketing API, that's a different discipline with different nodes, and we covered it in n8n Meta ads automation recipes. The two pair well. This one tells you what competitors are doing. That one acts on your own account.

Why n8n Competitor Ad Monitoring Works So Well

Manual competitor checks fail for a boring reason: nobody actually does them. The ongoing monitoring playbook calls for diff-detection on a schedule, and a human with a browser tab is the worst scheduler ever invented. Week one you check daily. Week three it's Fridays. Week six the competitor has scaled a new hook for a month before anyone notices.

n8n fixes the scheduler problem. What it can't fix alone is the data problem. Meta's free Ad Library API is the originator of programmatic ad transparency and worth knowing, but its API returns political and social-issue ads outside the EU and UK, requires app review, and only ever covers Meta. Google's Ads Transparency Center is browse-first with no general write-your-own-workflow API. Meta's free API is fine for one platform. The moment you want TikTok, YouTube, or LinkedIn creative in the same query, you need something else.

That something is the AdLibrary API: one adl_ key, eleven platforms, and performance signals on every ad, including estimated ad spend, a 0–1000 heat score, impression data, and runtime. Impressions come back as ranges rather than exact counts, and spend is always an estimate, but for monitoring purposes a band is plenty. You're asking "did they launch, and is it getting pushed," and bands answer both. If you're still weighing data sources, the ad intelligence data explainer breaks down what each signal means and the competitor ad tracking platform comparison maps the vendor field.

One spec note before building. Every search costs 1 credit per page, the rate limit is 10 requests per minute with a 10,000-per-day cap per key, and failed searches refund automatically. Full parameter tables live in the adlibrary API documentation guide.

Step 0: Credentials Setup in n8n

Every n8n competitor ad monitoring workflow below starts from the same credential, so build it once.

First, get the key. API access requires a Business subscription. Generate a key in your dashboard, and copy it immediately because it's shown exactly once. You can hold up to 10 keys, which matters later: scope one key per client or per environment so you can rotate a single key without breaking every workflow.

In n8n, create the credential:

  1. Go to Credentials → Add credential → Header Auth.
  2. Name: Authorization
  3. Value: Bearer adl_your_key_here
  4. Save it as something like AdLibrary Prod.

Then in any HTTP Request node, set Authentication → Generic Credential Type → Header Auth and pick the credential. Test it with a free call that costs nothing:

Method: GET
URL: https://adlibrary.com/api/advertisers/search
Query parameters: q=gymshark, country=US

A JSON response with best_match and per-platform candidate IDs means auth works. This endpoint is also the resolver you'll use everywhere: it turns a brand name into a Meta page ID, a Google AR… advertiser ID, and a LinkedIn company ID in one free request. Resolve each competitor once, store the IDs, and never pay to rediscover them.

Workflow 1: The Daily New-Ads Digest

The workhorse. Every morning at 6am, pull yesterday's new ads for each competitor and email a digest before standup.

Nodes: Schedule Trigger → HTTP Request → Split Out → Remove Duplicates → Code → Gmail (or SMTP).

Schedule Trigger: cron 0 6 * * *.

HTTP Request: POST to https://adlibrary.com/api/search with a JSON body:

json
{
  "keyword": "gymshark",
  "metaPageId": "123456789",
  "appType": "3",
  "daysBack": 1,
  "sortField": "-first_seen",
  "pageSize": 60
}

metaPageId short-circuits the search to that one Meta page, so you get the brand's own ads instead of every ad mentioning the brand. daysBack: 1 limits the window to the last day, and sortField: "-first_seen" puts the newest creatives on top. One call, one credit.

Split Out: point it at the results field to turn the array into individual n8n items.

Remove Duplicates: set the operation to Remove Items Processed in Previous Executions and key it on ad_key. This is the entire dedupe layer. ad_key is the stable identifier across calls, n8n persists what it has seen between executions, and ads that ran yesterday and today only alert once.

Code node: format each surviving item into a digest line. The useful fields are advertiser_name, platform, message, days_count, impression, and landing_page_url. Sort by impression descending so the digest leads with whatever is already getting reach.

Run this per competitor (one HTTP Request node each, or a Loop Over Items node fed by a list). Five competitors means five credits a day. The same diff-detection logic in script form lives in the Meta ads cron job guide if you ever outgrow n8n, and the monitoring setup guide covers choosing which brands deserve a daily slot.

Workflow 2: Slack Alerts on New Competitor Creative

The digest is for record-keeping. Slack is for speed, because a new competitor hook is most useful inside the first day or two while you can still respond before ad fatigue economics shift in their favor.

Nodes: Schedule Trigger → HTTP Request (search) → Split Out → Remove Duplicates → IF → HTTP Request (Slack webhook).

Reuse Workflow 1's search and dedupe stages exactly. Two changes:

Schedule: run it two to four times a day rather than hourly. Hourly polling on five brands burns 120 credits a day for ads that mostly launch in batches. Cron 0 7,12,17 * * * catches launches within a working half-day at 15 credits per day for five brands.

IF node: gate on signal so the channel doesn't train people to ignore it. A sensible condition: impression above a threshold you tune, or days_count greater than 2, which means the ad survived the advertiser's own early kill window.

Slack: create an incoming webhook and POST a block with the creative preview:

json
{
  "text": "New competitor ad: {{ $json.advertiser_name }}",
  "blocks": [
    { "type": "section", "text": { "type": "mrkdwn",
      "text": "*{{ $json.advertiser_name }}* on {{ $json.platform }}\n{{ $json.message }}" } },
    { "type": "image", "image_url": "{{ $json.preview_img_url }}",
      "alt_text": "ad creative" }
  ]
}

The preview image in-channel is what makes this land. A creative strategist glances at the hook without clicking anything. If your team lives in Zapier or Make instead, the same shape ports directly: see the Zapier recipes and Make.com recipes for the equivalents.

Workflow 3: The Google Sheets Ad Log

Alerts are ephemeral. The Sheets log is your longitudinal record: every competitor ad ever seen, with first-seen and last-seen dates, so you can answer "when did they start pushing UGC?" months later. It's the cheapest possible creative intelligence database.

Nodes: Schedule Trigger → HTTP Request → Split Out → Google Sheets.

The trick is to skip n8n-side dedupe entirely and let Sheets handle it. In the Google Sheets node, choose the Append or Update Row operation and set ad_key as the matching column. New ads append. Known ads update in place, which quietly refreshes last_seen, days_count, and impression on every run, and that update is exactly what you want: when an ad's row keeps updating for 60 days, you're watching a proven winner in real time.

Suggested columns: ad_key, advertiser_name, platform, ads_type (1 image, 2 video, 3 carousel, 4 collection), message, first_seen, last_seen, days_count, impression, landing_page_url, preview_img_url.

Because the search body accepts the same filters as the app's unified search, you can run one log per format. A video-only log uses "adsType": ["2"]. Run it daily off the same search call as Workflow 1 by branching after Split Out, and the log costs zero additional credits.

Two analysis moves this log enables. Pivot on ads_type by month to catch format shifts. And feed days_count plus the impression band into the ad spend estimator to rough out what a competitor's committed budget looks like behind a long-running ad.

Workflow 4: Multi-Brand Weekly Rollup

Daily workflows answer "what's new." The weekly rollup answers "what's the pattern," across every brand you track, including the platforms a keyword search reaches less precisely.

This one uses saved advertisers instead of raw search. Save each competitor once, free, with all its platform IDs:

json
POST https://adlibrary.com/api/advertisers
{
  "name": "Gymshark",
  "domain": "gymshark.com",
  "meta_page_ids": ["123456789"],
  "google_advertiser_ids": ["AR01234567890123456789"],
  "linkedin_company_ids": ["1234567"]
}

A saved advertiser holds every account a brand runs, because one brand is rarely one account. Nike alone is Nike, Nike Football, Nike Run Club, and more. The curate endpoint then fans out across Meta, Google, and LinkedIn in parallel and returns merged, deduped ads.

Nodes: Schedule Trigger (Monday 7am) → HTTP Request (GET /api/advertisers, free) → Loop Over Items → HTTP Request (POST /api/advertisers/{{ $json.id }}/curate, empty body {}) → Code (aggregate) → Email.

Curate costs 1 credit per advertiser per 30-minute session, and paginating with the returned cursors within that session is free. Ten tracked brands cost ten credits a week for a complete cross-platform snapshot.

The aggregation Code node computes per brand: total ads seen, ads new since last week (diff the ad_key set against the Sheets log from Workflow 3), platform mix, and share of video. That last number, trended over a quarter, is the cheapest early-warning system for a competitor changing creative strategy. The automated competitor ad monitoring use case shows what the finished rollup looks like in practice.

n8n ad enrichment workflow nodes processing competitor ad data with metadata and performance scores

Workflow 5: Enrichment on Every New Ad

Detection tells you an ad exists. Enrichment tells you why it works. The AI ad enrichment endpoint runs a full teardown of one creative, with a scene-by-scene transcript, the strategic read on the funnel and audience, and the persuasion breakdown, and returns it as structured data your workflow can file.

Chain it to Workflow 2: after the IF node passes a high-signal new ad, add a second HTTP Request:

json
POST https://adlibrary.com/api/enrichment
{
  "ad": {
    "ad_key": "{{ $json.ad_key }}",
    "platform": "{{ $json.platform }}",
    "message": "{{ $json.message }}",
    "video_url": "{{ $json.video_url }}",
    "preview_img_url": "{{ $json.preview_img_url }}"
  }
}

The response carries enrichment.analysis, enrichment.summary, and enrichment.transcription, plus creditsUsed and your post-call balance. Write the summary into a new column on the Sheets log and post the analysis to a Slack thread under the original alert. Your competitor launches a video at 9am, and by 9:05 your team is reading a structured creative brief of its hook and offer architecture.

Three cost rules keep this workflow honest:

  • Text and video up to 180 seconds cost 1 credit. Longer video costs 1 plus 1 per additional 60 seconds, computed server-side from the actual media.
  • alreadyUnlocked: true means you've paid for this ad before and the call was free. Permanently.
  • Enrich only the winners. The IF gate from Workflow 2 is doing budget control as much as noise control. Enriching everything a competitor launches is how 50 credits vanish in a week.

This is the workflow where agentic setups go further. If you'd rather have an agent decide what's worth enriching, the Claude Code + adlibrary API workflows post covers that pattern, and you can wrap the same API in your own tooling per the MCP server build guide.

Workflow 6: The Monthly Winners-Scan Report

Everything so far watches the surface. The winners scan scores a competitor's entire ad portfolio and surfaces the creatives they've demonstrably committed budget to, with the evidence written out per ad.

Nodes: Schedule Trigger (1st of month) → HTTP Request (free page lookup) → Loop Over Items → HTTP Request (scan) → Wait → Code (report) → Email.

Always run the free lookup first:

GET https://adlibrary.com/api/winners/search-pages?q=gymshark&country=US

It returns candidate Meta pages with page_id and ad_count. Confirm you have the right page and that it actually has ads before committing real credits, because a valid-but-wrong page ID returns real results and charges you. Then:

json
POST https://adlibrary.com/api/winners/advertiser/123456789
{ "country": "US", "top_enrich": 50, "max_pages": 10 }

A scan costs a flat 10 credits, auto-refunded if it errors or finds no ads. Each result carries score.tier (high_confidence_winner, winner, or loser), a composite score, plain-language score.reasons like "Runtime 89 days, top 10% of this advertiser," and score.dna_diff, the concrete delta between the winner and the losing variants on the same landing page. That diff is the brief: it tells you what the winning execution did differently.

One operational constraint shapes the n8n graph. Scans are limited to one in flight per user, and a concurrent second scan returns 429 with Retry-After: 30. So the Loop Over Items node must run with batch size 1, followed by a Wait node of 60 seconds between brands. Five competitors, scanned sequentially on the 1st, cost 50 credits and produce the monthly report your competitor ad research retro is built on.

Error Handling That Survives Production

A monitoring system that silently dies is worse than none, because you believe it's watching. Four layers keep n8n competitor ad monitoring trustworthy in production.

Node-level retries. On every HTTP Request node, enable Retry On Fail with 2–3 tries and a wait of 5 seconds or more. This absorbs transient 500s. The API refunds the credit on failed searches, so a retry never double-charges you for nothing.

Respect 429s. The search endpoint allows 10 requests per minute per key. The multi-brand workflows are where you'll hit it, so insert a Wait node inside every Loop Over Items at 7–10 seconds per iteration. When a 429 does arrive it includes a Retry-After header. Honor it instead of hammering.

Treat 402 as a stop, never a retry. Insufficient credits is not transient. The response body tells you how many credits were required and your balance. Route 402s with an IF node on the status code (set the HTTP node to continue on error so you can branch) straight to an admin alert. Retrying a 402 on a timer just produces noise.

A global error workflow. Build one small workflow starting from the Error Trigger node that posts the failing workflow's name and error message to an ops channel, then set it as the error workflow on all six. While you're there, add a seventh micro-workflow: a daily free call to POST /api/credits that checks the balance and warns when it drops below your weekly burn rate. Budget alarms beat budget surprises.

Credit Budgets: What Six Workflows Actually Cost

Concrete n8n competitor ad monitoring math for a five-competitor setup, thirty days:

WorkflowScheduleCredits/month
1. Daily digest5 searches × 30 days150
2. Slack alertsshares Workflow 1's searches0
3. Sheets logbranches off the same call0
4. Weekly rollup5 curate sessions × 4 weeks20
5. Enrichment~20 gated new ads~20
6. Winners scans5 × 10 credits50
Total~240

The structural insight in that table: one search call can feed three workflows. Digest, Slack alert, and Sheets log all consume the same results array, so branch after Split Out rather than re-searching. There's no same-keyword discount for API keys, and every identical repeat search bills a fresh credit, so the dedupe belongs in your graph, not in the API.

At roughly 240 credits, this runs inside the Business plan (€329/mo, 1000+ credits, API access included) with most of the allowance left for ad-hoc research, deeper enrichment, or a second market. Scale the same math to fifteen competitors and you're near 700, still inside the plan. Subscription credits reset monthly without rollover, so an idle allowance is wasted allowance. Spend the surplus on enrichment depth.

Whether the whole apparatus pays for itself is a one-line calculation: if one detected competitor angle saves a single failed creative test, the break-even math on a month of monitoring closes immediately. Compare that to the free alternative honestly. Meta's API costs nothing and is the right answer when Meta political and EU transparency data is genuinely all you need, and the free API breakdown maps exactly where its ceiling sits.

Frequently Asked Questions

How many credits does n8n competitor ad monitoring use per month?

A five-competitor setup running all six workflows uses roughly 240 credits monthly: 150 for daily digest searches, 20 for weekly curate rollups, about 20 for gated enrichment, and 50 for monthly winners scans. Slack alerts and the Sheets log reuse the digest's search results at no extra cost. That fits inside the Business plan's 1000+ monthly credits with room for ad-hoc research.

Do these workflows require n8n cloud or self-hosted?

Either works identically. Every workflow uses core nodes only: Schedule Trigger, HTTP Request, Split Out, Remove Duplicates, IF, Code, and Wait, plus standard Slack and Google Sheets integrations. Self-hosted n8n has no execution-time pricing, which suits polling workflows, while n8n Cloud counts each scheduled run as an execution.

Can I monitor TikTok and YouTube competitor ads with the same n8n workflows?

Yes. The AdLibrary API searches eleven platforms, including Facebook, Instagram, TikTok, YouTube, Google, LinkedIn, Twitter, and Pinterest, through one endpoint. Add a platform filter like "platform": ["tiktok"] to the same search body. Keyword searches reach all platforms, while saved-advertiser curate fans out across Meta, Google, and LinkedIn.

How is this different from using Meta's free Ad Library API in n8n?

Meta's free API is built for transparency. It covers political and social-issue ads globally, with all ad types only for the EU and UK, requires app review plus tokens that expire every 60 days, and is Meta-only. The AdLibrary API is a paid upgrade for commercial research: every commercial ad, eleven platforms, spend estimates, heat scores, and AI teardowns through one non-expiring key.

What happens when a workflow runs out of credits mid-execution?

The API returns HTTP 402 with the required credits and your current balance in the body. A 402 is never transient, so retrying on a timer is pointless. Route it to an admin alert instead. Failed searches auto-refund their credit, and a daily free call to the credits endpoint warns you before the balance gets that low.

Ship Your First n8n Competitor Ad Monitoring Workflow Tonight

Don't build all six this week. Build Workflow 1. A Schedule Trigger, one HTTP Request node, Remove Duplicates keyed on ad_key, and an email takes under an hour including credential setup, and tomorrow at 6am you'll have the first digest no one on your team had to compile. Add the Slack branch when the digest proves itself, the Sheets log the week after, and the winners scan at month's end.

That incremental path is the real argument for n8n competitor ad monitoring: each workflow is small, separately testable, and reuses the last one's plumbing. The expensive part was never the automation. It was the competitive intelligence hours your team spent collecting screenshots that went stale by Friday.

API access ships with the Business plan at €329/mo with 1000+ credits, free integration help when you get stuck wiring a node, and prioritized feature requests if your workflow needs a parameter that doesn't exist yet. Get the key, build the digest, and let the monitoring run while you sleep.

Related Articles

Meta Marketing API integration software: build vs buy decision framework — split diagram showing raw SDK and code on one side versus managed SaaS dashboard on the other
Guides & Tutorials,  Platforms & Tools

Zapier Meta Ads Automation Recipes 2026

8 ready-to-use Zapier Meta ads automation recipes: lead sync, budget alerts, creative notifications, Slack reporting, CRM handoffs, and API escalation paths.

AdLibrary image
Competitive Research,  Guides & Tutorials

Competitor Ad Monitoring: Setup Guide

A practitioner setup guide for competitor ad monitoring — manual spot-checks, semi-automated tracking, alert cadences, and multi-platform coverage explained step by step.