CopySync feature guide
Everything about what goes out, what comes back, and the rules that keep your file safe.
The export
- Name
Scope- Type
- selection or page
- Description
Every text layer inside the selected frames, or the whole page when nothing is selected, up to 5,000 layers. The plugin tells you when a page was capped.
- Name
Columns- Type
- id, frame, layer, text, chars
- Description
idis Figma's stable node id,framethe top-level frame name,layerthe text layer's name,charsthe character count. Extra language columns (Pro) are appended empty.
- Name
CSV- Type
- UTF-8 with BOM
- Description
Opens correctly in Excel, Numbers and Google Sheets, including accents and emoji. Newlines and quotes inside text are escaped.
- Name
JSON- Type
- array of rows
- Description
The same rows as objects, for scripts and translation tools.
Exclude component instances skips text inside instances. Edits to instance text work, but they create overrides; most teams prefer to edit the main component.
Importing a file or pasted rows
A CSV, TSV or JSON file needs an id column and a text column. Pasting works with rows copied straight from Google Sheets or Excel, including the header row. Columns the plugin does not know are kept and ignored, so status and comment columns survive the round trip.
The preview
Nothing is written when you load a file. The preview reports:
- Matched: rows whose id exists in the file.
- Changed: rows whose text differs from the layer's current text. Only these are applied.
- Not found: ids that no longer exist, usually deleted layers or a different page.
- Skipped for missing fonts: layers whose font is not installed. Figma cannot write text in a missing font, so these are left alone and counted rather than corrupted.
- Warnings: rows more than 30 percent longer than the current text, or longer than a
max_charscolumn if your file has one.
Empty cells never blank a layer; they are treated as "no change".
Language columns (Pro)
Type language names into Extra columns, for example de, fr, and the export adds those columns empty. Translators fill them in. On import, the Apply column dropdown chooses which column becomes the text, so one spreadsheet serves every locale: apply de to a duplicated German page, fr to the French one.
Style-preserving import (Pro)
When a layer has mixed styles (a bold word, a link) and the new text shares a beginning or an end with the old text, the plugin replaces only the part in between. The replaced characters inherit the style of their neighbours, so fixing a typo keeps bold and links intact. Rows updated this way are counted in the status line. Without Pro, or when the texts share nothing, the whole layer's text is replaced and mixed styles collapse to the layer's base style.
Fonts
Before writing, the plugin loads every font the layer uses. If any is missing, the layer is skipped and counted. Install the font or swap it in Figma, then import again; the preview will show the row as changed.
Find and replace
Searches the selection or page for the literal text you typed (no regular expressions), case-insensitive unless Match case is ticked, and replaces every occurrence in each matching layer. Missing-font layers are skipped and counted here too.
Recase
UPPER, lower, Title Case and Sentence case apply to the selected text layers. Title Case capitalises every word; Sentence case capitalises after periods, question marks and exclamation marks.