Sync XLSX Excel spreadsheet content to Figma using CopyDoc
Follow along with this step by step Figma tutorial video.
Steps
- Install the CopyDoc plugin from the Figma Community.
- Prepare an Excel spreadsheet with headers in the first row that match the Figma layer names, and add content rows underneath.
- In Figma, name the text and image layers to match the spreadsheet headers, using the same labels such as #Tag, #Title, #Min, #Reviews, and #Poster.
- Duplicate the design block or component to create multiple repeated instances that all use the same named layers.
- For image fields, paste a direct image URL into the spreadsheet cell after copying the image address from an image source.
- Open CopyDoc from Plugins, use Sync Content to import the Excel file, then select the target layers in Figma.
- Click Sync Spreadsheet Rows with Figma Layers to populate each selected block with one spreadsheet row, including text and images.

Published
Used in this video
CopyDoc
ć³ćć¼
Stop manual text updates.
Export, import, localize, and sync text, images, styles, and layouts across Figma designs.
126k+ installs
Video Transcript
Today Iām going to be showing you how to sync content from an Excel spreadsheet dynamically into your Figma designs to populate multiple blocks of content.
The first thing we need to do is just install a Figma plugin called CopyDoc; if you go to the Figma Community and search for the word āCopyDocā, and with the first result that pops up just go ahead and click on the āInstallā button on the right-hand side, and once youāve done that youāll be ready to go.
Today Iām just going to be using a really simple example of a movie app, and what Iām going to be doing is syncing up our content from an Excel spreadsheet and dynamically populating these movie posters inside the app. The first thing we need to do is open up Microsoft Excel, or you could use a different spreadsheet software like Google sheets or something like that, but today Iām just going to be using Excel.
Itās important to understand how the spreadsheet needs to be formatted in order for this feature to work; itās pretty straightforward, the first row of the spreadsheet is basically the headers that are going to be used to label the different bits of content in your design. For example, in my case with the movie app, weāve got things like a ātagā, weāve got āreviewsā, weāve got a ātitleā, weāve got āminutesā, weāve got a āposterā. Basically what Iām doing here is Iām labeling these headers with the name that Iām going to be naming my Figma layers.
If we jump back into Figma and jump into our design over here, you can see that Iāve already named these layers to match the headers from the spreadsheet. For example, with the ācomedyā tag Iāve named that ā#Tagā and you can see in my spreadsheet Iāve also got that named as ā#Tagā as well; I know thatās a bit confusing hashtag and #Tag, but for example, weāve got title as well. We can go down to here and you can see under the title; the title text layer has been named ā#Titleā with a hash in front of it and itās exactly the same in my spreadsheet; thatās kind of cool because it means we can map these bits of content from our spreadsheet directly into our layers in Figma just by naming them the same, and then anything underneath that first row in your spreadsheet is going to be used as a content row thatās going to be populated into Figma.
If that doesnāt make sense, Iāll show you exactly what that means in just a moment. What Iām going to do is Iām actually going to duplicate this block or this component now that the layers have actually been named to match the spreadsheet, and Iāve also done that for the image; because I want this image to also be be dynamic Iāve named the image layer ā#Posterā, and Iāve done the same thing in my spreadsheet as well; thatās going to allow us to not only do text layers but also do images.
Iām going to duplicate this component; Iām just going to copy that normally, paste it, and Iām just going to do a little grid layout here. Iām just going to do four blocks for now; all Iāve done is just copy that original component, and it doesnāt have to be a component, but in this case itās just a component, and Iāve created three more instances and they also have those same named layers. You can see here theyāre all named. Okay, thatās all set up now, and we have our content in here and I just want to really quickly show you how to get these images in there as well.
If we do another example Iām just going to do another movie; letās do letās do āSuicide Squadā. Iām going to put āSuicide Squadā in there and Iām just going to grab the image online and then Iām going to show you how to paste it in there. If we want a poster for our āSuicide Squadā movie, all you need to do is go to something like Google images, or you can go to another website, click on any of the image results and when you right click on the image after youāve expanded it, just right click on that image and āclick on the ācopy image addressā item in the in the right click menu. Iām going to click on that and then in your spreadsheet just hit paste, and thatās going to paste in the actual image URL. You basically want to add a direct link to the image and thatās going to get downloaded into Figma in a moment.
Iām just going to save that Excel file now, close off the browser, close off Excel, and now what we want to do now that weāve got our spreadsheet set up and our Figma file set up is we want to right click anywhere on the page, go down to āPluginsā and click on āCopyDocā, and thatās going to open the Figma plugin that we just installed at the start of the Figma tutorial. Iām not going to be going through any of these other features, Iām just going to be focusing on the āSync Spreadsheet Contentā feature for today; you can open that up by clicking on the āSync Content Buttonā; itās been opened up now and you can see here weāve got an option to click or drag and drop an Excel file. Iām going to do that now, Iāve got my Excel file just sitting on my desktop that we just saved; what Iām going to do is Iām going to drag and drop that straight from my desktop directly into the Figma plugin in this little drop zone area, and Iām going to click on that or let go of the mouse and thatās just dropped the file in there.
You can see itās giving us a little preview of what spreadsheet columns itās detected in the spreadsheet; you can see all of our headers have popped up, and then itās also showing the first row of content as a bit of a preview of what each of those looks like. Thatās working perfectly, thatās exactly what we want to see, and then all we need to do is just click on the component and the instances of the component that we copied and pasted earlier. Weāve got all four layers selected here, and again, those donāt have to be components, they can just be groups or frames, but in this case weāre going to do components and instances.
Iāve got those four layers selected, and you can see in the plugin it actually doesnāt let you click the button unless you have at least one selected. Iām just going to click on all those four, and all Iām going to do is click on the āSync Spreadsheet Rows with Figma Layersā button; Iām going to click on that now, and what this is going to do is itās going to load in those images, itās downloading those images that we specified in the spreadsheet, itās going to render those into the file, and itās going to update all the text. There we go, itās just updated 24 Figma layers because we had four different blocks selected there. We had a few different things updating, and you can see here itās swapped out all of our static āAvengersā blocks of content and itās populated it exactly with what weād expect to see from our spreadsheet.
You can see here row by row, itās looping through the selected layers and itās saying: āokay, for each layer that youāve selected, Iām going to use one row from the spreadsheet, and Iām going to swap out anything youāve named with the same layer name in Figma with these tags in the spreadsheetā. We can see that exactly happened here; weāve got āNo Time To Dieā, āDuneā, āBlack Widowā, āSuicide Squadā; itās just going through each of those and swapping out those layers. For example, in our minutes layer you can see here itās swapped out the minutes because our layout was named ā#Minā, and same thing for the reviews and the posters.
Itās as simple as that; you can use this for populating lists, grids or any repeatable content itās perfect for. It just saves you having to manually go through each layer time after time to copy and paste content over and over again. If you can get away with filling out a spreadsheet first, this tends to be much easier to maintain for large sets of content or repeatable content. Thatās basically what it looks like to swap out the dynamic content from an Excel spreadsheet into Figma.
If youāve been wondering how to do this, or been struggling with handling large sets of repeatable content, this might be one option for you. If youāve been interested in something like this, I hope the Figma plugin can help. Thank you as always for watching, and weāll be back soon with more Figma tutorials just like this one very soon.

Adam Brock
Founder & CEO of Hypermatic


