A public LinkedIn ads data API for transparency research.
Enter search filters directly and let the Actor construct and paginate the public Ad Library query.
Advanced URL mode supports existing Ad Library search and detail URLs, but cannot be combined with structured search fields in one run.
Know which public ad and creative fields can be returned.
The response uses one complete schema for every public ad. Values LinkedIn does not publish remain null or empty.
| Fields | Purpose | Availability |
|---|---|---|
ad_id, ad_url, search_url, ad_format | Ad identity, provenance, and public format | Successful results |
advertiser | Advertiser name, company URL, company ID, and logo | When public |
payer, run_period, is_restricted | Paying entity, dates, active state, and restrictions | When published |
impression_range | Public total-impression estimate | When LinkedIn publishes it |
impressions_by_country | Public country share distribution | When published |
targeting | Included and excluded public targeting segments | Primarily EU-region ads |
creative_variants | Body, headline, CTA, destinations, media, documents, events, and carousel items | Successful results |
scraped_at, source | Collection time and record provenance | Successful results |
Plan the integration with a complete public ad record.
This representative response shows the nested advertiser, run-period, impression, targeting, and creative-variant structures.
[
{
"ad_id": "1476666024",
"ad_url": "https://www.linkedin.com/ad-library/detail/1476666024",
"search_url": "https://www.linkedin.com/ad-library/search?accountOwner=Example",
"ad_format": "Event Ad",
"advertiser": {
"name": "Example",
"url": "https://www.linkedin.com/company/73267396",
"company_id": "73267396",
"logo_url": "https://media.licdn.com/example-logo.png"
},
"payer": "Example Corporation",
"run_period": {"start_date":"2026-07-27","end_date":"2026-07-29","is_active":false},
"is_restricted": false,
"impression_range": {"label":"< 1k","estimated_min":0,"estimated_max":999},
"impressions_by_country": [{"country":"United Kingdom","share_label":"17%","share_percent":17}],
"targeting": [{"category":"Language","included_values":["English"],"excluded_values":[],"is_targeted":null,"is_excluded":null}],
"creative_variants": [{
"variant_index": 0,
"creative_type": "SPONSORED_UPDATE_EVENT",
"body": "Example public ad text.",
"headline": "Example event",
"destination_url": "https://www.linkedin.com/events/example",
"call_to_action": "Register",
"external_urls": [],
"media": [],
"document": null,
"event": {"title":"Example event","url":"https://www.linkedin.com/events/example","start_at":"2026-09-09T15:00:00.000Z","end_at":null,"location":"Online"},
"carousel_items": []
}],
"scraped_at": "2026-07-29T12:00:00.000Z",
"source": "linkedin_ad_library"
}
]Ad Library API versus LinkedIn's Advertising API.
The official Advertising API manages authorized ad accounts and campaigns. Curly instead reads transparency records that LinkedIn publishes in its public Ad Library.
| Option | Starting input | Access | Best for |
|---|---|---|---|
| Official LinkedIn Advertising API | Authorized ad account and campaign objects | Restricted Marketing API access | Creating, managing, and reporting on owned campaigns |
| LinkedIn public Ad Library | Manual public search | Public browser | One-off transparency research |
| Curly Ad Library API | Public search filters or Ad Library URLs | Apify API token | Structured public ad datasets and monitoring |
| Curly Company Posts API | Known company pages | Separate Curly endpoint | Organic public company posts, not ads |
Turn public ad searches into repeatable datasets.
Use the ad ID as a stable key, then schedule searches, receive webhooks, or export datasets through Apify.
- Review the Ad Library Actor on Apify
Create a token, add advanced filters, and connect the ad dataset.
- Need organic company posts instead?
Use the separate Company Posts API for recent public posts that are not Ad Library records.