LinkedIn Mass Company Profile Finder : Business Email & Website avatar

LinkedIn Mass Company Profile Finder : Business Email & Website

Pricing

from $5.99 / 1,000 results

Go to Apify Store
LinkedIn Mass Company Profile Finder : Business Email & Website

LinkedIn Mass Company Profile Finder : Business Email & Website

LinkedIn Mass Company Profile Finder — Find company profiles in bulk and extract business emails, websites, company names, industries, locations, employee counts, and LinkedIn URLs. Build targeted B2B lead lists for sales, prospecting, and market research.

Pricing

from $5.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapier

Scrapier

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

LinkedIn Company Finder — Bulk URLs, Business Email & Website

Find LinkedIn company profile URLs in bulk from a list of keywords, domains, or brand names — searched across DuckDuckGo and Bing with a site:linkedin.com/company filter, no LinkedIn login involved. For each match you can optionally resolve the company's official website and a business contact email, using the same public search engines. Every match is structured JSON, pushed to the dataset the moment it's found — ready to pass to a CRM, an LLM prompt, or a lead-scoring pipeline. Point it at a spreadsheet of company names or domains and get back verified linkedin.com/company/... pages plus enrichment, without touching LinkedIn's authenticated UI.


What is the LinkedIn Mass Company Profile Finder?

It's a bulk LinkedIn company search tool: give it a list of keywords — domains, exact company names, brand names, or plain text — and it returns every matching linkedin.com/company/<slug> URL it can find via public search engines, one row per match. On top of company discovery it adds two opt-in enrichment steps, business email discovery and company website resolution, run against the same search engines rather than a separate paid data provider. No LinkedIn account, login, or cookies are used or required at any point — every result comes from publicly indexed search results.

  • Bulk keyword search — process a list of domains, brand names, or company names in one run (urls)
  • Multi-engine matching — every keyword is checked against DuckDuckGo and Bing, merged and deduplicated
  • Country-subdomain normalization — matches on fr.linkedin.com, uk.linkedin.com, de.linkedin.com, etc. are all normalized to the canonical https://www.linkedin.com/company/<slug> form
  • Business email discovery (opt-in)includeEmailDiscovery, capped per company by maxEmailQueriesPerCompany
  • Company website resolution (opt-in)includeWebsiteDiscovery
  • Configurable concurrency and retriesworkers, maxRetries, maxResultsPerKeyword

What data can you get with the LinkedIn Company Finder?

Every run can return a verified LinkedIn company match, and — if you turn the opt-in steps on — a resolved business email and website for that same company.

Result TypeExtracted FieldsPrimary Use Case
LinkedIn company matchlinkedin, slug, foundBy, input, proxyMode, scrapedAt, errorVerified LinkedIn company page discovery from a keyword, domain, or brand name
Business email (opt-in)businessEmailFirst-touch B2B contact point for outreach and CRM enrichment
Company website (opt-in)companyWebsiteDomain verification and lead enrichment

Business email & website enrichment

When includeEmailDiscovery and/or includeWebsiteDiscovery are turned on, each found company gets a follow-up pass through the same search engines — no LinkedIn page is fetched, and no third-party enrichment API key is needed. Website resolution runs one query per company for its likely official domain, excluding LinkedIn and other social/directory hosts. Email discovery then runs a ranked set of SERP-mining query patterns (capped by maxEmailQueriesPerCompany), stopping at the first non-personal address it finds — Gmail, Yahoo, Outlook, and other free-mail domains are filtered out. If both are enabled, the resolved website's domain is used to narrow the email search:

{
"linkedin": "https://www.linkedin.com/company/openai",
"companyWebsite": "https://openai.com",
"businessEmail": "press@openai.com"
}

A field that can't be verified is returned as null — never a fabricated address.

Multi-engine company match

Each keyword is searched independently on DuckDuckGo and Bing; hits from both are merged into a single deduplicated list per keyword, and foundBy records which engine(s) confirmed each URL (ddgs, bing, or bing+ddgs). A company confirmed by both engines is a stronger signal worth prioritizing first in an outreach queue.


Why not build this yourself?

