← All posts

Keep one Bates sequence running across several PDFs

You have a production in five files, or fifteen, and every tool you have found numbers one file at a time starting at 1. Do that and you end up with five pages called ABC000001, which is the one thing a Bates number exists to prevent.

What you want is a single unbroken run of numbers across the whole set: the first file ends at ABC000014, the second starts at ABC000015, and a letter that asks for ABC000097 identifies exactly one page in the world.

There are two honest ways to get there. Neither of them is a button.

Why the sequence must not break

A Bates number is a permanent identifier, not a page position. Its whole value is that it is unique and that it is stable — once a page has gone out the door as ABC000097, that is its name for the rest of the matter: in the disclosure list, in a witness statement, in a deposition transcript, in the trial bundle.

Two failures follow from that, and they look very different to the other side.

A repeated number makes a reference ambiguous. If three files each start at 1, then "the second page of ABC000002" is a question nobody can answer without asking which file you meant, and the scheme has bought you nothing.

A gap looks like a withheld document. If your production runs ABC000001–ABC000146 and then resumes at ABC000200, the reader's first assumption is not that you miscounted. It is that fifty-three pages were pulled after numbering, and you will be asked to account for them. That is why every page of a document gets stamped, including the blank ones and the exhibit dividers.

So the numbering has to be planned for the set, not for the file in front of you.

The two approaches

Merge, stamp once, split back out. Combine the whole production into one document, run the stamp down it, then cut it back into the original files. The sequence is continuous by construction because there is only one run. It is the safer option whenever you can use it.

Stamp each file with a computed start. Work out the first number for each file from the page counts, then stamp each file separately with that start. More arithmetic, no merging, and the files never touch each other.

Merging is not always allowed, and the reasons are worth naming. Separate custodians are often kept in separate files on purpose. A privilege review may have been signed off per document. Some productions are delivered file-per-document because the receiving party asked for that. And a merge does change the file: a digital signature on any source file will not survive it, since a signature covers the bytes of the document it was applied to and the merged file is a new one.

If you do merge, Merge PDF keeps the source files' bookmarks and drops one at the page each file begins on, which gives you the cut points for later. Most merge tools quietly discard the outline instead — there is a whole post on why that happens — so check the result before you rely on it.

Computing the start numbers

The arithmetic is one line: each file starts at one more than the last number of the file before, which is the previous start plus the previous file's page count.

Take five files, prefix ABC, six digits, first batch starting at 1:

FilePagesStart atRange stamped
01-contract.pdf141ABC000001 – ABC000014
02-emails.pdf13215ABC000015 – ABC000146
03-invoices.pdf8147ABC000147 – ABC000154
04-site-photos.pdf46155ABC000155 – ABC000200
05-correspondence.pdf63201ABC000201 – ABC000263

The check at the end: 14 + 132 + 8 + 46 + 63 = 263, and the last number is 263. When a production starts at 1, the final Bates number equals the total page count. If it does not, you have made an arithmetic error, and it is much cheaper to find it now than after service.

Get the page counts from the files themselves rather than from a covering email. Our PDF inspector reads the page count out of a PDF in the browser without uploading it.

Stamping each file

  1. Fix the prefix and the width for the whole production before you stamp anything. Six digits is the usual choice and covers a million pages. Widening the padding halfway through means the early pages no longer match the later ones, and the only clean fix is restamping everything.
  2. Open the first file in Bates numbering, set the prefix, set "start at" to the number from your table, and stamp. Every page is stamped — there is no page range, deliberately.
  3. Read the range off the result. It comes back as "Stamped 14 pages: ABC000001 to ABC000014". Write both numbers down before you touch the next file.
  4. Do the next file, with "start at" set to one above the last number you just recorded. Repeat in the file order you have decided on, which is the order the production will be read in.
  5. Spot-check the joins, not the first page of each file. Open the last page of file 1 and the first page of file 2 side by side and confirm the numbers are consecutive.

If you merged instead, stamp the merged document once and then cut it with Split PDF by pages, splitting after the cumulative page counts — 14, 146, 154, 200 in the table above. Note that those are page positions, not Bates numbers. They only coincide because this production starts at 1; a batch starting at ABC000501 has page 1 carrying number 501, and mixing the two up is the classic way to cut a production in the wrong place.

When a document turns up late

The rule is that you never renumber. Every reference already served would stop pointing at the same page.

Append it instead. The late document starts one above the last number in the production, wherever it belongs logically, and the numbering log records that it was added out of order.

If it truly must sit inside an existing range — an attachment that was missed from an email at ABC000146 — the convention is a decimal sub-range: ABC000146.1, ABC000146.2 and so on. You can stamp that here by setting the prefix to ABC000146. and the digits to 1, starting at 1. Use 2 digits if the insert runs past nine pages, so that .01 to .12 still sorts correctly.

Keep a numbering log

One row per file per batch, in a spreadsheet, from the first stamp onwards. The columns that earn their place: file name, page count, first number, last number, date stamped, who stamped it, which batch it went out in and to whom. Add a column for the source file's hash if the matter is the kind where that gets asked about.

Nothing in our tool remembers what you stamped last time. There is no register, no reservation of a range and no warning if you start a batch at a number you have already used. That log is the only thing standing between you and a duplicate.

What our tool will not do

One file per run. There is no folder mode and no batch. Fifteen files means fifteen runs with the start number carried forward, or one merge and one split.

No load file. It stamps numbers onto pages and produces a PDF. There is no .DAT, no .OPT, no CSV of ranges and no cross-reference between the Bates numbers and your document metadata. If the receiving party's protocol asks for a load file, this is the wrong class of tool entirely — that is what Everlaw, Relativity, GoldFynch and Nextpoint are for, and it is worth reading the protocol before you stamp anything.

A suffix is a label, not protection. -CONF printed next to the number restricts nothing and removes nothing. Bates numbering is also not redaction: material that must be withheld has to be gone from the file before the pages are produced.

The inset is fixed at 12 mm from the corner. If the stamp lands on existing content, move it to another corner or crop the page first. Bottom right is the convention because it survives stapling, hole-punching and a thumb.

Bates numbers are also not page numbers, and the two tools behave differently on purpose: Add page numbers to PDF can skip a cover sheet and start the count wherever you like, which is exactly what you want on a report and exactly what you must not do to a production.

Doing it more than once

If this is a monthly job, the arithmetic is what you want to stop doing by hand. The free command line tool cpdf has Bates numbering built in and will run over a folder, carrying the count forward as it goes:

n=1
for f in *.pdf; do
  cpdf -add-text "ABC%Bates" -bates $n -bates-pad-to 6 \
       -font Helvetica -font-size 10 -bottomright 34 "$f" -o "stamped/$f"
  n=$(( n + $(cpdf -pages "$f") ))
done

cpdf -pages prints the page count, so the loop computes each start the same way the table above does. The community binaries are free to download; check the licence terms if the work is commercial, because that build is AGPL and firms usually want the paid licence.

The browser route above wins when it is one production, today, and installing anything means raising a ticket. Either way, the last step is the same: open the finished files, read the joins, and write the ranges into the covering letter.