🗂️ LinkedIn Mass Company Profile Finder By Category Directory
Under maintenancePricing
from $4.99 / 1,000 results
🗂️ LinkedIn Mass Company Profile Finder By Category Directory
Under maintenancePricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
Scraper Engine
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
LinkedIn Company Profile Finder — URLs by Category and Location
LinkedIn Mass Company Profile Finder By Category Directory finds LinkedIn company page URLs two ways in one run: from a list of company names, domains or brand keywords, or — with no keyword at all — from a business category and location, such as "plumbers" in "Austin, TX". Every result ships as structured JSON with the matched linkedin URL, slug, discoverySource, and, for directory-discovered businesses, phone and address fields. Configure your categories, locations or keywords below and start a run to watch results land in the dataset live.
🗂️ What is LinkedIn Mass Company Profile Finder By Category Directory?
It's an Apify Actor that resolves company names to their public LinkedIn company page URL, and can also discover the company names themselves from a business category and location using a public business directory. No LinkedIn account, no LinkedIn login, and no business-directory account are required — both pipelines run against public search results and a public directory search page, read straight from the source code. It's built for B2B sales teams, lead-generation agencies, market researchers and developers who need a LinkedIn company URL list without searching one name at a time by hand.
🌐 What LinkedIn company data is publicly available to scrape?
A LinkedIn company page's URL, name and headline stats are visible to anyone with the link; the deeper page — the full employee directory, connections, and complete post history — sits behind a LinkedIn login.
| Data Category | Public (no login) | Requires LinkedIn login |
|---|---|---|
| Company page URL & slug | ✅ | |
| Company name & tagline shown on the page | ✅ | |
| Follower-count badge | ✅ | |
| Full employee / people directory | ✅ | |
| Post & update history beyond the preview | ✅ | |
| Connections / mutual-network data | ✅ | |
| Business-directory listing (name, phone, address) | ✅ | |
| Business-directory accreditation & rating detail | ✅ |
LinkedIn Mass Company Profile Finder By Category Directory only returns publicly visible data — the company page URL discovered via public search results, and the business directory's public contact record. Nothing behind a login wall.
📋 What data can I extract with LinkedIn Mass Company Profile Finder By Category Directory?
Every run returns one JSON row per matched company or discovered business, combining LinkedIn discovery results with business-directory contact details whenever that pipeline is used. The Actor pushes 15 fields per row — every key below, not just what the default dataset view shows.
| Field | Description |
|---|---|
linkedin | Canonical LinkedIn company page URL (https://www.linkedin.com/company/<slug>), or null if no match was found. |
slug | The company's LinkedIn URL slug, extracted from linkedin; null if no match. |
input | The keyword you supplied (keyword pipeline), or the business name discovered from the directory (directory pipeline). |
discoverySource | search_engine (from the urls keyword pipeline) or business_directory (from the category + location pipeline). |
foundBy | Which search engine(s) returned the match — ddgs, bing, or ddgs+bing; null if no match. |
directoryCategory | The business category searched; populated only for directory-pipeline rows. |
directoryLocation | The location searched; populated only for directory-pipeline rows. |
directoryProfileUrl | Link to the business's own listing on the source business directory; directory pipeline only. |
directoryBusinessPhone | The business's phone number, as listed in the directory; directory pipeline only. |
directoryBusinessCity | City from the directory listing's address; directory pipeline only. |
directoryBusinessState | State from the directory listing's address; directory pipeline only. |
directoryBusinessPostalCode | Postal code from the directory listing's address; directory pipeline only. |
proxyMode | Proxy tier active when the row was produced — no-proxy, datacenter, or residential. |
error | Reason no LinkedIn match or no directory business was found; null on success. |
scrapedAt | ISO 8601 UTC timestamp when the row was produced. |
The directory source also publishes streetAddress and country for each business, but the Actor does not carry those two fields into the output row — only phone, city, state and postal code are pushed.
🏷️ Identity & discovery fields
linkedin, slug, input, discoverySource, foundBy, directoryCategory, directoryLocation, directoryProfileUrl — what was searched, what matched, and which pipeline and engine produced it.
📍 Business contact fields
directoryBusinessPhone, directoryBusinessCity, directoryBusinessState, directoryBusinessPostalCode — populated only when a row came from the business-directory pipeline.
🛰️ Run metadata
proxyMode, error, scrapedAt — the proxy tier, outcome, and timestamp for that specific row.
🤖 Add-on: Need full LinkedIn company page data?
This Actor only returns the LinkedIn company URL — it never opens the page itself. For industry, size, HQ, follower count, specialties, posts and employee data from the page itself, feed the linkedin URLs this Actor produces into LinkedIn Company Profile Scraper. If you're chasing lead emails instead of company pages, pair this with LinkedIn Lead Scraper & Company Website Enrichment, which finds LinkedIn posts/profiles containing public email addresses and enriches the company's website domain.
🛠️ Why not build this yourself?
LinkedIn does not publish a public, self-serve API for searching companies by category and location, or for resolving a business name to its company page URL — the LinkedIn API surface that does exist is partner-gated, requires an approved developer application, and does not expose a general company-search-by-category endpoint. Building this pipeline yourself means maintaining two separate search-engine scrapers (DuckDuckGo and Bing), handling their CAPTCHA and rate-limit responses, sourcing and parsing a business-directory dataset for the category + location discovery step, and running a residential-proxy fallback ladder to keep both working as the sources change their blocking behaviour.
LinkedIn Mass Company Profile Finder By Category Directory packages all of that: dual search-engine resolution with automatic proxy escalation, directory discovery against a live business-directory search surface, and a stable 15-field output schema you can point straight at a spreadsheet, CRM import, or LLM pipeline instead of re-writing scraping and retry logic every time a search engine changes its markup.
▶️ How to use LinkedIn Mass Company Profile Finder By Category Directory
No parameter is required, so you can start with just one pipeline or run both together.
- Open LinkedIn Mass Company Profile Finder By Category Directory on its Apify Store listing, or start it via the API /
apify_client. - Provide input: list keywords, company names or domains in
urls, and/or fill indirectoryCategories+directoryLocationsfor keyword-free discovery. - Optionally tune
maxLinkedInMatchesPerName,maxBusinessesPerQuery,concurrentSearchWorkers,searchRetryAttempts, andproxyConfiguration. - Start the run.
- Stream or download results as JSON, CSV, Excel or via the API — each row lands in the dataset the moment it's found.
How to scale to bulk company discovery
urls, directoryCategories and directoryLocations are all list inputs — there's no per-run cap on how many lines you add. Every category is combined with every location into its own discovery query (2 categories × 2 locations = 4 queries), and concurrentSearchWorkers (default 3, max 10) controls how many keywords or queries run in parallel. ⚠️ The directory pipeline's search surface is queried with the country hardcoded to the USA, so category + location discovery only surfaces United States businesses — a non-US location string will not match.
🎯 What can you do with LinkedIn company data?
- 🏢 A B2B sales rep sourcing local prospects uses
directoryCategoryanddirectoryLocationto build a company list for a trade and city without ever typing a company name. - 📊 A market researcher uses
linkedinanddirectoryBusinessCityto see which businesses in a category actually maintain a LinkedIn presence. - 🧑💻 A growth marketer working from an existing brand list uses
urlsplusfoundByto confirm which of their own keywords resolve to a real LinkedIn company page, and which engine confirmed it. - 📇 A lead-gen agency combines
directoryBusinessPhoneanddirectoryProfileUrlwith the resolvedlinkedinURL to hand a sales team both a phone number and a LinkedIn presence in one row. - 🤖 An AI agent or RAG pipeline ingests the typed JSON rows directly —
input,linkedinanddirectoryLocationgive it enough structured context to qualify or enrich a lead without parsing any HTML itself.
🚦 How does LinkedIn Mass Company Profile Finder By Category Directory handle rate limits and blocking?
The urls keyword pipeline queries DuckDuckGo (via the ddgs library) and Bing directly, starting with no proxy to keep runs cheap. If a search engine returns a blocked status (403/407/429/503) or a CAPTCHA page, the Actor retries up to searchRetryAttempts extra times, then escalates the whole run's proxy: no-proxy → Apify Datacenter → Apify Residential (3 fresh residential retries), locking onto whichever tier first returns results for the rest of the run. The business-directory pipeline (directoryCategories + directoryLocations) is handled separately: every directory page fetch always goes through a fresh Apify Residential session (up to 4 attempts with backoff), regardless of what you set in proxyConfiguration — the directory source only reliably answers residential traffic. The Actor does not solve CAPTCHAs; if every retry and every proxy tier is exhausted, the row is still pushed with error describing what happened, instead of failing the whole run.
⬇️ Input
No parameter is required. Provide urls for keyword search, directoryCategories + directoryLocations for keyword-free discovery, or both together.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
urls | No | array (stringList) | Keywords, exact company names, brand names or domains to search — one per line. Each is searched independently. Leave empty to rely only on directory discovery. | ["alma.fr", "\"Acme Corp\""] |
directoryCategories | No | array (stringList) | Business categories/trades to discover, e.g. plumbers, law firms, dental clinics. Combined with every location below into its own discovery query. | ["plumbers", "HVAC contractors"] |
directoryLocations | No | array (stringList) | Locations to search in, e.g. Austin, TX, Chicago, IL. Combined with every category above. | ["Austin, TX", "Chicago, IL"] |
resolveDirectoryToLinkedIn | No | boolean, default true | When true, every business discovered from the directory is automatically searched for a matching LinkedIn company page. When false, you get only the discovered business names/contacts, with no LinkedIn lookup — faster and cheaper. | true |
maxBusinessesPerQuery | No | integer, default 20, min 1, max 100 | How many distinct businesses to collect per category + location combination. | 20 |
maxLinkedInMatchesPerName | No | integer, default 30, min 1, max 200 | Maximum number of distinct LinkedIn company URLs to collect per keyword or per discovered business name. Applies to both pipelines. | 30 |
concurrentSearchWorkers | No | integer, default 3, min 1, max 10 | How many keywords / directory queries are processed at the same time. | 3 |
searchRetryAttempts | No | integer, default 2, min 0, max 5 | How many extra attempts each search engine gets on a name before the Actor escalates to the next proxy tier. | 2 |
proxyConfiguration | No | object (proxy editor), default {"useApifyProxy": false} | Apify proxy for the keyword/search-engine pipeline. Default is no proxy (saves cost); the Actor auto-escalates to Datacenter → Residential if blocked. The directory pipeline always uses its own residential sessions regardless of this setting. | {"useApifyProxy": false} |
Example input
{"urls": ["alma.fr", "\"Acme Corp\" payments"],"directoryCategories": ["plumbers", "HVAC contractors"],"directoryLocations": ["Austin, TX", "Chicago, IL"],"resolveDirectoryToLinkedIn": true,"maxBusinessesPerQuery": 20,"maxLinkedInMatchesPerName": 30,"concurrentSearchWorkers": 3,"searchRetryAttempts": 2,"proxyConfiguration": { "useApifyProxy": false }}
⬆️ Output
Results are typed, normalized JSON with the same 15 fields across every run, available as JSON, CSV, Excel/XLSX, or via the API the moment each row is pushed. Only the row_result event is billed. ⚠️ Not every pushed row is billed the same way: a keyword with zero LinkedIn matches, or a category + location with zero directory businesses found at all, is pushed with error set and every business/LinkedIn field null — and is not charged. A directory business that was found but couldn't be matched to a LinkedIn page is still charged, because the business record itself was successfully returned. To keep only billed rows, filter for error == null OR linkedin != null OR directoryBusinessPhone != null.
Example output
[{"linkedin": "https://www.linkedin.com/company/acme-corp","slug": "acme-corp","input": "\"Acme Corp\" payments","discoverySource": "search_engine","foundBy": "ddgs+bing","directoryCategory": null,"directoryLocation": null,"directoryProfileUrl": null,"directoryBusinessPhone": null,"directoryBusinessCity": null,"directoryBusinessState": null,"directoryBusinessPostalCode": null,"proxyMode": "no-proxy","error": null,"scrapedAt": "2026-07-30T14:02:11.483210+00:00"},{"linkedin": "https://www.linkedin.com/company/austin-flow-plumbing","slug": "austin-flow-plumbing","input": "Austin Flow Plumbing LLC","discoverySource": "business_directory","foundBy": "bing","directoryCategory": "plumbers","directoryLocation": "Austin, TX","directoryProfileUrl": "https://www.bbb.org/us/tx/austin/profile/plumber/austin-flow-plumbing-llc-0875-90012345","directoryBusinessPhone": "(512) 555-0148","directoryBusinessCity": "Austin","directoryBusinessState": "TX","directoryBusinessPostalCode": "78701","proxyMode": "residential","error": null,"scrapedAt": "2026-07-30T14:03:47.912004+00:00"}]
⚙️ How does it work?
The keyword pipeline sends each entry in urls to DuckDuckGo and Bing with a site:linkedin.com/company filter, parses the returned links, and normalizes them to a canonical company URL and slug — no LinkedIn page is ever loaded directly. The directory pipeline crawls a public business-directory search page for each category + location pair, reading the structured business data (name, phone, address) already embedded in that page, then feeds each discovered name through the same search-engine resolution step. Both pipelines run over plain HTTP requests — there's no headless browser involved — escalating through Apify's proxy network when a source blocks the request, and retrying with backoff before giving up on a single name. Only what the search engines and the directory already show publicly is returned, and the 15-field output schema stays identical regardless of how the underlying pages change.
🔌 Integrations
Run LinkedIn Mass Company Profile Finder By Category Directory from wherever you already build — the Apify Console UI, the REST API, or the Python/JS clients — without adding a new vendor to your stack.
Calling it programmatically
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("YOUR_USERNAME/linkedin-mass-company-profile-finder-by-category-directory").call(run_input={"directoryCategories": ["plumbers"],"directoryLocations": ["Austin, TX"],})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["linkedin"], item["directoryBusinessPhone"])
Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.
No-code tools (n8n, Make, LangChain)
In n8n, use the HTTP Request node to call the Actor's run endpoint with your input JSON and Apify API token in the header. In Make, use the official Apify module's "Run Actor and Get Dataset Items" action the same way. In LangChain, wrap that same endpoint as a custom Tool so an agent can trigger a run and read the dataset directly.
⚖️ Is it legal to scrape LinkedIn company and business-directory data?
Scraping publicly available company and business-directory data is generally lawful in the United States and EU, provided you don't bypass a login wall or a paywall — this is a business/company data question, not a personal-data one. LinkedIn Mass Company Profile Finder By Category Directory returns only what's already publicly visible: LinkedIn company page URLs discovered through public search results, and business contact records already published on a public business directory. No LinkedIn login, no directory account, and no private data is involved anywhere in the pipeline. Because the entities here are companies and businesses rather than individuals, GDPR and CCPA — which govern personal data — generally do not attach; the relevant constraints are each source's own Terms of Service and database-rights law, particularly around bulk reuse or republishing of directory content. Consult legal counsel if your use case involves bulk storage of personal data.
❓ Frequently asked questions
What company fields does LinkedIn Mass Company Profile Finder By Category Directory return?
It returns the matched LinkedIn company URL (linkedin), the resolved slug, which engine found it (foundBy), the discoverySource, and, for directory-discovered businesses, phone and address fields. See the full 15-field table above.
Does it require a LinkedIn account or a directory login?
No. Both pipelines read only publicly accessible search results and a public business-directory search page; no LinkedIn credentials, cookies, or directory account appear anywhere in the source code.
How many companies can I extract in one run?
As many as your input allows: every line in urls, and every category × location pair, is processed, each returning up to maxLinkedInMatchesPerName (max 200) LinkedIn matches per name and up to maxBusinessesPerQuery (max 100) businesses per category + location. There's no separate run-level cap beyond those per-item limits.
What happens if a keyword or a category + location query returns zero results?
The row is still pushed rather than skipped, with error set. A keyword with zero LinkedIn matches, or a category + location with zero directory businesses at all, comes back with linkedin and every directory field null, and is not billed. A directory business that was found but couldn't be matched to a LinkedIn page is still billed, since the business record (name, phone, address) was successfully returned — only linkedin, slug and foundBy are null in that case.
Can I search multiple categories, locations or keywords at once?
Yes. urls, directoryCategories and directoryLocations are all list inputs. Every category is combined with every location into its own discovery query, and concurrentSearchWorkers (default 3, max 10) controls how many of those run in parallel.
Does LinkedIn Mass Company Profile Finder By Category Directory work with Claude, ChatGPT, and other AI agent tools?
Yes, as an HTTP endpoint — there's no dedicated MCP server for this Actor. Any agent framework that can call Apify's REST API (or the apify_client library) can start a run and read back typed JSON rows directly.
How is the category + location discovery different from a plain keyword search?
Directory discovery doesn't require you to already know a company name: given a category (e.g. plumbers) and a location (e.g. Austin, TX), the Actor first crawls a public business-directory search page to find real candidate businesses, then resolves each discovered name to LinkedIn using the same search-engine mechanism as the urls keyword mode. Every row carries discoverySource so you can tell which pipeline produced it.
Does it return data in a format LLMs can use directly?
Yes. Every row is typed, normalized JSON with the same 15 field names across runs — no HTML parsing or CSS selectors needed. Pass it straight into an LLM prompt, index it into a vector store, or feed it to an agent tool.
What happens when LinkedIn, DuckDuckGo, Bing or the business directory change their layout or anti-bot system?
The Actor is maintained, and the 15-field output schema stays the same regardless of upstream layout changes — result parsing and the proxy-escalation ladder are what absorb the churn. No specific update turnaround is contractually promised.
Can I use it without managing proxies or browser infrastructure?
Yes. There's no headless browser to configure — both pipelines run over plain HTTP requests — and the Actor manages its own Apify Datacenter/Residential proxy escalation plus directory-specific residential session rotation; you only need to set proxyConfiguration if you want to start on a specific tier.
Which fields work best for AI training data and RAG indexing?
For RAG, index input together with directoryCategory and directoryLocation — they carry the free-text or trade/location context tied to each match. For consistent structured training data, discoverySource, foundBy and proxyMode are fixed-vocabulary strings, and linkedin / directoryProfileUrl are stable typed URLs across every run.
🔗 Related scrapers
| Scraper | What it extracts |
|---|---|
| LinkedIn Company Profile Scraper | Full public LinkedIn company page data — name, industry, size, HQ, followers, specialties, posts and employees. |
| LinkedIn Lead Scraper & Company Website Enrichment | LinkedIn profiles/posts containing public lead email addresses, plus company-website tech-stack enrichment. |
💬 Your feedback
Found a bug, or missing a field you need? Open an issue from the Actor's Issues tab on its Apify Console page — that's the fastest way to reach the maintainer, and every report helps keep the output schema accurate as LinkedIn and the search engines change.