LinkedIn Company About Scraper: Keyword Search & Advance Filter avatar

LinkedIn Company About Scraper: Keyword Search & Advance Filter

Pricing

$19.99/month + usage

Go to Apify Store
LinkedIn Company About Scraper: Keyword Search & Advance Filter

LinkedIn Company About Scraper: Keyword Search & Advance Filter

LinkedIn Company About Scraper extracts the full About section from any public LinkedIn company page. Collect overview text, mission, specialties, size, and key details. Ideal for market research, lead generation, competitive analysis, and workflows needing structured company insight.

Pricing

$19.99/month + usage

Rating

0.0

(0)

Developer

API Empire

API Empire

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

0

Monthly active users

9 days ago

Last modified

Share

LinkedIn Company Scraper — Extract Profiles, Firmographics & Matches

Turn a keyword, brand name, or company name into real LinkedIn company pages, then pull structured About-page data from each one. LinkedIn Company About Scraper: Keyword Search & Advance Filter resolves free-text queries to linkedin.com/company/... URLs, scrapes company profiles and firmographics (industry, employee-count range, size bucket, associated members), and applies post-discovery industry/location/employee-size filters — all returned as typed, normalized JSON with no HTML and no selectors to parse. Feed it a name, a URL, or a broad industry term and get back a filtered, structured company dataset.

What is LinkedIn Company About Scraper: Keyword Search & Advance Filter?

LinkedIn Company About Scraper: Keyword Search & Advance Filter is a LinkedIn company research tool that combines keyword/name discovery with the classic public About-page scrape. Give it company names, brand names, or industry keywords and it resolves each one to matching LinkedIn company pages, then scrapes every resolved (or directly supplied) page for firmographic data. No LinkedIn login, cookies, or session is required — discovery search and company-page fetches both run against LinkedIn's public guest surface.

  • Discover companies by keyword, brand, or industry term (discoveryQueries)
  • Scrape companies directly from known LinkedIn URLs or usernames (directCompanyUrls)
  • Extract firmographics: industry, employee-count range, size bucket, associated members, company URN
  • Apply post-discovery filters on industry, headquarters location, and employee-count range
  • Export results as JSON, CSV, or Excel from the Apify dataset — no proxy management required

What data does LinkedIn Company About Scraper: Keyword Search & Advance Filter collect?

The Actor returns one row per company, grouped here into three data areas — company profile fields, firmographic fields, and discovery/filter metadata:

Data TypeKey FieldsJSON Field Names
Company Profile & About DataCompany name, LinkedIn URL, website domain, About description, headquarters locationcompany_name, linkedin_url, domain, description, location
Firmographic / Company-Size DataIndustry category, employee-count text, parsed employee range, size bucket, associated members, stable company URNcategory, number_employees, employeeCountRange, employeeSizeBucket, associated_members, companyUrn
Discovery & Filter MetadataResult type (direct vs. discovered), discovery flag, matched query, scrape success flag, scrape timestamptype, isDiscovered, discoveryQuery, success, scraped_at

Need more LinkedIn data?

If you need funding rounds and deeper firmographic signals on top of the About-page basics, LinkedIn Company Scraper With Firmographics & Funding Data covers that ground. If you need the people behind a company rather than the company record itself, LinkedIn Company Employees Scraper pulls employee-level data for the same company pages.

Why not build this yourself?

LinkedIn's official developer APIs are heavily restricted and scoped mostly to a company's own managed pages or connected ad accounts under partner approval — they are not designed for open-ended keyword search across arbitrary third-party companies. Building a keyword-to-company resolver and an About-page parser yourself means maintaining a search-result parser, a headless-browser fetch pipeline, retry/backoff logic, and proxy fallback — all of which break independently whenever LinkedIn or the search engine changes its markup. This Actor already runs that pipeline (Playwright-based Chromium fetch, DuckDuckGo-based discovery, datacenter-to-residential proxy fallback) so you get structured output without owning the scraping infrastructure.

Why do developers and teams scrape LinkedIn?

For sales and go-to-market teams

Turn a target industry or a list of competitor names into a structured account list without manually collecting LinkedIn URLs first. Feed broad terms into discoveryQueries (e.g. "fintech startups", "renewable energy company"), then narrow the result set with industryIncludeKeywords and minEmployeeCount/maxEmployeeCount to match your ideal customer profile before it ever reaches a CRM. Because employeeSizeBucket classifies each company as SMB, Mid-Market, or Enterprise, segmenting a discovered list by deal size is a single filter step, not a manual lookup per account.

For market and competitive researchers

