Decision-Maker Contacts - Founders, CEOs, Execs from Sites avatar

Decision-Maker Contacts - Founders, CEOs, Execs from Sites

Pricing

from $4.80 / 1,000 decision-maker contacts

Go to Apify Store
Decision-Maker Contacts - Founders, CEOs, Execs from Sites

Decision-Maker Contacts - Founders, CEOs, Execs from Sites

Find founders, CEOs and department heads on company websites: names, titles, seniority, public profile links and emails from team, about and imprint pages. Pattern-guessed emails are clearly flagged. No LinkedIn scraping. Pay per contact.

Pricing

from $4.80 / 1,000 decision-maker contacts

Rating

0.0

(0)

Developer

Andrew Boiko

Andrew Boiko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Categories

Share

Decision-Maker Contacts - Founders, CEOs and Executives from Company Websites

Paste a list of company websites and get the founders, owners, C-level executives, VPs, heads and directors that each company publishes on its own site: name, job title, seniority, department, public profile links, and an email address (found on the page, or a clearly flagged pattern-based guess). One row per person.

Only the company's own public pages are read (team, about, leadership, management, contact and imprint/Impressum pages). No LinkedIn pages are visited, scraped or logged into. If a company links to a person's LinkedIn profile on its own site, that link is returned as a profile URL.

Who is it for

  • Sales and outbound teams that need a named person to contact at a target company.
  • Recruiters and investors mapping leadership teams.
  • Agencies and freelancers building prospect lists from a list of domains.
  • Analysts who want a structured view of who runs which company.

What you get

FieldMeaning
personName, firstName, lastNameName as published on the page
titleJob title as published (any language)
seniorityfounder, owner, c-level, president, board, partner, vp, head, director, manager, staff
departmentexecutive, technology, marketing, sales, finance, operations, hr, legal, product, design, support, other
emailAn address published on the site and matched to this person (profile card, structured data, or the name appears in the address)
emailGuess, emailIsGuess, emailSource, emailBasisA guess built from the company's observed address pattern. Always flagged: emailIsGuess: true, emailSource: "pattern-guess", with the evidence in emailBasis. Never presented as a verified mailbox
emailStatusverified_mx (domain can receive mail), unverified (domain has no mail server), none
companyEmailsGeneric company addresses seen on the site (info@, sales@ ...)
linkedinUrl, profileLinksPersonal LinkedIn/Xing/X/GitHub profile links that the site itself shows next to the person
sourceUrl, sourceTypeThe page and extraction method (jsonld, microdata, card, line, imprint)
confidence5-97 heuristic score (structured data scores highest; see below)

Input

FieldTypeDefaultDescription
domainsarrayrequiredDomains or any URL on the company site. Up to 2000.
rolesarrayfounder, ceo, cto, cfo, coo, cmo, owner, president, vp, head of, director, partner, managingKeep only people whose title contains one of these words. Understands abbreviations and translations (ceo = chief executive officer = Geschäftsführer).
maxPeoplePerDomaininteger101-100. Most senior people first.
findEmailsbooleantrueMatch published emails to people and guess the rest from the learned pattern.
includeFailedbooleanfalseAdd free rowType: "status" rows for domains that were unreachable, blocked or empty.

Role keywords are matched as whole words, so president also matches "Vice President". Use vp or head of for narrower lists.

Output example

{
"rowType": "contact",
"id": "acme.com|jane-doe",
"domain": "acme.com",
"companyName": "Acme Corp",
"personName": "Jane Doe",
"firstName": "Jane",
"lastName": "Doe",
"title": "Chief Executive Officer",
"seniority": "c-level",
"department": "executive",
"email": "jane.doe@acme.com",
"emailGuess": null,
"emailIsGuess": false,
"emailSource": "page",
"emailStatus": "verified_mx",
"emailBasis": null,
"companyEmails": ["info@acme.com"],
"linkedinUrl": "https://www.linkedin.com/in/janedoe/",
"profileLinks": ["https://www.linkedin.com/in/janedoe/"],
"sourceUrl": "https://acme.com/team",
"sourceType": "card",
"confidence": 87,
"source": "Company website (public pages)",
"scrapedAt": "2026-10-14T09:30:00.000Z"
}

Each run also writes OUTPUT (per-domain status, counts, skipped reasons, charged events, stoppedReason) and RESULTS_MD to the key-value store.

Pricing

Pay only for results (pay per event). No monthly rental.

EventPriceWhen
contact$0.006One person with a name and a job title found on the company's own site, after your role filter.

1,000 contacts cost $6. Apify adds volume discounts on paid plan tiers (Bronze, Silver, Gold), and free-plan users can try it with the free monthly credit. You are never charged for unreachable or blocked domains, domains with no matching people, duplicates, failed rows, or anything beyond the maximum cost per run you set.

