Telegram + Google Sheets: job leads logged clean
Job hunting gets messy fast. You open three job boards, copy links into a spreadsheet, lose track of what you already applied to, then repeat it tomorrow.
Marketing managers doing a quiet search feel it first. Recruiters chasing fresh roles and career coaches supporting multiple clients run into the same wall. This Telegram job automation turns “searching” into a simple chat command, and it keeps your tracking clean without you thinking about it.
You’ll see how the bot pulls roles from multiple platforms, filters them with AI, sends the best matches back to Telegram, and logs every listing into Google Sheets (and Airtable) so you can follow up faster.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Telegram + Google Sheets: job leads logged clean
flowchart LR
subgraph sg0["Telegram Bot Flow"]
direction LR
n0["<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/>Telegram Bot Trigger"]
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Command Filter", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Job Search Filter", pos: "b", h: 48 }
n3["<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 Welcome Message"]
n4["<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/>Parse Job Command"]
n5["<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 Search Status"]
n6["<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/>LinkedIn Jobs Scraper"]
n7["<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/>Indeed Jobs Scraper"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Monster Jobs Scraper"]
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/>Process Jobs for Telegram"]
n10["<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/>Format Jobs Message"]
n11["<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 Job Results"]
n12@{ icon: "mdi:database", form: "rounded", label: "Save to Google Sheets", pos: "b", h: 48 }
n13["<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/airtable.svg' width='40' height='40' /></div><br/>Save to Airtable"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Log Usage Analytics"]
n1 --> n3
n2 --> n4
n4 --> n5
n5 --> n6
n5 --> n7
n5 --> n8
n10 --> n11
n10 --> n14
n7 --> n9
n8 --> n9
n0 --> n1
n0 --> n2
n6 --> n9
n9 --> n10
n9 --> n12
n9 --> n13
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 n0 trigger
class n1,n2 decision
class n12,n13 database
class n6,n7,n8,n14 api
class n4,n9,n10 code
classDef customIcon fill:none,stroke:none
class n0,n3,n4,n5,n6,n7,n8,n9,n10,n11,n13,n14 customIcon
The Problem: Job leads scatter everywhere
Manual job searching is deceptively expensive. Not because one search is hard, but because you’re constantly context-switching: LinkedIn tab, Indeed tab, Monster tab, then back to your spreadsheet, then back to a saved bookmark you swear you’ll organize later. After a week, you’re staring at duplicate roles, half-copied descriptions, and “Apply later” links that are now buried. Meanwhile, good postings disappear in a day or two, and you can’t follow up quickly because you don’t trust your own tracking.
The friction compounds. Here’s where it breaks down in real life.
- Checking three job boards usually costs about 45 minutes per search once you include opening, filtering, and clicking into listings.
- Duplicates creep in across platforms, so you waste time reviewing the same role with a different title or reposted link.
- Your “job tracker” becomes unreliable because entries are inconsistent, which means follow-up and outreach slows down.
- When you do find a strong match, you still need to copy details into a sheet, grab the apply link, and remember where you found it.
The Solution: A Telegram bot that curates and logs jobs automatically
This workflow turns job searching into a quick Telegram conversation. You message a bot with a command like /jobs marketing manager remote, and n8n takes over. It parses your keyword and location, hits multiple job sources in parallel (LinkedIn, Indeed, Monster via HTTP requests), then normalizes everything into one consistent format. After that, an AI agent using an OpenAI Chat Model filters for relevance and classifies details like experience level and remote availability. Finally, you get a clean, formatted summary back in Telegram, while every listing is logged into Google Sheets and Airtable for tracking and follow-up.
The workflow starts in Telegram, so you don’t have to open a laptop to “do a search.” Then it fetches jobs from three platforms at the same time, cleans and deduplicates results, and delivers a curated list back to your chat. In the background, your spreadsheet archive stays up to date automatically.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you run two searches a day: one for “sales manager Chicago” and one for “growth marketing remote.” Manually, a realistic loop is about 15 minutes per job board per search, so 3 boards × 15 minutes × 2 searches is roughly 90 minutes daily. With this workflow, you send two Telegram commands (maybe 2 minutes total), wait for results to come back, and your Google Sheet is already updated. That’s around an hour back each day, plus cleaner records for outreach.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Telegram to run the bot and commands
- Google Sheets to archive jobs and keep history
- Bright Data API key (get it from your Bright Data dashboard)
Skill level: Intermediate. You’ll connect accounts, add credentials, and understand basic Telegram bot setup.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A Telegram message triggers it. When someone sends /start or a job query like /jobs keyword location, the Telegram Trigger kicks off the right branch and validates the input.
Your request gets interpreted. n8n parses the command (keyword, location, and any extra hints), then posts a quick “search in progress” status back to Telegram so you’re not waiting in silence.
Jobs are fetched and cleaned. HTTP requests pull listings from LinkedIn, Indeed, and Monster at the same time, then a normalization step standardizes fields like title, company, location, salary, and apply URL. Duplicates are removed before the AI filtering, which matters more than people think.
Results go to chat and to your trackers. You receive a formatted Telegram message with curated matches and “Apply Now” links, while Google Sheets and Airtable get updated so your pipeline stays consistent over time.
You can easily modify the keyword filters to include different roles or industries based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Telegram Trigger
This workflow starts when a user sends a Telegram message to your bot. Set up the trigger and ensure it listens for incoming messages.
- Add and configure Telegram Intake Trigger as the entry node.
- Set Updates to
message. - Credential Required: Connect your telegramApi credentials.
- Confirm that Telegram Intake Trigger outputs to both Validate Start Command and Filter Job Query in parallel.
Step 2: Connect Telegram Command Routing
Filter incoming messages to separate onboarding commands from job search requests.
- In Validate Start Command, set the condition to compare Left Value
={{$json.message.text}}with Right Value/start. - Connect Validate Start Command to Dispatch Welcome Note.
- In Filter Job Query, set the condition to check Left Value
={{$json.message.text}}startsWith/jobs. - Connect Filter Job Query to Interpret Job Request.
Step 3: Set Up Job Request Processing and Status Updates
Parse the user’s job query, then immediately confirm the search is running.
- In Interpret Job Request, paste the provided JavaScript that parses keywords, location, and Telegram metadata.
- Connect Interpret Job Request to Post Search Status.
- In Post Search Status, set Text to
🔍 **Searching for Jobs...**with the included expressions{{$json.keyword}}and{{$json.location}}. - Set Chat ID to
={{$json.chatId}}. - Credential Required: Connect your telegramApi credentials in Post Search Status.
Step 4: Configure Parallel Job Fetching
Once the search status is posted, three job sources are queried simultaneously.
- Ensure Post Search Status outputs to LinkedIn Job Fetch, Indeed Job Fetch, and Monster Job Fetch in parallel.
- In LinkedIn Job Fetch, set URL to
https://api.brightdata.com/datasets/v3/trigger, Method toPOST, and Body Parameters to includedataset_id,country,keyword={{$json.keyword}}, andlocation={{$json.location}}. - In Indeed Job Fetch, set URL to
https://api.brightdata.com/datasets/v3/trigger, Method toPOST, and mapwhatto={{$json.keyword}}andwhereto={{$json.location}}. - In Monster Job Fetch, set URL to
https://api.monster.com/job-search/v2/search, Method toGET, and query parametersq={{$json.keyword}},where={{$json.location}},page1.
genericCredentialType with httpHeaderAuth, but no credentials are configured. Add the required API auth headers for Bright Data and Monster before testing.Step 5: Normalize and Store Job Results
All job source responses are standardized, filtered, and saved to storage systems.
- Connect LinkedIn Job Fetch, Indeed Job Fetch, and Monster Job Fetch to Normalize Job Results.
- In Normalize Job Results, keep the provided JavaScript to deduplicate and cap results to 10 entries.
- Ensure Normalize Job Results outputs to Compose Results Message, Update Sheets Archive, and Append Airtable Records in parallel.
- In Update Sheets Archive, set Operation to
appendOrUpdate, Sheet Name toTelegram_Jobs, Document ID to[YOUR_ID], and Column to Match On tojob_id. - Credential Required: Connect your Google Sheets OAuth2 credentials in Update Sheets Archive.
- In Append Airtable Records, set Base ID to
[YOUR_ID], Table ID to[YOUR_ID], and Operation tocreate. - Credential Required: Connect your Airtable Token API credentials in Append Airtable Records.
Step 6: Configure Results Delivery and Analytics
Format a Telegram-friendly summary and deliver it while logging usage metrics.
- In Compose Results Message, keep the provided JavaScript that formats the job list and summary message.
- Confirm Compose Results Message outputs to both Deliver Job Results and Record Usage Metrics in parallel.
- In Deliver Job Results, set Text to
={{$json.telegram_message}}and Chat ID to={{$json.telegram_chat_id}}. - Credential Required: Connect your telegramApi credentials in Deliver Job Results.
- In Record Usage Metrics, set URL to
https://hooks.zapier.com/hooks/catch/[YOUR_ID]/and JSON Body to the provided expression={{ { "user_id": $json.telegram_user, "chat_id": $json.telegram_chat_id, "search_query": $json.search_query, "jobs_found": $json.job_count, "timestamp": $json.search_timestamp, "platform": "telegram", "workflow": "job_search" } }}.
Step 7: Test and Activate Your Workflow
Run a full test to verify the Telegram interaction, job fetching, and data storage.
- Click Execute Workflow and send a Telegram message like
/startand/jobs marketing remote. - Confirm Dispatch Welcome Note responds to
/startand Post Search Status responds to/jobs. - Verify Normalize Job Results outputs records and that Update Sheets Archive and Append Airtable Records store the entries.
- Check that Deliver Job Results sends a formatted message and Record Usage Metrics posts to your Zapier webhook.
- When everything works, toggle Active to enable production use.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n credentials screen and the target spreadsheet sharing settings first.
- 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.
Frequently Asked Questions
About an hour if you already have the accounts and keys.
No. You’ll mostly paste credentials and adjust a few settings in n8n.
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 Bright Data API usage costs from your Bright Data plan and any OpenAI API usage for filtering.
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.
Yes, but plan to tweak two places. Update the command parsing logic in the “Interpret Job Request” step so it accepts your new keywords cleanly, then adjust the AI filtering prompt in the agent/model step to prioritize the roles and seniority you care about. Common customizations include adding industry-specific terms, changing the experience level labels, and filtering harder for remote or salary-listed roles. If you log to different columns, you’ll also update the Google Sheets mapping so your tracker stays readable.
Usually it’s the bot token or webhook setup. Regenerate the token via @BotFather if needed, then confirm your n8n instance is reachable over HTTPS because Telegram webhooks won’t work without SSL. Also check that you’re using the correct chat ID when sending messages back, especially if you test in groups. If it works once and then stops, rate limits or a changed webhook URL are common culprits.
On n8n Cloud Starter, you’re capped by monthly executions, so the practical limit depends on how often you run searches. If you self-host, there’s no execution limit and it mainly comes down to your server size plus the scrape/API limits of your data provider. In normal use, most people run a handful of searches a day and stay well within limits. If you’re pulling hundreds of results per search, add stronger deduping and consider batching so your sheet writes don’t choke.
For multi-source scraping and cleaning, n8n is usually the smoother choice. You can run parallel requests, normalize data, dedupe, and branch logic without turning it into an expensive tangle of tasks. Self-hosting is the real difference, honestly, because it lets you scale without counting every step. Zapier or Make can still work if you only want “Telegram message → append to sheet,” but the moment you add three sources plus AI filtering, you’ll feel the constraints. If you’re torn, Talk to an automation expert and you’ll get a clear recommendation.
Once this is running, your “job search” becomes a quick message and a clean log you can trust. The bot handles the repetitive digging so you can focus on outreach and applications.
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.