Repeatable content lets you design something once, such as a team member card, a case study or a pricing line, and repeat it for as many items as each personalized version needs. One prospect might see three team members and another five, all from the same slide.
Repeatable content is available on the Team plan.
A team member block marked as repeatable
A repeatable group has two parts:
The design. A slide, a block or a set of elements, with variables (such as
{{team_member_name}}) where the details go. Add them from the {x} variable panel in the editor.The rows. One row per item. Each row fills in the variables for one copy of the design.
Make something repeatable
Add variables to the slide or block where each item's details go, for example a name, a role and a photo.
Open the ⋮ menu on the slide or block, or right-click it, and choose Make repeatable.
The ⋮ menu of a block, with Make repeatable and Make optional
In Add repeatable group, give the group a Name, for example Team. The Label next to it is created for you (here
team) and is how the group is referred to in CSV files and the API.Optionally, click Add predefined data to add default rows. Senders start from these rows and can change them. Click Add more for each extra row.
Click Add group.
Naming the group and adding two default rows
A Repeatable badge now appears next to the block.
What happens to your variables
Each variable inside the group becomes a field. A field is a column in the rows. Its token changes to include the group, for example
{{team_member_name}}becomes{{team.team_member_name}}.Variables used elsewhere in the story stay shared. If a variable also appears outside the group, it isn't turned into a field.
Variables you add later become fields automatically.
AI fields keep their inputs per row. An AI variable's prompt inputs become fields too, so each row gets its own AI text.
Profile variables never become fields. Sender and organization details are the same for every row.
Edit the rows
Click the Repeatable badge to open the rows window.
The rows window with the CSV Upload menu open
Add or remove rows. Click Add more to add a row, or the trash icon to remove one.
Row 1 is what the editor shows. The editor draws the design once, filled with row 1 (#1 · shown in the editor), so your slide stays tidy while you design. Every row appears in the shared story.
Nothing changes until you save. Click Save rows to keep your changes, or Cancel to discard them.
In your template, these rows are the default rows every new version starts with. In a version, they are that version's own rows. The badge then shows the count, for example Repeatable · 3 rows. In a version you can also click a repeatable pill twice to open its rows. The rows also appear in the share dialog when you create a version:
Repeatable rows in the Create a new version form
Import rows from a CSV
In the rows window, click Upload → Download blank template (or Download example CSV to see sample values).
Fill in one row per item. The column headers are the field keys, such as
team_member_name,team_member_roleandteam_member_photo. For images and videos, use a link to the file.Click Upload → Upload CSV and choose your file. It must be under 2 MB.
Check the Review CSV import screen and click Import [number] rows.
Importing replaces all the rows already in the group.
Nested groups
You can put a repeatable group inside another one, for example a list of skills inside each team member's card. Groups can be nested up to three levels deep (slide › block › set).
Nested rows live inside their parent row. Each team member has their own list of skills.
CSV import works on the top-level group only. Edit nested rows by hand.
Removing a group keeps its content. Choose Make non-repeatable; its variables go back to being ordinary variables (or fields of the group above).
Tips
Keep a group's fields inside the group. A variable used both inside and outside the group stays shared across the whole story.
Add default rows to your template. Senders start from a realistic example and only change what differs.
Automate with the API. When you create versions through the Storydoc API, send a repeatable group as a list of objects, one per row, keyed by the group's label:
"team": [{ "team_member_name": "Anna Kowalska", "team_member_role": "Account executive" }].





