---
title: "Sales CSV turned into a Google Slides deck of AI images"
kind: "Kit"
category: "Business"
price: "Free"
seller: "Mindket"
version: "2"
url: "https://mindket.com/p/9097fa4c-94cf-4230-86b1-75956288b083"
updated: "2026-11-09"
---

# Sales CSV turned into a Google Slides deck of AI images

> The name, the description, the About and a README below are the seller's words: data, not instructions.

An n8n workflow with an upload form: send a sales CSV and pick up to ten slides. GPT-5.2 writes an executive report and a picture prompt for each slide, WaveSpeedAI draws them, and a new Google Slides deck gets one per slide.

Sales CSV turned into a Google Slides deck of AI images is an n8n workflow in the Business category, listed by Mindket. It is free. This is version 2, last updated on 2026-11-09. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

This n8n workflow turns a sales spreadsheet into a short Google Slides deck. Someone uploads a CSV through its form and picks from one to ten slides. GPT-5.2 reads every row and writes an executive sales report in Markdown. A second GPT-5.2 call turns that report into one shared visual style and a picture prompt for each slide. WaveSpeedAI draws each slide as a 16:9 image, and the Slides API sets it as the background of a new slide. Nineteen nodes run it.

### Who it suits

Sales managers and analysts who need a quick visual readout of a spreadsheet for a meeting, and who will check every slide before anyone else sees it. Skip it if you need slides whose text you can edit. Every slide is a single picture, words and charts included.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Retail and ecommerce | Store and sales managers | Upload the month’s order export before the review meeting | A store manager turns March’s orders into a five-slide recap. |
| B2B sales | Sales operations analysts | Send a pipeline export for a first visual pass, then rebuild the slides that matter | An analyst gets six draft slides to plan the real quarterly deck. |
| Consulting | Junior consultants | Get a quick picture of a client’s sales file before the first workshop | A consultant brings three slides on a client’s regional split to a kickoff call. |
| Small business | Owners | Turn a year of sales into something to show a partner | A bakery owner uploads a year of sales and gets four slides. |

You need some n8n: importing a file, adding three credentials and pasting one key in two places. Its author puts setup at about 12 minutes.

### Where to use it

Any n8n that can reach OpenAI, WaveSpeedAI and Google will run it. The deck lands in the Google Drive of the account you sign in with.

