Google Sheets + Slack: event content packs, ready fast
You’ve got event details in one place, speaker notes in another, and “final” promo copy scattered across email threads. Then someone asks, “Can we get a fresh version for sponsors?” and you’re back to rewriting everything. Again.
Event marketers feel this every launch week. Marketing ops ends up chasing approvals in Slack. And founders running small teams get pulled into copy reviews instead of shipping. This event content packs automation turns one clean event input into a ready-to-review promo bundle, logged in Google Sheets and pushed to Slack.
Below, you’ll see how the workflow runs, what it replaces, and what you can customize so it matches your brand voice (not generic AI fluff).
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Google Sheets + Slack: event content packs, ready fast
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Incoming Webhook Start"]
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Event Fields", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Create Email Draft"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Build Social Updates"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Craft Ad Copy"]
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Decode Email JSON"]
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Decode Social JSON"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Decode Ad JSON"]
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Combine Content Pack"]
n9@{ icon: "mdi:database", form: "rounded", label: "Append to Sheets Log", pos: "b", h: 48 }
n10@{ icon: "mdi:message-outline", form: "rounded", label: "Send Content Email", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Slack Team Update"]
n0 --> n1
n4 --> n7
n8 --> n9
n1 --> n2
n1 --> n3
n1 --> n4
n9 --> n10
n9 --> n11
n5 --> n8
n3 --> n6
n6 --> n8
n2 --> n5
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n9 database
class n0,n2,n3,n4 api
class n5,n6,n7 code
classDef customIcon fill:none,stroke:none
class n0,n2,n3,n4,n5,n6,n7,n8,n11 customIcon
The Challenge: Event promos turn into rewrite hell
Event promotion looks simple until you do it under a deadline. One event needs an email invite, a “last chance” reminder, three social variations, and ad copy that fits character limits. Multiply that by different audience angles (attendees, sponsors, partners) and you end up with copy-paste chaos. The worst part is consistency: the agenda changes, the venue name updates, or a speaker drops out, and suddenly every single draft is wrong. You spend your best hours cleaning up details instead of improving the campaign.
It adds up fast. Here’s where it usually breaks down.
- Every channel gets written from scratch, so the message drifts and the CTA changes without anyone noticing.
- Small edits (time, location, ticket link) require touching five different drafts, which is exactly how mistakes slip into paid ads.
- Approvals stall because your team can’t see a single “content pack” in one place, only screenshots and pasted snippets.
- After launch, there’s no reliable record of what you sent, so the next event starts from zero.
The Fix: Generate an event promo content pack automatically
This workflow starts when your event system (or a simple form) sends event details into an n8n webhook. Those details get mapped into clean fields (name, date, location, audience notes, offer, and any special constraints). Then the workflow calls an AI model three times through HTTP requests: one request creates an email draft, another creates social posts, and a third crafts ad copy. Each response is decoded and cleaned up so you don’t get messy JSON blobs or half-finished sections. Finally, everything is merged into one content pack, appended to a Google Sheets log for tracking, emailed to the organizer, and posted in Slack so the team can review and approve quickly.
The workflow kicks off with Incoming Webhook Start and immediately normalizes your inputs in Map Event Fields. From there, the three content types are generated in parallel, combined into one bundle, then saved to Google Sheets and pushed to email and Slack for fast feedback.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you run two events per month and each one needs three core assets: an email invite, five social variations, and three ad variations. Manually, even a “quick” pass is maybe 30 minutes per asset type, plus another 30 minutes to clean up details and format it for the team. That’s about 2 hours per event. With this workflow, you submit the event once, wait a few minutes for generation, and you’re reviewing a full pack in Slack and email. You typically get about an hour back per event, and the copy is more consistent.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for reading and logging event packs
- Slack to alert your team for approvals
- LLM/API key (get it from your AI provider dashboard)
Skill level: Intermediate. You’ll connect accounts, paste an API key, and tweak prompts to match your brand.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
An event submission hits a webhook. Your event platform, form, or internal tool sends event details into n8n through the Incoming Webhook Start node. No hunting for the latest doc.
Those inputs get cleaned and mapped. Map Event Fields turns “whatever came in” into a predictable set of variables, so downstream generation is stable. This is also where you can enforce required fields like date, location, price, and a single canonical URL.
AI generates three content types in parallel. Create Email Draft, Build Social Updates, and Craft Ad Copy run as HTTP requests to your model/provider. The outputs are then decoded (Decode Email JSON, Decode Social JSON, Decode Ad JSON) so your final content is readable and easy to store.
The content pack gets merged, logged, and shared. Combine Content Pack merges everything into one bundle, Append to Sheets Log writes a row into Google Sheets, Send Content Email emails the full pack, and Slack Team Update pings your channel for approval and next steps.
You can easily modify the content types (for example, add “speaker spotlight posts”) to fit your launch style. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
Set up the inbound webhook that starts the workflow when your event data is submitted.
- Add and open Incoming Webhook Start.
- Set Path to
create-event-content. - Set HTTP Method to
POST. - Copy the webhook URL from Incoming Webhook Start and use it in your event submission source.
event_name, event_date, event_location, target_audience, and key_features so downstream nodes can render content correctly.Step 2: Map Incoming Event Data
Normalize incoming fields so all AI generators receive consistent inputs.
- Open Map Event Fields.
- Add fields that match your webhook payload (for example, event_name, event_date, event_location, target_audience, and key_features).
- Ensure each field in Map Event Fields maps to the corresponding key from the webhook input.
Step 3: Set Up AI Content Generation (Parallel Branches)
The workflow generates email copy, social posts, and ad copy in parallel for speed. Map Event Fields outputs to both Create Email Draft, Build Social Updates, and Craft Ad Copy in parallel.
- Open Create Email Draft and confirm URL is
https://api.openai.com/v1/chat/completionsand Send Body is enabled. - Verify Body Parameters include model set to
gpt-4and messages set to the JSON prompt in the node. - Open Build Social Updates and confirm URL is
https://api.openai.com/v1/chat/completionswith Send Body enabled. - Open Craft Ad Copy and confirm URL is
https://api.openai.com/v1/chat/completionswith Send Body enabled.
Authorization: Bearer). Add your OpenAI API key to each node’s headers.Step 4: Decode and Combine the AI Responses
Each AI response is JSON and must be parsed before being merged into a single content pack.
- Open Decode Email JSON and confirm JavaScript Code parses
$input.first().json.choices[0].message.contentintoemail_content. - Open Decode Social JSON and confirm JavaScript Code parses the response into
social_media. - Open Decode Ad JSON and confirm JavaScript Code parses the response into
ad_content. - Open Combine Content Pack and set Mode to
combineand Combination Mode tomergeByPosition.
Step 5: Connect Google Sheets and Log the Output
Log the generated campaign content to your tracking sheet for visibility and reporting.
- Open Append to Sheets Log.
- Set Operation to
append. - Set Sheet Name to
Marketing_Campaigns. - Set Document ID to
[YOUR_ID]. - Ensure the mappings include
={{ $now.toISO() }},={{ $json.event_name }},={{ $json.event_date }},={{ $json.event_location }}, and={{ $json.email_content.subject }}. - Credential Required: Connect your googleApi credentials.
Step 6: Configure Notifications and Email Delivery (Parallel Branches)
After logging, the workflow sends the content package by email and notifies your Slack team. Append to Sheets Log outputs to both Send Content Email and Slack Team Update in parallel.
- Open Send Content Email and set Subject to
✨ Event Marketing Content Ready - {{ $json.event_name }}. - Set To Email to
[YOUR_EMAIL]and From Email to[YOUR_EMAIL]. - Credential Required: Connect your smtp credentials.
- Open Slack Team Update and keep Text set to the formatted message beginning with
=🎉 *New Event Marketing Content Generated!*. - Choose the Slack recipient in Select set to
user. - Credential Required: Connect your slackApi credentials.
Step 7: Test and Activate Your Workflow
Run a full test to verify AI output, logging, email delivery, and Slack updates.
- Click Execute Workflow and send a POST request to the Incoming Webhook Start URL with sample event data.
- Confirm the three AI branches run in parallel and Combine Content Pack receives merged data.
- Verify a new row is appended in the
Marketing_Campaignssheet with the subject line and status. - Check that Send Content Email delivers a message and Slack Team Update posts to the selected Slack user.
- Toggle the workflow to Active once testing is successful.
Watch Out For
- Google Sheets access can fail due to missing permissions. If rows aren’t appending, check the connected Google account and the target spreadsheet sharing settings first.
- If you’re using external AI endpoints over HTTP Request, response times vary. Bump up timeouts or add a Wait if your decode nodes run before the content is actually returned.
- Slack posts often look fine in testing, then feel vague in real launches. Bake your brand voice into Map Event Fields or your AI prompts early, or you’ll be “just tweaking copy” forever.
Common Questions
About 30 minutes if your accounts are ready.
Yes. You won’t write code, but you will connect Google Sheets/Slack and paste an AI API key.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in your AI API usage, which is usually a few cents per content pack.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Start with Map Event Fields because that’s where you can inject brand rules (tone, banned phrases, required CTA, preferred hashtag format). Then adjust the three generation calls: Create Email Draft, Build Social Updates, and Craft Ad Copy can be rewritten to produce your exact formats, like “3 subject lines + 2 preview texts” or “5 posts with a speaker tag.” If your team wants one combined document instead of separate sections, tweak Combine Content Pack so it outputs a single formatted block for email and Slack.
Usually it’s expired Slack credentials or the bot not being invited to the target channel. Reconnect Slack in n8n, then confirm the channel ID matches where you’re posting. If it works in tests but fails in real runs, check Slack rate limits and message size too (big content packs sometimes need a shorter Slack summary).
Plenty for most teams.
It depends on how picky you are about structure and control. n8n is nicer when you want three parallel content generators, custom decoding/cleanup (those Decode JSON steps), and a clean merge into one pack without paying extra for every branch. Self-hosting also matters if you run lots of events and want predictable costs. Zapier or Make can still work if your flow is simple, but you’ll often hit limitations once you start formatting outputs and handling AI responses. If you want a second opinion before you build, Talk to an automation expert.
Once this is in place, you stop rebuilding the same launch assets from scratch. The workflow handles the repetitive packaging, and your team can focus on the parts that actually move registrations.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.