LinkedIn Mass Company Profile Finder By Country & Name
Pricing
from $2.99 / 1,000 results
LinkedIn Mass Company Profile Finder By Country & Name
LinkedIn Mass Company Profile Finder by Country & Name discovers public LinkedIn company profiles using company names and country filters. Extract company URLs, industries, employee sizes, headquarters, websites, follower counts, and more for B2B lead generation, sales, and market research.
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
SimpleAPI
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
LinkedIn Company Profile Finder — Bulk URLs by Country & Name
LinkedIn Mass Company Profile Finder By Country & Name searches DuckDuckGo and Bing for site:linkedin.com/company matches against any keyword, domain, or brand name you supply, and returns the matching LinkedIn company URL, slug, matched country subdomain, and the engine that confirmed it. It's built for sales, recruiting, and market-research teams turning a list of company names into working LinkedIn URLs — with country-subdomain filtering (fr., uk., de. …) and automatic legal-entity-suffix retries (Inc, LLC, GmbH) that recover matches on short, generic keywords. Feed it a list; get back a scored, deduplicated dataset of LinkedIn company matches.
What is LinkedIn Mass Company Profile Finder By Country & Name?
It's a bulk LinkedIn company URL finder: you give it a list of keywords (company names, domains, or brand phrases), and for each one it runs a public search-engine query and returns every distinct LinkedIn company page it can match. No LinkedIn login, cookie, or API key is required — the actor only queries DuckDuckGo and Bing, never linkedin.com directly. It does not scrape the company page itself, so it returns the profile URL and match metadata, not firmographic details like industry or employee count.
- Discovery by free-text keyword, domain, or brand phrase —
companyKeywordsacceptsalma.fr,"Acme Corp","Stripe" payments, or plain text; each line is searched independently - Core identifying fields — canonical
linkedincompany URL plus itsslug - Match provenance — which search engine(s) found it (
foundBy) and which legal-suffix variant recovered it, if any (matchedVariant) - Country-subdomain signal —
matchedCountrySubdomainrecords the LinkedIn locale (fr,uk,de, …) the match was found on - Real, working filters — include/exclude by country subdomain, and a threshold-triggered legal-entity-suffix retry for sparse keywords
- Export formats — standard Apify dataset exports (JSON, CSV, Excel, HTML table, XML, RSS) plus live results pushed row-by-row as the run proceeds
What data can I extract with LinkedIn Mass Company Profile Finder By Country & Name?
Every match is one row per (keyword, LinkedIn URL) pair, with these fields — all nine keys are pushed for every row, matched or not, and this is the actor's complete output (no fields are hidden beyond the default dataset view):
| Field | Example Value | Use Case |
|---|---|---|
linkedin | https://www.linkedin.com/company/anthropic | Canonical LinkedIn company URL to open, store, or dedupe on |
input | Anthropic AI | The original keyword that produced this row |
slug | anthropic | LinkedIn's unique company identifier, for merges/enrichment joins |
foundBy | ddgs+bing | Which search engine(s) confirmed the match — coverage confidence |
matchedCountrySubdomain | fr | Country subdomain the match was found on (null for the bare/www form) |
matchedVariant | Inc | Legal-suffix variant that recovered this match; null if the direct keyword matched |
proxyMode | no-proxy | Proxy tier active when this row was produced (no-proxy, datacenter, residential) |
error | null | Failure reason when no company was found for this keyword; null on a match |
scrapedAt | 2026-07-30T10:15:32.482113+00:00 | ISO-8601 timestamp for freshness and auditing |
Match provenance and audit fields
foundBy, matchedVariant, proxyMode, scrapedAt, and error exist so you can trust a match without re-checking it by hand. foundBy tells you if DuckDuckGo, Bing, or both surfaced the URL. matchedVariant is the audit trail for the legal-suffix feature — it names the exact suffix (Inc, LLC, GmbH, …) tried on a sparse keyword, so a recovered match is never indistinguishable from a direct one. error and proxyMode tell you why a keyword came back empty and what network path was used to search it.
Country-targeting fields
matchedCountrySubdomain is the raw signal; targetCountries and targetCountriesMode (input parameters, covered below) are how you act on it — keeping or dropping rows whose subdomain falls inside or outside a list of 2–3 letter LinkedIn locale codes (fr, uk, de, in, au, …). This lets you scope a single run to one region's LinkedIn presence, or exclude regions you already cover elsewhere.
Why not build this yourself?
A hand-rolled version of this means running your own site:linkedin.com/company queries against DuckDuckGo and Bing, handling CAPTCHA/403/429/503 blocks, writing retry backoff per engine, and building a proxy-tier ladder (no-proxy → datacenter → residential, with rotation on repeated blocks) — all before you get to deduplicating normalized URLs across a dozen country subdomains or figuring out that "Acme" alone won't surface a company page but "Acme Inc" will. This actor already implements that ladder (maxRetries retries per engine before escalating, three residential rotations before locking a proxy) and the legal-entity-suffix retry logic, with a disclosed, hard cap on how many extra search calls the suffix feature can generate per keyword.
Build it yourself if you need to fold this into a larger in-house crawler you already operate and want full control over engine selection. Use this actor if you want bulk keyword-to-LinkedIn-URL resolution today, with the anti-bot and retry plumbing already handled.
How to use data extracted from LinkedIn Mass Company Profile Finder By Country & Name?
Sales and lead-generation teams
Feed a CRM export of target-account names or website domains into companyKeywords, run with workers set to your concurrency comfort level, and get back a dataset of linkedin URLs keyed by input (your original account name). Import the CSV export back into the CRM, matching on the input column, to fill in a "LinkedIn Company URL" field for every account that previously only had a name or domain — the step that usually blocks outreach sequencing on LinkedIn.
Agencies and lead-gen service providers
Running this for multiple clients means running it once per target-account list and keeping targetCountries scoped per client — a UK-focused client's list uses targetCountries: ["uk"] with targetCountriesMode: "include", while a global client leaves the field empty. Re-running periodically catches new LinkedIn pages for companies that didn't have one on the last pass.
Market research and competitive intelligence
Run a category's known player list through the actor and group the resulting rows by matchedCountrySubdomain to see which competitors maintain a localized LinkedIn presence in a given market versus only a global (bare/www) page — a quick signal for regional go-to-market maturity, without opening a single profile by hand.
AI agents and automated pipelines
Because the actor is a standard Apify run, an agent framework can call it as a tool: pass a list of company names extracted from an upstream document or CRM record, get back resolved LinkedIn URLs, and feed those into a downstream enrichment step (e.g. the companion company-profile scraper below) without a human in the loop.
🔼 Input sample
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
companyKeywords | No | array | Domains, exact company names, brand + qualifier, or plain text — one keyword per line. Accepts the same values as the legacy urls field. | ["alma.fr", "Stripe payments", "Anthropic AI"] |
urls | No | array | Legacy alias for companyKeywords, kept for backward compatibility. If both are set, companyKeywords wins. | ["Acme Corp"] |
maxResultsPerKeyword | No | integer | Min 1, max 200, default 30. Upper bound on results examined per keyword per engine before moving on. | 30 |
workers | No | integer | Min 1, max 20, default 3. How many keywords are processed in parallel. | 3 |
maxRetries | No | integer | Min 0, max 10, default 2. Retries for one search engine before escalating the proxy tier. | 2 |
targetCountries | No | array | 2–3 letter LinkedIn country-subdomain codes. Leave empty to disable country filtering. | ["fr", "uk", "de"] |
targetCountriesMode | No | string | Enum "include" (default) or "exclude". Applies targetCountries above. Ignored when that list is empty. | "include" |
enableSuffixExpansion | No | boolean | Default true. Retries sparse keywords with legal-entity suffixes appended. | true |
suffixExpansionThreshold | No | integer | Min 0, max 50, default 2. Expansion triggers when a keyword's direct match count is below this. 0 disables expansion. | 2 |
maxSuffixVariantsPerKeyword | No | integer | Min 0, max 10, default 4. Hard cap on suffix variants tried per keyword. | 4 |
customLegalSuffixes | No | array | Suffixes tried in order when expansion triggers. | ["Inc", "LLC", "Ltd", "GmbH", "Corp", "Pty"] |
proxyConfiguration | No | object | Apify proxy config. Default: no proxy. Auto-escalates to Datacenter then Residential (3 retries) on blocks. | {"useApifyProxy": false} |
No parameter is required — an empty run simply does nothing and logs a warning.
{"companyKeywords": ["alma.fr", "Stripe payments", "Anthropic AI", "Nova"],"targetCountries": ["fr", "uk", "de"],"targetCountriesMode": "include","maxResultsPerKeyword": 30,"workers": 5,"enableSuffixExpansion": true,"suffixExpansionThreshold": 2,"customLegalSuffixes": ["Inc", "LLC", "GmbH", "SARL"]}
⚠️ Common pitfall: the input schema's own description for targetCountries says the bare www.linkedin.com/company/... form is "dropped unless listed" in include mode — but there is no value you can add to the list that whitelists it. Internally, a bare/www match's country is recorded as empty, not as "www", so once targetCountries is non-empty in include mode, bare-subdomain matches are always excluded, regardless of what you list. If you need bare/www matches included, leave targetCountries empty and filter by matchedCountrySubdomain in your own post-processing instead.
🔽 Output sample
Output is typed, normalized JSON with a fixed nine-key schema on every row — matched or not — available through the standard Apify dataset exports (JSON, CSV, Excel, HTML, XML, RSS).
{"linkedin": "https://www.linkedin.com/company/anthropic","input": "Anthropic AI","slug": "anthropic","foundBy": "ddgs+bing","matchedCountrySubdomain": null,"matchedVariant": null,"proxyMode": "no-proxy","error": null,"scrapedAt": "2026-07-30T10:15:32.482113+00:00"}
A zero-match keyword pushes a row with linkedin, slug, foundBy, matchedCountrySubdomain, and matchedVariant all null, and error set to a short reason (for example "no results" or "no results after country filter"):
{"linkedin": null,"input": "Zzqvrnt Holdings","slug": null,"foundBy": null,"matchedCountrySubdomain": null,"matchedVariant": null,"proxyMode": "datacenter","error": "no results","scrapedAt": "2026-07-30T10:16:04.001220+00:00"}
How do you filter and target specific LinkedIn company matches?
Keyword shape matters most. A domain (alma.fr) or an exact quoted company name is the most precise input — it maps almost directly onto a LinkedIn slug. A bare brand word ("Nova") is noisier and relies on the legal-suffix retry to disambiguate it from unrelated results.
Scope by country subdomain. targetCountries + targetCountriesMode narrow a run to LinkedIn locales that were actually matched — "include" keeps only rows whose matchedCountrySubdomain is in the list, "exclude" keeps everything else. Remember the bare/www caveat above: this axis only reliably scopes localized matches, not the global page.
Tune the suffix-recovery trigger. suffixExpansionThreshold decides how sparse a direct search has to be before legal-entity suffixes get tried; maxSuffixVariantsPerKeyword bounds how many extra search calls that can cost per keyword regardless. Raise the threshold for noisy/generic keyword lists, lower it (or set it to 0) when your keywords are already precise domains or exact names.
Control volume with maxResultsPerKeyword and workers. The first bounds how many results each engine examines per keyword; the second bounds how many keywords run in parallel. There is no single global result cap — total output scales with how many keywords you supply.
{ "companyKeywords": ["alma.fr", "Acme Corp"], "targetCountries": ["fr"], "targetCountriesMode": "include" }
{ "companyKeywords": ["Nova", "Zed"], "suffixExpansionThreshold": 5, "customLegalSuffixes": ["Inc", "LLC", "GmbH", "SARL", "Pte Ltd"] }
{ "companyKeywords": ["Stripe payments"], "targetCountries": ["cn", "ru"], "targetCountriesMode": "exclude" }
▶️ Want to try other LinkedIn scrapers?
| Scraper | What it extracts |
|---|---|
| LinkedIn Company Profile Scraper & Ad Library Creatives | Full company firmographics (industry, employee count, HQ, specialties) plus public Ad Library ad creatives and transparency metrics, from a list of LinkedIn company URLs |
| LinkedIn Lead Scraper: Seniority & Department Filters | LinkedIn people/leads by keyword, or by structured seniority-level and department selectors, with email-domain filtering |
| Realtor.com Agents by Zip Code Scraper With Market Analytics | Real-estate agent directory listings by zip code, with market analytics |
| Ebay Search Scraper With Buyer Reviews & Ratings | eBay product-listing search results with buyer reviews and ratings |
How to extract LinkedIn company data programmatically
Every run of this actor is a standard Apify Actor call — one API call starts it, one call retrieves the finished dataset as structured JSON.
Python example
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("linkedin-mass-company-profile-finder-by-country-and-name").call(run_input={"companyKeywords": ["alma.fr", "Stripe payments", "Nova"],"targetCountries": ["fr", "uk"],"targetCountriesMode": "include",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():if item["linkedin"]:print(item["input"], "->", item["linkedin"], item["matchedCountrySubdomain"])
Export to spreadsheets or CRM
Every dataset supports a one-click CSV/Excel export from the Apify Console. Map linkedin to a "LinkedIn URL" column, input to the account/lead name you searched, and matchedCountrySubdomain to a "Region" column when importing into a CRM or spreadsheet-based prospecting list.
⚖️ Is it legal to scrape LinkedIn company profile URLs?
Yes — this actor only reads public search-engine result pages and returns LinkedIn company URLs and match metadata, not personal data. It never logs into LinkedIn, never accesses gated content, and never scrapes the content of a company's LinkedIn page. Because the output is limited to public company identifiers (URL, slug, country subdomain), it falls under the same terms-of-service and database-rights framing as any other public-web lookup tool, not personal-data regulation — LinkedIn's own Terms of Service govern how you may use pages you subsequently visit, and DuckDuckGo's and Bing's terms govern the search queries themselves. Consult legal counsel for commercial applications involving bulk storage of personal data, particularly if you enrich these URLs with a scraper that pulls page content.
❓ Frequently asked questions
Does the actor verify that a matched LinkedIn company page is still live or hasn't been renamed?
No. Every row reflects what DuckDuckGo or Bing had indexed under site:linkedin.com/company at the moment of the search — the actor never visits the LinkedIn URL to confirm it. A stale search-index entry can still be returned, and a very recently created or renamed company page might not surface if the search engines haven't recrawled it yet. Spot-check any match that's business-critical.
Can I get company details like industry or employee count along with the URL?
No — this actor's output is limited to the nine match-metadata fields above (linkedin, input, slug, foundBy, matchedCountrySubdomain, matchedVariant, proxyMode, error, scrapedAt). For firmographic detail (industry, employee count, headquarters, specialties), feed the resulting linkedin URLs into the companion LinkedIn Company Profile Scraper & Ad Library Creatives actor.
How accurate is the LinkedIn URL match?
Each row is exactly what a DuckDuckGo or Bing search for your keyword under site:linkedin.com/company returned, normalized and deduplicated — the actor doesn't score or rank confidence beyond the foundBy field (which engines confirmed it) and matchedVariant (whether a legal-suffix retry was needed to find it). Generic single-word keywords are more prone to false positives than exact company names or domains.
How many company matches can I get per run?
There's no single global cap. Per keyword, each of the two engines examines up to maxResultsPerKeyword (max 200, default 30) results, and up to maxSuffixVariantsPerKeyword (max 10, default 4) additional suffix-variant searches run if expansion triggers. Total output across a run scales with how many keywords you supply and workers (max 20) concurrency.
How does country-subdomain targeting work — can I restrict results to just one country?
Yes. Set targetCountries to the 2–3 letter LinkedIn locale codes you want (for example ["fr"]) and leave targetCountriesMode at its default "include" — only rows whose matchedCountrySubdomain is in that list survive. Note the caveat above: this only scopes localized-subdomain matches; there's no way to also whitelist the bare/www page once the list is non-empty.
Does this actor work with Claude, ChatGPT, and AI agent frameworks?
It's callable as a standard Apify Actor by any agent framework that can make an HTTP call or use apify_client — pass keywords in, get resolved LinkedIn URLs back as structured JSON. It is not currently exposed through an MCP server.
Can I use this without a LinkedIn API key or developer account?
Yes. The actor never authenticates against LinkedIn — it only needs an Apify account to run. No LinkedIn login, cookie, or API key is required or used anywhere in the pipeline.
What happens when a keyword finds zero matches — am I charged for it?
Only rows carrying an actual LinkedIn match are billed, via the row_result charged event, one per URL found. A keyword that finds nothing still gets a row pushed to the dataset (with linkedin: null and an error reason) so you have a full audit trail of every keyword you submitted, but that row is pushed without the charged event — filter your dataset on error === null (or linkedin !== null) to see only the rows you were billed for.
Conclusion
LinkedIn Mass Company Profile Finder By Country & Name turns a list of company names, domains, or brand keywords into a deduplicated dataset of LinkedIn company URLs, with country-subdomain scoping and automatic legal-entity-suffix recovery for the generic keywords that would otherwise come back empty. It's built for sales, recruiting, and research teams who need that URL-resolution step done in bulk, with the proxy escalation and retry logic already handled. Start a run from the Apify Console or apify_client with your keyword list to get your first batch of matches.