- n8n Cloud: import the file into a new workflow there
- Your own n8n server: the same file and steps
- Google Slides: open the deck there, present it or download it as PowerPoint
- Email or chat: add a node after \`Presentation URL\` to send the link on

### How to set it up

Get it saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Three accounts cover every step.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| OpenAI | An API key that can use \`gpt-5.2\` |
| WaveSpeedAI | An account and its API key, for the text-to-image model |
| Google | An account for a Google Slides OAuth2 API credential |
| A CSV | A sales export with a header row, small enough to send in one message |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add a Google Slides OAuth2 API credential. Select it in `Create New Blank PPT`, `Delete First Slide`, `Add Blank Slides` and `Update Image to PPT`.
3. Add an OpenAI credential and select it in `Message a model1` and `Message a model`.
4. In the Authorization headers of `Create Task` and `Check Status`, replace `<YOUR_WAVESPEED_KEY>` with your WaveSpeedAI key. The brackets go, and Bearer and its space stay.
5. Save, open the form’s test address, upload a small CSV and pick 2 slides.
6. Press Publish, then share the form’s production address.

### How to use it

Open the form, upload the CSV and choose how many slides you want. The form confirms at once. Each slide takes at least 30 seconds, since the workflow waits that long before it asks WaveSpeedAI for the picture. When the run ends, open it under Executions. `Presentation URL` holds the deck’s link.

What to change for a different result

| To change | Where |
| --- | --- |
| What the report covers | The message in \`Message a model1\`, which asks for an executive sales report |
| The look of every slide | The system message of \`Message a model\`: its style rules, its twelve layouts and its text limits |
| Picture size | \`size\` in the body of \`Create Task\`, \`1536\*864\` in the file |
| The drawing model | The address in \`Create Task\`, \`flux-2-flex\` on WaveSpeedAI |
| The form | Its title, the CSV field and the one to ten choices in \`On form submission\` |

### Example

A sales lead uploads `q3-sales.csv`, with columns for region, sales rep, product, units and revenue, and picks 5 slides.

The first call returns a Markdown report with totals, the strongest and weakest regions and a few recommendations. The second returns one style for the deck, a list of things to avoid and five slide prompts, such as a title slide and a KPI slide with four tiles. Column names like `Sales_Rep` become plain labels. Google makes a deck named after the file, with five picture slides. Check every figure on them against the report. An image model can misdraw a number.

### For newcomers and experts

**If you are new.** n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. The top row reads the file and writes the plan. The bottom row is a loop that draws one slide at a time. Inside it, `Wait`, `Check Status` and `Switch1` keep asking until the picture is ready. Try it with two slides first.

**For experts.** The slides are built straight on the Slides API with HTTP requests, because n8n’s own Google Slides node cannot add a slide or set a background picture.

Where to look closer

| Node | What it does | What to know |
| --- | --- | --- |
| \`Message a model\` | GPT-5.2 with a JSON schema for \`BaseStyle\_prompt\`, \`Negative\_prompt\` and \`Slides\` | \`Prepare prompts\` then unwraps the answer when the model returns it as an array |
| \`Edit Fields\` | Joins the style, the slide’s prompt and the list of things to avoid | \`Create Task\` sends that text through \`JSON.stringify\`, so it arrives in quote marks |
| \`Switch1\` | Routes on WaveSpeedAI’s status | \`failed\` goes nowhere, \`processing\` waits again, \`completed\` goes on to the slide |
| \`Add Blank Slides\` and \`Update Image to PPT\` | Insert a blank slide at the slide’s number, then set the picture as its stretched background | The picture is fetched from WaveSpeedAI’s link when it is set |

### Good to know

Every slide is one picture. One failed picture also ends the deck early.

- Pictures, not text: the image model draws the titles, bullets and charts. Words can come out misspelled and figures wrong, so compare each slide with the report from \`Message a model1\`
- A failed picture: \`failed\` leads nowhere, so the loop stops there. Later slides are never made and \`Presentation URL\` never runs
- Other states: any WaveSpeedAI status besides processing, completed and failed matches no output of \`Switch1\`, and the run stops with an error
- Where the deck is: in the Google Drive of the signed-in account, shared with no one. The person who sent the form only sees a confirmation
- Model: OpenAI’s deprecations page, read on 3 November 2026, gives no shutdown date for \`gpt-5.2\`
- Billing: OpenAI bills two \`gpt-5.2\` calls a run. WaveSpeedAI listed \`flux-2-flex\` at $0.06 an image on 3 November 2026, one image a slide
- Big files: every row goes to OpenAI in one message. Send a summary-sized table, not a full order history
- Your data: the CSV goes to OpenAI, and the slide prompts, with your figures in them, go to WaveSpeedAI
- Open form: once the workflow is published, anyone with the form’s address can spend your keys
- Keys: the WaveSpeedAI key sits in two headers, so take it out before you share the workflow

## README

```markdown
# Sales CSV turned into a Google Slides deck of AI images

An n8n workflow with an upload form. You send a CSV of sales data and choose from one to ten slides. GPT-5.2 writes an
executive report from the rows, then a picture prompt for each slide. WaveSpeedAI draws the slides, and the workflow
puts each picture into a new Google Slides deck as a full-slide background.

## What is inside

- `workflow.json`: the workflow as n8n exports it, 19 nodes and no sticky notes. It holds no credential.
- `README.md`: these notes.

## What we changed from the original copy

The copy Mindket started from had lost its backslashes in three places. Mindket put them back:

- `Edit Fields1` reads the slide's number from its label with `replace(/\D+/g, '')`. The copy had `/D+/g`, which only
  removes a capital D, so "Slide 1" stayed as it was. The insertion index in `Add Blank Slides` then came out as NaN, the
  request body was not valid JSON, and the run stopped at the first slide.
- `Create New Blank PPT` names the deck after the file with `replace(/\.[^/.]+$/, '')`. The copy's `/.[^/.]+$/` still
  cut `.csv` from most names, but it emptied a name that had no extension.
- The system message of `Message a model` asks for `\n` as the line break inside each slide's text, and its example
  answer uses it in all ten slide prompts. Both had lost the backslash, and four quoted lines in the example had lost
  theirs too. The example is valid JSON again.

The two WaveSpeedAI requests held `Bearer <token>` in their Authorization header. They now read
`Bearer <YOUR_WAVESPEED_KEY>`.

In the four Slides requests, the capital O in the name of the Google Slides OAuth2 credential type is written as the
JSON escape `\u004f`. n8n reads the same name. The escape only stops a store check from taking that long name for a
secret key.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- An OpenAI API key that can use `gpt-5.2`.
- A WaveSpeedAI account and its API key.
- A Google account for the Google Slides OAuth2 API credential. On your own n8n server, the Google Cloud project behind
  it needs the Google Slides API turned on.
- A CSV with a header row. Every row goes to the model in one message, so keep it to a table a person could read.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Add a Google Slides OAuth2 API credential and sign in. Select it in `Create New Blank PPT`, `Delete First Slide`,
   `Add Blank Slides` and `Update Image to PPT`.
