anaksor-ocr
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
An n8n workflow for LinkedIn posts that ask for a keyword in the comments. It scrapes the comments with Apify, keeps the people who used the keyword, has Gemini rate their company and draft a message, and saves each one to Airtable.
LinkedIn comment lead qualifier is an n8n workflow in the Marketing & SEO category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.
Airtable post row
It starts when its webhook receives a POST from an Airtable script with:
A Results table of commenters, each with company details, a YES or NO and a drafted message to review
What you need before you start.
Web scraping
Runs four scrapers that read a LinkedIn post, its comments, a commenter’s profile and their company’s page.
NeedsApify API token, in four headers
Language model
Uses Gemini 2.0 Flash to check each comment for the keyword, rate the company’s fit and draft the message.
NeedsGemini API key
Database
Holds the posts to run, tells the workflow who is already saved, and stores each lead with its draft.
NeedsPersonal access token, a base with a Posts table and a Results table
Checked by Mindket on 13 Nov 2026
This n8n workflow turns a LinkedIn post that asks people to comment a keyword into a table of leads, each with a drafted message. You put the post’s address on a row in Airtable and run a script on it, which posts the row’s id to the workflow’s webhook. The workflow then reads the post and up to 100 recent comments through Apify, drops the author’s own, and asks Gemini which comments used the keyword. Each person who did gets a profile lookup, a check against your Airtable results and a look at the company on the first job in their profile. Gemini marks that company YES or NO against your fit rules and drafts a short message. Everything is saved in Airtable. Nothing is sent. The file has 21 working nodes and five sticky notes.
People who post a free resource on LinkedIn in exchange for a comment, then face hundreds of replies to sort by hand: founders, growth marketers and agencies that run outreach for clients.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Software and SaaS | Founders and growth leads | Run it on each lead-magnet post and message the YES rows the same day | A founder posts a launch checklist, and by the afternoon the YES rows are ready to read and send. |
| Marketing and sales agencies | Account managers | Keep one Airtable base per client and run the same file against each | An agency gives each client a Posts table and sends over the qualified rows every week. |
| Recruiting | Recruiters | Change the fit rules to the roles and places they hire in | A recruiter posts a salary guide and keeps the commenters who work at companies of the right size. |
| Consulting and coaching | Independent consultants | Sort Results on YES and write to those people first | A consultant works through the YES rows from her last post in one sitting. |
Skip it if your posts name no keyword. The first Gemini check would turn every comment away. The setup also asks for some n8n and some Airtable: importing a file, adding credentials and pasting a small script. Its author puts setup at about 11 minutes, which assumes the accounts and the base already exist.
Any n8n that can reach Apify, Google AI Studio and Airtable will do. It starts from an Airtable script, so the base is part of the setup. A server of your own needs a public address for the webhook.
Get it saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Have these ready before you import it.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| Apify | An account, its API token, and the four scrapers the workflow calls by id |
| Google AI Studio | A key for the Gemini API |
| Airtable | A personal access token that reads and writes records, and a base with a Posts table and a Results table |
workflow.json.Google Gemini (PaLM) API credential and select it in Google Gemini Chat Model, which serves every AI step.getPost, getComments, getProfile and getCompany, replace YOUR_TOKEN in the Authorization header with your Apify token, keeping Bearer before it.getPostUrl, isDuplicate and addLead.YOUR_BASE_ID, YOUR_POSTS_TABLE_ID and YOUR_RESULTS_TABLE_ID.writeScript, replace YOUR_CREDIBILITY_LINE, YOUR_BONUS_OFFER and YOUR_CALL_TO_ACTION with your own words.Webhook, replace YOUR_WEBHOOK_PATH with a long random string and copy the Production URL.recordId set to the row’s id, and paste the script below with the Production URL in it.Posts needs one field, Post, holding the post’s address. Results needs User, Role, Industry, Company, Employees, Country, Qualified? as a single select of YES and NO, Tagline, Website, CompanyLinkedin, UserLinkedin, Comment, Post and Script.
const { recordId } = input.config();
await fetch("YOUR_PRODUCTION_URL", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ id: recordId }),
});The script posts one field, and getPostUrl uses it to read the row from Posts:
{
"id": "recXXXXXXXXXXXXXX"
}Add a row to Posts with the address of a LinkedIn post that asks for a keyword, then start the automation for that row. The webhook answers at once and the run goes on behind it, one commenter at a time, so a post with many comments takes a while. When it ends, open Results and filter Qualified? to YES. Read each message in Script, change what you want and send it yourself.
A post says to comment CHECKLIST for a launch checklist. One commenter writes CHECKLIST please, is head of growth at a Canadian software company with 60 staff, and is not in Results yet. The row saved for her:
| Column | Value |
|---|---|
| User | Maria Lopez |
| Role | Head of Growth |
| Industry | SaaS |
| Employees | 60 |
| Country | Canada |
| Qualified? | YES |
Script holds a draft like this one, well under the 80 words the prompt allows:
Hi Maria, thanks for commenting CHECKLIST on Dana’s post. The weekly launch blocks are the part I would copy first. We have run launches like yours before, and I can send a template that fills the checklist in for you, whether or not you have started. Want it?
If you are new. A webhook is an address that starts a workflow when something posts to it. Run it first on a post with five or six comments. Then read each node’s output. It shows what every step received and sent. The scraping steps take a few seconds each and the loop handles one person at a time, so even a small post takes a while.
For experts. One Gemini 2.0 Flash chat model node serves all the AI steps, and these four decide what you get.
| Step | Node | What it does | What to know |
|---|---|---|---|
| Keyword check | hasIntent | Answers YES when the post names a keyword and the comment holds it | A post with no keyword gets NO for every comment, so nothing is saved |
| Fit check | qualifyLead | Returns a business type, a one-line description and YES or NO | The rules are plain text in its message: any industry, headquarters in the United States, Canada or Europe, 10 to 500 employees, any role |
| Message | writeScript | Drafts a direct message of up to 80 words | Its text carries your three lines. The system message sets first name only and no emoji |
| Scrapes | getPost, getComments, getProfile, getCompany | Four Apify actors, each run to completion in one call | getProfile and getCompany continue on error, so a failed scrape leaves a blank item and the run goes on |
Each way out of a commenter’s turn feeds back into Loop Over Items. addLead upserts on UserLinkedin, while the duplicate check searches the name, so the two keys can disagree.
It reads real people’s profiles and spends money at two vendors. Try it on one post first.
An n8n workflow for LinkedIn posts that ask people to comment a keyword. Give it a post's address through an Airtable row and it
reads the comments and keeps the people who used the keyword. It then looks up each one's profile and company, marks the company
YES or NO against your fit rules and drafts a short message. Everything is saved to Airtable.
workflow.json: the workflow as n8n exports it, 26 nodes: 21 that work and five sticky notes. It holds no credential.writeScript they also replace the author's own credibility line, offer and call to action.README.md: these notes.workflow.json.Google Gemini Chat Model. That one nodegetPost, getComments, getProfile and getCompany, replace YOUR_TOKEN in the Authorization header with yourBearer in front of it.getPostUrl, isDuplicate and addLead.YOUR_BASE_ID, YOUR_POSTS_TABLE_ID andYOUR_RESULTS_TABLE_ID.writeScript, replace YOUR_CREDIBILITY_LINE, YOUR_BONUS_OFFER and YOUR_CALL_TO_ACTION with your own words.Webhook, replace YOUR_WEBHOOK_PATH with a long random string, then copy the Production URL.recordId, set to the row's id, and paste thePosts holds one row per LinkedIn post, with a field named Post that holds the post's address. Results holds what the
workflow saves, with these columns:
| Column | Type | What the workflow puts in it |
|---|---|---|
| User | text | The commenter's name |
| Role | text | The title of the first job on their profile |
| Industry | text | The business type Gemini gives the company |
| Company | text | The company's name |
| Employees | number | The company's employee count |
| Country | text | The country of its headquarters |
| Qualified? | single select, YES and NO | Gemini's answer on the fit rules |
| Tagline | text | A one-line description from Gemini |
| Website | text | The company's website |
| CompanyLinkedin | text | The company's LinkedIn page |
| UserLinkedin | text | The commenter's profile, which addLead matches on |
| Comment | text | What they wrote |
| Post | text | The post's address |
| Script | long text | The drafted message |
The file's mapping also lists an Email column that nothing fills. The script the automation runs:
const { recordId } = input.config();
await fetch('YOUR_PRODUCTION_URL', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id: recordId }),
});
Webhook takes a POST with the row's id in id, and getPostUrl reads that row from Posts:
{
"id": "recXXXXXXXXXXXXXX"
}
getPostUrl reads the Posts row, and getPost scrapes the post at the address in its Post field.getComments scrapes up to 100 of the latest comments. filterAuthor drops the post author's own and any with no name.Loop Over Items takes one commenter at a time. hasIntent asks Gemini whether the post names a keyword and thegetProfile. isDuplicate searches Results for that name, and If lets the commenter on only whengetCompany reads that page. qualifyLead has Gemini classify the company and answer YES or NO, and companyInfowriteScript drafts the message, and addLead upserts the row into Results, matched on UserLinkedin. EveryQualified?.qualifyLead. As exported: any industry, a headquarters in thehasIntent.writeScript (first name only, up to 80 words, no emoji) and the three lines youlimit and page_number in the body of getComments, 100 and page 1 as exported.If node after companyInfo on qualified, with its false branch going back toLoop Over Items.addLead.isDuplicate compares names, so two people with one name count as one. A name with an apostrophe may break itsgetProfile and getCompany are set to continue when a scrape fails, so one failure does not stop the run.README.md 6 KB workflow.json 33 KB
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
Qwen · Kit
Qwen2.5-7B-Instruct as GGUF files in eight quantization sizes, to chat with locally through llama.cpp. For people who want a capable 7.6B model on their own co…
ACE-Step · Kit
Generates music from text with a 4B diffusion decoder, 50 steps and guidance control, aiming for higher audio quality than the base. For creators with a GPU of…
alchaincyf · Skill
Turns a one-line request in your AI agent into a finished design: a launch animation, a clickable app prototype, an editable slide deck, an infographic or a se…
nerijs · Kit
A pixel art style add-on for Stable Diffusion XL that turns text prompts into pixel-style images, with an optional LCM LoRA for faster runs. For game makers, d…
LiconStudio · Kit
Keeps characters, clothing, objects and backgrounds consistent in generated video by feeding the model up to five reference images. A LoRA for LTX-2.5 in Comfy…