CSV Merge Field Mapping for Cold Email, Done Right

How to map per-step CSV columns into Smartlead, Instantly, Apollo and HubSpot: the column layout, naming rules, and the mistakes that quietly break campaigns.

SS
SimpleSend Labs
Field notes from the research team
READ8 minWORDS1,280UPDATEDOct 2, 2026

If your CSV exports clean, stable headers, importing it into any sender is just field mapping. The convention is one column per step (like step_1_subject and step_1_body through step_N_subject and step_N_body), plus the standard contact columns: first_name, last_name, company, email and title. This guide shows the exact mapping for Smartlead, Instantly, Apollo, and HubSpot, one section each. Bookmark it for your next campaign.

First, understand the column layout

A personalized sequence CSV looks like this. Each row is one contact, and each step's subject and body live in their own columns, already written for that person.

first_namecompanyemailstep_1_subjectstep_1_bodystep_2_subject…
TheoNorthwindtheo@example.comThe ingestion bug you postedTheo, saw your post about…Following up on the runbook…

Because the writing is already done per row, your sending tool does not generate anything. It just inserts the right column into the right step. That is what the merge field does. A SimpleSend export can also carry an optional step_N_delay_days column with each step's wait, any extra columns you mapped on the way in, and a talk_track column if you generated call cards. Map what you need and ignore the rest.

Smartlead

In Smartlead, create a new campaign and upload the CSV as your lead list. Map email, first_name, last_name and company to Smartlead's standard fields, and import the step columns as custom fields. When you build your sequence, add one email step per step in your CSV, and reference the matching columns with double curly braces.

  • Email 1 subject: {{step_1_subject}}
  • Email 1 body: {{step_1_body}}
  • Email 2 subject: {{step_2_subject}}, and so on.

Send a test to yourself first to confirm the variables resolve. If you see the raw {{step_1_body}} text in the test, the column name in your CSV does not match the variable exactly, so check casing and spelling.

Instantly

The flow in Instantly is nearly identical. Upload the CSV when creating a campaign, and Instantly maps known columns and keeps the rest as custom variables. During import you can confirm or adjust how each column maps. Build your sequence steps and drop the same variables in, using Instantly's variable syntax, again one step per pair of columns.

One tip: Instantly lets you preview a few contacts before launching. Use it. Scan three or four rows to make sure each contact's body matches their company, not someone else's, which catches any column misalignment instantly.

Apollo

In Apollo, import the CSV into a list, and the per-step columns come in as custom fields on each contact. When you build a sequence, reference those custom fields as variables in the subject and body of each step. Apollo's variable picker will show your imported fields, so you select step_1_subject for the first email's subject line and so on.

Since Apollo also bundles data and sending, this is a common path for teams already living in Apollo: enrich and source there, draft the emails elsewhere, then bring the finished copy back in as fields.

HubSpot

HubSpot treats the columns as contact properties rather than campaign variables, so there is one extra setup step. Before importing, create custom contact properties that match your column names, such as a single-line text property called step_1_subject. Then import the CSV and map each column to its property. (SimpleSend's own HubSpot connection is read-only: it imports lists but never writes back, so this import is a manual step.)

In a HubSpot sequence, you reference these as personalization tokens. Insert the token for step_1_body into the first email, and HubSpot fills in each contact's stored value. Use sequences, which send one to one from your connected inbox, rather than marketing email: HubSpot's acceptable use policy doesn't allow marketing email to purchased lists or contacts who haven't opted in. The mapping is a little more manual than the dedicated senders, but it works the same way underneath.

A quick troubleshooting checklist

SymptomLikely causeFix
Raw {{step_1_body}} shows in the emailVariable name does not match the columnMatch casing and spelling exactly
Wrong contact's text appearsColumns shifted during importRe-import and verify the header row
A step is blankEmpty cell in that rowFilter for blanks before sending
Special characters look brokenEncoding mismatchSave and import the CSV as UTF-8
Where SimpleSend fits

SimpleSend exports exactly this CSV format: the standard contact columns plus stable headers like step_1_subject and step_1_body that map cleanly into every tool above. It writes the full personalized sequence per contact, then hands you the file ready to import, so the only work left is the field mapping in this guide. Or skip the mapping: on Pro, or Individual with the Email Sending add-on, Send with SimpleSend turns the same campaign into a Sequence that sends from warmed mailboxes on domains registered in your name.

Start your 14-day free trial and generate a CSV to map into your own setup. Walk through the full upload-to-send tutorial in how to personalize a 7-step sequence for 240 leads.

Frequently asked questions

How do I import a CSV into Smartlead with custom fields?
Create a campaign, upload the CSV as your lead list, map the standard columns such as email and first_name, and import the rest as custom fields. Reference them in your email steps with double curly braces, for example the step_1_body column inside the first email.
What are merge fields in cold email?
Merge fields are placeholders in an email that pull a value from each contact's row, written with double curly braces in most tools. They let one campaign send a different value to each recipient, such as a personalized subject or body for each step.
Can I use a personalized CSV in HubSpot for cold email?
Yes. Import the CSV as contact properties, then reference those properties as personalization tokens in a HubSpot sequence. Each contact receives the value stored in their own row. Use sequences rather than marketing email, which HubSpot's policies don't allow for contacts who haven't opted in.

Sending tools referenced: Smartlead, Instantly, Apollo, and HubSpot. Exact menu labels change as these tools update, so use this as a map rather than a literal click path.

If you'd rather not assemble the research, voice-matching, and QA layers yourself, SimpleSend does all three. Start from a CSV, a HubSpot list or a Find Leads search: every contact gets fresh research, every draft is written in your voice from samples, and every email goes through the QA pass. Then send it from SimpleSend or export it to the sender you already use. Start with a 14-day free trial, no card; plans from $50/month.
TRY THE FRAMEWORK

Run your next campaign through SimpleSend.

Bring a CSV, a HubSpot list or Find Leads contacts, paste 1–3 of your past emails, and get every sequence drafted row by row. Then send it from your own SimpleSend mailboxes or export it to Smartlead, Instantly or your CRM. Start with a 14-day free trial, no card; plans from $50/month.

Start 14-Day Free Trial ← Back to the blog
← All posts