Daily LinkedIn competitor ad swipe file in Airtable
Each morning, pull every new LinkedIn ad your competitors launched in the last 24 hours into a clean, filterable Airtable swipe file.
Every morning at 7am, build and maintain a competitor ad swipe file in Airtable. This should be a deterministic code workflow with no reasoning involved, just a closed pipeline: list, diff, insert.
Trigger: cron, daily at 7am in the user's timezone.
Inputs the user configures once: (1) a list of competitor advertiser URNs to track on LinkedIn, (2) the Airtable base ID and table ID for the swipe file, (3) the name of the field in that table that stores the LinkedIn Ad URN (used as the dedupe key), and (4) the LinkedIn country list to scope the search to (default to US).
For each advertiser URN in the configured list, call LinkedIn Ad Library's Search Ad Library operation, filtered to ads first seen in the last 24 hours and to the configured countries. Paginate through nextPageToken until exhausted.
Before inserting any ad, call Airtable's List Records on the swipe file table with a filterByFormula that matches the ad's URN against the configured Ad URN field. If a record already exists, skip it. This is the dedupe step and it must happen for every ad before any Create Records call.
For each genuinely new ad, call Airtable's Create Records with this fixed schema: Advertiser, Ad URN, Headline, Body, CTA, Landing URL, Country, Date First Seen, Ad Format, Impressions Range. Batch up to 10 inserts per Create Records call to respect Airtable's rate limit of 5 requests per second per base.
Handle the obvious failure modes: skip advertisers that return 0 ads, log and continue on any single-ad failure rather than aborting the run, and back off on 429 responses from either API. The run should be idempotent. If it crashes halfway through and reruns later the same day, it must not insert duplicates.
The point of this workflow is that a designer or strategist opens Airtable on Friday with a full week of new competitor creative already organized and filterable. No notifications, no AI commentary, just a clean swipe file that maintains itself.
Additional information
What does this prompt do?
- Checks LinkedIn's Ad Library every morning at 7am for new ads from each competitor on your tracked list.
- Skips any ad you've already saved by matching on its unique LinkedIn ID, so the swipe file never duplicates.
- Adds genuinely new ads as clean Airtable rows with advertiser, headline, body, call to action, landing URL, country, format, and impressions range.
- By Friday, your strategists and designers open Airtable to a full week of competitor creative, already organized and filterable.
What do I need to use this?
- A LinkedIn account connected to your General Input workspace.
- An Airtable base with a table for your swipe file (fields for advertiser, ad ID, headline, body, CTA, landing URL, country, date first seen, format, and impressions range).
- A list of competitor LinkedIn Pages you want to track.
How can I customize it?
- Change the time of day it runs, or have it run more than once a day.
- Add or remove competitors from your tracked list whenever your market shifts.
- Filter by country, ad format, or impressions range so a regional team only sees ads that apply to them.
- Add custom Airtable fields like Theme, Persona, or Reviewed-by to score and tag ads inside the same base.
Frequently asked questions
Does this cover ads from outside LinkedIn?
How far back does LinkedIn's Ad Library go?
What stops the same ad from being added twice?
Can I track competitors across multiple Airtable bases?
Will I get a Slack or email notification when new ads land?
Stop screenshotting competitor ads into a Slack channel.
Connect LinkedIn and Airtable once, and your competitor swipe file rebuilds itself every morning at 7am.