LinkedIn does not offer a self-serve public API for searching companies by arbitrary keyword and returning a list of matching pages — building this yourself means scraping search-engine result pages directly. That means parsing HTML selectors that change without notice, detecting CAPTCHA and block pages, and rotating proxies by hand every time an engine throttles a burst of automated queries. This Actor already implements that: it detects blocked responses, retries with backoff, and automatically escalates through a no-proxy → datacenter → residential proxy ladder (with retries) when a search engine blocks a request — then locks onto whichever tier worked for the rest of the run.


LinkedIn company finder vs. B2B email finder — what's the difference?

A LinkedIn company finder returns a list of matching company pages — nothing else. A B2B email finder (or contact/lead-enrichment tool) starts from a known company and tries to surface a contact address, usually as a separate product with its own account and API key. Readers often treat these as two tools they have to stitch together: one to find the company page, another to get a way to contact it.

This Actor collapses both steps into one run. With includeWebsiteDiscovery and includeEmailDiscovery turned on, the same keyword list that resolves LinkedIn company URLs also resolves each company's website (companyWebsite) and a business contact email (businessEmail) — in the same dataset row, from the same search engines, with no second tool or API key. With both off, it behaves as a plain company-URL finder.


How to find LinkedIn company profiles with this Actor

  1. Open the Actor on its Apify Store page and click Try for free (or run it from your own Apify account).
  2. Enter your keywords in urls — one per line: a domain (alma.fr), an exact company name in quotes ("Acme Corp"), or a brand plus qualifier ("Stripe" payments).
  3. Set the real query controls: maxResultsPerKeyword (results inspected per engine per keyword), workers (parallel keywords), and maxRetries (retries per engine before proxy escalation).
  4. Turn on includeWebsiteDiscovery and/or includeEmailDiscovery if you want enrichment, and click Start.
  5. Watch results arrive in the dataset in real time, then export as JSON, CSV, or XLSX.
{
"urls": ["alma.fr", "Stripe payments", "Anthropic AI"],
"includeWebsiteDiscovery": true,
"includeEmailDiscovery": true
}

How to run multiple keywords in one job

urls accepts any number of lines — each keyword is searched independently and processed as its own task. The workers input controls how many of those keywords run concurrently (default 3, up to 20); raising it processes a large keyword list faster, lowering it reduces how often search engines see bursts of requests from the run.


⬇️ Input

ParameterRequiredTypeDescriptionExample Value
urlsYesarray (stringList)Search keywords — domains, exact company names, brand + qualifier, or plain text. One per line; quotes force an exact-match phrase.["alma.fr", "Stripe payments", "Anthropic AI"]
maxResultsPerKeywordNointeger (default 30, min 1, max 100)Upper bound on how many search results are inspected per keyword per engine.30
workersNointeger (default 3, min 1, max 20)How many keywords are processed in parallel.3
maxRetriesNointeger (default 2, min 0, max 10)How many times a single engine is retried (with backoff) before the run escalates to the next proxy tier.2
includeEmailDiscoveryNoboolean (default false)Discover a business contact email per found company using a capped set of search patterns.true
maxEmailQueriesPerCompanyNointeger (default 5, min 1, max 29)Caps how many email-search patterns are tried per company (only used when includeEmailDiscovery is on).5
includeWebsiteDiscoveryNoboolean (default false)Resolve each found company's official website/domain (excludes LinkedIn and other social/directory sites).true
proxyConfigurationNoobject (editor: proxy)Apify proxy configuration. Default is no proxy; the Actor auto-escalates to Datacenter then Residential if blocked.{"useApifyProxy": false}

Example input

{
"urls": ["alma.fr", "Stripe payments", "Anthropic AI"],
"maxResultsPerKeyword": 30,
"workers": 3,
"maxRetries": 2,
"includeEmailDiscovery": true,
"maxEmailQueriesPerCompany": 5,
"includeWebsiteDiscovery": true,
"proxyConfiguration": { "useApifyProxy": false }
}

Common pitfall: includeEmailDiscovery on its own runs email-search patterns with no domain filter, which is a noisier query. Turn on includeWebsiteDiscovery at the same time — the resolved domain is used to narrow the email search to that company's own site, improving precision at the cost of one extra request per company.


⬆️ Output

