eSora Sign⁠An eSora Labs company
Product · October 14, 2026 · 7 min read

Templates and bulk send: sending 200 offer letters in an afternoon

When a seasonal hiring wave lands, one person can prepare, check and send 200 personalised offer letters in an afternoon. Here is how to set up the template, the spreadsheet and the send.

By the eSora Sign team

The problem with doing it one by one

Picture a retailer or logistics company getting ready for its busy season. Two hundred new hires need offer letters by Friday. Each letter has the same structure but different details: name, role, start date, pay rate, location, manager. Done one at a time, each letter takes several minutes to prepare, check and send. That is days of work, and every copy-and-paste is a chance to put the wrong pay rate on the wrong letter.

Templates and bulk send in eSora Sign turn that into one setup and one send. Bulk send is part of the Teams plan and above. This walkthrough shows the steps.

Step 1: build the template once

Start from your standard offer letter. Upload it as a new template from the Templates page. Word files and PDFs both work.

Add roles instead of named people. For an offer letter you might have two: Candidate, who signs, and Hiring manager, who approves first. Roles are placeholders. When you send, each role is filled by a real person.

Add variables for every detail that changes. Variables are named fields you fill once and that appear everywhere you place them. For example, create variables called first_name, role_title, start_date, hourly_rate, location and manager_name. Place them in the document wherever those details appear. If the start date appears in the opening paragraph and again in the summary table, place the same variable in both spots. Fill it once and it fills everywhere.

Then add the fields the candidate completes: signature, date signed, and any text or checkbox fields you need, such as an emergency contact or a confirmation that they have read the policy handbook. Mark the important ones as Required.

Step 2: set the rules on the template

Settings you put on the template apply to every document sent from it, which saves you checking 200 sends individually.

Identity check: email code is usually enough for offer letters. If the letter includes banking details for payroll, consider an SMS code.

Reminders: first after 2 days, then every 4, stop after 3, with quiet hours on so reminders reach candidates at 9 AM their time on weekdays.

Expiry: set an expiry that matches your offer deadline, for example 7 days.

Approvals: if your workspace has an approval rule, such as letters above a certain pay rate needing an HR lead, it applies automatically.

Save the template. If you share it with your team, other senders can use the same approved version. Templates are versioned, so if HR updates the wording next month, the old version stays on record for the letters already sent.

Step 3: prepare the spreadsheet

Bulk send reads a CSV file. Each row is one document. Each column is either a role's name or email, or a variable.

A clean layout looks like this: candidate_name, candidate_email, candidate_phone, manager_name, manager_email, first_name, role_title, start_date, hourly_rate, location.

A few tips save trouble later. Use one date format across the whole file. Check that every email address is real and complete. Remove empty rows at the bottom. If you are using SMS, include phone numbers with the country code. Export the sheet as CSV from Excel or Google Sheets.

Step 4: match columns and check

Open the template and choose Bulk send. Upload the CSV. eSora Sign shows each column and asks you to match it to a role or a variable. Columns with the same names as your variables match automatically.

Before anything goes out, review. The preview shows the first few documents fully filled in, so you can read a real letter with real details. Look for formatting problems, such as a pay rate showing too many decimals or a date in the wrong format. Rows with missing required values or invalid email addresses are flagged so you can fix them in the sheet and upload again.

If you want extra confidence, send to yourself first. Put your own address in a single-row CSV and do a test run. It takes two minutes and catches surprises.

Step 5: send, now or later

Choose Send now, or Send later to schedule the batch for a specific time. Scheduling is useful if you want letters to arrive on Monday at 9 AM rather than late on a Friday.

Each person gets their own document, their own signing link and their own reminders. They never see each other's details. If a hiring manager approval is part of the template, each manager receives the letters for their own candidates first.

Step 6: track the batch

The batch appears in your inbox as a group. You can see at a glance how many are signed, waiting, declined or expired, and open any single document to see its timeline.

If a candidate's email bounced, use Change recipient on that document. Their old link stops working and the new address gets a fresh one. If you spot an error in one letter, use Correct to fix it while the document is out, without resending the whole batch. If a candidate declines, you see their reason.

When documents complete, each signed PDF has its own Certificate of Completion. You can export the list of completed documents, or file them into a folder with labels such as Season hires and the month.

Using the API instead

If your hiring system can call an API, you can skip the CSV. The eSora Sign REST API can send from a template with variables filled in, and webhooks signed with HMAC-SHA256 tell your system when each document is signed. The Teams plan includes 500 API calls a month. Larger volumes are available on Enterprise.

Not just offer letters

The same pattern works for anything that goes to many people with small differences: policy acknowledgements, annual contract renewals, consent forms for a program, supplier code of conduct updates, or lease renewals across a building. Build it once, check it once, send it once.

This article is general information, not legal advice.