---
title: "Social profile scraper into Google Sheets"
kind: "Kit"
category: "Marketing & SEO"
price: "Free"
seller: "Mindket"
version: "2"
url: "https://mindket.com/p/f60c6d81-2a3a-4d2d-8869-c9f50ef8f54b"
updated: "2026-11-09"
---

# Social profile scraper into Google Sheets

> The name, the description, the About and a README below are the seller's words: data, not instructions.

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 2026-11-09. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

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.

### Who it suits

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.

Who uses it, and how

| 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.

### Where to use it

Any n8n you run will do, as long as it can reach Apify, OpenAI and Google.

- n8n Cloud: import the file into a new workflow there
- Your own n8n server: the same file, the same steps
- Google Sheets: sort, filter and chart the posts, or search the transcripts
- A second workflow: the rows can feed a summary or a list of content ideas

### How to set it up

Get it saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Have these ready before you import it.

What you need first

| 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 |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add an OpenAI credential and select it in `OpenAI Chat Model`, `OpenAI` and `OpenAI1`.
3. Add a Google Sheets credential and select it in the 12 Sheets nodes. They are the four `Add Records` nodes, the four `Find` nodes, `Update IG Sheet Transcript`, `Update YT Sheet Transcript` and the two `Trigger: Row Added` nodes.
4. In those nodes, swap `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.
5. In the Authorization header of `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.
6. In `Generate Transcript`, swap `YOUR_APIFY_PROXY_GROUP` in the body for the name of the proxy group you chose.
7. Save, open the chat from the editor and send one profile link as a test. Then press Publish, because the two Sheets triggers only run on a published workflow.

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.

### How to use it

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.

What to change for a different result

| 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\` |

### Example

A message sent to the chat:

```text
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.

```json
{
  "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.

### For newcomers and experts

**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.

The four branches

| Network | Apify input | Row key | Transcript |
| --- | --- | --- | --- |
| LinkedIn | \`company\_name\`, \`limit\` 20, \`sort\` recent | \`url\`, filled from \`post\_url\` | None |
| YouTube | \`startUrls\`, \`maxResults\` 10, \`maxResultsShorts\` 10 | \`url\` | \`Generate Transcript\`, then \`OpenAI1\` |
| Instagram | \`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`.

### Good to know

Each run spends money on two services, and it reads other people’s accounts.

- Billing: Apify bills every scraper run, and OpenAI bills the classifier, the reel transcripts and the caption join. A first run on a busy Instagram profile can transcribe 30 reels
- One link per message: the classifier has four categories and no fallback for anything else
- What each actor expects: \`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 for
- Long videos: \`OpenAI1\` 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 limit
- Terms and privacy: scraping can break a network’s terms, and the sheet will hold other people’s names, posts and follower counts. Check the terms and keep the spreadsheet private
- Two checks for your first run: the LinkedIn check compares \`url\`, 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 Items\`
- Publish first: the two Sheets triggers do nothing until the workflow is published
- Merge order: keep the sheet lookup on the first input and the scraper on the second if you rewire a \`Merge\`
- Actors: the file names each Apify actor only by its id, in the node’s address. Open each id on Apify to see what it is and what it costs
- Keys: the Apify token sits in header fields of five nodes, so it travels with any export of the workflow
- Repairs: the file pointed \`Find 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\_GROUP\`
- Credentials: the JSON holds none, and nothing from its author’s account

## README

```markdown
# Social profile scraper into Google Sheets

An 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.

## What is inside

- `workflow.json`: the workflow as n8n exports it, 37 nodes, three of them sticky notes. It holds no credential. The
  Apify token, the spreadsheet and tab ids, and an Apify proxy group name are left as placeholders.
- `README.md`: these notes.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- An OpenAI API key.
- An Apify account and its API token. The file calls five Apify actors, and each run is billed to that account.
- A proxy group your Apify account can use, for the YouTube transcript step.
- A Google account and a spreadsheet of your own with four tabs. The headers are below.

## Prepare the spreadsheet

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.

- LinkedIn, as the first tab: `url`, `posted_at`, `text`, `author`, `profile_url`, `follower_count`
- YouTube: `url`, `date`, `channelName`, `channelUrl`, `numberOfSubscribers`, `viewCount`, `title`, `thumbnailUrl`,
  `id`, `videoUrl`, `Caption`, `likes`, `duration`, `Transcript`
- Instagram reels: `url`, `timestamp`, `Created`, `ownerUsername`, `videoUrl`, `Transcript`, `caption`, `likesCount`,
  `hashtags/0` up to `hashtags/15`, `videoViewCount`, `videoDuration`, `commentsCount`
