A single reference page for the external accounts and API keys the n8n Workflows for Marketing library uses. Pick the services your workflow needs, follow the numbered steps, and paste the resulting values into n8n when the workflow asks for them.
Each service below has its own section with step-by-step setup, what to copy at the end, and which workflows in the library use it. All services listed have a free tier sufficient for the coursework.
Never paste API keys or tokens directly into an HTTP Request node's body or a sticky note. Always store them in n8n's Credentials panel (instructions in §05 below). When you export a workflow to share, n8n automatically strips credential values — as long as they're stored in the credentials panel.
Used by every workflow that drafts copy with an LLM. Pay-as-you-go billing, a few cents per post.
All three run on the same Google Cloud project. You'll set up one OAuth client and authorise three APIs.
Queues and schedules posts to X, LinkedIn, Instagram and more from a single GraphQL API.
OpenAI's API powers the AI Agent node in every workflow that drafts blog posts, emails, or social copy. Creating a key takes five minutes.
Sign up at platform.openai.com/signup. A phone number is required for verification.
Settings → Billing → Payment methods → add a card. Then Billing → Overview → add at least $5 of credit. The free trial is gone for new accounts; pay-as-you-go is the only option.
Dashboard → API keys → Create new secret key. Name it "n8n marketing lab". Copy the value starting with sk- immediately — you won't be able to see it again.
Billing → Limits → set a hard limit of $10/month. Prevents runaway costs if a prompt loops accidentally.
In n8n → Credentials → Create New → OpenAI → paste the key starting with sk-…. Used in nodes: OpenAI Chat Model, Embeddings OpenAI, or the OpenAI standalone node.
YouTube, Sheets and Blogger all run on Google Cloud. The trick is that you don't need three separate projects — one project with three APIs enabled and one OAuth 2.0 client works for all of them.
Go to console.cloud.google.com with the Google account that owns your YouTube channel, spreadsheets and blog.
Project dropdown (top-left) → New Project. Name: "AI Marketing Lab". Location: "No organisation" is fine. Wait ~30 seconds until it's provisioned.
Navigation menu → APIs & Services → Library. Search and click Enable for each: YouTube Data API v3, Google Sheets API, Blogger API v3.
APIs & Services → OAuth consent screen. User type: External. App name: "AI Marketing Lab". Support email: your email. Under Test users, add your own Google email — required while the app stays in Testing mode.
APIs & Services → Credentials → Create Credentials → OAuth client ID. Application type: Web application. Name: "n8n OAuth client".
Under Authorised redirect URIs, add the one n8n shows you when you start creating any Google credential: usually https://<your-n8n-domain>/rest/oauth2-credential/callback. Copy it from n8n's credential wizard and paste it verbatim.
After creating, Google shows a Client ID and Client Secret. Download the JSON or copy both values into a password manager — you'll paste them into every Google credential you create in n8n.
The same Client ID + Secret work for YouTube, Sheets and Blogger credentials in n8n. You only need to do this step once.
In n8n → Credentials → Create New → YouTube OAuth2 API. Paste the Client ID + Secret from §02 Step 2. Click Sign in with Google — a popup asks you to grant access to YouTube. Accept. n8n stores the refresh token and uses it automatically on every API call.
Same pattern: n8n → Credentials → Create New → Google Sheets OAuth2 API. Paste the Client ID + Secret, sign in. The consent screen will ask for permission to "See, edit, create, and delete your spreadsheets". Accept.
Blogger doesn't have a dedicated n8n node, so we use the generic OAuth2 credential. In n8n → Credentials → Create New → OAuth2 API. Grant Type: Authorization Code. Authorization URL: https://accounts.google.com/o/oauth2/v2/auth. Access Token URL: https://oauth2.googleapis.com/token. Scope: https://www.googleapis.com/auth/blogger. Client ID + Secret: the same pair from §02 Step 2.
Buffer lets you publish to X, LinkedIn, Instagram, Facebook, TikTok and more from one API. We use the GraphQL API with a personal access token.
Sign up at buffer.com. The free plan lets you connect three social channels — enough for the coursework.
In Buffer → Channels → Connect a channel. Pick X (Twitter) and complete the OAuth flow. Repeat for any other platform you want to publish to.
Click your avatar (top-right) → Developers → Create access token. Name it "n8n marketing lab". Copy the token — it starts with a random string.
Click a channel in Buffer's sidebar. The URL becomes something like buffer.com/publishing/queues/6123abc…. The value after queues/ is the channel ID. Copy it for every channel you want to target.
There's no dedicated Buffer node in n8n. The workflow uses an HTTP Request node with the token in the Authorization: Bearer <token> header and the channel ID inside the GraphQL mutation body. Paste the token as REPLACE_WITH_BUFFER_ACCESS_TOKEN and the channel ID as REPLACE_WITH_BUFFER_CHANNEL_ID inside the workflow's HTTP Request node.
If you don't want to use Buffer, the same workflow works with Zapier (webhook trigger) or direct platform APIs. For X specifically, you can swap the Buffer HTTP Request node for an X OAuth2 credential and post via api.x.com/2/tweets.
Telegram bots are the fastest way to give a non-technical user a trigger into n8n. Creating one takes under a minute and the API is free.
Open @BotFather in Telegram. Send /newbot. Pick a display name and a username ending in bot (e.g. iema_lab_bot).
BotFather replies with an HTTP API token — a string like 1234567:AAE-…. This is both your credential and your bot's identity. Anyone with it can post as your bot — treat it like a password.
Open your own bot in Telegram (search the username) and send /start. Bots can only talk to users who've messaged them first — this step opens the channel.
In n8n → Credentials → Create New → Telegram API. Paste the token. Click Test — if it works, the credential turns green.
Used in: Workflow 02 (Telegram trigger + three Telegram sendPhoto / sendVideo / sendMessage nodes). The Telegram API credential is reused across all of them. In Workflow 02 the token is also stored in a Set-node field called YOUR_BOT_TOKEN so HTTP Request nodes can build file URLs with it — paste it there too.
Telegram's file CDN URLs embed your bot token in the path (api.telegram.org/file/bot{TOKEN}/…). Workflow 02 uses these URLs to pass media to Buffer — they work, but never share an exported workflow JSON that includes a real token. Rotate it via BotFather (/revoke) if you suspect exposure.
A single API key from Google AI Studio covers both the Gemini 2.5 Flash Image model (nicknamed "NanoBanana") and Google Veo 3.1, the video generation model. Veo requires a paid tier.
Left sidebar → Get API key → Create API key. Pick or create a Google Cloud project to link it to. Copy the key — starts with AIza….
In Google Cloud Console → Billing → link a billing account to the project. Veo 3.1 is not in the free tier; without billing the Veo call will 403.
Cloud Console → Billing → Budgets & alerts → Create budget. Monthly amount: whatever you're comfortable losing if a loop misfires. Alerts at 50% / 90% / 100%.
Typical cost per 8-second Veo 3.1 clip: ~$3.20. Switch to veo-3.1-fast-generate-preview (already the default in Workflow 02) for ~$1.60 per clip. NanoBanana image generation is cheap at ~$0.04 each.
Used in: Workflow 02 — three HTTP Request nodes (NanoBanana generate, Veo Generation, Check Veo Status) send the key in the x-goog-api-key header. Workflow 02 stores it once in the Set node as gemini_api_key and every downstream HTTP Request references it via {{ $('Set: Bot Token (Placeholder)').first().json.gemini_api_key }}.
Once you have all the tokens and client IDs, n8n's Credentials panel is where they live. From there, every node that needs a credential can reuse it — one source of truth.
In n8n's left sidebar → Credentials. You'll see a list of credentials you've already created.
Click Create New. n8n's picker shows dozens of credential types. Search for the service (e.g. "YouTube OAuth2 API") and follow the inline form.
Every credential form has a Test button (for non-OAuth) or a Sign in with … button (for OAuth). If the test fails, fix it here — it'll fail the same way at runtime.
Open any node that needs auth → Credential to connect with dropdown → pick the one you just created. The same credential can be reused by dozens of nodes.
Prefix every credential with the project or client: "Lab · YouTube OAuth2", "Lab · Google Sheets OAuth2", "Lab · OpenAI". When you work on multiple student projects in the same n8n instance, this keeps them from colliding.
If you accidentally push a credential to GitHub, or paste it in a screenshot on Slack — assume it's compromised. Rotate it immediately: delete the key in the provider's dashboard, create a new one, and update the credential value in n8n. Every workflow using the credential continues to work because the credential name didn't change.
Two cheatsheets, one per workflow, for the moment before you click Import from File.
sk-Stored as an n8n OpenAI credential. No placeholder to replace in the JSON — it lives only in the credential.
Three n8n credentials created from the same pair: YouTube OAuth2 API, Google Sheets OAuth2 API, generic OAuth2 API (for Blogger with scope https://www.googleapis.com/auth/blogger).
REPLACE_WITH_GOOGLE_SHEETS_DOC_IDThe long string in your sheet's URL, between /d/ and /edit. Appears in three places in the workflow. Fastest way to get one: make a copy of the reference template — the two tabs and column schema come pre-configured.
REPLACE_WITH_TRENDS_SHEET_GIDThe numeric ID of the second tab in your spreadsheet. Found in the URL after #gid= when you click the google trends tab.
REPLACE_WITH_BLOGGER_BLOG_IDA 19-digit number from your Blogger dashboard URL. Appears in the HTTP Request node's URL path. See the reference blog published by Workflow 01: lovepoemscreator.blogspot.com.
REPLACE_WITH_BUFFER_ACCESS_TOKEN, REPLACE_WITH_BUFFER_CHANNEL_IDToken goes in the Authorization: Bearer … header. Channel ID goes in the GraphQL mutation body as channelId.
REPLACE_WITH_TELEGRAM_BOT_TOKEN. n8n credential: Telegram API.Stored both as an n8n Telegram API credential (used by trigger + sendPhoto/Video/Message nodes) and as a plain string YOUR_BOT_TOKEN inside the Set node — because the HTTP Request nodes that build file URLs need the raw token.
REPLACE_WITH_GEMINI_API_KEYPaid tier required for Veo. Stored as gemini_api_key in the Set node; referenced by the NanoBanana generate, Veo Generation, Check Veo Status, and Download Video nodes.
Used by GPT-4o Vision (image analysis) and GPT-4.1-mini (both agents). No placeholder in the JSON — credential only.
REPLACE_WITH_BUFFER_ACCESS_TOKEN, REPLACE_WITH_BUFFER_CHANNEL_ID_X, REPLACE_WITH_BUFFER_ORGANIZATION_IDToken and channel ID work the same as Workflow 01. Organization ID is extra here — grab it from Buffer's URL when you're on the org's home page.
REPLACE_WITH_FAL_API_KEYThe Set node carries a fal_api_key field that is not referenced by any live node in the current workflow. Leave the placeholder as-is, or delete the field if you're sure you won't use it.
This page grows with each new workflow. If a workflow uses a service not listed above, a new section appears here with the same structure: steps, what to copy, where to paste.