Guide Ad libraries

LinkedIn Ad Library: How to Research Any Company's Ads, Step by Step

A step-by-step walkthrough of the LinkedIn Ad Library using HubSpot as the example: how to search, what each ad shows, where the numbers are, and how to do it by domain and at scale with the Adyntel API.

Emils Veveris

Emils Veveris

Co-Owner @ Adyntel

13 min read September 22, 2026

LinkedIn publishes every ad that runs on its platform. You can search them at linkedin.com/ad-library, no account needed, and each ad stays there for a year after it last ran.

LinkedIn did not do this by choice. The EU's Digital Services Act made large platforms open up their ads, and LinkedIn's library went live in June 2023, two months before the deadline. Meta and Google built theirs for the same reason. It does the minimum the law asks for, meaning they are not exactly incentivized to make it user-friendly. For example, search by company name and you also get every other company with a similar name. Impressions and targeting only show for ads that ran in the EU, because that is the only place the law requires them. And you cannot export anything, and ads disappear a year after they stop running.

So the library is useful, but only if you know how to work around it. This guide shows how, on one real question: what is HubSpot running on LinkedIn right now, checked on September 22, 2026. Then it does the same through our API by domain, and across 1,523 companies, which is where the wider numbers come from.

Step 1: Search the company name

Go to linkedin.com/ad-library. Type HubSpot in the "Company or advertiser" box and click Search.

Name search for HubSpot: 2,568 results, with a partner agency called Wagada Digital | HubSpot Partner among them

You get 2,568 ads. Before you start reading them, look at the advertiser names on the cards. Most say HubSpot. Some say "Wagada Digital | HubSpot Partner", which is an agency. The box matches any page whose name contains what you typed, so every partner agency with HubSpot in its name lands in HubSpot's results.

It gets worse with short names. "SAP" also returns Saputo, a Canadian dairy company (not the SAP you were looking for). "Lattice" returns 187,461 ads because there are a lot of companies called Lattice. "Microsoft" returns Microsoft plus every reseller with Microsoft in its page name.

The obvious fixes do not work. A domain like hubspot.com returns "No results found". So does the LinkedIn URL. There is no suggestion list while you type. The box takes a name and nothing else.

Step 2: Search by page id instead

Every LinkedIn company page has a number, and the library accepts it in the address bar. Start here next time. HubSpot's number is 68529.

To find the number, click "View details" on any ad that is clearly from the right company. In the "About the ad" panel, click the advertiser name. It opens the company page at an address like linkedin.com/company/68529. That number is the id.

Open this address:

linkedin.com/ad-library/search?companyIds=68529

The same search by page id: 1,443 results, all from HubSpot

HubSpot now shows 1,443 ads. All of them HubSpot's. The other 1,125 from the name search belonged to other pages, so the name search was off by 78%.

It has to be the number. companyIds=hubspot fails to load. If you need ids for a list of companies, Clay's company enrichment returns it as "Org Id", and our API finds it from the domain (step 10).

Step 3: Read the results

Each card shows the advertiser's name and logo, the post text, the creative, the headline and the call-to-action label. Results load 24 at a time, newest first. You can flip to oldest first, and that is the whole sort menu. There is no export, which you will feel by the third page.

HubSpot's 24 newest ads were 11 videos, 10 single images and one document. Three campaigns account for most of them. "Get ready for your 9am at 8.56" is a brand video that runs in English and in German. "Finish every quarter on a high note" sells the sales product. "Fall 2026 Spotlight" is a product launch.

Three kinds of card look different:

  • Thought-leader ads show a person's name and title with "Promoted by HubSpot" underneath. These are posts from an employee or a customer that the company pays to boost. HubSpot's CEO and Chief Product and Technology Officer both have boosted posts about the launch.
  • Deleted ads show a blurred image and "We've obscured this image because the ad was deleted". They stay listed for a year.
  • Message ads show the raw copy with placeholders, so you will read "Hi %FIRSTNAME%" in a competitor's InMail.

Step 4: Open an ad

Click "View details" on the first video ad. The "About the ad" panel on the right has three lines: Video Ad, Advertiser HubSpot, Paid for by HubSpot, Inc.

The About the ad panel for a US HubSpot ad: format, advertiser, payer

That is all you get for this ad. No dates, no impressions, no targeting, and no hidden tab.

Why? Because of where the ad was shown. That is step 5.

Step 5: Find the ads with numbers

LinkedIn publishes run dates, an impressions range and targeting for ads that were shown to at least one person in the EU, because the EU Digital Services Act makes it. Where the company is based does not matter. HubSpot is American. Its German ads carry the data and its US-only ads do not.

Add Germany in the Country filter, or add &countries=DE to the address. HubSpot drops from 1,443 ads to 179. Open the German version of the brand video. The About panel now shows:

Field This ad
Ran from Sep 16, 2026 to Sep 22, 2026
Total impressions 1k-5k
Impressions by country Germany 100%
Targeting Language: Deutsch. Location: Deutschland. Then a table of Audience, Demographic, Company, Education, Job, Interests and Traits, each marked targeted, excluded or both. On this ad, Audience is excluded and Company and Job are both targeted and excluded.
The About the ad panel for a HubSpot ad served in Germany: run dates, impressions range, country split and targeting

