LinkedIn Company Profile Scraper & Ad Library Creatives avatar

LinkedIn Company Profile Scraper & Ad Library Creatives

Pricing

from $2.99 / 1,000 results

Go to Apify Store
LinkedIn Company Profile Scraper & Ad Library Creatives

LinkedIn Company Profile Scraper & Ad Library Creatives

LinkedIn Company Profile Scraper & Ad Library Creatives extracts company profiles and LinkedIn ad creatives, including company details, followers, employee insights, ad content, formats, and campaign data. Ideal for competitor research, ad intelligence, and market analysis.

Pricing

from $2.99 / 1,000 results

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

LinkedIn Company Profile Scraper — Firmographics & Ads

This LinkedIn company scraper pulls public company-page firmographics — name, industry, size, employeeCount, headquarters, specialties, a public employee/post sample — straight from LinkedIn's own logged-out pages, no login required. Turn on Include Ad Library creatives and the same run also fetches each company's public LinkedIn Ad Library feed: ad copy, creative image URLs, run dates, impressions, and the targeting-segment matrix. Ad-tech analysts, B2B/SDR researchers, and AI agent pipelines use it to combine firmographic and advertising-activity signals in one dataset. Every company is pushed to the dataset the moment it finishes — no waiting on the whole batch.

🏢 What is LinkedIn Company Profile Scraper & Ad Library Creatives?

