Arcadium Data Scrapers
Home / Integrations / n8n / YouTube video and channel transcripts to Google Sheets

YouTube video and channel transcripts to Google Sheets

One sheet row per video with the full transcript, title, channel, date and language, plus a column for your own LLM summary. Uses YouTube Transcript & Subtitles Scraper.

This workflow runs YouTube Transcripts Scraper (arcadium/youtube-transcripts) for a list of YouTube links (videos, Shorts, channels or playlists) and appends one row per video to a Google Sheet: the full transcript text with title, channel, publish date, length, caption language and word count. The sheet has an empty summary column for an optional LLM step that you add yourself.

Manual trigger → Apify: Run actor and get dataset → Code: one row per transcript → Google Sheets: Append row

File: workflow.json (n8n workflow export format, with sticky notes that repeat the setup steps).

What you need

CredentialWherePlaceholder in the file
Apify API tokenApify Console → Settings → API & IntegrationsREPLACE_WITH_YOUR_APIFY_CREDENTIAL_ID (credential type Apify API)
Google Sheetsn8n's Google Sheets OAuth2 credentialREPLACE_WITH_YOUR_GOOGLE_SHEETS_CREDENTIAL_ID
A spreadsheetYour Google DriveREPLACE_WITH_YOUR_SPREADSHEET_ID in the sheet URL

The Apify node is Apify's official n8n node, package @apify/n8n-nodes-apify (checked against version 0.9.0, node version 2, operation Run actor and get dataset). On n8n Cloud search for "Apify" in the nodes panel. On self-hosted n8n: Settings → Community nodes → Install → @apify/n8n-nodes-apify.

Import

  1. Create a Google Sheet with a tab named Transcripts and this header row (the node maps columns by name):

videoId | title | channel | publishDate | durationSeconds | language | autoCaptions | wordCount | url | transcript | truncated | summary | scrapedAt

  1. n8n → Workflows → Import from File → workflow.json.
  2. Get transcripts: pick your Apify credential and edit the JSON input:
  3. urls: video links (watch?v=, youtu.be, Shorts), bare video IDs, channel links (https://www.youtube.com/@handle) or playlist links.
  4. maxVideosPerSource: how many transcripts to take from each channel or playlist (5 in the template). Direct video links are not limited by it.
  5. languages: caption languages in order of preference; en also matches en-US and en-GB.
  6. captionType: any (creator captions first, auto-generated as fallback), manual or auto.
  7. Optional: publishedAfter / publishedBefore (YYYY-MM-DD) to limit channel videos by date.
  8. Append to Google Sheets: pick your credential and paste your sheet URL.
  9. Click Execute workflow and check the sheet. To run it on a schedule, replace the manual trigger with a Schedule Trigger and set publishedAfter so a run takes only recent uploads.

Optional: summarize with an LLM

No LLM is configured in the template. To fill the summary column, add an LLM node (for example Basic LLM Chain with your own chat model credential) between Transcripts to rows and Append to Google Sheets, with a prompt such as Summarize this transcript in 5 bullet points: {{ $json.transcript }}, then set summary from its output with an Edit Fields node. The LLM provider bills that step separately.

Cost per run

Pay per event. Prices are the actor's Store pricing at the time of writing (Free plan; paid Apify plans pay less). The live price is on the Store page.

EventPriceIn this template
Transcript$0.00248 ($2.48 per 1,000)1 video + up to 5 channel videos = at most $0.015
Videos without captions, private, age-restricted or missing videos, repeatsfree

Plus Apify's small start event per run. The node caps a run at $0.50 (maxTotalChargeUsd).

What to expect