Every 30 minutes
Screen applicants in a sheet and email each one
Every new applicant in your sheet is scored against the job, the score is written back, and they get the right email.
- Runs
- Every 30 minutes
- Apps
- Google Sheets, SendGrid
- AI
- Yes, uses the built-in AI allowance
- Access
- sheet edit; SendGrid Mail Send
Send this to your assistant
Create a ClickRuntime automation: check my Applicants sheet every hour. Score each new applicant against the job description, write the score in the row, and send them our next-steps or thank-you email through SendGrid.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A small company hiring for one role gets eighty applications through a form that feeds a sheet. The founder reads them at night, applicants wait a week to hear anything, and the strongest ones accept other offers in the meantime.
Each new row is now read against the job description within the hour. The score and a one-line reason go into the sheet, strong candidates get an invitation to the next step, and everyone else gets a polite reply instead of silence.
What you get out of it
Every applicant hears back
A prompt reply, even a no, is the courtesy most applicants never get, and it reflects well on your company.
Strong candidates move first
The best matches get next-step emails the same day, before another offer reaches them.
Scores you can sort
A score and reason in each row let you sort the sheet and read the top ten first.
Your judgment stays in charge
The score is a first pass. You can change any row's status before the email goes out if you prefer to review first.
How it works
What happens, step by step
Every hour, ClickRuntime reads your applicants sheet and picks out rows without a score.
AI compares each applicant with your job description and gives a score and a one-line reason.
The score and reason are written back into the row, which also stops it being handled twice.
Each applicant gets your next-steps or thank-you email through SendGrid, depending on the score.
Before it runs live
- Connect your Google Sheets account and pick the spreadsheets it may use
- Connect SendGrid
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 SendGrid 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, credentials, http, ai, report_fetched
SHEET_ID = "your-spreadsheet-id"
JOB = "Customer success manager, B2B SaaS, 3+ years, remote in EU."
@on_trigger
def run(event):
values = build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).spreadsheets().values()
rows = values.get(spreadsheetId=SHEET_ID, range="Applicants!A2:E").execute().get("values", [])
new = [(i + 2, r) for i, r in enumerate(rows) if len(r) >= 3 and len(r) < 4]
report_fetched(len(new))
if not new:
return {"summary": "No new applicants"}
key = credentials.secret("SENDGRID_API_KEY")
for row_num, (name, email, answers, *_) in new:
result = ai.generate(f"Job: {JOB}\nApplicant answers: {answers[:2000]}", max_output_tokens=80,
json_schema={"type": "object", "properties": {"score": {"type": "integer"}, "reason": {"type": "string"}}}).json
values.update(spreadsheetId=SHEET_ID, range=f"Applicants!D{row_num}:E{row_num}", valueInputOption="RAW",
body={"values": [[result["score"], result["reason"]]]}).execute()
template = "d-nextsteps" if result["score"] >= 7 else "d-thankyou"
http.post("https://api.sendgrid.com/v3/mail/send", headers={"Authorization": f"Bearer {key}"},
json={"from": {"email": "jobs@northwind.example"}, "template_id": template,
"personalizations": [{"to": [{"email": email}], "dynamic_template_data": {"name": name}}]})
return {"scored": len(new)}FAQ
Common questions
What does the score look at?
Can I review before rejection emails go out?
What if an applicant applies twice?
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
Send a welcome email to each new row in a sheet
Anyone added to your sheet gets your welcome email through SendGrid, with their name filled in, and the row is marked as sent.
See how it worksSend your newsletter to everyone in a subscriber sheet
AI drafts your newsletter, you approve it, and it goes to every subscriber in your sheet through SendGrid, with each send logged.
See how it worksSend a personalised email sequence to leads in a sheet
Each lead in your sheet gets a short, personal sequence of emails through SendGrid, and the sheet shows who is at which step.
See how it worksKeep exploring
Set up “Screen applicants in a sheet and email each one” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.