Email Pattern Finder avatar

Email Pattern Finder

Pricing

Pay per event

Go to Apify Store
Email Pattern Finder

Email Pattern Finder

Infer company email formats from known contacts and generate scored candidate work emails for B2B lead enrichment workflows.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Categories

Share

Infer company email formats from known contacts, check the domain, and generate candidate work emails for your target prospects.

Email Pattern Finder is a deterministic B2B lead-generation utility. Give it one or more company domains, a few known employee emails, and the names of people you want to contact. The actor detects patterns such as first.last, flast, firstl, or first_last, scores the evidence, checks DNS/MX records, and returns candidate email addresses with confidence and warnings.

What does Email Pattern Finder do?

It turns partial lead data into structured candidate emails.

  • 🧩 Detects common corporate email patterns from sample contacts
  • 🎯 Generates candidate emails for target people
  • πŸ“ˆ Scores confidence from the evidence you provide
  • πŸ“¨ Checks whether the domain has MX records
  • ⚠️ Flags weak evidence, missing samples, and DNS problems
  • πŸ”’ Avoids SMTP probing, credential use, and paid enrichment APIs

Who is it for?

Sales operations teams use it to prepare outreach lists before sending rows to an email verifier.

Recruiters use it to infer likely work emails for candidates at a target employer.

Lead-generation agencies use it to enrich prospect spreadsheets when they already have a few known company contacts.

RevOps teams use it as a repeatable step between company/person sourcing and downstream verification.

Why use this actor?

Many enrichment tools hide the pattern logic. This actor exposes the evidence, pattern, confidence score, generated candidates, and warnings in the dataset. You can decide whether a row is strong enough for your workflow.

When should you use it?

Use it when you have:

  • a company domain,
  • at least one known employee email for that domain,
  • target first and last names,
  • and a downstream process for verification or manual review.

What it does not do

This actor does not send email. It does not log in to any service. It does not perform SMTP mailbox probing. It does not guarantee that a mailbox exists. It generates likely candidate addresses from observable patterns and domain DNS signals.

Data returned

FieldDescription
domainCompany domain used for the generated candidates
targetFullNameTarget person name
detectedPatternsRanked patterns found in sample contacts
topPatternHighest-confidence pattern used first
confidenceScoreScore from 0 to 1
evidenceCountNumber of sample contacts matching detected patterns
generatedEmailsCandidate emails with pattern and MX metadata
domainHasMxWhether DNS MX records were found
warningsData-quality or confidence warnings
sourceRowsOptional sample source metadata

How much does it cost to find email patterns?

The actor uses pay-per-event pricing: a small start event plus a per-result event for each generated target row. Keep the default prefill small while testing. Larger batches are efficient because the actor performs deterministic local pattern matching and reuses DNS checks per domain.

Input

The main input fields are:

  • domains β€” optional domains such as stripe.com.
  • sampleContacts β€” known emails with names.
  • targetContacts β€” people you want candidate emails for.
  • confidenceThreshold β€” minimum score for using detected patterns.
  • maxGuessesPerPerson β€” candidate cap per target.
  • validateMx β€” enables DNS/MX checks.

Example input

{
"domains": ["stripe.com"],
"sampleContacts": [
{ "email": "john.doe@stripe.com", "firstName": "John", "lastName": "Doe" },
{ "email": "jane.smith@stripe.com", "firstName": "Jane", "lastName": "Smith" }
],
"targetContacts": [
{ "fullName": "Alex Taylor", "domain": "stripe.com", "sourceId": "lead-001" }
],
"confidenceThreshold": 0.25,
"maxGuessesPerPerson": 5,
"validateMx": true
}

Example output

{
"domain": "stripe.com",
"targetFullName": "Alex Taylor",
"topPattern": "first.last",
"confidenceScore": 1,
"evidenceCount": 2,
"generatedEmails": [
{
"email": "alex.taylor@stripe.com",
"pattern": "first.last",
"confidence": 1,
"syntaxValid": true,
"domainHasMx": true
}
],
"warnings": []
}

How to run it

  1. Open the actor on Apify.
  2. Paste known sample contacts.
  3. Add target contacts and domains.
  4. Keep validateMx enabled unless you need offline-only generation.
  5. Run the actor.
  6. Export the dataset to JSON, CSV, Excel, or via API.

Tips for best results

Use at least two or three known emails per domain when possible.

Prefer real first and last names over initials.