Resolve an industry keyword to the real companies operating in it, then compare their category, location, and number_employees fields side by side. Because directCompanyUrls and discoveryQueries can run in the same job, a researcher can combine a known competitor list with a broader keyword sweep and get one consistent dataset back, tagged by type and discoveryQuery so the origin of every row stays traceable. Narrowing with locationIncludeKeywords or industryExcludeKeywords keeps a market map focused on a specific region or sub-sector, and exporting the dataset as CSV drops straight into a spreadsheet-based competitive tracker.

For investors and company screeners

Screen companies by headcount band and industry before deeper diligence. The parsed employeeCountRange ({start, end}) and employeeSizeBucket give a numeric, filterable proxy for company scale straight from LinkedIn's own "Company size" text, without manually opening each page to read it. Setting minEmployeeCount and maxEmployeeCount directly on a run limits a discovery sweep to a target headcount band instead of filtering a raw export afterward, and associated_members gives a secondary read on a company's LinkedIn footprint. Combined with companyUrn, results de-duplicate reliably across repeated runs as a watchlist grows.

For developers building data products

Because output is typed JSON with a stable field set (company_name, companyUrn, employeeCountRange, etc.), it can be piped directly into a CRM enrichment job, a scheduled monitoring pipeline, or an internal company database without a parsing layer. The type/isDiscovered/discoveryQuery fields make it straightforward to build a pipeline that re-runs the same keyword list on a schedule and diffs new companies against what was already stored. Triggering runs through the Apify API rather than the Console, and checking the success and scraped_at fields on each row, makes it easy to build monitoring that flags stale or failed fetches automatically.

How to scrape LinkedIn (step by step)

  1. Open the Actor's page on Apify and click Try for free (or Run) to load the input form.
  2. Provide input: list company names, brand names, or industry keywords in discoveryQueries, and/or LinkedIn company URLs or usernames in directCompanyUrls. At least one of the two is required — an empty run with neither produces no output.
  3. Set filters and limits: maxCompaniesPerQuery to cap matches per keyword, and optionally industryIncludeKeywords, industryExcludeKeywords, locationIncludeKeywords, minEmployeeCount, and maxEmployeeCount to narrow the scraped result set.
  4. Click Start to run the Actor. Discovery queries resolve first, then every resolved and directly supplied company page is scraped in sequence.
  5. Download results from the Dataset tab as JSON, CSV, or Excel, or pull them programmatically via the Apify API.

What to do when LinkedIn changes its structure

The Actor is actively maintained, and the output schema (field names and types) stays stable across maintenance updates, so downstream integrations built against it keep working without code changes on your end.

⬇️ Input

ParameterRequiredTypeDescriptionExample Value
discoveryQueriesNoarrayCompany names, brand names, or industry/keyword terms. Each query is searched and auto-resolved to real LinkedIn company page(s), scraped the same way as a direct URL.["Tesla", "fintech startups", "renewable energy company"]
maxCompaniesPerQueryNointeger (1-10)How many distinct LinkedIn company pages to resolve per keyword/name query. A specific company name usually needs just 1; a broad industry keyword benefits from 3-5. Default is 3.3
discoverySearchRegionNostringSearch-engine region code used while resolving keyword/name queries to companies (e.g. us-en, uk-en, de-de). Default is us-en."us-en"
includeUnresolvedQueriesNobooleanWhen ON, a query that resolves to zero LinkedIn company pages still produces a diagnostic output row (success=false, discoveryStatus="unresolved") instead of being silently skipped. Default OFF.false
discoveryMaxConcurrencyNointeger (1-20)How many keyword/name queries to resolve in parallel during discovery. Default is 5.5
directCompanyUrlsNoarrayLinkedIn company URLs or bare usernames to scrape directly, bypassing keyword discovery. Same list as the base actor's startUrls — either key works, and both can be combined with discoveryQueries in the same run.["https://www.linkedin.com/company/microsoft", "google"]
industryIncludeKeywordsNoarrayPost-discovery filter: keep only scraped companies whose Industry field contains ANY of these keywords (case-insensitive substring match). Leave empty to keep all industries.["Software", "Automotive"]
industryExcludeKeywordsNoarrayPost-discovery filter: drop scraped companies whose Industry field contains ANY of these keywords. Leave empty to exclude nothing.["Staffing"]
locationIncludeKeywordsNoarrayPost-discovery filter: keep only scraped companies whose Headquarters/Location text contains ANY of these keywords. Leave empty to keep all locations.["California", "United States"]
minEmployeeCountNointegerPost-discovery filter: keep only companies whose parsed employee-count range overlaps at least this number. A company whose employee count could not be parsed is excluded when this filter is set. Leave blank for no minimum.50
maxEmployeeCountNointegerPost-discovery filter: keep only companies whose parsed employee-count range overlaps at most this number. Leave blank for no maximum.5000
maxFetchRetriesNointeger (0-10)How many times to retry fetching a company's About page on a block/timeout before giving up. Default is 3.3
requestDelaySecsNointeger (0-30)Seconds to wait before fetching each company's About page. Default is 2.2
proxyConfigurationNoobjectProxies used for both discovery searches and company-page scraping. If LinkedIn or the search engine rejects the proxy, a residential proxy is used as a fallback.{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}

