> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cassidyai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create PowerPoint from template

> Generate a Microsoft PowerPoint presentation from a template, filling in placeholders with Workflow data.

Creates a PowerPoint presentation (.pptx) from a template by filling in placeholders with dynamic values from your [Workflow](/workflows/overview).

With Cassidy's PowerPoint presentation templates, you can:

* **Generate personalized client presentations** that pull account details from your CRM
* **Create dynamic Quarterly Business Reviews** with usage metrics, feedback, and roadmap updates
* **Produce sales decks** that automatically adapt content based on prospect requirements
* **Build executive summaries** that populate with data from multiple business systems
* **Generate training materials** with participant information and customized content

<Steps>
  <Step title="Add the action">
    In the Workflow builder, click **+** between blocks and select **Create Microsoft PowerPoint Presentation from Template** from the action library.

    <Frame>
      <img src="https://mintcdn.com/cassidy/lmRYjqK_6aYs5Zy7/images/reference/create-microsoft-powerpoint-presentation-from-template-img-7.png?fit=max&auto=format&n=lmRYjqK_6aYs5Zy7&q=85&s=cbd983d547fd15fec35d950293b6c17b" alt="Action library with Create Microsoft PowerPoint Presentation from Template selected" width="978" height="628" data-path="images/reference/create-microsoft-powerpoint-presentation-from-template-img-7.png" />
    </Frame>

    <Frame>
      <img src="https://mintcdn.com/cassidy/lmRYjqK_6aYs5Zy7/images/reference/create-microsoft-powerpoint-presentation-from-template-img-8.png?fit=max&auto=format&n=lmRYjqK_6aYs5Zy7&q=85&s=0dfa94c00c7533ae96a94d8b305cf3ae" alt="Adding the Create Microsoft PowerPoint Presentation from Template action between blocks" width="1010" height="1208" data-path="images/reference/create-microsoft-powerpoint-presentation-from-template-img-8.png" />
    </Frame>
  </Step>

  <Step title="Upload the PowerPoint template">
    Click to upload your PowerPoint presentation template (.pptx file) that contains placeholders for dynamic content. See [Template placeholders](#template-placeholders) below for how to set up your template.

    <Frame>
      <img src="https://mintcdn.com/cassidy/lmRYjqK_6aYs5Zy7/images/reference/create-microsoft-powerpoint-presentation-from-template-img-10.png?fit=max&auto=format&n=lmRYjqK_6aYs5Zy7&q=85&s=119a09d6ae4c8e6d106da1ba7e8f3c8c" alt="Uploading a PowerPoint template file" width="1008" height="358" data-path="images/reference/create-microsoft-powerpoint-presentation-from-template-img-10.png" />
    </Frame>
  </Step>

  <Step title="Enter the output presentation name">
    Provide a name for the generated PowerPoint presentation. This will be the filename when the presentation is created. You can use variables from previous steps.

    <Frame>
      <img src="https://mintcdn.com/cassidy/lmRYjqK_6aYs5Zy7/images/reference/create-microsoft-powerpoint-presentation-from-template-img-11.png?fit=max&auto=format&n=lmRYjqK_6aYs5Zy7&q=85&s=ac231ba2033dea494eabf6b10071f082" alt="Output presentation name field with variable support" width="1004" height="258" data-path="images/reference/create-microsoft-powerpoint-presentation-from-template-img-11.png" />
    </Frame>
  </Step>

  <Step title="Configure template fields">
    Under the **Template Fields** section, map each placeholder in your template to a variable from previous Workflow steps or trigger inputs.

    For example, in a QBR presentation template:

    * **\{clientName}** maps to your client company variable from your CRM data
    * **\{date}** maps to the QBR date variable
    * **\{objectives}** maps to a list variable containing objects with "objectiveTitle" and "objectiveDescription" properties
    * **\{productsUsed}** maps to an array of products for a slide loop, creating separate slides for each product
    * **\{feedbackFound}** maps to a boolean that controls slide visibility
    * **\{betaProgramMember}** maps to a boolean that controls whether to show beta program messaging

    <Frame>
      <img src="https://mintcdn.com/cassidy/lmRYjqK_6aYs5Zy7/images/reference/create-microsoft-powerpoint-presentation-from-template-img-12.png?fit=max&auto=format&n=lmRYjqK_6aYs5Zy7&q=85&s=a0e88202ea17a1f1b7fe728acf2a942f" alt="Template fields configuration with variable mappings" width="1012" height="2426" data-path="images/reference/create-microsoft-powerpoint-presentation-from-template-img-12.png" />
    </Frame>
  </Step>

  <Step title="Preview and download the presentation">
    After running the Workflow, preview the generated PowerPoint presentation and download it by clicking the icons next to the action in the results panel.

    <Frame>
      <img src="https://mintcdn.com/cassidy/lmRYjqK_6aYs5Zy7/images/reference/create-microsoft-powerpoint-presentation-from-template-img-13.png?fit=max&auto=format&n=lmRYjqK_6aYs5Zy7&q=85&s=e3ac4d7b0bd0745475cbd0b32364040b" alt="Preview and download icons in the results panel" width="1026" height="192" data-path="images/reference/create-microsoft-powerpoint-presentation-from-template-img-13.png" />
    </Frame>
  </Step>

  <Step title="Attach the presentation to other actions (optional)">
    You can use the generated PowerPoint presentation as an attachment in other actions like [Send Email](/reference/actions/send-email). Reference the presentation output from this action when configuring email attachments.

    <Frame>
      <img src="https://mintcdn.com/cassidy/lmRYjqK_6aYs5Zy7/images/reference/create-microsoft-powerpoint-presentation-from-template-img-14.png?fit=max&auto=format&n=lmRYjqK_6aYs5Zy7&q=85&s=bdafd9e1e94857779f10af283b38974c" alt="Attaching the PowerPoint presentation to a Send Email action" width="1022" height="252" data-path="images/reference/create-microsoft-powerpoint-presentation-from-template-img-14.png" />
    </Frame>
  </Step>
</Steps>

## Template placeholders

Use placeholders in your PowerPoint template to define where dynamic content should appear. Cassidy detects these placeholders when you upload the template and lets you map them to Workflow variables.

<Frame>
  <img src="https://mintcdn.com/cassidy/lmRYjqK_6aYs5Zy7/images/reference/create-microsoft-powerpoint-presentation-from-template-img-0.png?fit=max&auto=format&n=lmRYjqK_6aYs5Zy7&q=85&s=cb9f2bbc2dd7eeca3d2afb320bea75d0" alt="PowerPoint template with placeholder syntax examples" width="2916" height="1652" data-path="images/reference/create-microsoft-powerpoint-presentation-from-template-img-0.png" />
</Frame>

### Text placeholders

Use text placeholders to insert text, numbers, or formatted content from your Workflow data.

**Syntax:** `{variableName}`

<Frame>
  <img src="https://mintcdn.com/cassidy/lmRYjqK_6aYs5Zy7/images/reference/create-microsoft-powerpoint-presentation-from-template-img-1.png?fit=max&auto=format&n=lmRYjqK_6aYs5Zy7&q=85&s=ed8e0900979d0c3b599874ef25386395" alt="Text placeholder examples in a PowerPoint template" width="1314" height="378" data-path="images/reference/create-microsoft-powerpoint-presentation-from-template-img-1.png" />
</Frame>

### Conditionals

Use conditionals to display sections only when certain conditions are true, or to show alternative content when conditions are false.

**Syntax:**

* Standard: `{#if:conditionName}` ... `{/if:conditionName}`
* Inverse: `{^if:conditionName}` ... `{/if:conditionName}`

<Frame>
  <img src="https://mintcdn.com/cassidy/lmRYjqK_6aYs5Zy7/images/reference/create-microsoft-powerpoint-presentation-from-template-img-2.png?fit=max&auto=format&n=lmRYjqK_6aYs5Zy7&q=85&s=32c6a2908ae174fb273c6b1afa51adb9" alt="Conditional content in a PowerPoint template" width="1372" height="258" data-path="images/reference/create-microsoft-powerpoint-presentation-from-template-img-2.png" />
</Frame>

### Loops

Use loops to display repeating content for arrays of data within text boxes.

**Syntax:** `{#loop:arrayName}` ... `{/loop:arrayName}`

<Frame>
  <img src="https://mintcdn.com/cassidy/lmRYjqK_6aYs5Zy7/images/reference/create-microsoft-powerpoint-presentation-from-template-img-3.png?fit=max&auto=format&n=lmRYjqK_6aYs5Zy7&q=85&s=46737900c61a16cc6dfe56445ac3a2de" alt="Loop example repeating content for a list of items" width="820" height="234" data-path="images/reference/create-microsoft-powerpoint-presentation-from-template-img-3.png" />
</Frame>

### Slide conditionals

Use slide conditionals to show or hide entire slides based on your data.

**Syntax:** Add `{%if:conditionName}` anywhere in a text box on the slide to show that slide only when the condition is true.

<Frame>
  <img src="https://mintcdn.com/cassidy/lmRYjqK_6aYs5Zy7/images/reference/create-microsoft-powerpoint-presentation-from-template-img-4.png?fit=max&auto=format&n=lmRYjqK_6aYs5Zy7&q=85&s=ddcabedf9e6a601ed0e1d8d6f5f7a506" alt="Slide conditional that shows the slide only when feedbackFound is true" width="2098" height="1196" data-path="images/reference/create-microsoft-powerpoint-presentation-from-template-img-4.png" />
</Frame>

### Slide loops

Use slide loops to create multiple slides from a single template slide.

**Syntax:** Add `{%loop:arrayName}` anywhere in a text box on the slide to repeat that entire slide for each item in the array.

<Frame>
  <img src="https://mintcdn.com/cassidy/lmRYjqK_6aYs5Zy7/images/reference/create-microsoft-powerpoint-presentation-from-template-img-5.png?fit=max&auto=format&n=lmRYjqK_6aYs5Zy7&q=85&s=ddba2efc86d8e20fdd48b3dce96c4217" alt="Slide loop that repeats for each product in the array" width="2104" height="1206" data-path="images/reference/create-microsoft-powerpoint-presentation-from-template-img-5.png" />
</Frame>

### Section loops

Use section loops to repeat multiple slides as a group for each item in an array.

**Syntax:** In the left side panel, right-click to **Add Section**. Then include `{%loop:arrayName}` in your section name.

<Frame>
  <img src="https://mintcdn.com/cassidy/lmRYjqK_6aYs5Zy7/images/reference/create-microsoft-powerpoint-presentation-from-template-img-6.png?fit=max&auto=format&n=lmRYjqK_6aYs5Zy7&q=85&s=8798f066827a23ad568a1e80b89c53f8" alt="Section loop in the slide panel repeating a group of slides" width="744" height="892" data-path="images/reference/create-microsoft-powerpoint-presentation-from-template-img-6.png" />
</Frame>

### Variable scope in loops

When you're inside a loop, you can access both properties of the current item and properties from outside the loop:

1. **Properties of the current item** — use the field names directly like `{productName}` and `{usageMetrics}`
2. **Properties from outside the loop** — these remain accessible like `{clientName}`

### Data format for loops

If your template has this loop:

```
{#loop:featureList}
▶ {featureDescription}
{/loop:featureList}
```

Your data must have an array with properties that match the placeholder names exactly:

```json theme={null}
{
  "featureList": [
    {"featureDescription": "Advanced Analytics Dashboard"},
    {"featureDescription": "Real-time Collaboration Tools"},
    {"featureDescription": "Enhanced Security Features"}
  ]
}
```

## Troubleshooting

<AccordionGroup>
  <Accordion title="Tags not processed">
    If you see template tags in the final output, double-check that the names of your template tags match the names of your data fields exactly. For example, `{clientName}` in your template must correspond to the exact field name in your data.
  </Accordion>

  <Accordion title="Slides not appearing or repeating">
    * Confirm `%if:` conditions reference boolean values in your data
    * Verify `%loop:` references array names that exist in your data
    * Check that slide control tags are placed in text boxes (not in slide notes or other areas)
  </Accordion>
</AccordionGroup>

## Related

* [Create Word from Template](/reference/actions/create-word-from-template)
* [Create Excel from Template](/reference/actions/create-excel-from-template)
* [Create files with Workflows](/guides/create-files)
