

Automatizza le Presentazioni dei Report di Marketing: Deck to Video API (2026)
Per automatizzare le presentazioni dei report di marketing, esegui un cron del lunedì che estrae le metriche delle campagne, chiede a un LLM un racconto di 8 slide e chiama tre endpoint 2Slides: create-pdf-slides per un deck di riepilogo in formato immagine 16:9, generate-narration in modalità multi per una traccia a due voci, e download-slides-pages-voices per file PNG e WAV per pagina che ffmpeg unisce in un MP4. Un deck 2K di 8 pagine costa 810 crediti (circa 2$), la narrazione aggiunge 1.680 crediti (circa 4,20$), quindi un riepilogo settimanale narrato si aggira intorno ai 6$ per cliente. Creato per marketing ops, growth engineer e agenzie.
Punti chiave
- Un unico job schedulato sostituisce il rituale del lunedì: esportazione metriche, deck di riepilogo 8 slide, voiceover a due speaker e MP4 1920×1080.
- Tre endpoint 2Slides fanno il lavoro:
create-pdf-slides(10 + 100 crediti per pagina a 2K),generate-narration(210 crediti per pagina) edownload-slides-pages-voices(gratuito). - Un riepilogo narrato di 8 slide costa 2.490 crediti, circa 5-6,25$ a seconda del pacchetto; solo il deck costa 810 crediti.
- Ogni endpoint di scrittura è limitato a 6 richieste al minuto per chiave, quindi un run da 50 clienti va messo in coda, non lanciato in parallelo.
- Fast PPT (
generate) non può essere narrato; per il video, parti dacreate-pdf-slidesocreate-like-this.
A chi è rivolto
Responsabili marketing ops che ricostruiscono lo stesso deck di riepilogo ogni lunedì, growth engineer che hanno già le metriche in un data warehouse, e agenzie che devono fornire aggiornamenti settimanali a 20, 50 o più clienti. Il problema è lo stesso: i numeri sono pronti alle 6 del mattino, il deck è pronto a pranzo, e metà degli stakeholder non lo apre mai.
Non usare questa ricetta se gli stakeholder devono modificare le slide in PowerPoint dopo; la pipeline basata su immagini produce un PDF finito più immagini per pagina, non un PPTX nativo. Per deck settimanali modificabili, il percorso Fast PPT in Automatizza report settimanali con Zapier e 2Slides è più adatto.
Il flusso di lavoro in sintesi
| Passo | Strumento | Cosa succede | Endpoint 2Slides / crediti |
|---|---|---|---|
| 1. Trigger | Cron (GitHub Actions, Cloud Scheduler, cron su VM) | Scatta lunedì alle 06:00 nel fuso orario del cliente | nessuno |
| 2. Estrai metriche | Google Ads, Meta, esportazione GA4 o query SQL su warehouse | Un oggetto JSON per cliente: spesa, piano, conversioni, CPA, canali top, creatività top | nessuno |
| 3. Scrivi il racconto | Il tuo LLM preferito | Restituisce 8 sezioni titolate: risultato principale, spesa vs piano, canali top, creatività vincenti, note audience, test, rischi, piano settimana prossima | nessuno |
| 4. Genera il deck | 2Slides | Deck 16:9 a 2K con design a immagine e designStyle del tuo brand | POST /api/v1/slides/create-pdf-slides, 810 crediti per 8 pagine |
| 5. Aggiungi narrazione | 2Slides | Due speaker si alternano nel deck | POST /api/v1/slides/generate-narration, 1.680 crediti per 8 pagine |
| 6. Scarica asset | 2Slides | ZIP con pages/page_01.png, voices/page_01.wav e transcript.txt | POST /api/v1/slides/download-slides-pages-voices, gratuito |
| 7. Assembla e consegna | ffmpeg sul tuo worker o Workspace Export | MP4 H.264 postato su Slack, email o portale cliente | ffmpeg: gratuito; Workspace Generate Video: 20 crediti per pagina |
Ogni chiamata 2Slides usa lo stesso header Authorization: Bearer $SLIDES_API_KEY, e ogni job asincrono va interrogato con GET /api/v1/jobs/{jobId}.
Passo 1: Ottieni una chiave API e configura lo scheduler
Crea una chiave su 2slides.com/api nella scheda API Keys. I nuovi account ricevono 500 crediti gratuiti senza abbonamento, sufficienti per eseguire questa pipeline una volta completa prima di acquistare un pacchetto. Conserva la chiave come SLIDES_API_KEY nello store segreto del tuo scheduler, mai in un browser o notebook condiviso, e verifica con l’endpoint echo prima di schedulare.
curl -s https://2slides.com/api/v1/echo \
-H "Authorization: Bearer $SLIDES_API_KEY"
Per il trigger, un workflow GitHub Actions con on: schedule: - cron: "0 6 * * 1" è sufficiente per pochi clienti. Per 50 o più, metti i clienti in coda e lascia che un worker li processi uno alla volta, così resti sotto il limite di 6 richieste al minuto con margine per retry.
Passo 2: Estrai le metriche e lascia che un LLM scriva il racconto di 8 slide
L’API 2Slides non sa cosa dica un buon riepilogo settimanale; quella parte è tua e determina la qualità del deck. Estrai i numeri della settimana scorsa dalle tue piattaforme pubblicitarie o dal warehouse in un oggetto JSON piatto per cliente, poi chiedi al tuo LLM di restituire esattamente otto sezioni titolate:
- Risultato principale: un numero, una frase ("CPA giù del 18% settimana su settimana a spesa stabile").
- Spesa vs piano: reale, pianificata, scostamento, ritmo mensile.
- Canali top: tre canali con spesa, conversioni, CPA e variazione.
- Creatività vincenti: due o tre annunci con conversioni migliori e perché.
- Note audience e geografiche: cosa è cambiato.
- Test in corso: ipotesi, stato, data lettura.
- Rischi e ostacoli: limiti budget, lacune tracking, stagionalità.
- Piano settimana prossima: tre punti con responsabili.
Chiedi frasi semplici con numeri in linea e meno di 60 parole per sezione. create-pdf-slides considera il testo come fonte di verità per copy e layout, quindi un racconto pulito di 400-500 parole produce un deck più compatto di un dump di 3.000 parole di metriche.
// narrative.mjs: modella l’output LLM prima che arrivi a 2Slides
export function toUserInput(client, sections) {
const header = `Weekly paid media recap for ${client.name}, week of ${client.week}. ` +
`Audience: ${client.stakeholders}. Tone: direct, numbers first.`;
const body = sections
.map((s, i) => `Slide ${i + 1}: ${s.title}\n${s.body}`)
.join("\n\n");
return `${header}\n\n${body}`;
}Passo 3: Automazione del deck report campagna con create-pdf-slides
Invia il racconto a create-pdf-slides. Imposta page: 8 per far corrispondere il numero di slide alle otto sezioni, aspectRatio: "16:9" per schermi, e resolution: "2K" così i PNG reggono a 1920×1080 senza upscaling. designStyle è dove vive il tuo brand: colori, stile tipografico, regole di layout e cosa evitare.
curl -s https://2slides.com/api/v1/slides/create-pdf-slides \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "Weekly paid media recap for Northwind Outdoor, week of 2026-09-01 to 2026-09-07. Audience: CMO and ecommerce lead. Tone: direct, numbers first.\n\nSlide 1: Headline result\nCPA fell 18% to $31.40 at flat spend of $48,200; 1,535 purchases vs. 1,301 the prior week.\n\nSlide 2: Spend vs. plan\nPlanned $50,000, spent $48,200 (-3.6%). Month pacing at 97% of plan.\n\nSlide 3: Top channels\nMeta $22,100 spend, 812 purchases, $27.20 CPA (-22%). Google Search $18,400, 571 purchases, $32.20 CPA (-9%). YouTube $7,700, 152 purchases, $50.66 CPA (+4%).\n\nSlide 4: Creative winners\n\"Trail-ready in 3 layers\" UGC video: 334 purchases, 3.1% CTR. \"Fall sale, free returns\" static: 218 purchases.\n\nSlide 5: Audience and geo notes\nPacific Northwest DMAs up 31% on purchases; 25-34 women now 41% of Meta conversions.\n\nSlide 6: Tests running\nBroad vs. interest targeting on Meta, day 9 of 14, read on Sept 12. Search brand exclusion test paused for tracking fix.\n\nSlide 7: Risks and blockers\nGA4 and Meta purchase counts diverge by 11%; YouTube CPA trending up two weeks straight.\n\nSlide 8: Next week plan\nShift $3,000 from YouTube to Meta UGC (owner: Priya). Launch two new UGC variants (owner: Sam). Close the GA4 tagging gap by Wednesday (owner: Dev).",
"designStyle": "Northwind Outdoor brand: deep forest green #1F3D2B, sand #E8DCC4, white; bold geometric sans-serif headlines; one large number per slide; clean data cards and simple bar comparisons; generous margins; no stock photography, no gradients",
"aspectRatio": "16:9",
"resolution": "2K",
"page": 8,
"contentDetail": "concise",
"imageModel": "gemini-3-pro-image",
"responseLanguage": "English",
"mode": "async"
}'La risposta è { "jobId": "..." }. Interroga GET https://2slides.com/api/v1/jobs/{jobId} ogni 5-10 secondi finché status è success (il PDF è a downloadUrl) o failed. Aspettati qualche minuto per otto pagine 2K. Costo: 10 crediti di pianificazione più 100 per pagina, quindi 810 crediti per il deck di 8 pagine.