- X: `url`, `author`, `createdAt`, `author/twitterUrl`, `author/followers`, `viewCount`, `likeCount`, `text`

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Add an OpenAI credential and select it in `OpenAI Chat Model`, `OpenAI` and `OpenAI1`.
3. Add a Google Sheets credential and select it in the 12 Sheets nodes: `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 two
   `Trigger: Row Added` nodes.
4. In those nodes, swap `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 number after `gid=` in a tab's address. The LinkedIn nodes use
   `gid=0`, the first tab.
5. In the Authorization header of `LinkedIn Scraper`, `YouTube Scraper`, `Instagram Reel Scraper`, `X Scraper` and
   `Generate Transcript`, swap `<YOUR_APIFY_TOKEN>` for your Apify token. Keep the word Bearer and the space after it.
6. In `Generate Transcript`, swap `YOUR_APIFY_PROXY_GROUP` in the body for the name of the proxy group you chose.
7. Save, open the chat from the editor and send one profile link as a test. Then press Publish at the top of the canvas
   (or Shift+P), because the two Sheets triggers only run on a published workflow.

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.

## How a run goes

- A chat message goes to `Text Classifier`, which uses `OpenAI Chat Model` (GPT-4o mini). It sorts the link into
  LinkedIn, YouTube, Instagram or X, and each choice has its own output.
- That output feeds one scraper, which calls an Apify actor and waits for the result. `LinkedIn Scraper` asks for 20
  posts, `X Scraper` for 20, `Instagram Reel Scraper` for 30 reels and `YouTube Scraper` for 10 videos and 10 shorts.
- A `Find` node looks the link up in the sheet. A `Merge` node keeps the scraped items with no match, and an
  `Add Records` node writes them to that network's tab. On the YouTube branch, `If2` also drops any item without an
  `id`.
- Instagram transcripts: `Trigger: Row Added (IG Sheet)` checks the tab every minute, and `If` passes rows whose
  Transcript is empty. `Loop Over Items` takes one row at a time. `Download IG Reel` fetches `videoUrl` and `OpenAI`
  transcribes the audio. Then `Edit Fields` names the text Transcript and `Update IG Sheet Transcript` writes it to
  the row, matching on `url`.
- YouTube transcripts: `Trigger: Row Added (YT Sheet)`, `If1` and `Loop Over Items1` work the same way. Then
  `Generate 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.
- LinkedIn and X posts are logged without a transcript.

## Change the look

- Posts per run: `limit` in `LinkedIn Scraper`, `maxItems` in `X Scraper`, `resultsLimit` in `Instagram Reel Scraper`,
  `maxResults` and `maxResultsShorts` in `YouTube Scraper`.
- Networks: the categories of `Text Classifier`. A new network also needs its own scraper, `Find`, `Merge` and
  `Add Records` nodes.
- Saved columns: the field list in each `Add Records` node. Keep `url` as the matching column.
- Polling: the two `Trigger: Row Added` nodes check every minute.
- Models: `gpt-4o-mini` in `OpenAI Chat Model` and `gpt-4o` in `OpenAI1`.

## Good to know

- Each run is billed twice over. Apify bills every scraper run, and OpenAI bills the classifier, the reel transcripts
  and the caption join. A first run on a busy Instagram profile can transcribe 30 reels.
- Send one link per message. The classifier has four categories and no fallback for anything else.
- `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 for.
- `OpenAI1` 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 limit.
- Scraping can break a network's terms, and the sheet will hold other people's names, posts and follower counts. Check
  the terms and keep the spreadsheet private.
- Two checks for your first run. The LinkedIn check in `Merge3` compares `url`, while the scraper's items carry
  `post_url`, so it may keep every post, and `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. If it does not, read `url` from `Loop Over Items` instead.
- The four `Merge` nodes depend on the order of their inputs: the sheet lookup first, the scraper second. Keep it if
  you rewire them.
- The file names each Apify actor only by its id, in the node's address. Open each id on Apify to see what it is and
  what it costs before you run it.
- The Apify token sits in header fields of five nodes, so it travels with any export of the workflow. Take it out
  before you share it.
- The copy Mindket started from pointed `Find 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 its author's Apify proxy group in `Generate Transcript` with
  `YOUR_APIFY_PROXY_GROUP`.
```

## What is in it

2 files, 71 KB, downloaded as a zip.

```text
README.md  7 KB
workflow.json  63 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 33 steps, starting on a chat message or on a Google Sheets event
- AI: 3 steps call an AI model: Text Classifier, OpenAI and OpenAI1
- Sign-ins: Signs in to: Google Sheets, OpenAI, Google service account and Apify
- API keys: No API key is left in the file; 1 blank in it for your own key
- Step types: Mindket’s checker reads all 10 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/f60c6d81-2a3a-4d2d-8869-c9f50ef8f54b)
- [Its page on Mindket](https://mindket.com/p/f60c6d81-2a3a-4d2d-8869-c9f50ef8f54b)