Every result is typed, normalized JSON with a consistent schema across runs, exportable as JSON, CSV, XLSX, or via the Apify API. One row is pushed per (keyword → LinkedIn company) match; keywords that return no match at all still push one row, with linkedin and related fields set to null and error populated.

Scraped results

[
{
"linkedin": "https://www.linkedin.com/company/openai",
"input": "Anthropic AI",
"slug": "openai",
"foundBy": "bing+ddgs",
"businessEmail": "press@openai.com",
"companyWebsite": "https://openai.com",
"proxyMode": "no-proxy",
"error": null,
"scrapedAt": "2026-07-30T09:12:41.552Z"
},
{
"linkedin": "https://fr.linkedin.com/company/alma-payments",
"input": "alma.fr",
"slug": "alma-payments",
"foundBy": "ddgs",
"businessEmail": null,
"companyWebsite": "https://alma.fr",
"proxyMode": "datacenter",
"error": null,
"scrapedAt": "2026-07-30T09:12:44.118Z"
},
{
"linkedin": null,
"input": "a very obscure private company name",
"slug": null,
"foundBy": null,
"businessEmail": null,
"companyWebsite": null,
"proxyMode": "datacenter",
"error": "ddgs: temporary search issue; bing: temporary search issue",
"scrapedAt": "2026-07-30T09:12:47.903Z"
}
]

Field reference

FieldDescription
linkedinCanonical LinkedIn company URL, normalized to https://www.linkedin.com/company/<slug>. null if no match was found for that keyword.
inputThe keyword exactly as entered in urls.
slugThe LinkedIn company slug — everything after /company/. null when there's no match.
foundByWhich engine(s) returned this URL: ddgs, bing, or bing+ddgs. null when there's no match.
businessEmailBusiness contact email found for the company, or null if includeEmailDiscovery is off or none was found.
companyWebsiteOfficial website/domain resolved for the company, or null if includeWebsiteDiscovery is off or none was found.
proxyModeProxy tier active when this row was produced: no-proxy, datacenter, or residential.
errornull on a successful match. Populated only when a keyword returned no match at all (e.g. "ddgs: temporary search issue; bing: temporary search issue").
scrapedAtISO 8601 UTC timestamp of when the row was collected.

⚠️ Charging note: only rows with a real match are billed under the row_result pay-per-event — those are the rows pushed with error: null. Keywords that returned no match at all are still pushed to the dataset for visibility, but not charged. To see only billed results, filter the dataset on error == null (equivalently, linkedin != null).


How can I use the data from the LinkedIn Company Finder?

  • 🏢 B2B sales and lead generation teams: turn a target-account list into verified linkedin pages plus a starting businessEmail and companyWebsite, ready to load into a CRM or sequencer.
  • 🤖 AI engineers and LLM developers: feed the structured JSON straight into an agent or RAG pipeline as grounding context — a lookup step that returns a real company page and contact point before the model drafts outreach.
  • 📊 Market researchers: map every public LinkedIn company page matching a niche keyword or product category, using foundBy to weight confidence in each match.
  • 🎯 Account-based marketing teams: build a prospect list with LinkedIn URL, website, and business email in one pass instead of stitching together a URL finder and a separate enrichment tool.

How do you monitor company and contact discovery over time?

Re-running the same urls list on a schedule turns this Actor into a lightweight discovery-and-enrichment monitor. Between runs, diff the linkedin, companyWebsite, and businessEmail fields per keyword: a keyword that previously returned error and now returns a linkedin match means a company has become indexed since the last run; a businessEmail or companyWebsite that flips from null to a value means that company has newly published discoverable contact information. Track proxyMode too — a run that consistently needs residential signals the search engines are throttling that keyword set more aggressively than before.

A practical loop: schedule a run across your target-account keyword list, store each run's dataset, and alert whenever a previously-null businessEmail or companyWebsite field gets filled in for a keyword you're tracking. Set this up with an Apify Schedule on this Actor, and pull each run's dataset via the API to compare against the last.


Integrate the LinkedIn Company Finder and automate your workflow

The LinkedIn Company Finder works with any language or tool that can call the Apify API — there's no LinkedIn-specific credential to manage.

