Competitor LinkedIn ad watchlist with a permanent archive

By General Input

Browse every ad your competitors are running on LinkedIn, keep a permanent archive of the ones that stopped, and see what changed since your last visit.

Integrations

  • LinkedIn Ad Library
  • LinkedIn Ads
  • General Input Database

Type

App

Categories

  • Marketing

Build me a competitive creative desk for LinkedIn ads that I open every morning. The home view is a card grid of the ads my competitors are currently running. I keep a watchlist of competitor companies inside the app and can add or remove companies at any time. For each company on the watchlist, pull its currently running ads with the LinkedIn Ad Library Search Ad Library operation and render one card per ad showing the creative, the ad headline and body copy, the paid-for-by advertiser name, the impression range, the country breakdown, and the targeting metadata. The public Ad Library website does not surface most of that detail, so put the impressions, countries, and targeting directly on the card instead of hiding them behind a click.

Every time the app loads, write a snapshot of everything it saw into a General Input Database: one row per ad per sighting, with the ad identifier, the company, all of the metadata above, and a timestamp. This is the whole point of the app. LinkedIn removes an ad from the library the moment its campaign stops, so the library is a live snapshot and not an archive, and my database becomes the archive instead. Keep a first seen and last seen timestamp per ad so I can tell how long something has been running, and store the full creative text and metadata so an ad I captured stays readable long after LinkedIn drops it.

At the top of the home view, show a changed since your last visit strip. Compare the current sighting against the previous snapshot for the same watchlist and list two groups: newly launched ads, meaning the first time the app has ever seen them, and ads that have gone dark, meaning they were in the previous snapshot and are missing now. Store the last visit timestamp per user so the strip reflects what changed since I personally last opened the app, not since the last load by anyone on the team. Clicking an entry in the strip filters the grid down to that ad. Default the grid to ads first seen in the last 14 days, with easy controls to widen to 30 days, 90 days, or everything including ads that have stopped running.

Add a second view called Them versus Us that puts my own live creatives next to theirs. Use LinkedIn Ads to pull my ad account with Search Ad Accounts, my active campaigns with Search Campaigns, and my running creatives with Search Creatives, then pull impressions, clicks, click-through rate, and spend for each of my creatives with Get Ad Analytics. Lay my creatives out against the watchlist ads so I can compare the promise being made side by side. The question I am answering in this view is whether I am making the same claim as everyone else in my category and whether my version is working, so show my click-through rate and impressions on my own cards even though LinkedIn only gives impression ranges on theirs.

Every competitor ad card has a Tear this down button that kicks off a background agent. The agent reads the creative, headline, body copy, and targeting, looks up the earlier ads from the same company already stored in the database, and writes back a structured teardown: the hook, the proof or credibility claim, the call to action, and a note on what shifted in their positioning compared to their previous ads. Save the teardown into the database against that ad and render it on the card once it exists, so the whole team sees it later without re-running anything. Show a pending state on the card while the agent is working, and let me re-run a teardown when I want a fresh take.

Let me tag ads into named boards, for example pricing angles, good hooks, or a specific competitor's rebrand. Boards live in the database, an ad can sit on more than one board, and I can filter the grid to a single board. Boards must include archived ads that are no longer running, since those are often the most useful reference.

Use the General Input Database for the watchlist, the sighting snapshots, the boards and tags, the teardowns, and the per-user last visit timestamp. Handle a competitor with nothing currently running by showing their archived ads with a clear label rather than an empty state. Keep the grid fast to scan: creative first, headline second, metadata compact underneath.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesLiveKit live operations console for room moderationChat quality review board for LiveChat support leadsLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsA searchable RFP answer library your bid team drafts fromLinkedIn Ads budget pacing dashboard for every client accountSee which target accounts just started advertising on LinkedInChase the paperwork every new client and vendor still owesLinkedIn creator sourcing and vetting workbench for B2B