Use LinkedIn’s official library: find competitor ads and build a research brief
Find public competitor ads, preserve the exact source and export a brief without inventing targeting or performance.
LinkedIn’s library helps you find ads by company or advertiser, payer, keyword, country and date. The harder part starts after you find them. You need to preserve the exact search, keep each ad tied to its public record and separate what you saw from what you are guessing.
This guide walks you through that job. You can also use the browser ledger, download the completed HubSpot example and copy a standalone prompt for turning your records into a short research brief.
What the LinkedIn Ad Library can tell you
A standard public detail can show the ad preview, format, advertiser and payer. The search result can also show the visible copy, headline and format. That gives you enough evidence to compare messages, offers, calls to action and creative structures.
For ads targeted to the European Union, LinkedIn can show additional transparency information. This can include the main targeting parameters, whether a parameter was used for inclusion or exclusion, estimated impressions, country percentages and the dates the ad ran. The country percentages are rounded. Some impressions can also appear outside the targeted countries.
These extra fields are conditional. If one EU-targeted record shows an estimated impression range, record it with that ad. Do not assume every ad has the same fields.
The public record does not tell you clicks, leads, revenue, ROAS or profit. A repeated ad is a repeated ad. A long-running ad is a long-running ad. Neither one proves that the campaign worked.
Restricted ads need another label. LinkedIn says a restricted record may omit the preview, advertiser or payer. Record restricted_not_disclosed or exclude the ad from your comparison with a reason. Repeating the search will not make a deliberately withheld field appear.
Start with one research question
Write one question before you search. This prevents the session from turning into a folder of unrelated screenshots.
A good question names the advertiser set and the decision you want to make:
- Which messages do CRM companies use when speaking to teams that have outgrown their current system?
- Which offer does each competitor put behind a single-image ad?
- How do three demand generation agencies frame the cost of a sales pipeline problem?
- Which format does a named competitor use for product education versus a direct demo offer?
“What ads are my competitors running?” is too broad. You cannot compare ten unrelated ads and get a defensible answer.
For the worked example, the question is: Which messages and formats is HubSpot running for buyers who may be outgrowing a CRM?
Run a search you can reproduce
Choose one starting route:
- Use Company or advertiser when you already know the company.
- Use Payer when you want to see ads paid for by a parent company, agency or another named payer.
- Use Keyword when you want to find previously unknown advertisers talking about the same problem.
Then record the exact query, country, date range and any additional filter. Click Search after changing the filters. The result count can change, so keep it only as evidence of that search session.
Our worked fixture used:
| Field | Recorded value |
|---|---|
| Research question | Which messages and formats is HubSpot running for buyers who may be outgrowing a CRM? |
| Search type | Company or advertiser |
| Search value | HubSpot |
| Date | Last 30 days |
| Country | Not set in the preserved search URL |
| Sort | Newest to oldest |
| Capture date | October 6, 2026 |
| Result count at capture | 577 |
| Search URL | Open the exact public search |
That last distinction matters. A browser session can display a country selection that does not survive in the copied URL or handoff. If you cannot preserve the filter, call it Unknown and run the search again before comparing ads.
Save the public identity before analyzing the creative
Open View details for each ad you want to compare. Save these fields first:
- Capture date
- Exact search URL and filters
- Advertiser
- Payer, when shown
- Format
- Numeric ad ID
- Canonical public detail URL
The numeric ID should match the last part of the detail URL. If the record says ad 1566665103, its source must end in /detail/1566665103. Hold the record when those values conflict.
Now record the visible evidence: body copy, headline, call to action, creative structure, explicit offer and destination if you opened it. “No explicit offer visible” is a complete observation. A blank field means you did not finish the capture.
Do not paste a source link and ask an AI tool to inspect it later. The public record can change or disappear. LinkedIn says ads remain in the library for one year after their last impression, so your capture date and recorded fields are part of the evidence.
Worked example: four HubSpot records
The four records below came from the same advertiser search and date scope. They are public evidence fixtures, not performance examples.
1. Growth creates CRM friction
Payer: HubSpot, Inc.
Visible message: “Outgrowing your CRM?” introduces a scaling problem, then points to unified data and more automation with AI.
Headline: “CRM slowing you down?”
Visible action: Attend. The event or destination was not opened in this fixture.
Unknown: Targeting, spend, clicks, leads, revenue and performance.
The ad names a familiar growth-stage problem before introducing the product. The evidence supports that message observation. It does not support the claim that growing companies responded to it.
2. Connect lead capture to revenue
Payer: HubSpot, Inc.
Visible message: The copy contrasts capturing leads with connecting those leads to revenue.
Headline: “Can Your CRM Do This?”
Visible action: Attend. The event or destination was not opened in this fixture.
Unknown: Targeting, spend, clicks, leads, revenue and performance.
This ad uses a measurement problem instead of a general growth problem. Both image ads lead with CRM friction, but the second one narrows the friction to full-funnel visibility.
3. Keep campaigns and pipeline moving
Payer: HubSpot, Inc.
Visible message: HubSpot keeps campaigns running, the pipeline moving and goals within reach.
Headline: “Business growth that’s not an uphill battle.”
Visible action: Learn more. The destination was not opened in this fixture.
Unknown: Targeting, spend, clicks, leads, revenue and performance.
This message broadens the problem from CRM choice to operating continuity across marketing and sales.
4. Unify data before the workday starts
Payer: HubSpot, Inc.
Visible message: The copy connects unified customer data and history to faster campaign work and team alignment.
Headline: “Get ready for your 9am at 8.56.”
Visible action: Learn more. The destination was not opened in this fixture.
Unknown: Targeting, spend, clicks, leads, revenue and performance.
The headline gives the operating promise a specific moment. That is a creative observation. The public record does not show whether anyone believed it or acted on it.
Turn the records into one decision
Compare the same fields across every record. In this example:
- All four messages connect the product to growth-stage operating friction.
- The two image ads use Attend. The two video ads use Learn more.
- The image ads focus on CRM capability and revenue visibility.
- The video ads broaden the message to campaign speed, pipeline movement and team alignment.
- The actual destinations behind the two Attend actions were not captured, so the event offer is still incomplete.
There is no public winner to copy. A defensible next action is: search one direct competitor with the same date scope, capture four comparable detail records and check whether that competitor also separates event-led image ads from broader product-led video ads.
If the second advertiser does something different, you have a message or format hypothesis worth testing in your own account. Your own campaign results decide whether the test worked.
Watch the task in the public interface
Paid Media Pros recorded a walkthrough of the LinkedIn Ad Library. The interface shown is from 2023, so use LinkedIn's current help pages for platform rules. The video is still helpful for seeing the search and detail sequence.
A dated interface walkthrough of advertiser, keyword, country and date controls plus retention and EU field differences.
From 1:18 to 3:15, the presenter shows the advertiser, keyword, country and date controls, then explains public access, retention and the extra EU transparency fields.
The presenter applies a country filter, searches again and reads a real carousel detail.
From 4:48 to 6:25, the presenter applies a country filter, clicks Search again, opens View details and reads the format, advertiser and payer before examining a carousel.
An EU-targeted example shows additional dates, estimated impressions and targeting parameters.
From 8:50 to 10:06, an EU-targeted example shows the extra dates, estimated impression information and targeting parameters, followed by preset and custom date ranges.
Use the research ledger
The browser ledger keeps the query, filters, capture date and each public ad identity attached to your observations. It gives each record a clear next state:
- Capture required: the question, search scope, capture date or public source identity is missing.
- Facts recorded: the source is complete, but a message, offer or comparison field is unfinished.
- Ready to compare: one record is complete and needs a comparable second record.
- Research brief ready: at least two complete records answer the same question and preserve their differences and Unknowns.
- Repair required: the URL and ad ID conflict, the records use different scopes or an unsupported performance or targeting claim is labeled as observed.
The evaluator checks the record you supplied. It does not fetch the ad and verify that every sentence appears on the page. Source review remains your job. A green state means the handoff is structurally ready, not that a robot independently confirmed the creative.
Export the same record as JSON, CSV or Markdown. Reimport the JSON before you hand it to someone else. Long URLs, Unicode copy, Unknown values and source identity should survive unchanged.
Copy the standalone research prompt
The downloadable prompt works in a fresh chat. It includes the field contract, state rules and output shape. Supply the ledger record with it.
With complete comparable records, the prompt returns:
- The preserved research question and scope.
- A source table with every ad ID and public URL.
- Observed repeated patterns.
- Differences and exceptions.
- Explicit Unknowns.
- One proposed test tied to the supplied evidence.
- The missing source needed to judge that test later.
With missing or contradictory evidence, the prompt asks for the exact field or conflict. It must not claim that it opened a link, infer campaign performance or silently change an ad ID.
Read and copy the complete prompt
You are reviewing a LinkedIn Ad Library research record supplied after this prompt.
SOURCE BOUNDARY
LinkedIn's public Ad Library can show a preview, format, advertiser and payer. For ads targeted to the European Union, it can also show conditional transparency fields such as main targeting parameters, estimated impressions, country percentages and run dates. Country percentages are rounded. A public ad does not establish clicks, leads, revenue, ROAS, profit or why an advertiser kept it live. Repetition and longevity are observations, not proof of performance.
REQUIRED INPUT
One JSON object with:
- search.research_question, query_type, query_value, country, date_filter, capture_date and search_url
- at least two records with the same question and scope
- each record's numeric ad_id, canonical https://www.linkedin.com/ad-library/detail/{id} URL, capture_date, advertiser, payer, format, observed_message and offer_observation
- targeting, spend, clicks, leads, revenue and performance explicitly set to Unknown unless the supplied public record visibly contains a conditional transparency field
- repeated_patterns, differences and exceptions with at least one supplied observation or the explicit value `none_observed`
- one proposed_next_action tied to the observations; later results require a separate authorized result source
SEMANTIC RULES
- `search.country` must be explicit. Blank or null is incomplete. The exact string `Unknown` is a complete disclosure that the country filter was not preserved. A named country is complete when it matches the preserved search. Do not convert blank or null to `Unknown` for the reader.
- `no_explicit_offer_visible` is a complete offer observation. Blank is incomplete.
- `restricted_not_disclosed` means LinkedIn deliberately withheld a restricted field. A record with `restriction_state: restricted_not_disclosed` may leave withheld preview, advertiser, payer, format, message or offer fields blank. Preserve those fields as restricted or exclude that record with an explicit reason. Do not demand an impossible recapture.
- An ad ID must equal the numeric ID in its detail URL.
- When a record supplies its own research question, search URL, country scope or date filter, compare it with the declared `search` value only when both values are explicit and nonblank. Hold every actual mismatch even when all records repeat the same wrong value. A blank or null declared search value is missing input, not a value that can conflict with a record. Record-level `Unknown` does not fill a missing declared search value and does not create a conflict against blank or null.
- Two or more complete records still need explicit comparison content. Empty repeated_patterns, differences, exceptions or proposed_next_action are incomplete, not a ready brief.
- A syntactically complete record is not proof that you inspected its URL. Never say you opened or verified an unsupplied source.
- Never repair a conflict silently or infer an unavailable outcome.
MISSING OR CONFLICTING INPUT
Stop before writing a brief. Return `status`, then a numbered list of the exact missing or conflicting fields, why each blocks comparison and the exact action required. Apply this precedence:
1. REPAIR_REQUIRED for any conflict or unsupported outcome claim.
2. CAPTURE_REQUIRED when any required search field is blank or null, no record exists, or a record lacks its ad ID, canonical detail URL, capture date or non-restricted advertiser identity. This includes blank or null `search.country` and `search.search_url`.
3. READY_TO_COMPARE for one complete record with complete search and source identity.
4. FACTS_RECORDED only when search and source identity are complete but an observation or required comparison field is unfinished.
5. RESEARCH_BRIEF_READY only when at least two complete records share the declared scope and all required comparison fields are explicit.
Do not manufacture a conflict by comparing a record value with a blank or null declared search field. For example, `search.country: ""` or `null` plus `records[*].country_scope: "Unknown"` is CAPTURE_REQUIRED for the one missing `search.country`; it is not REPAIR_REQUIRED and the record scopes are not conflicting until an explicit declared country exists.
COMPLETE INPUT OUTPUT
Return these headings:
1. Status: RESEARCH_BRIEF_READY
2. Research question and exact search scope
3. Source table with advertiser, payer, format, ad ID, detail URL and capture date
4. Observed patterns
5. Differences and exceptions
6. Explicit Unknowns
7. One proposed test supported by the supplied observations
8. The separate result source needed to judge that test later
Keep observed facts, supplied interpretation and proposed action separate. Do not call any ad a winner.
Common mistakes
Treating long-running ads as winners
Longevity can help you decide what to inspect. It does not prove profit, lead quality or even the advertiser's reason for keeping the ad live.
Turning visible copy into targeting
Copy that speaks to CFOs shows that the copy speaks to CFOs. It does not prove that the campaign targeted CFO job titles. Record a displayed EU targeting parameter when it exists. Otherwise keep targeting Unknown.
Comparing different questions
An employer-brand video and a demo ad can both be good ads. They do not answer the same research question. Keep the sample bounded.
Losing the public record
A screenshot without the ad ID, detail URL, query and capture date becomes hard to review later. Save the identity first.
Letting an AI tool fill blanks
Blank evidence is a request, not an invitation to improvise. Ask for the missing capture, or label the field Unknown.
LinkedIn Ad Library FAQ
Do I need a LinkedIn account?
No. LinkedIn says anyone can explore the public Ad Library with or without an account.
How far back does the library go?
LinkedIn includes ads that ran after June 1, 2023. Ads remain in the library for one year after their last impression.
Can I see targeting?
Sometimes. EU-targeted ads can show main targeting parameters and whether they were used for inclusion, exclusion or both. Do not turn that into an exact audience reconstruction.
Can I see impressions?
EU-targeted ads can show estimated total impressions and a country breakdown. Country percentages are rounded. Standard records may not show these fields.
Can I see clicks, leads or revenue?
The public records inspected for this guide did not show clicks, leads, revenue or profit. Keep those outcomes Unknown unless you have a separate authorized source.
Does LinkedIn have an Ad Library API?
LinkedIn documents a vetted API product. It requires an application, approved product access and a provisioned OAuth token. This page does not connect to that API or import the library automatically.
Build a research record someone else can review
Open the official library, write one question and capture two records before you analyze anything. Then use the ledger to preserve the evidence and assign the next action.
If you want someone to turn the research into a paid-media test plan, talk to Maestro about LinkedIn Ads management. Bring the exported brief. We can start with the evidence instead of trying to reconstruct your browser session.



