Email Pattern Finder
Pricing
Pay per event
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
Maintained by CommunityActor 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
| Field | Description |
|---|---|
domain | Company domain used for the generated candidates |
targetFullName | Target person name |
detectedPatterns | Ranked patterns found in sample contacts |
topPattern | Highest-confidence pattern used first |
confidenceScore | Score from 0 to 1 |
evidenceCount | Number of sample contacts matching detected patterns |
generatedEmails | Candidate emails with pattern and MX metadata |
domainHasMx | Whether DNS MX records were found |
warnings | Data-quality or confidence warnings |
sourceRows | Optional 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 asstripe.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
- Open the actor on Apify.
- Paste known sample contacts.
- Add target contacts and domains.
- Keep
validateMxenabled unless you need offline-only generation. - Run the actor.
- 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:
firstlastfirstlastfirst.lastfirst_lastfirst-lastflastf.lastf_lastfirstlfirst.llastfirstlast.firstlastf
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 ApifyClientclient = 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:
- Open Cursor Settings β MCP.
- Add a new remote server named
apify-email-pattern-finder. - Use this URL:
https://mcp.apify.com/?tools=automation-lab/email-pattern-finder. - Save, reconnect the MCP server, then ask Cursor to run the Email Pattern Finder tool with your lead list input.
VS Code setup:
- Install or enable an MCP-compatible assistant extension in VS Code.
- Add a remote MCP server named
apify-email-pattern-finderwith URLhttps://mcp.apify.com/?tools=automation-lab/email-pattern-finder. - 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.
Related actors
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.