LinkedIn Company Finder by Domain, Verified Company URL API avatar

LinkedIn Company Finder by Domain, Verified Company URL API

Pricing

from $6.00 / 1,000 verified company resolveds

Go to Apify Store
LinkedIn Company Finder by Domain, Verified Company URL API

LinkedIn Company Finder by Domain, Verified Company URL API

LinkedIn company finder by domain. Give it website domains and get the official LinkedIn company page URL with employee count and followers. A row bills only when the site and the LinkedIn page agree. Free 30 day cache and monitoring diffs. Batch up to 50,000 domains. No login.

Pricing

from $6.00 / 1,000 verified company resolveds

Rating

0.0

(0)

Developer

George Kioko

George Kioko

Maintained by Community

Actor stats

0

Bookmarked

57

Total users

22

Monthly active users

7 days ago

Last modified

Share

LinkedIn Company by Domain is an Apify Actor that resolves any website domain to its official LinkedIn company page and returns the match with a verified confidence score, employee count and follower count, without logins, cookies or manual URL guessing.

Every billed row carries mutual evidence. The domain's own website points at the LinkedIn page AND the page agrees back. Rows that cannot prove it are free.

Batch up to 50,000 domains. Verified confidence scoring. Free 30 day resolution cache. Free monitoring diffs on scheduled runs. MCP ready for AI agents.

Pricing (Pay Per Event)

EventPrice
Actor start$0.002 per run
Verified company resolved$0.0075 per row ($7.50 per 1,000)

You pay $7.50 per 1,000 resolved domains and $0 for anything unresolved, cached within 30 days, or low confidence. A 1,000 domain run that resolves 850 costs $6.38, not $7.50.

No card needed to try it. Apify's free plan includes $5 of monthly platform usage, which covers about 600 resolved domains here.

Cost math vs doing it manually

Manual lookup takes about a minute per domain at $30 per hour, which is $0.50 per domain or $5,000 of labor for 10,000 domains. This actor resolves the same 10,000 domains for $75 without anyone touching a keyboard. That is a 98.5 percent cost reduction on the same work.

Quick start

curl

curl -X POST "https://api.apify.com/v2/acts/george.the.developer~linkedin-company-by-domain/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domains": ["stripe.com", "vercel.com", "gitlab.com"]}'