create-pdf-slides espone via API.
Per abbinare uno slide brand esistente invece di una descrizione testuale, usa create-like-this con referenceImageUrl che punta a un’immagine pubblica di uno slide on-brand. Corpo, costi e limiti sono identici.
Passo 4: Due speaker con l’API di presentazione video narrata
Quando il job del deck riporta success, chiama generate-narration sullo stesso jobId. Usa mode: "multi" con due speaker nominati e due delle 30 voci disponibili; Kore e Puck sono abbastanza distanti da permettere di seguire chi parla senza indizi visivi. includeIntro: true aggiunge un breve opener che nomina cliente e settimana.
curl -s https://2slides.com/api/v1/slides/generate-narration \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jobId": "<deck jobId from step 3>",
"mode": "multi",
"speaker1Name": "Maya",
"speaker2Name": "Theo",
"speaker1Voice": "Kore",
"speaker2Voice": "Puck",
"contentMode": "standard",
"includeIntro": true
}'L’endpoint risponde con 202 e il job torna in processing. Interroga lo stesso jobId finché torna success. La narrazione costa 210 crediti per pagina (10 per lo script, 200 per l’audio), quindi 1.680 crediti per otto slide. Per lunghezza script e ritmo, vedi Slides narration and video best practices.
Un confronto, perché viene chiesto: il sito sviluppatori di Gamma (https://developers.gamma.app) documenta una ricetta video narrata che concatena n8n, Synthesia, ElevenLabs e la sua Generate API, e le sue chiavi API richiedono il piano Pro. La strada 2Slides sopra usa un solo vendor e una chiave che funziona su qualsiasi account, con ffmpeg da parte tua per l’assemblaggio; non produce un avatar presentatore come fa un layer Synthesia. Disclosure: 2Slides è il nostro prodotto.
Passo 5: Trasforma il report marketing settimanale in video con ffmpeg
Chiama download-slides-pages-voices con lo stesso jobId. Restituisce uno ZIP gratuito contenente pages/page_01.png fino a page_08.png, voices/page_01.wav fino a page_08.wav e transcript.txt con lo script parlato per didascalie o riepilogo email.
curl -s https://2slides.com/api/v1/slides/download-slides-pages-voices \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "jobId": "<deck jobId>" }' \
-o recap.zip && unzip -q -o recap.zip -d recapPoi unisci ogni PNG al suo WAV e concatena. Questa one-liner produce un MP4 H.264 1920×1080 dove ogni slide resta a schermo esattamente quanto dura la narrazione:
cd recap && for i in $(seq -w 1 8); do ffmpeg -y -loop 1 -i pages/page_$i.png -i voices/page_$i.wav -c:v libx264 -tune stillimage -pix_fmt yuv420p -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" -c:a aac -b:a 192k -shortest clip_$i.mp4; done && printf "file 'clip_%s.mp4'\n" $(seq -w 1 8) > list.txt && ffmpeg -y -f concat -safe 0 -i list.txt -c copy weekly-recap.mp4Il concat demuxer finale è documentato in ffmpeg formats reference. Per un taglio verticale, cambia entrambi i valori 1920:1080 in 1080:1920 e rigenera il deck con aspectRatio: "9:16".
Nessun worker con ffmpeg? Apri lo stesso job nel 2Slides Workspace e usa Export, poi Generate Video. Renderizza l’MP4 H.264 a 1920×1080 o 1080×1920 nel browser per 20 crediti a pagina (160 per un riepilogo 8 slide). Adatto per un caso singolo; ffmpeg per 50 clienti ogni lunedì.
Passo 6: Pipeline Node.js per automatizzare le presentazioni dei report marketing
Il tutto in uno script Node 20 senza dipendenze oltre a fetch. Sostituisci loadMetrics e writeNarrative con la tua query warehouse e chiamata LLM.
// weekly-recap.mjs: Node 20+, esegui dal cron del lunedì
import { writeFile } from "node:fs/promises";
import { execFile } from "node:child_process";
import { promisify } from "node:util";
import { toUserInput } from "./narrative.mjs";
import { loadMetrics, writeNarrative } from "./your-data-layer.mjs";
const BASE = "https://2slides.com";
const headers = {
Authorization: `Bearer ${process.env.SLIDES_API_KEY}`, // solo server-side
"Content-Type": "application/json",
};
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
const run = promisify(execFile);
async function post(path, body) {
const res = await fetch(`${BASE}${path}`, { method: "POST", headers, body: JSON.stringify(body) });
if (!res.ok) throw new Error(`${path} -> ${res.status}: ${await res.text()}`);
return res.json();
}
async function waitForJob(jobId, everyMs = 8000) {
for (;;) {
const res = await fetch(`${BASE}/api/v1/jobs/${jobId}`, { headers });
const job = await res.json();
console.log(` job ${jobId}: ${job.status} ${job.progress ?? ""}`);
if (job.status === "success") return job;
if (job.status === "failed") throw new Error(`job ${jobId} failed: ${job.message ?? ""}`);
await sleep(everyMs); // poll ogni 5–10 s; jobs/{id} consente 10 req/min
}
}
export async function buildRecap(client) {
// 1) metriche -> racconto 8 sezioni
const metrics = await loadMetrics(client);
const sections = await writeNarrative(client, metrics);
// 2) deck image-designed: 10 + 100 crediti/pagina a 2K
const { jobId } = await post("/api/v1/slides/create-pdf-slides", {
userInput: toUserInput(client, sections),
designStyle: client.designStyle,
aspectRatio: "16:9",
resolution: "2K",
page: 8,
contentDetail: "concise",
responseLanguage: client.language ?? "English",
mode: "async",
});
const deck = await waitForJob(jobId);
console.log("deck PDF:", deck.downloadUrl);
// 3) narrazione due speaker: 210 crediti/pagina
await post("/api/v1/slides/generate-narration", {
jobId,
mode: "multi",
speaker1Name: "Maya",
speaker2Name: "Theo",
speaker1Voice: "Kore",
speaker2Voice: "Puck",
contentMode: "standard",
includeIntro: true,
});
await waitForJob(jobId);
// 4) PNG + WAV per pagina (gratis) -> MP4 con ffmpeg
const zipRes = await fetch(`${BASE}/api/v1/slides/download-slides-pages-voices`, {
method: "POST", headers, body: JSON.stringify({ jobId }),
});
if (!zipRes.ok) throw new Error(`download failed: ${zipRes.status}`);
const zipPath = `out/${client.slug}.zip`;
await writeFile(zipPath, Buffer.from(await zipRes.arrayBuffer()));
await run("bash", ["./stitch.sh", zipPath, `out/${client.slug}-recap.mp4`]); // il loop ffmpeg del passo 5
return { jobId, pdf: deck.downloadUrl, video: `out/${client.slug}-recap.mp4` };
}
// Processa i clienti uno alla volta: 3 POST per cliente ti mantiene sotto 6 req/min
const clients = JSON.parse(process.env.CLIENTS_JSON ?? "[]");
for (const client of clients) {
try {
const out = await buildRecap(client);
console.log(`done ${client.name}`, out);
} catch (err) {
console.error(`FAILED ${client.name}:`, err.message); // alert, non retry automatico
}
}Ogni cliente costa tre richieste di scrittura (deck, narrazione, download) più polling di lettura con un limite separato di 10 richieste al minuto.
Scegliere uno stile di riferimento
Se descrivere il brand in designStyle non funziona, usa un’immagine di riferimento. La 2Slides Gallery ospita deck reali che puoi sfogliare per ispirazione o passare a create-like-this come referenceImageUrl. Sono deck di riferimento, non output API: le slide sotto provengono da un deck Adobe Creative Trends 2026 nella Gallery e mostrano uno stile sobrio e orientato ai dati, ideale per un riepilogo settimanale.


referenceImageUrl e create-like-this ne ricava colori, tipografia e layout.

Per le agenzie, conserva un URL slide di riferimento per cliente accanto alla configurazione metriche, così ogni deck del lunedì resta nel sistema visivo del cliente.
Quanto costa
Per un riepilogo di 8 slide: 810 crediti per il deck 2K, 1.680 per la narrazione, nulla per lo ZIP o ffmpeg sul tuo worker. I pacchetti crediti vanno da 5$ per 2.000 crediti (0,0025$ ciascuno) a 80$ per 40.000 crediti (0,002$ ciascuno).
| Volume | Crediti deck | Crediti narrazione | Crediti totali | USD a $0.0025 | USD a $0.002 (pacchetti $80) |
|---|---|---|---|---|---|
| 1 riepilogo narrato | 810 | 1.680 | 2.490 | $6.23 | $4.98 |
| 20 riepiloghi/mese (5 campagne settimanali) | 16.200 | 33.600 | 49.800 | $124.50 | $99.60 |
| 500 riepiloghi/mese (125 clienti settimanali) | 405.000 | 840.000 | 1.245.000 | n/a | $2.490 |
| 20 deck/mese, senza narrazione | 16.200 | 0 | 16.200 | $40.50 | $32.40 |
Due note. Passare a resolution: "1K" non risparmia nulla (100 crediti per pagina valgono per 512px, 1K e 2K; solo 4K raddoppia), quindi resta a 2K. Renderizzare l’MP4 nel Workspace invece che con ffmpeg aggiunge 160 crediti (0,32$-0,40$) per riepilogo.
Fast PPT o slide image-designed per questo caso?
| Necessità | Fast PPT generate | create-pdf-slides / create-like-this |
|---|---|---|
| Stakeholder modificano il deck in PowerPoint | Sì, PPTX nativo da 1.500+ template | No, output PDF più immagini per pagina |
| Video da guardare con voiceover | No, narrazione non disponibile | Sì, generate-narration poi MP4 |
| Costo per 8 pagine | 80 crediti (circa 0,20$) | 810 crediti deck, 2.490 con narrazione |
| Tempi di esecuzione | Circa 30 secondi, sync di default | Pochi minuti, async di default |
| Controllo brand | Scegli un themeId da GET /api/v1/themes/search | Testo libero designStyle o referenceImageUrl |
Molti team usano entrambi: un deck Fast PPT per l’account manager che lo annota, e il video narrato per il cliente che guarda da telefono. Come i team marketing generano deck AI a scala approfondisce il lato modificabile.
Errori comuni
- Lanciare 50 clienti in parallelo. Ogni endpoint di scrittura consente 6 richieste al minuto per chiave. Metti i clienti in coda e processali uno alla volta, o distribuisci le chiamate nell’ora.
- Chiamare
generate-narrationsu un job Fast PPT. La narrazione accetta solo job dacreate-pdf-slidesocreate-like-this; un jobgenerateviene rifiutato e non può essere convertito. - Mettere la chiave API in un dashboard browser. Tieni
SLIDES_API_KEYsul server o nello store segreto dello scheduler. Se una pagina client deve mostrare il video, servi l’MP4 già renderizzato. - Usare
page: 0quando vuoi esattamente otto slide.0significa auto-detect del numero di pagine. Impostapage: 8così ogni video settimanale ha forma e durata costante. - Passare un codice lingua.
responseLanguageprende un nome come"Spanish", non"es". Conserva il nome nella configurazione di ogni cliente. - Inviare l’esportazione raw delle metriche. Un CSV di 3.000 righe incollato in
userInputproduce un deck confuso. Riassumi prima, passa un racconto di 400-500 parole e tieni il CSV come allegato.
Domande Frequenti
Quanto costa automatizzare un report marketing settimanale come video narrato?
Un riepilogo narrato di 8 slide costa 2.490 crediti, tra 4,98$ e 6,23$ a seconda del pacchetto. Si scompone in 810 crediti per il deck 2K image-designed (10 di pianificazione più 100 per pagina) e 1.680 crediti per la narrazione a due speaker (210 per pagina). Il download PNG e WAV per pagina è gratuito, e l’assemblaggio con ffmpeg sulla tua macchina non costa nulla.
Un’API di voiceover AI per slide può usare due voci diverse in un deck?
Sì. generate-narration con mode: "multi" prende speaker1Name, speaker2Name, speaker1Voice e speaker2Voice, e alterna i due speaker nelle slide. Ci sono 30 voci disponibili, tra cui Kore, Puck, Zephyr, Charon, Aoede e Leda. Usa mode: "single" con speakerName e voice quando basta un narratore, sempre a 210 crediti per pagina.
Quali endpoint servono per una pipeline API di presentazione video narrata?
Tre, in ordine: POST /api/v1/slides/create-pdf-slides (o create-like-this con referenceImageUrl) per disegnare il deck, POST /api/v1/slides/generate-narration sul jobId risultante per aggiungere audio, e POST /api/v1/slides/download-slides-pages-voices per scaricare PNG e WAV. Interroga GET /api/v1/jobs/{jobId} ogni 5-10 secondi tra i passaggi. Il generate di Fast PPT non fa parte di questa catena perché non può essere narrato.
Posso consegnare lo stesso report settimanale in più lingue?
Sì. Imposta responseLanguage su create-pdf-slides con un nome lingua come "Spanish" o "Japanese" e il testo delle slide sarà scritto in quella lingua; la narrazione segue il contenuto. Sono supportate oltre 20 lingue. Ogni lingua è un job deck separato, quindi un cliente che vuole video in inglese e spagnolo paga due run da 2.490 crediti.
Quanto tempo impiega la pipeline del lunedì per cliente?
Conta qualche minuto per cliente: un deck 2K di 8 pagine richiede qualche minuto di rendering, la narrazione qualche altro, e l’assemblaggio ffmpeg di solito meno di un minuto per otto clip. Interroga ogni 5-10 secondi e processa i clienti uno alla volta per rispettare il limite di 6 richieste al minuto; un run da 50 clienti iniziato alle 06:00 di solito finisce prima del primo stand-up.
Prossimi passi
- Ottieni una chiave API su 2slides.com/api. I 500 crediti gratuiti coprono un riepilogo narrato completo così puoi validare la pipeline prima di acquistare un pacchetto, poi automatizza le presentazioni dei report marketing per ogni cliente con lo stesso calendario.
- Sfoglia le altre ricette team-by-team nel post hub, AI presentation API use cases by team.
- La versione finance di questo workflow, con report di fine mese invece di metriche pubblicitarie, è in Automate financial report presentations with AI voice narration; per regole di script e ritmo, leggi Slides narration and video best practices.
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free