

HubSpot + KI-Präsentation: Playbook zur Automatisierung von Sales Decks (2026)
Für Sales-Teams auf HubSpot im Jahr 2026 ist der ROI der Automatisierung kontobasierter Sales Decks messbar: durchschnittliche Zeitersparnis von 2–4 Stunden pro Woche je AE, eine Steigerung der Meeting-zu-Meeting-Conversion um 12–18 % und eine Reduktion der Deck-Erstellungsvarianz im Team um 30–60 %. Der HubSpot + 2Slides Workflow 2026 generiert ein vollständig personalisiertes Sales Deck für jeden Account anhand von Daten, die bereits in HubSpot vorliegen (Unternehmen, Deal-Phase, Produktinteresse, Champion-Kontakt, konkurrierende Alternativen) über drei Integrationspfade: HubSpot Workflow → Webhook → 2Slides API; benutzerdefinierte HubSpot App Card mit Generate-Deck-Button; geplanter täglicher Batch für alle Deals in einer bestimmten Phase. Dieses Playbook enthält das exakte Webhook-Payload, das Prompt-Template, das HubSpot-Felder in Deck-Inhalte umwandelt, sowie den 2Slides API-Flow (generate → jobs/:id → download), der heute von echten RevOps-Teams produktiv eingesetzt wird.
Wenn Sie Revenue Operations für ein Sales-Team auf HubSpot leiten, kennen Sie das Problem bereits: Jeder AE bittet Marketing oder Sales Enablement um „nur eine kleine Anpassung" des Decks vor dem nächsten Call. Multiplizieren Sie das mit vierzig Vertriebsmitarbeitern und dreihundert laufenden Deals, und Sie haben einen Vollzeitjob darin, Google Slides-Templates mit CRM-Daten im Salesforce-Stil zu verknüpfen – nur dass Sie HubSpot nutzen, das über kein natives Äquivalent zum Salesforce Document Generation-Modul verfügt.
Dieses Playbook zeigt Ihnen, wie Sie HubSpot mit der 2Slides V1 API verbinden, sodass jeder Deal in jeder Phase ein personalisiertes, markenkonformes, vertriebsbereites Sales Deck erzeugen kann – ohne dass ein Mensch einen Folienmaster anfassen muss. Die nachfolgenden Patterns werden von RevOps-Teams in B2B-SaaS-, Cybersecurity- und Enterprise-AI-Unternehmen eingesetzt, um durchschnittliche Vertragswerte von 40.000 $ bis über 400.000 $ zu erzielen.
Warum HubSpot-gesteuerte Präsentationen gewinnen
Der Business Case für die Automatisierung von Sales Decks aus HubSpot ergibt sich aus drei messbaren Hebeln.
Hebel 1: Zurückgewonnene AE-Zeit. Interne Beobachtungen bei 2Slides-Kunden mit 20+ Lizenz-Deployments zeigen, dass Account Executives 2–4 Stunden pro Woche für die Deck-Anpassung aufwenden — Umschreiben von Intro-Folien, Aktualisieren von Logos, Einfügen von Schwächen der Konkurrenz, Austauschen von ROI-Rechnern. Bei vollständig belasteten AE-Kosten von 160.000 $/Jahr entspricht dies 6.400–12.800 $ pro AE pro Jahr an reiner Folienarbeit. Bei einem 40-köpfigen Vertriebsteam sprechen wir von konservativ geschätzten 256.000 $/Jahr an zurückgewonnener Kapazität.
Hebel 2: Meeting-zu-Meeting-Conversion. Decks, die aus Live-CRM-Daten generiert werden — also der tatsächlichen Umsatzklasse des Unternehmens, dem tatsächlichen Titel des Champions, dem tatsächlich im Deal-Datensatz aufgeführten Wettbewerber — konvertieren Folgemeetings 12–18 % höher als generische Vorlagen-Decks. Der Grund ist einfach: Spezifität signalisiert Vorbereitung, und Vorbereitung signalisiert, dass ein Vertriebsmitarbeiter ein zweites Meeting wert ist.
Hebel 3: Varianzreduktion. Ihre Top-Quartil-AEs erstellen großartige Decks. Ihr unteres Quartil erstellt mittelmäßige Decks, die Pipeline verlieren. Automatisierung hebt das untere Level an. In Kohortendaten berichten RevOps-Teams, die HubSpot-gesteuerte Deck-Generierung nutzen, von einer 30–60%igen Reduktion der Deck-Qualitätsvarianz, gemessen an Manager-QA-Scores.
Das gemeinsame Muster bei allen drei: Das Deck ist nicht das Produkt, die Vorbereitung ist das Produkt. Die Automatisierung der Vorbereitung ist der wirkungsvollste Schritt, den RevOps 2026 machen kann. Für einen tieferen Einblick in die Enablement-Seite siehe unseren Leitfaden zu wie man Sales Enablement Decks mit AI erstellt.
Die 2026 HubSpot + 2Slides Architektur
Bevor wir auf jede Methode eingehen, hier die Architektur, die jede Implementierung befolgt:
HubSpot CRM (Deals, Unternehmen, Kontakte) │ ├── Trigger (Workflow, App-Karte, Cron) │ ▼ Transformer-Schicht (Serverless Fn / Zapier / Make) │ - Erstellt Prompt aus CRM-Feldern │ - Ruft 2Slides V1 API auf │ ▼ 2Slides V1 API ├── POST /api/v1/slides/generate (gibt jobId zurück) ├── GET /api/v1/jobs/{id} (Polling bis Status = success) └── GET /api/v1/slides/download-slides-pages-voices (Asset-URLs) │ ▼ Zustellung (zurück zu HubSpot Deal als Notiz, E-Mail an AE, Slack DM)
Die 2Slides API ist zustandslos pro Job, asynchron und credit-basiert abgerechnet. Sie authentifizieren sich mit einem API-Schlüssel-Header
x-api-key: sk-2slides-...jobId/api/v1/jobs/{id}pendingprocessingsuccessMethode 1: HubSpot Workflow → Webhook → 2Slides API
Dies ist der gängigste Integrationsweg. Ein HubSpot Workflow überwacht Änderungen der Phase in der Deal-Pipeline und löst einen Webhook zu einer serverlosen Funktion aus, die mit der 2Slides API kommuniziert.
Schritt 1: HubSpot Workflow erstellen
Gehen Sie in HubSpot zu Automation → Workflows → Workflow erstellen → Deal-basiert. Legen Sie den Registrierungs-Trigger fest:
- Filter: ist eine von
Deal-Phase,Discovery Complete,Demo ScheduledProposal Sent - Erneute Registrierung: bei Phasenwechsel aktiviert
Fügen Sie eine Webhook senden-Aktion hinzu:
- Methode:
POST - URL:
https://your-revops-fn.vercel.app/api/hubspot/generate-deck - Schließen Sie ,
dealundassociated companyProperty-Gruppen einprimary contact
Schritt 2: Transformer-Funktion
Deployen Sie dies auf Vercel, Cloudflare Workers oder AWS Lambda. Die Funktion empfängt den HubSpot Webhook, erstellt den 2Slides Prompt und startet die Generierung.
// /api/hubspot/generate-deck.ts export async function POST(req: Request) { const payload = await req.json() const deal = payload.properties const company = payload.associations?.company?.properties ?? {} const contact = payload.associations?.contact?.properties ?? {} const prompt = buildDeckPrompt({ deal, company, contact }) const generateRes = await fetch('https://2slides.com/api/v1/slides/generate', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.TWOSLIDES_API_KEY!, }, body: JSON.stringify({ prompt, slide_count: 12, language: 'en', aspect_ratio: '16:9', theme_id: process.env.BRAND_THEME_ID, // Ihr gesperrtes Marken-Theme metadata: { hubspot_deal_id: deal.hs_object_id, account: company.name, }, }), }) const { jobId } = await generateRes.json() // JobId → Deal-Zuordnung für spätere Abfrage speichern await kv.set(`deal:${deal.hs_object_id}:job`, jobId, { ex: 86400 }) return Response.json({ ok: true, jobId }) }
Schritt 3: Abfragen und Bereitstellen
Eine zweite Funktion (aufgerufen durch einen Vercel Cron alle 90 Sekunden oder durch verzögerten Workflow-Wiedereintritt in HubSpot) fragt
/api/v1/jobs/{id}const jobRes = await fetch(`https://2slides.com/api/v1/jobs/${jobId}`, { headers: { 'x-api-key': process.env.TWOSLIDES_API_KEY! }, }) const job = await jobRes.json() if (job.status === 'success') { const assets = await fetch( `https://2slides.com/api/v1/slides/download-slides-pages-voices?jobId=${jobId}`, { headers: { 'x-api-key': process.env.TWOSLIDES_API_KEY! } } ).then(r => r.json()) await hubspotClient.crm.objects.notes.basicApi.create({ properties: { hs_note_body: `Frische Präsentation bereit: ${assets.pptx_url}`, hs_timestamp: Date.now(), }, associations: [{ to: { id: deal.hs_object_id }, types: [{ category: 'HUBSPOT_DEFINED', typeId: 214 }] }], }) }
Dies ist das gleiche Muster, das wir in unserer Zapier Wochenbericht-Automatisierung verwenden — ein Generierungsaufruf, eine Abfrage, eine Bereitstellung — nur über HubSpot statt Zapier geleitet.
Methode 2: HubSpot App-Karte mit Deck-Generieren-Button
Methode 1 ist automatisch. Methode 2 ist auf Abruf: Der AE öffnet einen Deal in HubSpot, sieht eine benutzerdefinierte Karte in der rechten Seitenleiste, klickt auf Deck generieren, und das Deck landet zwei Minuten später in seinem Posteingang.
Dies verwendet eine HubSpot UI Extension (Teil der Developer Projects-Plattform).
UI Extension Code
// src/app/extensions/DealDeckCard.tsx import { hubspot, Button, Flex, Text, Alert, LoadingSpinner, } from '@hubspot/ui-extensions' import { useState } from 'react' hubspot.extend(({ context, runServerlessFunction }) => ( <DeckCard context={context} runServerless={runServerlessFunction} /> )) function DeckCard({ context, runServerless }) { const [state, setState] = useState<'idle' | 'working' | 'done' | 'error'>('idle') const [deckUrl, setDeckUrl] = useState<string | null>(null) async function onClick() { setState('working') const { response } = await runServerless({ name: 'generateDeck', parameters: { dealId: context.crm.objectId }, }) if (response.deckUrl) { setDeckUrl(response.deckUrl) setState('done') } else { setState('error') } } return ( <Flex direction="column" gap="sm"> <Text>Generieren Sie ein personalisiertes Verkaufsdeck für dieses Konto mit 2Slides.</Text> {state === 'idle' && <Button onClick={onClick}>Deck generieren</Button>} {state === 'working' && <LoadingSpinner label="Deck wird erstellt (90–120s)" />} {state === 'done' && deckUrl && ( <Alert title="Deck ist fertig"> <a href={deckUrl} target="_blank" rel="noreferrer">Deck öffnen</a> </Alert> )} {state === 'error' && <Alert variant="danger">Generierung fehlgeschlagen — prüfen Sie die RevOps-Logs.</Alert>} </Flex> ) }
Die Serverless-Begleitfunktion
Die oben referenzierte Serverless-Funktion (
generateDeck/api/v1/slides/generate/api/v1/jobs/{id}// src/app/app.functions/generateDeck.js exports.main = async (context) => { const { dealId } = context.parameters const deal = await hubspotFetchDeal(dealId) const prompt = buildDeckPrompt(deal) const gen = await fetch('https://2slides.com/api/v1/slides/generate', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.TWOSLIDES_API_KEY }, body: JSON.stringify({ prompt, slide_count: 12, theme_id: process.env.BRAND_THEME_ID }), }).then(r => r.json()) // Poll bis zu 3 Minuten for (let i = 0; i < 36; i++) { await new Promise(r => setTimeout(r, 5000)) const job = await fetch(`https://2slides.com/api/v1/jobs/${gen.jobId}`, { headers: { 'x-api-key': process.env.TWOSLIDES_API_KEY }, }).then(r => r.json()) if (job.status === 'success') { return { deckUrl: job.result?.pptx_url } } if (job.status === 'failed') throw new Error(job.error || 'generation failed') } throw new Error('timeout') }
Dieses Muster — CRM-Objekt → Extension-Karte → API-Aufruf → Inline-Ergebnis — ist derselbe Ansatz, den Marketing-Teams verwenden, wenn sie die Content-Produktion skalieren; siehe wie Marketing-Teams AI-Präsentationsdecks im großen Maßstab erstellen.
Methode 3: Geplante Batch-Generierung
Nicht jedes Deck muss auf Abruf erstellt werden. Für vorhersehbare Pipeline-Reviews – jeden Montagmorgen, jeden vierteljährlichen Geschäftsbericht, jede MEDDPICC-Phasenaktualisierung – ist ein zeitgesteuerter Batch günstiger und zuverlässiger als Echtzeit-Webhooks.
Das Muster
Führe einen nächtlichen Job aus, der HubSpot nach jedem Deal in einer Zielphase abfragt, ein frisches Deck für jeden erstellt und dem AE eine morgendliche Zusammenfassung per E-Mail sendet.
// /api/cron/nightly-deck-refresh.ts export const runtime = 'nodejs' export const maxDuration = 300 export async function GET(req: Request) { // Vercel Cron Schutz mit CRON_SECRET if (req.headers.get('authorization') !== `Bearer ${process.env.CRON_SECRET}`) { return new Response('Unauthorized', { status: 401 }) } const deals = await hubspotClient.crm.deals.searchApi.doSearch({ filterGroups: [{ filters: [ { propertyName: 'dealstage', operator: 'EQ', value: 'proposal_sent' }, { propertyName: 'hs_lastmodifieddate', operator: 'GT', value: String(Date.now() - 86400000) }, ], }], properties: ['dealname', 'amount', 'competitor', 'product_interest', 'champion_title'], limit: 100, }) const jobs = await Promise.all(deals.results.map(async (deal) => { const prompt = buildDeckPrompt(deal) const res = await fetch('https://2slides.com/api/v1/slides/generate', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': process.env.TWOSLIDES_API_KEY! }, body: JSON.stringify({ prompt, slide_count: 10, theme_id: process.env.BRAND_THEME_ID }), }).then(r => r.json()) return { dealId: deal.id, jobId: res.jobId, owner: deal.properties.hubspot_owner_id } })) await enqueueDeliveryJobs(jobs) // SQS / Upstash QStash / Trigger.dev return Response.json({ enqueued: jobs.length }) }
Zeitplanung in
vercel.json{ "crons": [ { "path": "/api/cron/nightly-deck-refresh", "schedule": "0 6 * * 1-5" } ] }
Sechs Uhr morgens, wochentags. Der AE öffnet die E-Mail, das Deck wartet bereits.
Die Prompt-Vorlage, die CRM-Felder in Deck-Inhalte verwandelt
Der wichtigste Faktor für die Qualität eines Decks ist der Prompt. Gute Prompts kodieren, was ein erfahrener AE einem neuen Mitarbeiter sagen würde: „Wenn das Unternehmen X ist, mit einem Champion in Y-Rolle, fokussiert auf Z-Ergebnis, baue das Deck so auf." Einsatzbereite Vorlage:
function buildDeckPrompt({ deal, company, contact }: Ctx) { return ` Erstelle ein 10-12 Folien Sales-Deck für eine B2B-Software-Evaluierung. ACCOUNT-KONTEXT - Unternehmen: ${company.name} - Branche: ${company.industry ?? 'nicht angegeben'} - Jahresumsatzbereich: ${company.annualrevenue ?? 'nicht angegeben'} - Mitarbeiter: ${company.numberofemployees ?? 'nicht angegeben'} - Website: ${company.domain} DEAL-KONTEXT - Deal-Phase: ${deal.dealstage} - Deal-Volumen: $${deal.amount} - Produktinteresse: ${deal.product_interest} - Prioritärer Use Case: ${deal.primary_use_case} - Wettbewerber-Shortlist: ${deal.competitors /* kommagetrennt */} - Evaluierungszeitplan: ${deal.close_date} CHAMPION-KONTEXT - Name: ${contact.firstname} ${contact.lastname} - Position: ${contact.jobtitle} - Gemeldete Prioritäten: ${contact.priorities} DECK-STRUKTUR 1. Titelfolie — „${company.name} × <Ihre Marke>: ${deal.primary_use_case}" 2. Ihre heutige Welt — 3 Bulletpoints, spezifisch für ${company.industry} 3. Die Kosten des Nichtstuns — quantifizieren anhand des ${company.annualrevenue}-Bereichs 4. Unser Ansatz — 3 Säulen ausgerichtet auf ${deal.primary_use_case} 5. Beweise — 2 Fallstudien aus ${company.industry} (oder angrenzend) 6. Differenzierung vs. ${deal.competitors} — siehe Battlecard-Abschnitt unten 7. Implementierungsplan — 30/60/90 abgestimmt auf ${deal.close_date} 8. Kommerzielle Zusammenfassung — Spanne verankert bei $${deal.amount} 9. Risiken und Gegenmaßnahmen 10. Nächste Schritte — ausgerichtet auf ${deal.dealstage} TONALITÄT - Passe an Zielgruppe an: ${contact.jobtitle} - Formell, wenn Titel VP, SVP, Chief, Director enthält; ansonsten gesprächig. - Jede Folie: eine Idee, eine Grafik oder ein Zitat, keine Textwüste. `.trim() }
Halte die Vorlage unter Versionskontrolle. Wenn das Marketing das Messaging-Framework aktualisiert, änderst du eine Datei und der nächste Cron-Lauf übernimmt sie.
Umgang mit Wettbewerbsalternativen
Das Feld
deal.competitorsconst BATTLECARDS: Record<string, string> = { 'Competitor A': ` Competitor A positioniert sich mit <deren Behauptung>. Gegenargument: <Ihr Beweis> + <3-Wort-Slogan>. Landminen-Frage zum Platzieren: "Wann wurde deren letztes Sicherheitsaudit veröffentlicht?" `, 'Competitor B': ` Competitor B führt mit <deren Ansatz>. Gegenargument: <Ihr Gegenargument> — verweisen Sie auf <Kundenname> Wechsel-Case. Landmine: "Fragen Sie nach deren Pro-Nutzer-Obergrenzen ab 500 Nutzern." `, } function battlecardSection(competitorsCsv: string) { const names = competitorsCsv.split(',').map(s => s.trim()).filter(Boolean) if (!names.length) return '' return ` COMPETITIVE BATTLECARDS ${names.map(n => BATTLECARDS[n] ?? '').filter(Boolean).join('\n')} Verwenden Sie dies, um die Differenzierungs-Folie zu befüllen. Nennen Sie den Wettbewerber nie mehr als zweimal. `.trim() }
Hängen Sie das Ergebnis von
battlecardSection(deal.competitors)Speichern Sie Battlecards in einer Datenbanktabelle, anstatt sie fest zu codieren, sobald Sie mehr als zehn haben. Ihr Head of Product Marketing kann sie dann bearbeiten, ohne einen PR einreichen zu müssen.
Häufig gestellte Fragen
Wie verhindere ich, dass HubSpot bei jeder Property-Aktualisierung doppelte Decks generiert?
Fügen Sie dem Deal-Objekt eine Property namens
last_deck_generated_atlast_deck_generated_atWas kostet das in 2Slides-Credits?
Jeder
/api/v1/slides/generateKann ich das Deck in einer anderen Sprache als Englisch generieren?
Ja. Übergeben Sie
language: 'de'language: 'ja'language: 'es'/api/v1/slides/generateWie fixiere ich das visuelle Branding, damit jedes Deck identisch aussieht?
Verwenden Sie eine fest definierte
theme_idBRAND_THEME_IDWas passiert, wenn der Generierungsjob fehlschlägt?
Pollen Sie
/api/v1/jobs/{id}statusfailederrorDas Fazit
HubSpot versucht nicht, Salesforce zu sein, und das ist völlig in Ordnung – seine Einfachheit ist das Feature. Aber Einfachheit bedeutet auch, dass es keine native Dokumentenautomatisierung mitbringt. Diese Lücke ist ein Feature, kein Bug, denn sie bedeutet, dass das RevOps-Team, das HubSpot mit einer KI-Präsentations-API verbindet, die wertvollste Oberfläche in seinem Sales-Tech-Stack besitzt: das Deck, das vor dem Käufer landet.
Die drei oben genannten Methoden – Workflow-Webhook, App-Card-Button, geplanter Batch – decken die gesamte Bandbreite an Generierungsauslösern ab, die ein Vertriebsteam benötigt. Wählen Sie diejenige, die zu Ihrer Funnel-Phase passt. Discovery- und Demo-Phasen erfordern fast immer On-Demand (die App-Card). Angebots- und Verhandlungsphasen profitieren am meisten von der Automatisierung bei Phasenänderung (der Workflow-Webhook). Pipeline-Reviews und QBR-Vorbereitung sind Batch (der Cron). Nutzen Sie alle drei und jeder Deal in der Pipeline hat jeden Tag ein frisches, CRM-wahrheitsgetreues Deck in Reichweite.
Automatisieren Sie Ihre Sales-Decks aus HubSpot – holen Sie sich einen 2Slides API-Key und integrieren Sie ihn in weniger als einem Tag in Ihren nächsten Workflow.
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free