Node.js (npm install apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const { items } = await client.actor('george.the.developer/linkedin-company-by-domain')
.call({ domains: ['stripe.com', 'vercel.com'] });
console.log(items);

Python (pip install apify-client)

from apify_client import ApifyClient
client = ApifyClient("MY_APIFY_TOKEN")
run = client.actor("george.the.developer/linkedin-company-by-domain").call(
run_input={"domains": ["stripe.com", "vercel.com"]}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Runnable copies live in examples/.

What data you get per domain

{
"domain": "deathwishcoffee.com",
"linkedinUrl": "https://www.linkedin.com/company/death-wish-coffee/",
"companyName": "Death Wish Coffee",
"confidence": "high",
"method": "homepage-sameas",
"employeeCount": 213,
"followers": 45600,
"websiteStatus": "live",
"cached": false,
"charged": true
}

What is NOT returned

Honest limits, stated up front.

  • No email addresses. Email finding was measured against live B2B infrastructure and does not produce verifiable results at acceptable cost, so we do not sell unverifiable rows.
  • No individual employee profiles. This actor resolves companies. Use our employees scraper downstream on the linkedinUrl field.
  • No social media URLs other than LinkedIn.
  • Low confidence guesses are labeled confidence low and charged $0. They are never silently mixed into billed rows.

How verification works (why wrong company rows do not happen)

Most domains are resolved in this order, stopping as soon as proof is sufficient.

  1. The company's own website declares its LinkedIn page in JSON-LD sameAs data or footer links. Free.
  2. Slug probe checks linkedin.com/company/{your-domain-name} directly through a residential session.
  3. Wikidata gives an authoritative brand name lookup by official website. Free.
  4. Google search restricted to linkedin.com/company, used only when cheaper rungs are inconclusive.
  5. A rendered page pass for JavaScript only websites.

A candidate page then has to agree with the site that nominated it (name match or a reference to your domain) before it bills at high or medium confidence. Disagreement means a free low confidence row.

Use cases

  1. CRM enrichment. Turn the website column of your lead list into clean LinkedIn company URLs for Clay, HubSpot or Pipedrive.
  2. Investment and sales research batches. Resolve 10,000 portfolio or prospect domains in one scheduled run. Only new or stale entries ever cost money thanks to the cache.
  3. Company change monitoring. Schedule weekly runs in monitor mode and receive free diffs covering headcount changes, renames, new and removed companies.

How to use

  1. Paste domains (anything from stripe.com to full URLs) into Website Domains.
  2. Choose resolve for a one shot run or monitor for diffs against your previous run.
  3. Run. Read rows from the dataset or plug the dataset URL straight into n8n, Clay or Make.

Input parameters

ParameterTypeDefaultDescription
domainsarrayrequiredWebsites to resolve; duplicates collapsed automatically
modeselectresolveresolve or monitor
monitorBatchIdstringdefaultNamed batch for monitor diffs
forceRefreshbooleanfalseIgnore cache and re-resolve everything
cacheTtlDaysinteger30How long resolutions stay cached
includeUnresolvedbooleantrueEmit free rows for unresolved domains
maxDomainsinteger1000Hard cap per run (max 50,000). Budget about an hour per 1,000 uncached domains at concurrency 10
concurrencyinteger10Parallel domains

Call it from the Apify MCP server

AI agents can reach this actor through the Apify MCP server.

https://mcp.apify.com/?tools=george.the.developer/linkedin-company-by-domain

Integration snippets

Clay, as an HTTP API enrichment column

POST https://api.apify.com/v2/acts/george.the.developer~linkedin-company-by-domain/run-sync-get-dataset-items?token=YOUR_TOKEN
{ "domains": ["{{website}}"] }

n8n and Make use the Apify node. Set the actor to linkedin-company-by-domain, pass domains from your sheet and iterate dataset items.

How it compares to similar Actors

ActorBilled eventList price1,000 rowsStart fee
george.the.developer/linkedin-company-by-domain (this one)verified company resolved$0.0075$7.50, unresolved rows free$0.002
freshdata/linkedin-company-by-domainprocessing (every domain)$0.008$8.00none
bestscrapers/linkedin-company-by-domainprocessing (every domain)$0.008$8.00none
khadinakbar/linkedin-company-by-domain-scrapercompany found$0.008$8.00none

Prices read from the Apify Store on 2026-10-21. Rival prices change, check each listing before you decide. The two processing actors bill every domain, found or not. This actor and khadinakbar bill only matches. The price gap is small. The difference is the verification step, the free 30 day cache and the monitoring diffs.

FAQ

How is this different from other domain to LinkedIn actors?

This one requires two independent sources to agree before billing, caches results for 30 days free of charge and never charges an unresolved domain.

What happens when a domain cannot be matched?

You get one row explaining why in the qualityState field, charged $0. Turn includeUnresolved off if you want billed rows only.

How long does a run take, and what if it runs out of time?

Budget about one hour per 1,000 uncached domains at the default concurrency of 10. Cached repeats return in seconds. Domains that cannot be matched take the longest because every source is tried before the free row is written. The default run timeout is two hours. When less than three minutes remain, the actor stops starting new domains, emits a free row with qualityState time-budget for each domain it did not start, and finishes with status SUCCEEDED. Raise the run timeout or lower maxDomains to complete larger lists in one run.

Does this need my LinkedIn account or cookies?

No. The actor reads public pages and never logs in.

Can I monitor headcount changes over time?

Yes. Set mode to monitor and schedule weekly runs. Each run emits one free diff summary covering new companies, headcount changes and renames. Snapshots live in your own account.

What does cached mean on a row?

The same domain resolved within the TTL window. Cached rows return instantly and are always free. Repeat runs only pay for genuinely new work.

Can an AI agent call this actor?

Yes. AI agents reach it as a tool through the Apify MCP server at https://mcp.apify.com/?tools=george.the.developer/linkedin-company-by-domain. It also runs over the Apify HTTP API with curl and from the Apify clients for Node.js and Python, as the examples above show.

Changelog

0.1.20 (2026-10-16). Reference batch went from 184 seconds to 32 seconds. Firmographics fields added.

0.1.18 (2026-09-11). Run level time budget so a large batch finishes inside its timeout.

0.1.15 (2026-08-26). Fixed a hang in the HTTP client and added a 120 second watchdog per domain.

0.1 (2026-08-23). Initial release.

The full list is in the Changelog tab of this listing.

License

MIT, see LICENSE. The hosted actor on the Apify Store is the supported, managed way to run this.

Support

Found a bug or need a feature? Open an issue on GitHub or message george.the.developer on Apify.