Telegram + Google Sheets, LinkedIn screening summaries
First-round screening sounds simple until it’s not. LinkedIn links arrive in chats, context gets lost, different reviewers focus on different things, and suddenly your “quick look” turns into a messy thread nobody trusts.
This is the kind of chaos that slows recruiters down, but hiring managers feel it too. Even a small business owner doing their own hiring gets stuck. A LinkedIn screening automation gives you consistent summaries, a shared record in Google Sheets, and clearer next steps without chasing messages.
You send a LinkedIn URL in Telegram. The workflow screens it against your job descriptions, scores fit, and posts a structured summary to your team. Here’s what that looks like in practice, and what you need to run it.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Telegram + Google Sheets, LinkedIn screening summaries
flowchart LR
subgraph sg0["Receive Telegram Msg to Recruiter Bot Flow"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Extract from File", pos: "b", h: 48 }
n1@{ icon: "mdi:cog", form: "rounded", label: "Download Selected JD", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "JD Matching Agent", pos: "b", h: 48 }
n3@{ icon: "mdi:robot", form: "rounded", label: "Detailed JD Matching Agent", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Download Selected JD1", pos: "b", h: 48 }
n6@{ icon: "mdi:cog", form: "rounded", label: "Extract from File1", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "Access JD Files", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Transform for Multiple JDs"]
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Match Selected JD Name with .."]
n10@{ icon: "mdi:robot", form: "rounded", label: "Recruiter Scoring Agent", pos: "b", h: 48 }
n11@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser-1", pos: "b", h: 48 }
n12@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser-3", pos: "b", h: 48 }
n13@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser-2", pos: "b", h: 48 }
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Receive Telegram Msg to Recr.."]
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Extract LinkedIn Profile Inf.."]
n16@{ icon: "mdi:swap-horizontal", form: "rounded", label: "LinkedIn Profile Ready?", pos: "b", h: 48 }
n17@{ icon: "mdi:cog", form: "rounded", label: "Wait for LinkedIn Profile", pos: "b", h: 48 }
n18["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Reply with Confirmation Msg"]
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Increment Loop Counter", pos: "b", h: 48 }
n20@{ icon: "mdi:swap-vertical", form: "rounded", label: "Initialize Loop Counter to P..", pos: "b", h: 48 }
n21["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Restore Loop Counter"]
n22@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Checked 10x for LinkedIn Pro..", pos: "b", h: 48 }
n23["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Check LinkedIn Profile Extra.."]
n24["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Fully Extracted LinkedIn.."]
n25["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Reply with Error/Try Again Msg"]
n26@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Key LinkedIn Profile Data", pos: "b", h: 48 }
n27@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set JD Data", pos: "b", h: 48 }
n28@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Selected JD Format", pos: "b", h: 48 }
n29["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Send Msg to Internal Talent .."]
n30["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Send Review Completed Msg to.."]
n31@{ icon: "mdi:brain", form: "rounded", label: "Gemini 2.5 Pro-3", pos: "b", h: 48 }
n32@{ icon: "mdi:brain", form: "rounded", label: "Gemini 2.5 Pro-2", pos: "b", h: 48 }
n33@{ icon: "mdi:brain", form: "rounded", label: "Gemini 2.5 Pro-1", pos: "b", h: 48 }
n34@{ icon: "mdi:swap-vertical", form: "rounded", label: "Gather and Set Final Data", pos: "b", h: 48 }
n35["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge"]
n36@{ icon: "mdi:database", form: "rounded", label: "Add Candidate Analysis in GS..", pos: "b", h: 48 }
n37@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Start Msg Sent + Valid Linke..", pos: "b", h: 48 }
n38@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Spam Check: Sent 4 LinkedIn..", pos: "b", h: 48 }
n39["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Reply - Too Many LinkedIn UR.."]
n40@{ icon: "mdi:database", form: "rounded", label: "Get All Rows Matching Telegr..", pos: "b", h: 48 }
n41@{ icon: "mdi:cog", form: "rounded", label: "Count Rows Matching Telegram..", pos: "b", h: 48 }
n42["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Grab Clean LinkedIn URL"]
n43@{ icon: "mdi:swap-horizontal", form: "rounded", label: "JD Match w/Telegram Msg?", pos: "b", h: 48 }
n35 --> n34
n27 --> n4
n7 -.-> n2
n4 --> n3
n4 --> n5
n33 -.-> n2
n32 -.-> n3
n31 -.-> n10
n0 --> n28
n2 --> n43
n6 --> n27
n1 --> n0
n21 --> n16
n5 --> n6
n19 --> n22
n28 --> n10
n42 --> n15
n16 --> n24
n16 --> n17
n10 --> n35
n43 --> n1
n43 --> n8
n34 --> n36
n17 --> n19
n3 --> n9
n11 -.-> n2
n13 -.-> n3
n12 -.-> n10
n8 --> n4
n18 --> n29
n26 --> n2
n26 --> n35
n36 --> n30
n15 --> n20
n41 --> n38
n9 --> n10
n14 --> n37
n22 --> n23
n40 --> n41
n38 --> n42
n38 --> n18
n38 --> n39
n23 --> n21
n24 --> n26
n37 --> n40
n37 --> n25
n20 --> n23
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n14 trigger
class n2,n3,n10,n11,n12,n13 ai
class n31,n32,n33 aiModel
class n16,n22,n37,n38,n43 decision
class n36,n40 database
class n15,n23,n24 api
class n8,n9,n21,n42 code
classDef customIcon fill:none,stroke:none
class n8,n9,n14,n15,n18,n21,n23,n24,n25,n29,n30,n35,n39,n42 customIcon
The Challenge: Consistent LinkedIn Screening Without the Chaos
Most teams don’t fail at hiring because they lack candidates. They fail because early screening is inconsistent and scattered. Someone drops a LinkedIn URL in Telegram, one person skims it on mobile, another opens it later on desktop, and both walk away with different conclusions. Then comes the back-and-forth: “Did they actually have X?”, “Which role are they applying for?”, “Where did we put that profile again?” Meanwhile, good candidates wait, and your team spends real time repeating the same review work.
It adds up fast. Here’s where it breaks down.
- Reviewers use different mental checklists, so “screening” becomes opinion instead of a repeatable process.
- Job description matching is often guessed from a quick glance at a headline, which leads to the wrong pipeline and wasted interviews.
- Telegram threads bury important context, so you re-open profiles and re-ask the same questions later.
- Manual logging into Google Sheets gets skipped when things get busy, so you lose your audit trail and can’t explain decisions clearly.
The Fix: Telegram to AI Screening Summary + Google Sheets Log
This workflow turns a simple Telegram message into a structured, repeatable screening process. A candidate (or sourcer) sends a LinkedIn profile URL to your Telegram bot. The automation validates the link, blocks obvious spam by limiting submissions per user, and immediately confirms receipt so nobody wonders if it “went through.” Then it scrapes the full LinkedIn profile data through Apify, waits for extraction to complete (with automatic polling), and hands the cleaned profile to AI agents that match the candidate to the best-fitting job description from your Google Drive folder. Finally, it generates a recruiter-style screening report: strengths, weaknesses, risk/reward factors, and a 0–10 fit score with justification. Everything is logged to Google Sheets with a unique submission ID, and your internal Telegram group gets a formatted summary to review together.
The workflow starts in Telegram with a LinkedIn URL. In the middle, Apify extracts profile data and the AI agents handle JD matching and screening analysis. The output lands in two places: a clean Google Sheets tracker for your audit trail, and a Telegram summary for fast team decisions.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say your team screens 20 LinkedIn profiles a week from Telegram. Manually, it’s easy to spend about 10 minutes reviewing the profile, then another 5 minutes writing a summary and logging it into Google Sheets, which is roughly 5 hours a week. With this workflow, the “human time” becomes sending a URL (about a minute) and reading the summary in your internal Telegram group. The scrape and AI analysis run in the background, so you usually get those hours back without rushing the decision.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Telegram to receive LinkedIn URLs and notify teams.
- Google Sheets to store screening logs and IDs.
- Apify API token (get it from Apify account settings).
- Google Gemini API key (get it from Google AI Studio).
Skill level: Intermediate. You’ll connect accounts, paste a few API tokens, and update folder/chat IDs.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
Telegram message triggers the run. A user sends a LinkedIn profile URL (and often a role name) to your Telegram bot, which validates the URL and checks the spam rule (max 3 submissions per Telegram username).
Profile data gets extracted and cleaned. The workflow calls Apify to scrape the LinkedIn profile, then polls up to 10 times (about 15 seconds apart) until the enriched profile data is ready. If the scrape takes longer, it waits instead of failing silently.
AI matches the candidate to the right JD. It checks the role mentioned in Telegram first. If that’s missing or vague, it falls back to the LinkedIn content itself and selects up to three possible job description matches from your Google Drive folder, then narrows it down to one.
Screening results go to Sheets and your team chat. A recruiter-style report is generated (strengths, weaknesses, risk/reward, fit score with justification), logged into Google Sheets with a unique submission ID, and summarized in your internal Telegram group for quick review.
You can easily modify the spam limit to allow more submissions, or tighten screening criteria to focus on culture fit or technical depth based on your needs. See the full implementation guide below for customization options.
Watch Out For
- Telegram bot permissions can trip you up in group chats. If notifications don’t appear, confirm the chat ID is correct and the bot is allowed to post messages.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Common Questions
About an hour if you already have your tokens and Google Drive folder ready.
Yes, but someone needs to be comfortable pasting API keys and updating a few IDs. No coding, just careful setup.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Apify scraping costs (often a few dollars a month for modest volume) and any Gemini usage if you exceed the free tier.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
You can raise or lower the submission limit by editing the spam check node (the one that caps users at 3 submissions). For matching, update the system message in the “JD Matching Agent” and “Detailed JD Matching Agent” so it weights what you care about (current title, industry, leadership, technical depth). For screening quality, tweak the “Recruiter Scoring Agent” prompt to add your must-haves and deal-breakers, then keep the output structure the same so your Google Sheets log stays clean.
Usually it’s a bad bot token or the user never sent /start to the bot. In group chats, it can also be the wrong chat ID (group IDs are often negative numbers) or the bot lacking permission to post. If the bot responds in private chat but not in the internal talent group, check the group notification nodes and confirm the bot is actually in that group.
On n8n Cloud Starter, you’re generally fine for a small team screening a steady flow each week. If you self-host, there’s no execution limit (it mostly depends on your server) and this workflow’s main bottleneck becomes Apify extraction time plus AI rate limits. Practically, it works best as a “one profile in, one summary out” pipeline, and you can queue plenty of submissions as long as you’re not hitting API limits.
Often, yes. This workflow has polling, branching logic, and multi-stage AI decisions, and n8n handles that kind of flow without forcing awkward workarounds. Self-hosting also matters if your screening volume spikes, because you’re not paying per tiny step the way many tools price it. That said, Zapier or Make can be perfectly fine for lightweight “log a link to a sheet” automations. If you want a quick sanity check before you build, Talk to an automation expert.
Once this is running, your team stops debating what they think they saw on LinkedIn and starts working from the same structured summary. Set it up once, then let the workflow do the repetitive part.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.