The Targeted and Excluded table for the same ad

Impressions are always a range. The ranges LinkedIn uses: under 1k, 1k-5k, 5k-10k, 10k-20k, 20k-30k, 30k-50k, 50k-100k, 100k-150k, 150k-200k, 200k-300k, 300k-500k, 500k-1M, over 1M.

The country split is the part most people get wrong. It is not limited to EU countries. It lists every country the ad reached. A Robinhood job ad that ran worldwide for 18 months shows United States 65%, Canada 8%, India 7%, United Kingdom 5%. Of the 2,250 EU-served ads we pulled, 57% listed the United States. If a competitor runs one global campaign, you get its US share as long as the campaign touched the EU once.

One limit on the targeting itself: only the top three parameters are shown. An advertiser using six shows you three.

Step 6: Slice by time and theme

With the id in the address, add filters and the counts start answering questions. HubSpot, on the day this was checked:

Add to the address Count What it tells you
&dateOption=last-30-days 360 A quarter of the year's ads started this month. A launch
&keyword=AI 511 35% of all ads mention AI
&keyword=Sales Hub 101 The sales product has its own campaigns
&keyword=Breeze 46 The new assistant, launched this month
&countries=US 532 37% of ads name the US as a target
&countries=DE 179 12%, in German

The keyword filter keeps ads that contain every word you typed, in any order. Quotes do nothing. With the company box empty it lists every advertiser using a term, which is useful for a distinctive term and useless for a common one. "attribution" on its own returns 68,401 ads.

Also read the landing page when there is one. On about one ad in six the headline links out, and the link carries the full URL with its tracking parameters. HubSpot's German video links to hubspot.de with the campaign name BrandStrategy_VideoViews_DE_EMEA_DACH_GBC_AnnoyinglyGood-Q3-2026_OLV_GG-BDM_Butter-30. A second copy ends in Butter-15. One string, and you know the DACH team is testing a 30-second and a 15-second cut of a Q3 brand campaign called "Annoyingly Good", bought on a video-views objective, and sending people to the German homepage. Nobody at HubSpot would tell you that on a call.

Step 7: Find the ads they pay for elsewhere

Clear the company box and type HubSpot in the Payer box. You get 1,658 ads, 215 more than the page itself runs. The extra 215 are posts HubSpot pays to boost from other people's profiles: executives, employees, customers, partners.

Payer search for HubSpot: 1,658 results

Payer search is the only way to see a whole company at once. "Microsoft" as payer returns ads from Microsoft Advertising, Microsoft 365, Azure Cosmos DB, Minecraft Education and a handful of Microsoft employees. A name search on Microsoft misses most of them. The same box tells you which agency runs a competitor's ads, because the advertiser is the agency and the payer is the client.

Of the 554 advertisers with ads that we pulled, 144 were boosting posts from people's profiles, and those posts were 10% of all ads. Refine Labs had 17 of its 24 newest ads promoted this way. Salesforce had 13 of 24, across nine people.

Step 8: Find the winners

On EU-served ads the impressions range tells you which creatives got budget, and most did not. Of 2,250 EU-served ads, 56% were under 5,000 impressions and 9% were over 100,000. A single ad above 50,000 is one the advertiser kept paying for, for weeks.

The "More" button has an impressions filter. Set a minimum of 50,000 and you are left with the ads that scaled, which for most companies is a handful. The same panel filters by targeting, so you can ask for every ad where Job targeting was used, or where an Audience list was excluded. An excluded audience list usually means a prospecting campaign, because they are keeping existing contacts out.

Both filters only work on EU-served ads. Everything about performance in the library does.

Step 9: What you still cannot get

Spend. Not for any ad, in any country. LinkedIn has never published it and the Digital Services Act does not require it. Any tool that shows you a spend figure for a LinkedIn ad is estimating it, including us. One way to estimate is the middle of the impressions range times a CPM benchmark. The method is in how to estimate ad spend on LinkedIn.

Also missing: clicks, conversions, exact impressions, any dates or impressions for ads that never reached the EU, the full targeting list, anything older than a year after its last impression, and an export. LinkedIn's own Ad Library API is an application-only product for researchers.

Step 10: Do it by domain with the API

Everything above is one company at a time, by name or by id. Fine for a competitor. Useless for a prospect list.

Our LinkedIn endpoint takes the domain instead. Send hubspot.com and it finds page 68529, returns the ads, and reports the same count the id search shows, 1,443. No name problem, no id to look up, no browser.

POST https://api.adyntel.com/linkedin
{
"api_key": "your_key",
"email": "your_email",
"company_domain": "hubspot.com",
"impression_data": true
}

impression_data: true adds the EU block to every ad. It costs 2 credits per call instead of 1. The German brand video comes back like this:

