Daily
Find missing emails for leads in a Hunter list
Every day, leads in a Hunter list that have a name and company domain but no email are run through Hunter's Email Finder, and found addresses are saved back to the lead.
- Runs
- Daily
- Apps
- Hunter.io
- AI
- Not needed
- Access
- API key
Send this to your assistant
Create a ClickRuntime automation: every day, find Hunter leads in my "Conference contacts" list that have a name and company website but no email, use Hunter's Email Finder to fill in the email, and email me which ones were found and which weren't.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Contacts collected at events, from LinkedIn or from a partner often arrive as a name and a company with no email. Someone has to look each one up before the list is usable, and it rarely gets done promptly.
This automation picks up leads in a Hunter list that are missing an email, uses Hunter's Email Finder with the person's name and company domain, and writes good matches back to the lead. You get a daily email of what was found and what still needs a manual look.
The list fills itself in shortly after people are added, ready for verification or a campaign.
What you get out of it
Lists ready sooner
Missing emails are filled in the day leads are added.
Only confident matches
Low-scoring guesses are not saved.
No wasted credits
Each lead is tried once.
Clear follow-up
The email lists who still needs a manual lookup.
Stays in Hunter
Emails are saved to the same leads you already work from.
How it works
What happens, step by step
Every day, ClickRuntime reads the leads in your chosen Hunter list.
It picks out leads with a first name, last name and company website but no email.
For each, it asks Hunter's Email Finder for the most likely address.
Found addresses with a good score are saved to the lead, and you get an email of what was found and what wasn't.
Before it runs live
- Connect Hunter.io
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Hunter.io steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_trigger, credentials, http, notify, state
LIST_ID = 123456 # Hunter leads list "Conference contacts"
MIN_SCORE = 70
@on_trigger
def run(event):
key = credentials.secret("HUNTER_API_KEY")
tried = set(state.get("tried") or [])
leads = http.get("https://api.hunter.io/v2/leads",
params={"leads_list_id": LIST_ID, "limit": 1000, "api_key": key}).json()["data"]["leads"]
todo = [l for l in leads if not l.get("email") and l.get("first_name") and l.get("last_name")
and l.get("website") and str(l["id"]) not in tried]
found, missed = [], []
for lead in todo:
domain = lead["website"].replace("https://", "").replace("http://", "").split("/")[0]
d = http.get("https://api.hunter.io/v2/email-finder",
params={"domain": domain, "first_name": lead["first_name"], "last_name": lead["last_name"],
"api_key": key}).json().get("data") or {}
name = f"{lead['first_name']} {lead['last_name']}, {domain}"
if d.get("email") and (d.get("score") or 0) >= MIN_SCORE:
http.put(f"https://api.hunter.io/v2/leads/{lead['id']}", params={"api_key": key}, json={"email": d["email"]})
found.append(f"- {name} → {d['email']} ({d['score']})")
else:
missed.append(f"- {name}")
tried.add(str(lead["id"]))
state.set("tried", sorted(tried))
if todo:
notify.email_me(f"Hunter: {len(found)} of {len(todo)} missing emails found",
"Found:\n" + ("\n".join(found) or "- none") + "\n\nNot found:\n" + ("\n".join(missed) or "- none"))
return {"checked": len(todo), "found": len(found)}FAQ
Common questions
Does it retry leads it couldn't find?
How are credits used?
Why is a minimum score used?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Verify new leads in a Hunter list every day
Each day you get the new leads whose emails are invalid or risky, before you write to them.
See how it worksGet warned when Hunter credits run low
Each morning, Hunter's account usage is checked and an email goes out when searches or verifications left for the month drop below 10%, with the reset date.
See how it worksAdd new contacts at target companies to a Hunter list
Every Monday, Hunter's Domain Search runs for a set of company domains and any new contacts in chosen departments are saved as leads in a Hunter list, with an email summary.
See how it worksKeep exploring
Set up “Find missing emails for leads in a Hunter list” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
