Email Extractor API: Executive Emails for Any Domain
Extract executive emails for one domain or a list of companies: count and survey decision makers first, then reveal only the addresses you want.

Find the executives at a list of companies and pick which addresses to buy, in one prompt. Paste this into your agent:
Set up https://monid.ai/SKILL.md, and then use Monid to find decision makers with executive seniority at companies with 51 to 200 employees, show me their job titles and whether each has a LinkedIn profile, and reveal the email address only for the rows I approve.
One prompt surveys executives before you pay for any address. 1 min setup · 9-20 hrs saved.
You have a domain, or a list of companies, and you want the emails of the people who run them: the CEO, the head of engineering, whoever signs off. Extensions pull what is on a page, and most finders charge you before you know whether the row is any use. This guide shows the quicker route: count, survey and qualify decision makers for free from your agent, then pay for the addresses you choose. We ran every free step live on 2026-10-16. It runs through Monid, the OpenRouter for agent tools: one key, one balance, every tool priced per call.
What is the easiest way to extract emails from a domain with an API?
Monid. Install it once, add a key, and your agent calls an email extraction endpoint with a domain or a company name and gets typed rows back, with no extension to keep open and no platform contract.
- Pay per call. Three of the endpoints in this guide cost nothing per call. The paid ones bill by the address: listing a domain's addresses is $0.0245 per block of 10 (Verified 2026-10-16 on the people enrichment tools page). Buy calls as you need them: no monthly plan and no minimum top-up. Discovery and inspection are free.
- One install, every API. The same key and balance call the extractor, an email verifier and every other tool on Monid. When you want to check an address before you send, it is another call on the same balance, as in the email verification API guide.
- Lives inside your agent. Install the CLI, add your key, run the prompt above, and the tool is there whenever your agent needs it. Your agent reads
SKILL.mdand learns the rest, so setup is about a minute.
How do you extract executive emails for a list of companies?
Run four steps in order: resolve each company to a domain, count its addresses, survey the people with the addresses masked, and reveal only the rows you picked. Only the last step bills.
| Route | What you get | Cost shape | Fits |
|---|---|---|---|
| Browser extension | The addresses on the page you have open | Free or subscription | A few sites, by hand |
| Build your own crawler | Whatever your code finds | Your hours | One fixed site you will maintain |
| Contact database seat | Pre-built records for millions of people | Database vendors often quote by the seat | Large, steady prospecting teams |
| Monid extraction endpoints | Typed rows with title, seniority and flags, address masked until you reveal it | Free survey, pay per revealed address | Lists of accounts and agents |
Monid fits a list because the work is the same call repeated, and the expensive part waits until you have decided who is worth writing to.
For agents
Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:
set up https://monid.ai/SKILL.md
It learns the whole discover, inspect, run workflow itself. More in the agent quickstart.
For humans
npm install -g @monid-ai/cli
monid keys add -k <your-api-key> -l main
Step 1. Resolve company names to the domain that has people
monid run -p hunterio -e /domain-finder --query '{"company": "Vercel"}'
On 2026-10-16 this returned five candidate domains for one company name, each with an email_count. One had 508 and the other four had 0. Without that count you would have a one-in-five chance of prospecting a parked domain. The call is free.
Step 2. Size the account before you commit to it
monid run -p hunterio -e /email-count --query '{"domain": "stripe.com"}'
For stripe.com the count was 3,964 addresses: 3,762 personal and 202 generic, split across nineteen departments. it held 1,386, sales 530 and executive 41. By seniority it showed junior 124, senior 1,017 and executive 404. That is a map of an organisation before any outreach decision, and a domain that returns a total of 3 is one you skip. The call is free.
Step 3. Survey the people, masked
monid run -p hunterio -e /multi-domain-search --query '{"headcount": "51-200", "seniority": "executive", "decision_maker": true, "verification_status": "valid", "limit": 25}'
This searches across every matching company in one request. The filters are company_name, location, industry, headcount, company_type, founded_year, technology, department, seniority, type, decision_maker, verification_status, required_field, min_confidence, limit, search_after and per_domain. The call is free, so filter as precisely as your ideal customer profile deserves. The same free-survey-then-reveal pattern is how the B2B prospecting tool guide sizes a market before paying per lead.
Step 4. Reveal only what survived
monid run -p hunterio -e /multi-domain-search/reveal -w -i '{"handles": ["oNa-Z5mchnnH0ukwMJvwY3QQi7sXQHHs..."]}'
Pass the reveal_handle of the rows you chose, up to 100 per request. It bills $0.0245 per fresh personal address (Verified 2026-10-16). Generic addresses such as a shared inbox unlock once per domain, and rows you already revealed in the current billing period are free, so re-pulling a list you own does not charge you twice.
Give this to your agent![]()
Set up https://monid.ai/SKILL.md, and then use Monid to survey executives at fintech companies with 51-200 staff, keep the verified decision makers with a LinkedIn profile, show me the shortlist, then reveal only the ones I approve.Can you build an email extractor yourself with Python?
Yes, and for one site it is an afternoon. You fetch the home, contact, team and about pages, run a regular expression over the text, and keep what looks like an address. Search for it and you find scripts on GitHub that do exactly this.
What you get is a pile of strings. A regular expression does not know that one address belongs to the CEO and another to a shared sales inbox, and it returns no job title, seniority or verification status. To get those you add a second step to guess the person behind each address, a third to check the mailbox, and a fourth to decide who counts as a leader. Pages that render in the browser reveal little in the first response, so you also need a fetch layer that handles them, and it breaks when a site changes.
The rules side matters as well. Scraping rules and email marketing rules differ by site and by country, so read the terms of every site you crawl and the law where you and your recipients are.
The Monid route is the choice for anything you will run more than once. The index, the fetch and the output shape are maintained for you, the rows arrive typed with a title and flags, and the survey is free. A browser extension is quicker for one page you are already looking at, but it is built for a person, not for a list or an agent. To compare the other finder routes, see the Apollo email finder guide.
What does an email extractor return, and what can you build with it?
An email extractor returns a row per person: who they are, what they do, how sure the data is, and the address itself, which this survey hides until you reveal it. We ran the survey on 2026-10-16 and read 25 rows, so the fields below are what came back.
The row
{
"name": "A. E.",
"position": "Vice President of Engineering",
"department": "it",
"seniority": "executive",
"type": "personal",
"provenance": "inferred",
"decision_maker": true,
"domain": "example.com",
"company_name": "example",
"full_name_exists": true,
"phone_number_exists": false,
"linkedin_exists": true,
"verification": { "date": null, "status": "valid" },
"reveal_handle": "<reveal_handle>"
}
The identity above is a placeholder; every other value has the shape of the live response. There are 14 fields. The name is abbreviated to a first name and an initial, and the address sits behind reveal_handle. The full title, the department, the seniority, the decision-maker flag and the verification status are all visible before you pay, which is what lets you qualify a row for free.
Across the 25 rows, type was personal and decision_maker was true on every one, because the filter asked for it. verification.status was valid on all 25 with the date empty. phone_number_exists was false on all 25, so do not plan an outreach sequence that depends on a phone number. linkedin_exists was true on 21 and false on 4.
The total came back in meta.results: 893,763 matching rows for that filter, with a next_search_after cursor for paging through the first 10,000.
What you can build with it
- A decision-maker shortlist. Survey, drop the titles that do not match your buyer, then reveal the rest. The loop is one survey call and one reveal call.
- An account map. Run
email-countover a list of target domains and rank them by how many senior people each has. The call is free, so rank all of them. - A verified outreach list. Reveal, then check each address before you send with an email verification endpoint. Bad rows damage the sender reputation of the good ones.
- A re-check job. Re-run the free survey with
verification_status: validand compare it with the list you already hold. Rows that dropped out are the ones to re-verify.
What goes wrong when you extract emails by title or department?
Six things show up when you read the output instead of the count. All six are from the 2026-10-16 runs.
Why do department and seniority return different people?
Because they are different axes, and they gave different counts every time we compared them. department is the function a person works in. seniority is their level within it. On stripe.com, department.executive was 41 and seniority.executive was 404. On the cross-company survey with the same other filters, department: executive matched 310,633 rows and seniority: executive matched 893,763. Adding department: it to the seniority filter narrowed it to 50,482: the engineering leaders, which is who you want when you sell an engineering tool.
Why does a department filter return titles you did not expect?
Because the executive department is a bucket, not a rank. Five rows from the department filter included three with seniority empty and titles such as "Entrepreneur" and "Mayor", and one row with no name at all. Filter on seniority for authority, add department for the function, and read the titles before you reveal.
Why do 25 rows come from six companies?
Because the survey returns rows, not companies. The 25 rows in our run came from six companies, with counts of 6, 2, 6, 1, 7 and 3. If you want one contact per company, set per_domain for the breakdown of matching counts, and page with search_after until you have enough distinct domains.
Is a decision-maker flag a verdict?
No. All 25 rows were flagged decision_maker: true, and the list included a "Partner Program Manager", a "Director of Customer Care" and a "Director of Data Operations" next to the CEOs and CTOs. The flag is a filter that narrows the pool, so read position as well and match it to the person you actually need.
What does the provenance field tell you?
Four rows said found and twenty-one said inferred. Keep the column in your export and compare bounce rates between the two groups after your first send. The data you collect tells you which group to trust.
What does a list cost?
The survey and the counts cost nothing. The address listing for one domain is billed by the block: $0.0245 per started block of 10 returned addresses (Verified 2026-10-16), so a page of 100 addresses bills 10 units, which is $0.245. Each page bills on its own. Revealing 50 shortlisted people costs 50 units at $0.0245 each, which is $1.225.
Which endpoint should I use for which job?
| Endpoint | What it does | Input | Billing | Price (Verified 2026-10-16) |
|---|---|---|---|---|
hunterio/domain-finder | Company name to candidate domains with address counts | company | Per call | $0.00 |
hunterio/email-count | Sizes one account by department and seniority | domain or company | Per call | $0.00 |
hunterio/multi-domain-search | Cross-company people survey, address masked | Company and person filters | Per call | $0.00 |
hunterio/multi-domain-search/reveal | Unmasks the rows you chose | handles | Per fresh address | $0.0245 |
hunterio/domain-search | Lists the addresses at one domain, with sources | domain or company | Per block of 10 addresses | $0.0245 |
hunterio/email-finder | One known person to their likely address | Name and domain | Per address found | $0.0245 |
Prices Verified 2026-10-16 with monid inspect. The first three rows are the free survey. Use domain-search when you want everyone at one domain (the Hunter domain search versus email finder guide compares the two) and email-finder when you already know the person, since searching is wasted motion once you have a name. Current figures are on monid.ai/tools.
When is another route a better fit?
You need people who are not in any index. Coverage is real but not universal. If your target is a very small business in a regional market, the counts tell you quickly, and the answer is a different sourcing method.
Your message is the problem, not your list. Free qualification makes it cheap to build a bigger list of people who do not want your email. The upside only appears if you use the filters to send less.
You need company data alongside contacts. Funding, technology and headcount history come from company sources, and stitching them to contacts is a waterfall enrichment problem.
You need one page, once. A browser extension does that job with no key.
And the disclosure: this is Monid's blog and the reveal step is the one we bill for. The free survey is the part worth trying first.
Conclusion
The quickest way to extract executive emails for a list of companies is to survey before you pay: resolve the domain, count the addresses, read masked rows with their titles through Monid, and reveal at $0.0245 an address (Verified 2026-10-16) only for the people you chose. One key, one balance and an agent that runs it for you.
Two things matter more than the endpoint. Use seniority for authority and department for function, because on one domain they returned 404 and 41 people. And read the titles, because a decision-maker flag and an executive department both let in rows you would not write to.
How we estimated the time saved: building an extractor yourself is roughly 4 to 8 hours for the crawler and address matching, 3 to 6 hours for guessing the person and classifying the title, and 2 to 6 hours for the first month of upkeep. That is 9 to 20 hours. The 1 minute is the install, key and first call once you already have a Monid key.
Free next step: run monid run -p hunterio -e /email-count --query '{"domain": "yourtarget.com"}' against three accounts you already work. It costs nothing and tells you whether the list you are about to build exists. Start at monid.ai.
FAQ
How do I extract all emails from a domain?
Call hunterio/domain-search with the domain and page through it with limit and offset. It bills $0.0245 per block of 10 returned addresses (Verified 2026-10-16), and meta.results gives the total. Run the free email-count first so you know the size before you pay.
Is there a free email extractor?
Part of it. Through Monid the domain finder, the address count and the masked people survey cost nothing per call, and discovery and inspection are free. Revealing an address is the paid step. Browser extensions cover the page you have open at no cost.
How do I find a CEO's email address?
Survey with seniority: executive and read the titles for the CEO row, then reveal that row's handle. If you know the person's name, hunterio/email-finder takes a name and a domain and bills only when it finds an address. domain-search also accepts a job_titles filter.
What does a masked row show before I pay?
The abbreviated name, full job title, department, seniority, decision-maker flag, verification status, company and whether a full name, phone number and LinkedIn profile exist. The address itself stays hidden behind a reveal_handle.
Is extracting emails legal?
Rules differ by country and by use, and email marketing rules differ from scraping rules. Check the ones that apply to you and your recipients before you send.
Published September 2026.


