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 that takes a LinkedIn, YouTube, Instagram or X profile link in its chat, scrapes recent posts through Apify and logs them in Google Sheets, one tab per network. New Instagram and YouTube rows then get a transcript.
Social profile scraper into Google Sheets is an n8n workflow in the Marketing & SEO category, listed by Mindket. It is free. This is version 2, 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.
A profile link in the chat
It starts when a message reaches n8n’s built-in chat. The message is the link of one profile or channel:
A Google Sheet with one tab per network holding the latest posts, and a transcript beside each Instagram reel and YouTube video
What you need before you start.
Web scraping
Runs one actor per network to fetch the posts, and a fifth to fetch YouTube captions, each called over HTTP and waited for.
NeedsApify API token, in five nodes, and a proxy group for the transcript actor
Sorting and transcription
GPT-4o mini sorts the link by network, the audio transcription turns each Instagram reel into text, and GPT-4o joins a video’s captions into one text.
NeedsOpenAI API key, in three nodes
Storage and triggers
Holds one tab per network. Nodes look up, add and update rows, and two triggers watch the Instagram and YouTube tabs for new rows.
NeedsGoogle sign-in and a spreadsheet with four tabs, in 12 nodes
Checked by Mindket on 13 Nov 2026
This n8n workflow logs the recent posts of a social profile in a spreadsheet. You send n8n’s built-in chat the link of a LinkedIn, YouTube, Instagram or X profile. GPT-4o mini reads the link and picks the network, and that network’s Apify scraper fetches the posts: 20 from LinkedIn and X, 30 reels from Instagram, 10 videos and 10 shorts from YouTube. The scraped items are checked against the rows already in your spreadsheet, and the new ones go into that network’s tab. Two more branches watch the Instagram and YouTube tabs for new rows. OpenAI transcribes each reel, a second Apify actor fetches each video’s captions for GPT-4o to join into one text, and both transcripts are written back into their rows.
Marketers, researchers and creators who follow other accounts and want the posts in a sheet they can sort and search. It only reads public profiles: nothing is posted or changed on any network.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Marketing agencies | Social media managers | Follow the accounts of a client’s competitors | A manager sends five competitor links on Friday and reads the new posts in the sheet. |
| Content and media | Content strategists | See which posts and videos a channel’s audience reacts to | A strategist sorts a channel’s tab by view count to find the topics that draw the most views. |
| Sales and recruiting | Account managers | Read a prospect’s recent posts before a call | A rep opens the LinkedIn tab and scans a prospect’s last 20 posts. |
| Research | Analysts and journalists | Collect an organisation’s public posts for later reading | An analyst keeps a month of an organisation’s X posts in one tab and searches them. |
| Video creators | YouTubers and Reels makers | Read the transcripts of videos that work in their field | A creator searches the Transcript column for how other channels open a video. |
You need some n8n: importing a file, adding three credentials and swapping placeholders in 17 nodes, plus a spreadsheet of your own with four tabs. If that is new and you would rather not learn it, skip this one. The page it came from estimates 13 minutes, which assumes the accounts and the spreadsheet already exist.
Any n8n you run will do, as long as it can reach Apify, OpenAI and Google.
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 |
| OpenAI | An API key, for the classifier, the reel transcripts and the caption join |
| Apify | An API token, and a proxy group your account can use for the YouTube transcripts |
| Google Sheets | A Google account and a spreadsheet with four tabs, whose headers the README lists |
workflow.json.OpenAI Chat Model, OpenAI and OpenAI1.Add Records nodes, the four Find nodes, Update IG Sheet Transcript, Update YT Sheet Transcript and the two Trigger: Row Added nodes.YOUR_SHEET_ID for your spreadsheet’s id. Swap YOUR_IG_REELS_TAB_ID, YOUR_YOUTUBE_TAB_ID and YOUR_X_TAB_ID for the ids of those tabs. The LinkedIn nodes use gid=0, the first tab.LinkedIn Scraper, YouTube Scraper, Instagram Reel Scraper, X Scraper and Generate Transcript, swap <YOUR_APIFY_TOKEN> for your Apify token and keep the word Bearer and its space.Generate Transcript, swap YOUR_APIFY_PROXY_GROUP in the body for the name of the proxy group you chose.The page it came from tells you to create an Apify credential and pick it in an Authentication section. The file holds no such setting, so the token goes in the header fields. If you would rather keep it in a credential, create an HTTP Header Auth credential, select it in those five nodes and delete their Authorization header.
Open the chat from the editor and send one link per message: a profile for LinkedIn, Instagram or X, a channel for YouTube. The scraper waits for Apify to finish, and the posts appear in that network’s tab. Within a minute the Sheets trigger sees the new Instagram or YouTube rows and starts their transcripts, one row at a time, and the Transcript column fills in. A video or reel that is already in the sheet is not added again.
| To change | Where |
|---|---|
| How many posts come back | limit in LinkedIn Scraper, maxItems in X Scraper, resultsLimit in Instagram Reel Scraper, maxResults and maxResultsShorts in YouTube Scraper |
| Which networks | The categories of Text Classifier, plus a scraper and its sheet nodes for a new one |
| Which columns are saved | The field list in each Add Records node. Keep url as the matching column |
| How soon transcripts start | The polling time of the two Trigger: Row Added nodes, now every minute |
| Which models | gpt-4o-mini in OpenAI Chat Model and gpt-4o in OpenAI1 |
A message sent to the chat:
https://www.youtube.com/@examplechannel
The classifier answers YouTube, and YouTube Scraper sends this to its Apify actor. Its body also holds a list of switches, all off, which is left out here.
{
"maxResults": 10,
"maxResultsShorts": 10,
"sortVideosBy": "NEWEST",
"startUrls": [
{ "url": "https://www.youtube.com/@examplechannel", "method": "GET" }
]
}Each new video becomes a row in the YouTube tab with its title, link, views and likes. Then Generate Transcript fetches its captions, OpenAI1 joins them and the Transcript column of that row fills in.
If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. This file holds three small workflows side by side: one starts from the chat and scrapes, and two start when a sheet gets a new row. Send one link first, read that run under Executions, then publish. Each node shows what it received and what it sent, which is where a wrong token or a missing tab id turns up.
For experts. The four networks follow one pattern. Only Instagram and YouTube get a transcript.
| Network | Apify input | Row key | Transcript |
|---|---|---|---|
company_name, limit 20, sort recent | url, filled from post_url | None | |
| YouTube | startUrls, maxResults 10, maxResultsShorts 10 | url | Generate Transcript, then OpenAI1 |
username, resultsLimit 30 | url | Download IG Reel, then OpenAI | |
| X | startUrls, maxItems 20, sort Latest | url | None |
Each branch has a Find node that looks the link up in the sheet. A Merge node (Merge3 for LinkedIn, Merge1 for YouTube, Merge for Instagram, Merge2 for X) combines it with the scraped items on url. It keeps the ones with no match and passes them to Add Records. On the YouTube branch, If2 also drops any item without an id.
Each run spends money on two services, and it reads other people’s accounts.
LinkedIn Scraper sends the message as company_name and Instagram Reel Scraper sends it as username. Try each network once with a real link and read what the actor returned. If one rejects a full link, send what it asks forOpenAI1 gets a video’s whole caption list in one request, so a long video costs more and a huge one may exceed the model’s limiturl, while the scraper’s items carry post_url, so it may keep every post. Add Records to LI Sheet then updates a repeat in place. And Update IG Sheet Transcript reads url from Download IG Reel, whose output is the downloaded file. Confirm the transcript lands on the right row, and if it does not, read url from Loop Over ItemsMergeFind YT Rows, Find IG Rows and Find X Rows at a template copy of the spreadsheet, a different file from the one the other nodes write to. Mindket points every Sheets node at YOUR_SHEET_ID. It also replaced the author’s Apify proxy group in Generate Transcript with YOUR_APIFY_PROXY_GROUPAn n8n workflow. Send its chat the link of a LinkedIn, YouTube, Instagram or X profile. It scrapes recent posts through
Apify and logs them in a Google Sheet, one tab per network. New Instagram and YouTube rows then get a transcript.
workflow.json: the workflow as n8n exports it, 37 nodes, three of them sticky notes. It holds no credential. TheREADME.md: these notes.Make one spreadsheet with four tabs. Row 1 of each tab holds these headers exactly, because the nodes find columns by
name. The tab names do not matter, since the nodes pick a tab by its id.
url, posted_at, text, author, profile_url, follower_counturl, date, channelName, channelUrl, numberOfSubscribers, viewCount, title, thumbnailUrl,id, videoUrl, Caption, likes, duration, Transcripturl, timestamp, Created, ownerUsername, videoUrl, Transcript, caption, likesCount,hashtags/0 up to hashtags/15, videoViewCount, videoDuration, commentsCounturl, author, createdAt, author/twitterUrl, author/followers, viewCount, likeCount, textworkflow.json.OpenAI Chat Model, OpenAI and OpenAI1.Add Records to IG Sheet,Add Records to YT Sheet, Add Records to LI Sheet, Add Records to X Sheet, Find IG Rows, Find YT Rows,Find LI Rows, Find X Rows, Update IG Sheet Transcript, Update YT Sheet Transcript and the twoTrigger: Row Added nodes.YOUR_SHEET_ID for your spreadsheet's id. Swap YOUR_IG_REELS_TAB_ID, YOUR_YOUTUBE_TAB_IDYOUR_X_TAB_ID for the ids of those tabs, the number after gid= in a tab's address. The LinkedIn nodes usegid=0, the first tab.LinkedIn Scraper, YouTube Scraper, Instagram Reel Scraper, X Scraper andGenerate Transcript, swap <YOUR_APIFY_TOKEN> for your Apify token. Keep the word Bearer and the space after it.Generate Transcript, swap YOUR_APIFY_PROXY_GROUP in the body for the name of the proxy group you chose.The page this came from tells you to create an Apify credential and pick it in an Authentication section. The file
holds no such setting, so the token goes in the header fields. To keep it in a credential instead, create an HTTP
Header Auth credential, select it in those five nodes and delete their Authorization header.
Text Classifier, which uses OpenAI Chat Model (GPT-4o mini). It sorts the link intoLinkedIn Scraper asks for 20X Scraper for 20, Instagram Reel Scraper for 30 reels and YouTube Scraper for 10 videos and 10 shorts.Find node looks the link up in the sheet. A Merge node keeps the scraped items with no match, and anAdd Records node writes them to that network's tab. On the YouTube branch, If2 also drops any item without anid.Trigger: Row Added (IG Sheet) checks the tab every minute, and If passes rows whoseLoop Over Items takes one row at a time. Download IG Reel fetches videoUrl and OpenAIEdit Fields names the text Transcript and Update IG Sheet Transcript writes it tourl.Trigger: Row Added (YT Sheet), If1 and Loop Over Items1 work the same way. ThenGenerate Transcript asks a second Apify actor for the video's captions, OpenAI1 (GPT-4o) joins them into one text,Edit Fields1 names it Transcript and Update YT Sheet Transcript writes it.limit in LinkedIn Scraper, maxItems in X Scraper, resultsLimit in Instagram Reel Scraper,maxResults and maxResultsShorts in YouTube Scraper.Text Classifier. A new network also needs its own scraper, Find, Merge andAdd Records nodes.Add Records node. Keep url as the matching column.Trigger: Row Added nodes check every minute.gpt-4o-mini in OpenAI Chat Model and gpt-4o in OpenAI1.LinkedIn Scraper sends the message as company_name and Instagram Reel Scraper sends it as username. Try eachOpenAI1 gets a video's whole caption list in one request, so a long video costs more and a huge one may exceedMerge3 compares url, while the scraper's items carrypost_url, so it may keep every post, and Add Records to LI Sheet then updates a repeat in place. AndUpdate IG Sheet Transcript reads url from Download IG Reel, whose output is the downloaded file. Confirm theurl from Loop Over Items instead.Merge nodes depend on the order of their inputs: the sheet lookup first, the scraper second. Keep it ifFind YT Rows, Find IG Rows and Find X Rows at a template copy of theYOUR_SHEET_ID. It also replaced its author's Apify proxy group in Generate Transcript withYOUR_APIFY_PROXY_GROUP.README.md 7 KB workflow.json 63 KB
Updated by Mindket to the current version of this kit.
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…