Replace ${var} placeholders in a template from a variables table.

Switch tool
Preset:
Template
Variableskey=value or {"k":"v"}
Result

How to use

Purpose

Online placeholder batch replacement tool handling {{ name }} / ${name} / {name} / %name% / :name syntaxes. Supports single-instance fill (one output) and CSV/JSON batch fill (N outputs). Common for batch invitation emails, contract template filling, A/B copy variants, SQL/NoSQL placeholder filling, config file parameterization. All processing runs locally.

Steps

  1. Top-left: paste template (with placeholders like {{ name }} or ${date})
  2. Bottom-left: paste data (single: key:value pairs; multiple: CSV / JSON array)
  3. Right pane shows the filled result in real time
  4. Placeholder syntax: double-brace {{ }}, dollar ${}, single-brace {}, percent %%, colon :
  5. Defaults: write {{ name|default("anonymous") }} for missing data
  6. Batch mode: CSV / JSON rows/objects generate independent outputs
  7. Export: multiple files / concatenated single doc
  8. Escape: write {{ "{{" }} for literal {{ that should not be parsed

FAQ

Which placeholder syntax to choose?
Double-brace {{ }}: Mustache / Handlebars / Vue style, most common across template engines. ${ }: JS template literals, Shell, Spring config. { }: Python str.format(). % %: SQL DML (percent encoding). : Java JDBC / Python paramstyle. Pick by scenario.
How to use CSV batch fill?
Data in CSV with first-row keys. Template references {{ column-name }}. e.g. CSV: `name,email\nTom,tom@x.com\nJerry,jerry@y.com`, template: `Hello {{ name }}, your email is {{ email }}` — output is two filled results.
Can I use expressions in placeholders?
No — this tool only does simple variable replacement. For conditional / loop / expression logic use Handlebars / Jinja2 / EJS. Supported features: default value `{{ name|default("anonymous") }}`, case transform `{{ name|upper }}`, preserve original `{{ name|raw }}`.
Will JSON literals with {} be misidentified?
Yes — classic pitfall. Workarounds: 1) switch to double-brace {{ }} (no conflict with JSON single-brace); 2) escape: write `\{` for literal brace; 3) base64-encode JSON in data and decode in template.
Can I generate batch SQL INSERTs?
Yes. Template: `INSERT INTO users(name, email) VALUES ({{ name }}, {{ email }});` with CSV data → N INSERTs in batch mode. Caveat: SQL string values need quotes around `'{{ name }}'`. For safer/more robust generation use json-to-sql (auto-quotes, SQL injection-safe).

Use cases

  • Batch invitation emails: personalized email body for 1000 customers
  • Contract template filling: template + customer list = 1000 individual contracts
  • Marketing A/B copy: same template with different variables for multiple versions
  • SQL batch generation: CSV data → many INSERT / UPDATE statements
  • Config parameterization: template produces env-specific configs

Use cases

Batch emails, contract filling, A/B copy, SQL batch, config generation. Ops, sales, legal, dev. Multi-syntax, default value, CSV/JSON batch, escape mechanism are the differentiators.