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

    id is Figma's stable node id, frame the top-level frame name, layer the text layer's name, chars the 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_chars column 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.

What next?

Was this page helpful?