Apify actor · whoareyouanas/linkedin-ad-library-scraper
LinkedIn Ad Library Scraper: Ads, Media & Targeting
Research LinkedIn ads by company ID, company name, keyword, or direct ad URL. Choose listing or full-detail mode and retain retrieval-level and coverage evidence for every exported ad.
Documentation checked 2026-10-29 · deployed build 0.3.5 · run through your Apify account
01 / Overview
Match the actor to the job.
Precise advertiser research
Use company IDs when you need a specific advertiser rather than an ambiguous company-name match.
Listing or full detail
Choose a lighter listing record or fetch supported detail fields with explicit fallback behavior.
Check search coverage
Review run summaries, retrieval levels, and source warnings before treating a search as complete.
02 / Input
Start with a clear, bounded input.
Provide companyIds, companies, keywords, searches, or adUrls according to the documented search mode. Set maxResults and maxResultsPerSearch. Mode full does not guarantee every possible field is public.
{
"companyIds": [
"68529"
],
"mode": "full",
"maxResults": 10,
"maxResultsPerSearch": 25
}Replace example targets and credential placeholders before running. These are documentation examples, not a promise of currently available source results.
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| searches | array | Not specified | Objects with type (companyId, companyUrl, advertiser, keyword, searchUrl, adUrl), string value, optional label and per-search filters. Organization IDs must be strings. URL filters are authoritative; contradictory structured filters are rejected. Invalid searches are recorded while other valid searches continue. |
| companies | array | Not specified | Advertiser name text or a public LinkedIn company URL. Names are text matches; URL slugs must resolve to a verified organization ID. |
| companyIds | array | Not specified | Positive numeric organization IDs supplied as strings. Returned advertiser identity is verified before exact matches are delivered. |
| keywords | array | Not specified | Independent text searches across ad copy. |
| mode | string | Not specified | Defaults to full in the Actor code. Listing records only source-visible card fields and marks truncated copy. Full additionally fetches each eligible unique detail. Missing source disclosure is not invented. Direct ad URLs always require full retrieval. Options: listing, full |
| maxResults | integer | Not specified | Global delivered-ad limit; defaults to 100 in the Actor code. Zero removes this row limit while request/time/charge budgets still apply. Minimum: 0 · Maximum: 1000000 |
| maxResultsPerSearch | integer | 100 | Per-search unique usable match limit. Zero removes this row limit. Minimum: 0 · Maximum: 1000000 |
All other input controls (12)
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| adUrls | array | Not specified | HTTPS public /ad-library/detail/ or /ad-library/employer-brand/ URLs. Search filters do not apply to direct ads. |
| allowListingFallback | boolean | true | In full mode, deliver usable card data at the listing event price when detail retrieval fails. False withholds those ads and records their failures. |
| filters | object | Not specified | Optional countries (ISO alpha-2 array), payer text, dateRange, startDate and endDate. No country constraint by default. Date presets: all-time, last-30-days, current-month, current-year, last-year, custom. Custom dates require both YYYY-MM-DD dates. Unknown filters are rejected; last-7-days and last-90-days are not currently advertised. |
| maxRequests | integer | 5000 | Includes retries and company resolution. Reaching this budget produces an explicit partial summary. Minimum: 1 · Maximum: 1000000 |
| maxRunSeconds | integer | 900 | Operational deadline in seconds. Reaching it produces an explicit partial summary. Minimum: 1 · Maximum: 86400 |
| maxConcurrency | integer | 8 | Upper request ceiling. Host pacing can reduce actual concurrency. Minimum: 1 · Maximum: 20 |
| adFormats | array | Not specified | Optional canonical labels: SINGLE_IMAGE, VIDEO, CAROUSEL, DOCUMENT, TEXT, MESSAGE, CONVERSATION, THOUGHT_LEADER, EVENT, SPOTLIGHT, EMPLOYER_BRAND. Filter runs after scanning. Full detail acceptance is verified for image, video, carousel, document and thought-leader layouts; other formats may return listing fallbacks. |
| includeEvidence | boolean | false | Preserve bounded source excerpts and hashes for extraction audits. |
| proxyConfiguration | object | Not specified | Standard Apify proxy settings. Cloud runs use datacenter proxy by default; explicit settings override it. Local development uses direct access by default. |
| startUrls | array | Not specified | Public LinkedIn search, company, standard detail, or employer-brand URLs. String URLs or {url} objects are accepted. Only GET is supported. |
| resultsLimit | integer | Not specified | Alias of maxResults. Unlike Silva's per-URL setting, this alias is GLOBAL; use maxResultsPerSearch for per-URL limits. Conflicting aliases are rejected. Minimum: 0 · Maximum: 1000000 |
| skipDetails | boolean | Not specified | True maps to listing; false maps to full. Conflicting mode aliases are rejected. |
03 / Output
Know what each returned row represents.
- Inspect retrievalLevel to distinguish full-detail records from usable listing fallbacks.
- Available targeting, impression ranges, documents, videos, and original files vary by source and ad format. Full detail means the actor's available-field checks passed, not that every field exists.
{
"adId": "example-ad-id",
"advertiserName": "Example Company",
"advertiserCompanyId": "example-company-id",
"format": "SINGLE_IMAGE",
"headline": "Illustrative headline",
"body": "Illustrative ad copy",
"retrievalLevel": "listing",
"adUrl": "https://www.linkedin.com/ad-library/detail/example-ad-id"
}Example values illustrate the published contract. Available fields and populated values depend on the source, mode, and result status.
Fields in the documented output view
adId
Ad ID
advertiserName
Advertiser
advertiserCompanyId
advertiserCompanyId
format
Format
headline
Headline
body
Ad copy
imageUrl
Image
videoUrl
videoUrl
clickUrl
clickUrl
paidBy
paidBy
retrievalLevel
retrievalLevel
adUrl
Ad Library
scrapedAt
scrapedAt
Output views select columns. They do not necessarily filter record types or exhaust the full JSON payload. Use structured JSON when you need nested arrays or objects.
Dataset links and run artifacts (5)
- Ads
- Available through the actor's Output tab for your run.
- Run summary
- Available through the actor's Output tab for your run.
- Search coverage
- Available through the actor's Output tab for your run.
- Query-to-ad matches
- Available through the actor's Output tab for your run.
- Advertiser resolutions
- Available through the actor's Output tab for your run.
04 / Pricing
Understand the billable unit.
These are the active public event prices checked on 2026-10-29, in USD. They describe each event, not a universal flat price for a run. Confirm your current Apify plan and run budget before starting.
| Billable event | Rate (USD) | When it applies |
|---|---|---|
Actor Start apify-actor-start | $0.002 / event | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). Start units depend on allocated memory: one event per GB, with at least one event. |
Listing ad ad-listing | By Apify plan
| One unique ad saved with listing fields. Also applies when full detail falls back to a usable listing. No additional full charge for this ad. $0.25–$0.40 per 1,000 of this event. Other events and separate services are additional. |
Full ad ad-full | By Apify plan
| One unique ad saved with verified available full detail. This includes source fields that are available, not a guarantee every field or original document is public. No additional listing charge for this ad. $0.70–$1.20 per 1,000 of this event. Other events and separate services are additional. |
- Rates depend on your Apify plan. The table includes all published plan tiers instead of assuming one universal listing or full price.
- Each saved ad receives its applicable listing or full-detail charge, not both. A usable listing fallback is charged as a listing; startup is separate.
A result limit and a spending cap are different controls. Account charges, applicable taxes, and separately billed providers or proxies must be considered where relevant. A cap setting is not a minimum invoice charge.
05 / API & automation
Use the same input from your workflow.
Test a small run in Apify Console, inspect its records and charges, then save a task or call the actor from your own application. Keep your Apify token in an environment variable. Source-specific credentials, if required, are separate from the Apify API token.
# Save the input example as input.json and set APIFY_TOKEN.
# This request starts an asynchronous, potentially billable run.
curl --request POST \
'https://api.apify.com/v2/acts/whoareyouanas~linkedin-ad-library-scraper/runs' \
--header "Authorization: Bearer $APIFY_TOKEN" \
--header 'Content-Type: application/json' \
--data @input.jsonThe response identifies the run. Wait for it to finish, inspect its status, and use its default dataset and key-value store to retrieve results. A successful run can still contain partial or failed records; check the output contract above before continuing downstream.
Coverage & interpretation
Check the result before relying on it.
- Company-name and keyword searches can be ambiguous. Use IDs and review advertiser context.
- Impression ranges are not exact counts, and last-shown dates do not establish an ad's current activity. Original PDFs or every document page are not guaranteed.
Questions
Before you build an integration.
What do I need to provide?
Provide companyIds, companies, keywords, searches, or adUrls according to the documented search mode. Set maxResults and maxResultsPerSearch. Mode full does not guarantee every possible field is public.
What should I check in the output?
- Inspect retrievalLevel to distinguish full-detail records from usable listing fallbacks.
- Available targeting, impression ranges, documents, videos, and original files vary by source and ad format. Full detail means the actor's available-field checks passed, not that every field exists.
How do I budget the run?
- Rates depend on your Apify plan. The table includes all published plan tiers instead of assuming one universal listing or full price.
- Each saved ad receives its applicable listing or full-detail charge, not both. A usable listing fallback is charged as a listing; startup is separate.
Keep exploring