Every 30 minutes
Score local business leads and find the owner's email
Each business in your sheet gets a fit score for your offer, and the good fits get a decision-maker's email from Hunter.
- Runs
- Every 30 minutes
- Apps
- Google Sheets, Hunter.io
- AI
- Yes, uses the built-in AI allowance
- Access
- Hunter key; Sheets read+write
Send this to your assistant
Create a ClickRuntime automation: every 30 minutes, for each new business in my Local leads sheet, score how well it fits my offer from 1 to 10 with a short reason, and for scores of 7 or more find the owner's or manager's email with Hunter.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Lists of local businesses from directories and maps are long and mixed: some are a perfect fit for what you sell, many are not. Calling or emailing all of them wastes days, and looking up owners' emails for every one costs credits.
Agencies, B2B service providers and local suppliers use it to focus on the businesses most likely to buy, with a contact ready for each.
What you get out of it
Focus on the best fits
A score and a one-line reason for each business show where to spend your time.
Credits spent where they count
Hunter is only used for businesses that score well, so poor fits do not cost anything.
Decision makers, not info@
Results favour owners, directors and managers over generic inboxes.
All in your sheet
Score, reason, name and email sit in the same row, ready for outreach.
How it works
What happens, step by step
Every 30 minutes, ClickRuntime reads your sheet for businesses that have not been scored yet.
AI scores each one from 1 to 10 against your offer and gives a short reason.
For businesses that score 7 or more, Hunter searches their website domain for an owner or manager's email.
The score, reason, contact name and email are written back into the row.
Before it runs live
- Connect your Google Sheets account and pick the spreadsheets it may use
- 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
- Act only on the items that match your own rules, and skip the rest
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Slack
- Combine it with other Google Sheets and Hunter.io steps into one automation
Under the hood
The code that runs this automation
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, report_fetched, credentials, http, ai
SHEET_ID = "your-spreadsheet-id"
OFFER = "Online booking and reminder texts for independent salons and clinics."
SCHEMA = {"type": "object", "properties": {"score": {"type": "integer"}, "reason": {"type": "string"}}}
@on_trigger
def run(event):
sheets = build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")),
cache_discovery=False).spreadsheets().values()
rows = sheets.get(spreadsheetId=SHEET_ID, range="Local leads!A2:H").execute().get("values", [])
new = [(i + 2, (r + [""] * 4)[:4]) for i, r in enumerate(rows) if r and len(r) <= 4]
report_fetched(len(new))
if not new:
return {"new": 0}
updates = []
for n, (name, category, website, notes) in new:
fit = ai.generate(f"Offer: {OFFER}\nBusiness: {name}, {category}, {website}, {notes}\nScore the fit 1-10 with a "
"one-line reason.", json_schema=SCHEMA, max_output_tokens=80).json
contact, email = "", ""
if fit["score"] >= 7 and website:
data = http.get("https://api.hunter.io/v2/domain-search", params={"domain": website.split("//")[-1].split("/")[0],
"seniority": "executive,senior", "limit": 1, "api_key": credentials.secret("HUNTER_API_KEY")}).json()
p = ((data.get("data") or {}).get("emails") or [{}])[0]
contact, email = f"{p.get('first_name') or ''} {p.get('last_name') or ''}".strip(), p.get("value", "")
updates.append({"range": f"Local leads!E{n}:H{n}", "values": [[fit["score"], fit["reason"], contact, email]]})
sheets.batchUpdate(spreadsheetId=SHEET_ID, body={"valueInputOption": "RAW", "data": updates}).execute()
return {"scored": len(new)}FAQ
Common questions
What does the score look at?
Can I change the cut-off score?
What if the business has no website?
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
Find prospects' emails and draft a first message in your sheet
For each new name and company domain in your sheet, Hunter finds the email address and a short, personal first email is written beside it.
See how it worksList the people at each company in your sheet
For each company domain you add, up to five contacts with their names, roles and emails are added to your Contacts tab.
See how it worksCopy Hunter leads to Google Sheets
Leads saved in a Hunter leads list are copied to a Google Sheets tab with name, email, company, position and verification status.
See how it worksKeep exploring
Set up “Score local business leads and find the owner's email” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