REST API with Python

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor(
"your-username/linkedin-mass-company-profile-finder-business-email-and-website"
).call(run_input={
"urls": ["alma.fr", "Stripe payments", "Anthropic AI"],
"includeWebsiteDiscovery": True,
"includeEmailDiscovery": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["linkedin"], item.get("companyWebsite"), item.get("businessEmail"))

Scheduled monitoring and delivery

The Actor has no built-in webhook or scheduling logic of its own — use the Apify platform's own features instead. Create an Apify Schedule to re-run a saved keyword list on a cadence, and attach a run webhook to push each run's completion (and dataset ID) to your own endpoint for downstream processing.


Scraping publicly accessible LinkedIn company pages is generally lawful in the United States — in hiQ Labs, Inc. v. LinkedIn Corp. (9th Circuit, 2019, reaffirmed 2022), the court held that accessing publicly available LinkedIn data does not violate the Computer Fraud and Abuse Act. This Actor returns only what's already published on a public LinkedIn company page and public search-engine listings — it never logs in, uses cookies, or accesses authenticated content.

LinkedIn company pages are business entities, so this sits closer to terms-of-service and database-rights territory than to personal-data regulation — LinkedIn's own Terms of Service restrict automated access, independent of whether the underlying data is public. The opt-in businessEmail field is filtered to exclude personal free-mail providers, but any email address you collect and use for outreach is still subject to anti-spam law (e.g. CAN-SPAM, CASL) and, where the address can identify an individual, GDPR/CCPA. Scraping for one-off research carries a different risk profile than bulk storage for repeated commercial outreach — consult your legal team for the latter.


Frequently asked questions

Does it match company pages on regional LinkedIn subdomains?

Yes. Matches on subdomains like fr.linkedin.com, uk.linkedin.com, or de.linkedin.com are recognized and normalized to the canonical https://www.linkedin.com/company/<slug> form before being pushed to the dataset.

Can I control how many results are checked per keyword?

Yes — maxResultsPerKeyword (default 30, max 100) sets how many search results are inspected per keyword, per engine. Raising it can surface more matches for broad or ambiguous keywords, at the cost of more requests.

How does it handle search-engine blocking?

Blocked or CAPTCHA-flagged responses (HTTP 403, 407, 429, 503, or a detected CAPTCHA page) trigger a retry with exponential backoff, up to maxRetries times per engine. If an engine keeps failing, the run escalates the proxy tier — no-proxy → datacenter → residential, with up to 3 residential retries — and locks onto whichever tier succeeds for the rest of the run.

Does it extract a business email and company website?

Yes, when enabled. includeWebsiteDiscovery resolves companyWebsite; includeEmailDiscovery resolves businessEmail using a capped set of search patterns (maxEmailQueriesPerCompany). Both are best-effort — a company with no public, indexed match returns null in that field rather than a guessed value.

How many results does it return per query?

There's no fixed cap on companies returned per keyword — it depends on how many distinct company pages appear across the top maxResultsPerKeyword results (default 30, max 100) from each engine, after deduplication. Keywords with no indexed match return a single row with linkedin: null and an error message.

How do I monitor a target-account list over time?

Schedule a repeated run over the same urls list, store each run's dataset, and diff linkedin, companyWebsite, and businessEmail per keyword between runs to catch newly-indexed companies or newly-published contact details. See "How do you monitor company and contact discovery over time?" above.

Does it work with Claude, ChatGPT, and other AI agent frameworks?

It isn't exposed through an MCP server. It's callable as a plain HTTP endpoint through the Apify API from any agent framework — an agent can trigger a run, poll or wait for completion, and read the dataset back as grounding context before answering.

Can I use this without managing proxies or a LinkedIn account?

Yes. No LinkedIn account, login, or cookies are used. Proxy handling is automatic and optional — the run starts with no proxy by default and only escalates to Apify's Datacenter or Residential proxy if a search engine blocks it; you only need to supply proxy settings yourself if you want to start on a specific tier.


Your feedback

Found a bug, or a company/field that isn't resolving the way you'd expect? Let us know via the Issues tab on this Actor's Apify Store page, or through the developer contact link on the listing — reports like this directly shape what gets fixed next.