No parameter is marked required in the schema, but the Actor needs at least one of discoveryQueries or directCompanyUrls populated to have anything to resolve or scrape.

Example JSON input:

{
"discoveryQueries": ["Tesla", "fintech startups", "renewable energy company"],
"maxCompaniesPerQuery": 3,
"discoverySearchRegion": "us-en",
"includeUnresolvedQueries": false,
"discoveryMaxConcurrency": 5,
"directCompanyUrls": ["https://www.linkedin.com/company/microsoft", "google"],
"industryIncludeKeywords": ["Software", "Automotive"],
"industryExcludeKeywords": ["Staffing"],
"locationIncludeKeywords": ["California", "United States"],
"minEmployeeCount": 50,
"maxEmployeeCount": 5000,
"maxFetchRetries": 3,
"requestDelaySecs": 2,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

The most common input mistake is leaving both discoveryQueries and directCompanyUrls empty — the run logs an error and produces no output, since the Actor has nothing to resolve or scrape.

⬆️ Output

Every row is typed, normalized JSON pushed to the Apify dataset, exportable as JSON, CSV, or Excel directly from the Dataset tab. Two structurally different row shapes can appear in the same run: a scraped company row, and — only when includeUnresolvedQueries is enabled — a diagnostic row for a query that matched no company.

Scraped Company Profile

{
"type": "keyword_discovery",
"isDiscovered": true,
"discoveryQuery": "electric vehicle manufacturer",
"company_name": "Tesla",
"linkedin_url": "https://www.linkedin.com/company/tesla-motors",
"companyUrn": "15564",
"domain": "https://www.tesla.com",
"category": "Motor Vehicle Manufacturing",
"number_employees": "10,001+ employees",
"employeeCountRange": { "start": 10001, "end": null },
"employeeSizeBucket": "Enterprise",
"associated_members": "146,000",
"location": "Austin, Texas",
"description": "Tesla's mission is to accelerate the world's transition to sustainable energy...",
"success": true,
"scraped_at": "2026-07-16T10:04:12.000000"
}

Unresolved Query Diagnostic

Produced only when includeUnresolvedQueries is set to true and a query in discoveryQueries resolves to zero LinkedIn company pages:

{
"company_name": "",
"linkedin_url": null,
"domain": "",
"category": "",
"number_employees": "",
"associated_members": "",
"location": "",
"description": "",
"success": false,
"scraped_at": "2026-07-25T09:12:41.000000",
"companyUrn": null,
"employeeCountRange": { "start": null, "end": null },
"employeeSizeBucket": "Unknown",
"type": "keyword_discovery",
"discoveryQuery": "an extremely obscure niche term",
"discoveryStatus": "unresolved"
}

This Actor bills on a pay-per-event basis: the row_result event is charged for every scraped company row (both successful and failed fetches). Unresolved-query diagnostic rows are pushed without the row_result charge, so they do not count toward billed results. If you need to exclude them from analysis, filter the dataset for rows where discoveryStatus does not equal "unresolved".

How many results can you scrape with LinkedIn Company About Scraper: Keyword Search & Advance Filter?

There is no hard result cap set in the Actor itself. Total output volume is the number of unique companies resolved across directCompanyUrls plus every discoveryQueries entry, each capped at maxCompaniesPerQuery (1-10) matched companies and deduplicated by canonical company URL across the whole run. discoveryMaxConcurrency (1-20) controls how many keyword queries are resolved in parallel, not the total number of results. Pagination in the platform sense does not apply — each company produces exactly one output row, so a run's size scales linearly with the number of queries and URLs you supply, and with maxCompaniesPerQuery for broad keyword terms. To scrape more companies, add more entries to discoveryQueries or directCompanyUrls, or raise maxCompaniesPerQuery for keyword terms that should resolve to more than the default number of matches.

Integrate LinkedIn Company About Scraper: Keyword Search & Advance Filter and automate your workflow

LinkedIn Company About Scraper: Keyword Search & Advance Filter works with any language or tool that can send an HTTP request.

REST API integration

import requests
TOKEN = "YOUR_APIFY_API_TOKEN"
ACTOR = "linkedin-company-about-scraper-keyword-search-advance-filter"
run = requests.post(
f"https://api.apify.com/v2/acts/{ACTOR}/run-sync-get-dataset-items",
params={"token": TOKEN},
json={"discoveryQueries": ["fintech startups"], "maxCompaniesPerQuery": 3},
)
companies = run.json()
for company in companies:
print(company["company_name"], company["employeeSizeBucket"])

Works in Python, Node.js, Go, Ruby, cURL.

MCP for AI agents

Apify's MCP server (mcp.apify.com) exposes Apify Actors — including this one — as callable tools for MCP-compatible clients such as Claude Desktop, Cursor, and Windsurf. Add the Actor's name, as shown on its Apify Store page, to the server's actor list to call it as an agent tool without writing custom integration code.

Automation platforms (n8n, Make, LangChain)

In n8n, the Apify node's "Run Actor and get dataset" operation can call this Actor by ID and feed discoveryQueries or directCompanyUrls from an upstream node. In Make, the Apify app's "Run Actor" module accepts the same input JSON and passes returned company rows into downstream modules (e.g. a CRM or spreadsheet connector). In LangChain, the Actor can be wrapped as a tool via the langchain-apify integration so an agent can query LinkedIn companies by keyword as part of a larger chain.

Scraping publicly available LinkedIn company data is generally permissible, though it should be done in line with applicable law and LinkedIn's own Terms of Service. LinkedIn Company About Scraper: Keyword Search & Advance Filter returns only data visible on LinkedIn's public company About pages and public search results — no login-gated or private content is accessed. Because the output is business and company record data (industry, employee counts, descriptions) rather than personal profile data, the relevant framing is LinkedIn's Terms of Service and database-rights considerations rather than GDPR/CCPA personal-data rules. Consult legal counsel for commercial use cases involving bulk personal data.

Frequently asked questions

Does LinkedIn Company About Scraper: Keyword Search & Advance Filter work without a LinkedIn account?

Yes. Both the keyword/name discovery step and the company-page scrape run against LinkedIn's public guest pages — no login, cookies, or session is required.

How often is the scraped data updated?

Data is fetched live on every run. Each execution performs a fresh discovery search and a fresh company-page fetch; nothing is served from a cache.

What happens if a company's About page can't be fetched or doesn't exist?

A genuine 404 (company slug does not exist) or a failed fetch after all retries produces a row with success: false and empty profile fields, rather than being dropped or fabricated. The row still carries linkedin_url, type, and scraped_at so you can see which input failed.

Can I scrape private or restricted LinkedIn company content?

No. Only publicly accessible company About-page content and public search results are returned. Login-gated or member-only company content is not accessed.

What's the difference between discoveryQueries and directCompanyUrls?

discoveryQueries takes free-text company names, brand names, or industry keywords and resolves each one to matching LinkedIn company URLs before scraping. directCompanyUrls takes LinkedIn company URLs or usernames you already have and scrapes them directly, skipping discovery. Both can be used in the same run and are deduplicated together.

Does maxCompaniesPerQuery guarantee that many results per query?

No. It's a ceiling, not a guarantee — a query returns up to maxCompaniesPerQuery matching company pages, but fewer if the discovery search finds fewer matches. Turn on includeUnresolvedQueries to see a diagnostic row for queries that resolve to nothing.

Does LinkedIn Company About Scraper: Keyword Search & Advance Filter work for AI agent workflows and LLM pipelines?

Yes. It's callable as an HTTP endpoint through the Apify API from any agent framework, and it's registrable as a tool through Apify's MCP server (mcp.apify.com). Every response is typed JSON with stable field names — no HTML and no parsing step before passing results to an LLM.

How does LinkedIn Company About Scraper: Keyword Search & Advance Filter handle LinkedIn's anti-bot system?

Company pages are fetched with a real headless Chromium browser (via Playwright) rather than raw HTTP requests, which reduces LinkedIn's HTTP 999 bot-detection responses. On a 403/429/999 block, the Actor falls back from its configured proxy to a residential proxy, and retries fetches up to maxFetchRetries times with backoff. Discovery search requests escalate through a direct-to-datacenter-to-residential proxy ladder on a block.

Can I use LinkedIn Company About Scraper: Keyword Search & Advance Filter without managing proxies?

Yes. Apify Proxy configuration is optional input, and the Actor automatically falls back to a residential proxy if a request is blocked — you don't have to build or monitor that fallback logic yourself.

What happens when LinkedIn changes its structure or blocks the scraper?

The Actor is actively maintained, and its output schema — field names and types — stays stable across maintenance updates, so integrations built against it keep working without changes on your end.

Your feedback

Found a bug or a field that doesn't match what LinkedIn actually shows? We want to know. Reach out through the Actor's Issues tab on its Apify Store page, or contact API-Empire support directly — active feedback keeps this Actor accurate as LinkedIn's own pages change.