{
"ad_id": "1552591373",
"creative_type": "SPONSORED_VIDEO",
"cta": "Mehr erfahren",
"destinationUrl": "http://hubspot.de?utm_source=linkedin&utm_medium=paid_brandstrategy&utm_campaign=BrandStrategy_VideoViews_DE_EMEA_DACH...",
"eu_transparency": {
"startDate": "2026-09-16T00:00:00.000Z",
"endDate": "2026-09-22T00:00:00.000Z",
"totalImpressions": "1k-5k",
"impressionsByCountry": [{ "country": "Germany", "impressions": "100%" }],
"targeting": {
"language": "Targeting includes Deutsch",
"location": "Targeting includes Deutschland"
}
}
}

An ad that never reached the EU returns the same block with every value null. total_ads is the count for the page. date_filter narrows the window: last 30 days for Clay gave 73 ads out of 462. continuation_token pages through 24 ads at a time. A domain with no LinkedIn page returns HTTP 204 with an empty body. The same lookup exists for Meta and Google, so one domain gives you all three. Documentation: docs.adyntel.com/ad-libraries/linkedin.

Step 11: Run it across a list

This is where the library stops and the API starts. We ran 1,523 domains through it, 24 newest ads each, in about an hour. Doing that in the library means finding 1,523 page ids by hand (nobody does that).

64% of the companies had no LinkedIn ads in the last year. Among those that did:

Company type Had ads Median ads in the library
Enterprise and consulting 93% 3,771
Tech headquartered in the EU 96% 876
B2B software 56% 248
Finance and ETF issuers 93% 203
Consumer brands 32% 17
Agencies and ecommerce tools 26% 13
Local businesses (dentists, home services, real estate, restaurants) 23% 7

HockeyStack, one of our customers, uses 50 or more ads as its cut-off for an account to go after. Half of the advertisers in this pull cleared it. That is a qualification rule you can run on a whole prospect list by domain.

Three more numbers from the run. Only a quarter of all ads carried the EU data, so the numbers in step 5 are the exception, not the rule. 26% of advertisers were boosting employee or customer posts, so the payer-versus-page check from step 7 is worth doing on any competitor. And 17% of ads carried a landing page link, which is enough to audit where a company sends its traffic across an account list.

The library tells you what a company is running. The numbers only show up for ads that touched the EU, and spend never shows up at all. Everything else is there, if you search by id and know where to look.

Quick reference

Question Where Address parameter
One company only Page id companyIds=68529
Ads aimed at one country Country filter countries=DE
Recent ads Date filter dateOption=last-30-days
Ads on a theme Keyword keyword=Breeze
Everything a company pays for Payer box payer=HubSpot
Ads with 50k+ impressions More filters impressionsMinValue=50&impressionsMinUnit=thousand
Same data by domain Adyntel API company_domain: "hubspot.com"

Frequently asked questions

Does the LinkedIn Ad Library show ad spend? No. LinkedIn does not publish spend for any ad, in any country. It publishes impressions ranges only for ads that reached the EU. If you need a spend figure, you estimate it from ad counts and impressions ranges. One method is in how to estimate ad spend on LinkedIn.

Why are impressions and dates missing on the ads I am looking at? The ad never reached anyone in the EU. LinkedIn only publishes impressions, run dates and targeting for ads served in the EU, under the Digital Services Act. A US-only campaign shows the format, the advertiser and the payer, and nothing else.

Is the EU data only about EU countries? No. Once an ad qualifies, the country split covers every country it reached. A global campaign that touched the EU shows its US share too. A US-only campaign shows nothing.

Why can't I find a company's ads? The name search matched a different page, so search by page id instead (step 2). An agency runs the ads, so the advertiser name is the agency's and the company appears only as the payer. The ads target another country and you have a country filter on. Or the company has not run an ad in the last year. Of the 1,523 companies we checked, 64% had none.

Can I search by domain or LinkedIn URL? Not in the library. The company box takes a name, and the address takes a numeric page id. The Adyntel API takes the domain.

How long do ads stay in the library? One year after the ad's last impression. An ad that is still running stays as long as it runs. Nothing before June 1, 2023 is searchable.

Can I see who paid for an ad? Yes. Every ad shows "Paid for by" with the legal entity, and you can search by payer. Agency-run ads and partner ads show a different advertiser and payer.

Can I see the landing page? Sometimes. On about one ad in six the headline links to the destination URL with its tracking parameters. On the rest the call-to-action is a button with no link behind it.

How do I find a company's thought-leader ads? Search the company in the Payer box. Every post it pays to boost from an employee's or customer's profile shows up, with the person's name on the card and "Promoted by" the company underneath. There is no format filter, so this is the only way to isolate them.

Can I see inactive or past ads? Yes. The library keeps every ad for one year after its last impression, whether it is still running or not. Deleted ads stay too, with the creative blurred and a "View anyway" button. There is no filter for active only. For EU-served ads the end date tells you whether it is still running.

Do I need a LinkedIn account? No. The library is public and needs no login.

Can I export the results or use an API? The library has no export. LinkedIn's own Ad Library API is for approved researchers. For commercial use, the Adyntel endpoint returns the same data by domain.