For testing

Generate mock data.

Turn one template row into thousands of unique test records — for seeding a database, load-testing an import, or filling a CSV. Dynamic tokens make each row different, and one click exports the lot.

Why generate mock data from a repeater

When you’re testing an import pipeline, a database schema, or a table view, you need a lot of rows that look plausible but aren’t real. Writing them by hand is tedious, and spinning up a full data-faker library is overkill for a quick check. A repeater with dynamic tokens sits in the middle: you write one row, describe how it should vary, and generate as many as you need — no install, no data leaving your browser.

The four building blocks

Everything here uses four controls on the main repeater:

  • A template row — one line of text with placeholders where values should change.
  • Dynamic tokens — the toggle that turns those placeholders into varying values.
  • The separator — New line to put one record per line; Custom for commas, pipes, or tabs between fields.
  • Export — Download .csv to save the result as a spreadsheet-ready file, or Download .txt for raw text.

Dynamic tokens reference

Turn on Dynamic tokens, then use any of these inside your template. They’re replaced with fresh values on every repetition:

  • {i} — a counter starting at 1 ({i:4} pads to a fixed width, e.g. 0001).
  • {id} — a zero-padded counter sized to your row count automatically.
  • {rand} — a random number 0–9999 ({rand:100} caps the maximum).
  • {uuid} — a short random hex id, handy for fake keys.
  • {time} — a clock that increments one second per row, from now.
  • {date} — today’s date in YYYY-MM-DD.

Worked examples

A CSV user table

Template row, with the Custom separator left as a comma between fields and the New line separator between repetitions:

Template:  {id},user_{id},{uuid}@example.com,active,{date}
Count:     10,000
Separator: New line

Output:
0001,user_0001,3f9a1c22@example.com,active,2026-07-13
0002,user_0002,b7e04d81@example.com,active,2026-07-13
0003,user_0003,1aa9f5c0@example.com,active,2026-07-13
...

Click Download .csv and you have a 10,000-row seed file ready to import.

Fake log lines

Template:  [{time}] request {i} from 10.0.0.{rand:255} completed in {rand:900}ms
Count:     5,000
Separator: New line

Output:
[14:22:01] request 1 from 10.0.0.87 completed in 412ms
[14:22:02] request 2 from 10.0.0.14 completed in 733ms
...

Useful for testing a log parser or a search index without touching production logs.

Pipe-delimited records

Choose the Custom separator and set it to | if you want fields on one line, or keep fields comma-separated and repetitions on New line for rows. Mixing both lets you build whatever delimiter your importer expects.

Why “just repeating” isn’t enough

A plain repeater gives you the same row 10,000 times. That’s fine for byte-size stress tests, but it hides real bugs: a unique-constraint violation, an off-by-one in pagination, a de-duplication step that silently collapses identical rows. Dynamic tokens give every row a distinct id, timestamp, or random field, so your test data behaves like real data — and surfaces the failures identical rows would mask.

Exact sizes vs. row counts

If what you need is an exact byte size rather than a row count — say, a 1 MB payload to test an upload limit — use the stress test generator instead. It pads to a precise size. Use this token workflow when you care about the number and uniqueness of rows; use the stress test generator when you care about total bytes. For single-field boundary checks (255, 1024, 65535 characters), the character repeater with its live counter is the quickest path — see the testing guide.

Scale and performance

Large jobs run in a background Web Worker with a progress bar, so generating tens of thousands of rows won’t freeze the tab. The output ceiling is about 10 million characters — beyond that, the tool stops to protect your browser, and a script is the better tool.

When to use code instead

For fixtures that live in source control or need realistic names, addresses, and referential integrity, reach for a real library:

# Python (Faker)
from faker import Faker
f = Faker()
rows = [f"{i},{f.user_name()},{f.email()}" for i in range(1, 10001)]

# JavaScript (quick, no deps)
const rows = Array.from({length: 10000}, (_, i) =>
  `${i+1},user_${i+1},u${i+1}@example.com`);

Use textrepeat.net when you want mock rows in ten seconds without opening an editor; use a library when the data has to be convincing or reproducible in a test suite.

Common questions

Frequently asked.

Turn on Dynamic tokens and put a token in your template row. {i} and {id} give a counter, {rand} a random number, {uuid} a random id, and {time} an incrementing clock. Each repetition substitutes fresh values, so the rows differ instead of repeating identically.

Yes. Use the New line separator so each repetition is its own row, then click Download .csv. Each output line becomes one quoted CSV row that opens cleanly in Excel or imports into a database.

The main repeater generates large outputs in a background Web Worker with a progress bar, so tens of thousands of rows stay smooth. The hard ceiling is about 10 million characters of output; past that, generate from a script.

No. Everything runs in your browser’s JavaScript, so your template and the generated rows never leave your device. That makes it safe to model realistic-looking records without uploading anything.

Related

More guides & tools.

Sources & standards

The technical claims on this page are based on primary specifications and vendor documentation. Last verified 13 July 2026.