Keep aliases such as support@, info@, and sales@ out of the sample rows because they do not represent employee name patterns.

Set includeLowConfidencePatterns only when you want to inspect weak alternatives.

Handling weak evidence

If no sample matches a known pattern, the actor falls back to first.last and adds a warning. This gives you a useful candidate while making it clear that the result is not evidence-backed.

Supported patterns

The actor checks common formats including:

  • first
  • last
  • firstlast
  • first.last
  • first_last
  • first-last
  • flast
  • f.last
  • f_last
  • firstl
  • first.l
  • lastfirst
  • last.first
  • lastf

Integrations

Use the actor in lead workflows such as:

  • company list scraper β†’ Email Pattern Finder β†’ email verifier β†’ CRM
  • recruiter target list β†’ Email Pattern Finder β†’ manual review
  • inbound account list β†’ Email Pattern Finder β†’ sales engagement platform
  • Apify dataset export β†’ Google Sheets or Airtable enrichment

API usage with Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/email-pattern-finder').call({
domains: ['stripe.com'],
sampleContacts: [{ email: 'john.doe@stripe.com', firstName: 'John', lastName: 'Doe' }],
targetContacts: [{ fullName: 'Alex Taylor', domain: 'stripe.com' }]
});
console.log(run.defaultDatasetId);

API usage with Python

from apify_client import ApifyClient
client = ApifyClient()
run = client.actor('automation-lab/email-pattern-finder').call(run_input={
'domains': ['stripe.com'],
'sampleContacts': [{'email': 'john.doe@stripe.com', 'firstName': 'John', 'lastName': 'Doe'}],
'targetContacts': [{'fullName': 'Alex Taylor', 'domain': 'stripe.com'}],
})
print(run['defaultDatasetId'])

API usage with cURL

curl -X POST 'https://api.apify.com/v2/acts/automation-lab~email-pattern-finder/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"domains":["stripe.com"],"sampleContacts":[{"email":"john.doe@stripe.com","firstName":"John","lastName":"Doe"}],"targetContacts":[{"fullName":"Alex Taylor","domain":"stripe.com"}]}'

MCP usage

Connect Apify MCP with this actor enabled:

https://mcp.apify.com/?tools=automation-lab/email-pattern-finder

Claude Code setup:

$claude mcp add apify-email-pattern-finder https://mcp.apify.com/?tools=automation-lab/email-pattern-finder

Claude Desktop JSON configuration:

{
"mcpServers": {
"apify-email-pattern-finder": {
"url": "https://mcp.apify.com/?tools=automation-lab/email-pattern-finder"
}
}
}

Cursor setup:

  1. Open Cursor Settings β†’ MCP.
  2. Add a new remote server named apify-email-pattern-finder.
  3. Use this URL: https://mcp.apify.com/?tools=automation-lab/email-pattern-finder.
  4. Save, reconnect the MCP server, then ask Cursor to run the Email Pattern Finder tool with your lead list input.

VS Code setup:

  1. Install or enable an MCP-compatible assistant extension in VS Code.
  2. Add a remote MCP server named apify-email-pattern-finder with URL https://mcp.apify.com/?tools=automation-lab/email-pattern-finder.
  3. Confirm the Apify MCP server appears as connected before sending prompts that include domains, sample contacts, and target contacts.

Example prompts:

  • "Find the likely email pattern for this domain from these sample contacts."
  • "Generate candidate emails for these prospects and flag weak evidence."
  • "Convert this CSV-style lead list into Email Pattern Finder input."

Legality and privacy

This actor only processes data you provide and public DNS records. It does not bypass login walls, scrape inboxes, probe mailboxes, or send messages. You are responsible for using generated candidates in compliance with applicable privacy, employment, anti-spam, and outreach laws.

FAQ and troubleshooting

Why did I get only first.last candidates?

The actor did not find enough sample evidence above your confidence threshold. Add more known employee emails or enable low-confidence patterns for inspection.

Why is domainHasMx false?

The domain may not receive email, or the DNS lookup may have failed during the run. You can disable MX checks if you only need deterministic generation.

Why was a target skipped?

Each target needs a first and last name, either as firstName and lastName or as a parseable fullName.

Changelog

Initial version: deterministic pattern detection, DNS/MX checks, confidence scoring, and candidate generation.

Support

If you need a new pattern, output field, or batch format, open an issue from the Apify actor page and include a small anonymized input sample.