Today, recruiters work across multiple tools: LinkedIn, ATSs, CRMs, email, and more. But what if we could bring part of that logic into the spreadsheet?
This guide shows how I built a fully functional sourcing assistant inside Google Sheets using Apps Script, a tool that:
- Filter profiles by timing in their current role
- Filters profiles by tech skills or keywords
- Highlights sensitive companies (like clients or blacklist)
- Count outreach activity
- Helps recruiters move faster with zero extra software
🔍 Step 1: Defining the Goal
The goal was to create a “smart filtering assistant” inside Sheets that helps:
- Analyze candidate lists fast
- Prioritize whom to contact.
- Avoid risky outreach (e.g., to clients)
- Work visually: with colors, menus, filters
I chose Google Sheets because it’s flexible, familiar, and scriptable.
🧱 Step 2: Setting Up the Sheet
The main sheet includes these columns:
Full Name
Current Role Dates
Profile Link
Current Company
,Previous Company
Skills
,Summary
,Headline
Email Sent
(checkbox or marker)
And additional sheets:
Blacklist
– Companies to avoidClients
– your clientsTarget List
– Companies of interestTop Companies
– prestigious orgsin process/rejected
– candidates in the pipeline
✨ Step 3: Adding the Script
I opened Extensions → Apps Script and added code to:
- Calculate tenure (e.g. “Jan 2020 — Present” → 52 months)
- Color-code rows based on company matches
- Filter rows with specific keywords
- Create a custom menu called Profile Scanner
Sample menu structure:
ui.createMenu("Profile Scanner")
.addItem("🕒 Calculate LinkedIn Tenure", "calculateLinkedInTenure")
.addItem("🚫 Mark Blacklist", "markBlacklist")
.addItem("🔽 Filter Over 3 Years Tenure", "filterOverThreeYears")
.addItem("🧠 Filter by Skills", "filterBySkills")
.addItem("📘 Generate Documentation", "generateDocumentationSheet")
.addToUi();
🎯 Step 4: Sample Logic — Marking Risk
I built logic to mark candidates who:
- Have > 3 years in current role
- Work at blacklisted companies
- Already in process
Example logic:
if (tenure >= 36) risk += 1;
if (blacklist.includes(company)) risk += 2;
if (alreadyInProcess.includes(profileLink)) risk += 2;
And then we color-code rows accordingly.
🧪 Step 5: Testing with Real Data
We loaded a test set of 100+ candidates and used the menu to:
- Calculate time
- Filter for skills
- Tag risk via colors
- Export a filtered shortlist to a new sheet.
Results: Saved hours of manual scanning.

📌 Tips for Building Your Own
- Think about your flow
- Write to ChatGPT (or another tool like it) what you want to build
- Keep everything in the sheet
- Use PhantomBooster to scrape your data from your LinkedIn search
- Start filter fast and smart
✅ Summary
You don’t need AI to be smart. With just Google Sheets + Apps Script, you can:
- Automate sourcing logic
- Prevent errors
- Focus your energy on engagement
Want to build your own? Start simple:
- Define the filters you use every day
- Create columns to track them
- Automate the rest ✨
You write the GPT what you want, and it gives you the code to copy into the Apps Script (inside every Google Sheet):

Goog luck!