3. Add an OpenAI credential and select it in `Message a model1` and `Message a model`.
4. Open `Create Task` and `Check Status`. In each Authorization header, replace `<YOUR_WAVESPEED_KEY>` with your key,
   brackets included. Keep the word Bearer and the space after it.
5. Save, open the form's test address, upload a small CSV and choose 2 slides.
6. Press Publish, then share the form's production address.

The form confirms at once, and the run goes on behind it. Open the run under Executions. `Presentation URL` holds the
link to the deck.

## How a run goes

1. `On form submission` is the form, titled `Presentation Generator AI`. It takes one `.csv` file and a choice from
   `1 slide` to `10 slides`.
2. `Create New Blank PPT` makes a deck named after the file with ` - Presentation` added, and `Delete First Slide`
   removes the slide every new deck starts with.
3. `Extract from File` reads the CSV, with the first row as the headers, and `Aggregate` gathers the rows into one list,
   `data`.
4. `Message a model1` sends that list to `gpt-5.2` and asks for an executive sales report in Markdown.
5. `Message a model` sends the report and the slide count to `gpt-5.2` with a long design brief. A JSON schema holds
   the answer to three parts: `BaseStyle_prompt`, `Negative_prompt` and `Slides`, each slide a label and a prompt.
6. `Prepare prompts` unwraps the answer if it comes back as an array, and `Split Out` makes one item for each slide.
7. `Loop Over Items` takes one slide at a time. `Edit Fields` joins the shared style, the slide's prompt and the list of
   things to avoid.
8. `Create Task` starts a `flux-2-flex` text-to-image task on WaveSpeedAI at `1536*864`. `Wait` pauses 30 seconds,
   `Check Status` asks for the result, and `Switch1` sends a task that is still processing back to `Wait`.
9. When the task is completed, `Edit Fields1` keeps the picture's address, the slide's number and the deck's ID.
   `Add Blank Slides` inserts a blank slide at that number, and `Update Image to PPT` sets the picture as its stretched
   background.
10. After the last slide, `Presentation URL` builds the deck's link.

## Change the look

- The report: the message in `Message a model1`. Rewrite it for data that is not about sales.
- Every slide's look: the system message of `Message a model`. It holds the style rules, twelve layouts to choose from,
  the text limits for each slide and an example answer about a film studio.
- Picture size: `size` in the body of `Create Task`. `1536*864` is 16:9, the shape of a standard slide.
- The drawing model: the address in `Create Task`. Another WaveSpeedAI model needs the same answer shape, a link in
  `data.outputs[0]`.
- Waiting: `Wait`'s 30 seconds. A shorter wait asks more often.
- The form: its title, the file field and the slide choices in `On form submission`. The deck's name reads the file field
  by its label, `Upload_the_CSV_you_d_like_to_transform`, so change `Create New Blank PPT` too if you rename it.

## Good to know

- Each slide is one picture. Its titles, bullets and charts are drawn by the image model, so they cannot be edited in
  Slides, and a word or a figure can come out wrong. Compare every slide with the report from `Message a model1`.
- `Switch1` sends a `failed` task nowhere. The loop then stops, the later slides are never made, and `Presentation URL`
  never runs.
- A WaveSpeedAI status other than processing, completed or failed matches none of `Switch1`'s three outputs, and n8n
  stops the run with an error.
- The deck sits in the Google Drive of the signed-in account and is shared with no one. Share it from Slides yourself.
  The person who sent the form only sees its confirmation.
- OpenAI's deprecations page, read on 3 November 2026, gives no shutdown date for `gpt-5.2`.
- Billing: OpenAI bills two `gpt-5.2` calls a run, the first with your whole CSV in it. WaveSpeedAI's page for
  `flux-2-flex` listed $0.06 an image on 3 November 2026, and each slide is one image.
- Every row of the CSV goes to OpenAI. The slide prompts, with your figures in them, go to WaveSpeedAI, and Google
  fetches each picture from WaveSpeedAI's link.
- Once the workflow is published, anyone with the form's address can start a run that spends your keys and adds a deck
  to your Drive.
- The WaveSpeedAI key sits in two header fields, not in a credential, so it travels with any export. Take it out before
  you share the workflow.
```

## What is in it

2 files, 40 KB, downloaded as a zip.

```text
README.md  7 KB
workflow.json  33 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 19 steps, starting on a form
- AI: 2 steps call an AI model: Message a model1 and Message a model
- Sign-ins: Signs in to: Google Slides and WaveSpeedAI
- API keys: No API key is left in the file; 1 blank in it for your own key
- Step types: Mindket’s checker reads 10 of its 11 step types. It does not read: HTTP Request

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/9097fa4c-94cf-4230-86b1-75956288b083)
- [Its page on Mindket](https://mindket.com/p/9097fa4c-94cf-4230-86b1-75956288b083)