How it works

  1. For each domain the actor reads the homepage, then up to 5 more pages chosen by link text and path (team, our-team, leadership, management, people, founders, about, company, who we are, imprint/Impressum, contact, plus translations) and hints from /sitemap.xml. If the navigation gives little, common paths such as /team and /about are tried.
  2. People are extracted from JSON-LD (Person, founder, employee), schema.org microdata, repeated team-card layouts (name next to a title), "Name, Title" lines and imprint lines such as "Geschäftsführer: ..." (German, English, French, Spanish, Italian and Ukrainian basics).
  3. False positives are filtered hard: navigation labels, product names and sentences are rejected; a person needs a plausible name (two to four capitalised words) and a recognisable job title.
  4. Titles are classified into seniority and department and matched against your role keywords.
  5. Emails on the pages are matched to people. If the address format of the company can be learned (for example first.last@), other people get a flagged guess. Domains are MX-checked.
  6. Progress is saved so a restarted run never charges or outputs the same person twice.

Limits and honest caveats

  • Only what the company publishes. Small companies often list nobody; many sites build team pages with JavaScript that a plain page fetch cannot see. Such domains return no rows and are not charged.
  • Names and titles come from page text and can be outdated. confidence is a heuristic, not a probability.
  • Emails: found addresses are published ones; guesses are guesses. A pattern guess has not been checked against the mail server, and we do not probe mailboxes (no SMTP). verified_mx only says that the domain can receive mail.
  • Latin and Cyrillic names are supported. Names in Chinese, Japanese, Arabic and other scripts are not extracted yet.
  • Titles are understood in English, German, French, Spanish, Italian and Ukrainian basics; other languages may be missed.
  • No LinkedIn, Xing or social network scraping, no data from paid databases.
  • Only public pages are read, politely: robots.txt is respected, one request at a time per site with a pause, small page limits, honest user agent.
  • Names, titles and business emails of identifiable people are personal data under GDPR and similar laws, even when public. You are responsible for a lawful basis (for example legitimate interest with a clear opt-out), purpose limitation, data minimisation and honouring removal requests. Follow anti-spam rules (CAN-SPAM, GDPR/PECR, CASL) when you write to people.
  • Do not use guessed addresses for bulk mailing without verification. Bounces damage your sender reputation.
  • Respect the terms of the websites you process.

FAQ

Does it scrape LinkedIn? No. It never requests LinkedIn. A LinkedIn URL appears only when the company's own page links to it.

Why did a domain return nothing? The site may list no people, hide them behind JavaScript, require a login, or block robots. Check OUTPUT.domains or enable includeFailed.

Are emails verified? Found emails are published ones and are MX-checked at domain level. Guesses are flagged with emailIsGuess and are not verified mailboxes.

Can I search by role only (no domains)? No. Provide company domains; the actor is not a people search engine.

Which titles are included by default? Founder, CEO, CTO, CFO, COO, CMO, owner, president, VP, head of, director, partner, managing and equivalents such as Geschäftsführer or Gérant. Change roles to include engineers, managers or any other keyword.

Why do I see the same person only once? People are de-duplicated per domain by name; the most reliable source (structured data, then team cards, then lines, then imprint) provides the title.

How are costs controlled? Set a maximum cost per run in Apify. The actor stops softly when it is reached and records stoppedReason: "budget".

Use it via API

Replace YOUR_USERNAME; the actor ID is YOUR_USERNAME~decision-maker-contacts.

curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~decision-maker-contacts/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domains":["acme.com","example.org"],"roles":["ceo","founder","head of marketing"],"maxPeoplePerDomain":5}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('YOUR_USERNAME/decision-maker-contacts').call({
domains: ['acme.com', 'https://www.example.org/about'],
maxPeoplePerDomain: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((p) => p.email));
from apify_client import ApifyClient
client = ApifyClient("APIFY_TOKEN")
run = client.actor("YOUR_USERNAME/decision-maker-contacts").call(run_input={
"domains": ["acme.com", "example.org"],
"roles": ["founder", "ceo"],
})
for p in client.dataset(run["defaultDatasetId"]).iterate_items():
print(p["personName"], p["title"], p["email"] or p["emailGuess"])

Integrations

Works with Make, n8n, Zapier, Google Sheets, Airtable, Slack and webhooks via the standard Apify integrations. A common flow: a company list in a sheet -> run this actor -> keep rows with emailStatus = verified_mx and emailIsGuess = false -> push to your CRM. Exports: JSON, CSV, Excel, XML.

Support

If a site layout is not recognised, open an issue on the actor page with the domain and the people you expected to see.

More tools by the same author