Source: raw/I_Built_an_AI_System_That_Automates_My_Proposals_n8n_+_Gamma.md, raw/How_I_INSTANTLY_Generate_Proposal_Decks_with_n8n_AI_Agents.md

Nate Herk (UpAI) walks through an n8n workflow that turns a finished sales call into a polished Gamma slide-deck proposal. Fireflies records the call, n8n logs the meeting, a Slack human-in-the-loop step asks whether to draft a deck, and an AI agent rewrites the transcript into a structured proposal that Gamma renders into shareable slides. The two videos cover the same system at different depths — the longer details every node, prompt, and Gamma API parameter; the shorter is a faster walkthrough of the same flow.

Key Takeaways

  • Two-workflow split, not one monolith. Workflow 1 logs the meeting; workflow 2 generates the deck on demand. Herk argues this scales better — meeting-end events can route to different downstream paths (proposal, minutes, follow-up email) without entangling deck logic.
  • Fireflies is the transcript source. The webhook fires on transcription complete, but the body only contains a meeting ID and event type. A second Fireflies API call retrieves the transcript plus AI-summary fields.
  • Polling loop handles AI-summary lag. Fireflies’ AI summary (gist, action items, bullets) finishes after the raw transcript. Wait → fetch → IF check → loop until the gist exists.
  • Human approval via Slack. A Send and Wait node asks “Generate a proposal?” before any AI tokens are spent. Yes routes to the agent; no updates the Sheet status to generation declined.
  • Gamma renders the deck. One HTTP POST to Gamma’s /generate endpoint with text_mode: preserve, a custom theme ID, and the agent’s output as input_text produces a shareable deck and emails the link.
  • 90% draft, not 100%. Herk explicitly says: never auto-send. Charts misalign, road-map weeks are guessed, case-study slots need manual fill.
  • Standardization layer. A “set” node consolidates variables (transcript, meeting ID) from either the auto path or a manual form-submission path so downstream nodes reference one source.

The Pipeline

Workflow 1 — Meeting logger (auto-triggered):

  1. Fireflies webhook — paste the n8n production URL into Fireflies developer settings, toggle transcription complete. Fires when a call ends.
  2. Wait node — buys time for Fireflies’ AI summary to finish.
  3. Fireflies HTTP request — GET meeting by ID. Returns sentences array (the transcript), title, host email, keywords, and AI-generated summary fields (gist, bullet points, action items, overview).
  4. IF node — checks whether summary.gist exists. If false, loops back to the wait node (polling pattern). If true, proceeds.
  5. Code node — speakers cleanup — extracts a deduplicated array of speakers from the sentences JSON. Herk’s method: paste incoming JSON into Claude, ask it to write the n8n code node, iterate until it works.
  6. Google Sheets append — writes a new row: date, title, attendees, AI gist, status (NA), meeting ID.

Workflow 2 — Deck generator (triggered on new sheet row OR manual form submission):

  1. Trigger — Google Sheets row-added event, OR an n8n form node where you paste a meeting ID manually (covers “I declined earlier but now I want one”).
  2. Fireflies HTTP request — re-fetch full meeting info. A limit node keeps only the last item as a guardrail against simultaneous meeting endings.
  3. Code node — transcript cleanup — outputs Speaker Name: line formatted text, only printing the speaker label when it changes.
  4. Set node — variable standardization — consolidates transcript and meeting_id from whichever upstream path actually executed. Herk calls this the “C node” that abstracts over A or B.
  5. Slack Send and Wait — “Your meeting [title] just concluded. Generate proposal?” Yes proceeds; no updates sheet status to generation declined.
  6. Proposal agent — system prompt establishes the agent as “expert senior AI solutions consultant and sales engineer.” Constraints: client-facing, no follow-up questions, never mention AI/automation, confident assumptions when data is missing, placeholders for unknowns. Required output structure: title page → executive summary → problem & challenge → proposed solution → ROI → soft/intangible benefits → implementation roadmap → success metrics → “Why choose [agency]” advocacy.
  7. Gamma HTTP POST to the /generate endpoint. Headers: X-API-KEY, Content-Type: application/json. Body fields: input_text (agent output, with a JS replace stripping newlines/quotes that would break JSON), text_mode: preserve (don’t let Gamma re-summarize), theme_id (copied from Gamma’s UI via “copy theme ID for API”), text amount/tone/audience filters, image source/model filters, share_settings for auto-emailing the link.
  8. Slack notification — “Your gamma deck is being generated.”
  9. Google Sheets update — match on meeting ID, set status to generated.

The output deck includes ROI numerics (Herk’s demo: “350+ hours saved annually, $28K cost savings, 0% error rate”), a with/without-automation comparison graphic (sometimes broken — needs human edit), an implementation roadmap (week counts are guessed), and a closing case-study slide Herk suggests wiring to a project database for true personalization.

Try It

  • Map the prompt to your service. The proposal structure (exec summary → problem → solution → ROI → roadmap → metrics → why-us) is generic to consultancy work. For a dental marketing agency, swap in: marketing audit → program (SEO, ads, content, video) → projected lead/case lift → 90-day rollout → KPIs → why-us with case studies.
  • Replace Fireflies with Zoom if calls record there — Zoom’s API exposes transcripts via recordings_list, and the same polling-for-AI-summary pattern applies.
  • Pre-load case studies into a Google Sheet or vector DB and let the agent retrieve the most relevant ones for the closing slide. Herk flags this as the highest-impact next step.
  • Always edit before sending. Road-map week counts and ROI deltas are agent guesses; charts sometimes mislabel. Build a human review step into the SOP.
  • WEO Marketly fit: strong for first-draft proposals after discovery calls — the structure maps cleanly onto dental marketing engagements. Risk is the AI inventing numbers (case-acquisition lift, hours saved). Use it for structure and tone; fill numbers manually from real WEO case data.