It is a scraper that reads a public LinkedIn company page (and, optionally, that same company's public Ad Library entry) and returns a structured JSON record per company. No LinkedIn account, login, or session cookie is used anywhere in the code — every field comes from httpx GET requests against LinkedIn's public, logged-out HTML and JSON-LD.

  • Discovery by direct URL only — you supply the exact company page URLs (/company/, /showcase/, or /school/); there is no keyword or category search built into this Actor.
  • Core firmographic fields — name, description, industry, size, headquarters, founded, type, specialties, plus a companyUrn (numeric LinkedIn organization ID) and universalName (URL slug) for joining to other data.
  • Optional secondary data type — the public Ad Library creative feed and per-ad transparency metrics (run dates, impressions, targeting segments).
  • Geographic fieldslocation.city/state/country and headquarters, plus advertisingCountries when Ad Library data is enabled.
  • Real, working filtersmaxAdsPerCompany, adDateRange, and adCountries scope the Ad Library sub-feature; maxRetries, requestTimeoutSec, and concurrency control the crawl itself.
  • Standard Apify dataset export — results land in the Apify dataset, exportable as JSON, CSV, Excel or XML directly from the Apify Console.

📊 What data can I extract with LinkedIn Company Profile Scraper & Ad Library Creatives?

Every run returns firmographics, identity IDs, a public network/post sample, and — when enabled — Ad Library creatives and transparency metrics, all in one row per company.

FieldExample valueUse case
inputUrl"https://www.linkedin.com/company/microsoft"Join key back to your input list
successtrueFilter out failed rows
name"Microsoft"Company identity
description"Every company has a mission..."Firmographic profile
location{"city":"Redmond","state":"Washington","country":"US"}Geographic segmentation
employeeCount233268Size-band filtering
website"https://news.microsoft.com/"Outbound link enrichment
logo"https://media.licdn.com/dms/image/..."Brand asset
slogannullMarketing copy (when published)
industry"Software Development"Sector segmentation
size"10,001+ employees"LinkedIn's own size-band label
founded""Company age (when published)
headquarters"Redmond, Washington"HQ display string
type"Public Company"Ownership structure
specialties["Business Software","Cloud Computing","AI"]Category tags
similarPages[{"link":"...","name":"Google","image":"..."}]Competitor discovery
employees[{"link":"...","name":"...","title":"...","image":"..."}]Public employee preview (capped at 10)
posts[{"url":"...","datePublished":"...","text":"..."}]Company-update sample (capped at 10)
companyUrn"1035"Numeric LinkedIn organization ID
universalName"microsoft"URL slug, derived from inputUrl
ads[{ ... }]Ad Library creative + transparency array (see below)
activeAdsCount6Ad-activity volume signal
adFormatBreakdown{"SPONSORED_STATUS_UPDATE":5,"SPONSORED_VIDEO":1}Creative-format mix
firstAdSeen"2026-07-23"Earliest ad run-start found this run
lastAdSeen"2026-07-29"Latest ad run-end found this run
advertisingCountries["Germany","Netherlands","United Kingdom"]Geographic ad-targeting footprint
adLibraryCoverageNote"LinkedIn's public Ad Library page returns at most 24 ad cards..."Real, per-run coverage disclosure
error""Populated with the failure reason when success is false

📢 Ad Library creative & transparency data

Each entry in ads[] carries: adId, adDetailUrl, creativeType, adFormat, headline, adCopy, creativeImageUrl, ctaText, advertiserName, advertiserUrl, advertiserLogo, paidBy (the legal payer entity), adRunStart, adRunEnd, adRunDays, totalImpressions (LinkedIn's bucketed label, e.g. "< 1k"), impressionsByCountry ([{"country":"Germany","impressionPercentage":100}]), and targetingSegments ([{"type":"Language","detail":"Deutsch","targeted":true,"excluded":null}]). This is the decision-driving layer for ad-tech and competitive-intelligence use: it tells you not just that a company is active on LinkedIn Ads, but what it says, who pays for it, and who it targets.

🎯 Targeting and segmentation fields

industry, size, employeeCount, headquarters/location, and founded are the fields you filter and segment company records on downstream. On the ad side, advertisingCountries and targetingSegments let you segment by where and whom a company advertises to, without any date-range or country filter being required at scrape time (those are optional Ad Library scoping inputs, covered below).

🧱 Why not build this yourself?

LinkedIn does not offer a public, self-serve API for pulling an arbitrary company's firmographics or Ad Library data — the Marketing Developer Platform requires partner review and is not a drop-in replacement for scraping a public page. Building this yourself means: handling LinkedIn's authwall redirects and 403/407/429/999 block responses, parsing multiple <script type="application/ld+json"> blocks per page (LinkedIn emits more than one, and the Organization block isn't always first), and separately hitting each Ad Library detail page to get impressions and targeting data — the search-results page alone never returns it.

This Actor does that work already: it iterates every JSON-LD block to find the Organization node, harvests the numeric companyUrn from the same page fetch (zero extra requests) to join directly into the Ad Library search, and automatically escalates from a direct/user-selected proxy to Apify Residential proxy the moment it sees a block signal. Build it yourself if you need to customize the parsing logic itself; use this Actor if you want the finished pipeline, including the honest disclosure of LinkedIn's own Ad Library pagination ceiling (see FAQ).

💼 How to use data extracted from LinkedIn company pages?

🏢 Ad-tech and competitive-intelligence teams

Feed a list of competitor company URLs with includeAds: true. The output tells you activeAdsCount, adFormatBreakdown, and advertisingCountries per competitor, plus the actual adCopy and headline text and creativeImageUrl for each ad, so you can track who is running paid LinkedIn campaigns, in which markets, and with what messaging — without opening the Ad Library manually for each company.

🤝 Sales, SDR and research agencies

Agencies running repeated account audits for clients pass in the same company list on a schedule and diff activeAdsCount and advertisingCountries run over run to flag when a target account starts or stops advertising — a signal of budget and go-to-market intent that complements firmographic fields like employeeCount and industry.

📈 Market research and intelligence

Cross-reference industry, size, and headquarters against activeAdsCount and adFormatBreakdown across a sector's company list to map which segments of an industry are actively investing in LinkedIn advertising, and in which formats (SPONSORED_STATUS_UPDATE, SPONSORED_VIDEO, etc.).

🤖 AI agents and automated pipelines

Because the Actor takes a plain URL list and returns typed, null-tolerant JSON, it drops into an agent tool call or a scheduled enrichment pipeline directly — no HTML parsing on the consuming side, and every unavailable field is null rather than fabricated, which matters for any downstream LLM summarization step.

🔼 Input sample

ParameterRequiredTypeDescriptionExample value
urlsYesarray of strings (minItems: 1)List of public LinkedIn company page URLs to process. Each company is scraped independently and saved as soon as it finishes; duplicates are automatically skipped via the Request Queue.["https://www.linkedin.com/company/microsoft"]
maxRetriesNointeger (default 3, min 1, max 10)How many times to retry a company page (and its Ad Library data, if enabled) before giving up and saving an error row, with exponential backoff.3
requestTimeoutSecNointeger (default 30, min 5, max 120)How long to wait for each HTTP request (company page or Ad Library page) before treating it as failed.30
concurrencyNointeger (default 3, min 1, max 20)How many companies to process in parallel. Higher values finish faster but increase the chance of LinkedIn rate-limiting.5
includeAdsNoboolean (default false)When true, also fetches each company's public Ad Library creative feed and per-ad transparency metrics. Off by default.true
maxAdsPerCompanyNointeger (default 5, min 1, max 24)Maximum number of ads to fetch full transparency detail for, per company. Capped at 24 — LinkedIn's own public Ad Library page never renders more per company.10
adDateRangeNostring enum: any (Any time), last-30-days (Last 30 days), this-month (This month), this-year (This year), last-year (Last year); default anyRestricts the Ad Library search to ads active within this window, matching LinkedIn's own filters."last-30-days"
adCountriesNoarray of stringsRestricts the Ad Library search to ads targeted at these ISO-2 country codes. Leave empty for no country filter.["US","DE"]
proxyNoobject (Apify proxy editor)Optional starting proxy for all requests. If LinkedIn returns 403/407/429/999 or an authwall redirect, the Actor switches to Apify Residential proxy and keeps using it for the rest of the run.{"useApifyProxy": true}
{
"urls": [
"https://www.linkedin.com/company/microsoft",
"https://www.linkedin.com/company/openai"
],
"includeAds": true,
"maxAdsPerCompany": 10,
"adDateRange": "last-30-days",
"adCountries": ["US", "DE"],
"concurrency": 5
}

Common pitfall: adCountries takes ISO-2 codes ("US", "DE", "GB"), not full country names — a full name silently matches nothing since LinkedIn's own filter expects the code. Also remember includeAds defaults to false; without it, every ad-related field (ads, activeAdsCount, adFormatBreakdown, etc.) comes back empty/null even though the fields still appear in the row.

🔽 Output sample

Output is typed, normalized JSON with a consistent schema across every row (success or error). Results are pushed live to the Apify dataset as each company finishes, and can be exported as JSON, CSV, Excel or XML from the Apify Console.

[
{
"inputUrl": "https://www.linkedin.com/company/microsoft",
"success": true,
"name": "Microsoft",
"description": "Every company has a mission...",
"location": { "city": "Redmond", "state": "Washington", "country": "US" },
"employeeCount": 233268,
"website": "https://news.microsoft.com/",
"logo": "https://media.licdn.com/dms/image/v2/D560BAQH32RJQCl3dDQ/company-logo_200_200/...",
"slogan": null,
"industry": "Software Development",
"size": "10,001+ employees",
"founded": "",
"headquarters": "Redmond, Washington",
"type": "Public Company",
"specialties": ["Business Software", "Cloud Computing", "AI"],
"similarPages": [{ "link": "https://www.linkedin.com/company/google?trk=similar-pages", "name": "Google" }],
"employees": [{ "link": "https://www.linkedin.com/in/...", "name": "...", "title": "..." }],
"posts": [{ "url": "https://www.linkedin.com/posts/...", "datePublished": "2026-...", "text": "..." }],
"companyUrn": "1035",
"universalName": "microsoft",
"ads": [
{
"adId": "1474633804",
"adDetailUrl": "https://www.linkedin.com/ad-library/detail/1474633804",
"creativeType": "SPONSORED_STATUS_UPDATE",
"adFormat": "Single Image Ad",
"headline": "Modernisieren Sie Ihren Stack in einer Stunde pro Tag",
"adCopy": "Jetzt ist der richtige Zeitpunkt, Ihre Infrastruktur abzusichern...",
"creativeImageUrl": "https://media.licdn.com/dms/image/v2/...",
"ctaText": "Registrieren",
"advertiserName": "Microsoft",
"advertiserUrl": "https://www.linkedin.com/company/1035",
"advertiserLogo": "https://media.licdn.com/dms/image/v2/...",
"paidBy": "ZENITH UK (MEDIA) LIMITED",
"adRunStart": "2026-07-24",
"adRunEnd": "2026-07-24",
"adRunDays": 0,
"totalImpressions": "< 1k",
"impressionsByCountry": [{ "country": "Germany", "impressionPercentage": 100 }],
"targetingSegments": [
{ "type": "Language", "detail": "Deutsch", "targeted": true, "excluded": null },
{ "type": "Location", "detail": "Deutschland, Österreich", "targeted": true, "excluded": null },
{ "type": "Audience", "detail": null, "targeted": false, "excluded": false }
]
}
],
"activeAdsCount": 6,
"adFormatBreakdown": { "SPONSORED_STATUS_UPDATE": 5, "SPONSORED_VIDEO": 1 },
"firstAdSeen": "2026-07-23",
"lastAdSeen": "2026-07-29",
"advertisingCountries": ["Germany", "Netherlands", "United Kingdom"],
"adLibraryCoverageNote": "LinkedIn's public Ad Library page returns at most 24 ad cards per company (deeper pagination parameters return identical results); 24 unique ad(s) were found, 6 of 6 requested detail page(s) parsed successfully. Impressions/country/targeting data is only published by LinkedIn for a subset of ads (EU-regulation-driven) -- those fields are null when LinkedIn does not publish them, never fabricated.",
"error": ""
}
]

🎯 How do you filter and target specific companies and ads?

This Actor discovers by exact URL, not by keyword or category — you supply the company page URLs directly, so there is no free-text search parameter to tune. If you need to find company URLs from a brand name or country first, pair this Actor with LinkedIn Mass Company Profile Finder By Country & Name (see below), then feed its output URLs in here.

Once you have your URL list, targeting narrows on the Ad Library side, since the profile fields themselves are always returned in full:

  1. Scope precision (date range)adDateRange matches LinkedIn's own Ad Library window filters (last-30-days, this-month, this-year, last-year), or any for LinkedIn's default recently-active set.
  2. Geographic targetingadCountries restricts the search to ads targeted at specific ISO-2 country codes; leave it empty for no country filter.
  3. Volume controlmaxAdsPerCompany (1–24) caps how many ad-detail pages get fully parsed per company. There is no quality/rating threshold parameter — LinkedIn's Ad Library has no such concept to filter on.
{ "urls": ["https://www.linkedin.com/company/microsoft"], "includeAds": true, "adDateRange": "this-year" }
{ "urls": ["https://www.linkedin.com/company/microsoft"], "includeAds": true, "adCountries": ["DE", "AT", "CH"] }
{ "urls": ["https://www.linkedin.com/company/microsoft"], "includeAds": true, "maxAdsPerCompany": 24 }

▶️ Want to try other LinkedIn scrapers?

ScraperWhat it extracts
LinkedIn Mass Company Profile Finder By Country & NameFinds LinkedIn company profile URLs in bulk from keywords, domains, or brand names, with country-subdomain targeting — the natural upstream step for this Actor
Linkedin Lead Scraper: Seniority & Department FiltersLinkedIn people/lead search with structured seniority-level and department selectors
Realtor.com Agents by Zip Code Scraper With Market AnalyticsA comparable business-contact directory scraper, for realtor/agent records instead of companies
TikTok User Profile Scraper: Business LeadsComparable social-profile lead scraper for a different platform

💻 How to extract LinkedIn company data programmatically

This Actor runs as a standard Apify Actor: one API call with your input JSON, structured JSON back — no separate signup flow beyond an Apify account and API token.

Python example

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run_input = {
"urls": ["https://www.linkedin.com/company/microsoft"],
"includeAds": True,
"adDateRange": "last-30-days",
}
run = client.actor("<username>/linkedin-company-profile-scraper-and-ad-library-creatives").call(
run_input=run_input
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], item["industry"], item["activeAdsCount"])

Export to spreadsheets or CRM

Every run's dataset can be exported directly from the Apify Console (or via the API) as CSV or Excel. Map name → Company, industry → Industry, employeeCount → Employees, headquarters → HQ, and activeAdsCount → Ads Found for a ready-to-import CRM sheet — the same field-to-label mapping the Actor's own "Overview" dataset view uses.

Yes — this Actor only reads publicly accessible LinkedIn pages (company profile pages and LinkedIn's own public Ad Library), with no login, no session cookie, and no attempt to bypass access controls. These pages are published by LinkedIn and by the advertisers themselves specifically to be publicly discoverable. That said, the output includes some personal data — a public employee-preview sample (employees[]: name, title, profile link) and post authorship — alongside firmographic and advertising data that is purely business/product data. For the personal-data fields, GDPR/CCPA lawful-basis considerations apply to storage and downstream use; for the firmographic and Ad Library fields, LinkedIn's Terms of Service govern reuse. Consult legal counsel for commercial applications involving bulk storage of personal data.

❓ FAQ

What happens if a company has no public ads or its page can't be reached?

If a company currently runs no public ads, activeAdsCount comes back 0 with an empty ads[] array — never a fabricated placeholder row. If the company page itself can't be fetched after maxRetries attempts, the Actor still pushes a row with success: false and the failure reason in error.

Can I get Ad Library data along with the company profile?

Yes — set includeAds: true. You get the full firmographic profile plus ads[], activeAdsCount, adFormatBreakdown, firstAdSeen/lastAdSeen, and advertisingCountries in the same row, capped at maxAdsPerCompany ads (max 24) per company.

How accurate is the data?

The Actor returns data exactly as it appears on the public company page and Ad Library entry at request time. Accuracy depends on how current LinkedIn's own listing is; for time-sensitive use (active-ad monitoring), re-run on a schedule rather than treating one snapshot as durable.

How many companies can I process per run?

There is no maximum on the urls array (only minItems: 1) — large batches are handled through a Request Queue that deduplicates automatically. Throughput is governed by concurrency (1–20, default 3) and, for the Ad Library sub-feature, by LinkedIn's own 24-ad-per-company rendering ceiling.

Why is maxAdsPerCompany capped at 24?

Because LinkedIn's own public Ad Library search page renders at most ~24 ad cards per company, and its &start=/&pageNum=/&paginationToken= parameters all return the identical first page beyond that — there is no working guest-session pagination past it. This Actor discloses the real observed count via adLibraryCoverageNote rather than claiming a higher number.

Are error rows billed the same as successful rows?

Yes. Every row this Actor pushes — success or error, after maxRetries attempts are exhausted — is billed under the same row_result event; there is no separate uncharged error event. Filter on success === true (or error === "") if you want to exclude failed URLs from downstream use.

Does this work with Claude, ChatGPT, and AI agent frameworks?

There is no dedicated MCP server for this Actor. It is callable as a standard Apify API/apify_client HTTP endpoint from any agent framework that can make an authenticated HTTP request and read back JSON.

Can I use this without a LinkedIn account, API key, or developer access?

Yes. The Actor needs only your Apify API token (or Console login) to run — no LinkedIn login, cookie, or API credential is used anywhere in the request path.

Does this download images, videos, or other files?

No. It returns metadata only — URLs and structured fields (creativeImageUrl, logo, advertiserLogo) — never binary files.

🏁 Conclusion

This Actor turns a list of public LinkedIn company page URLs into structured firmographic JSON, and — with one input flag — extends the same run into each company's public Ad Library creative feed and transparency metrics, joined by the numeric organization ID it already harvests from the profile fetch. It is built for ad-tech, SDR, and market-research teams who need firmographics and advertising-activity signals together, without hand-parsing LinkedIn's HTML or hitting its authwall. Start a run in the Apify Console with your company URL list, or call it via apify_client from your own pipeline.