How to Build an Instantly.ai Lead List CSV
Instantly.ai is strict about CSV format and bounce rates. Here's the exact field structure, encoding, and verification steps for clean imports.
What Makes a CSV Compatible with Instantly.ai (the Non-Obvious Rules)
Most cold email tools accept a CSV with an email column and call it a day. Instantly.ai is stricter — and that strictness is intentional. The platform's import pipeline applies validation rules that silently drop rows or mismap columns if your file does not conform. Understanding these rules before you build your list saves you from wasted verification credits and phantom imports.
The non-negotiable rule: email is the only required column. Every other field is optional, but the email column must be present, correctly spelled, and populated on every row. Rows with a blank email cell are silently discarded during import — no error message, no count in the rejection log. If your list of 5,000 rows imports as 4,800 leads, missing email values are almost always the cause.
Capital letters matter for auto-detection. Instantly's column-mapping UI attempts to auto-detect predefined fields like first name, company, and phone number. This detection works reliably only when the column header starts with a capital letter. A header spelled "firstname" or "FIRSTNAME" will not auto-map; a header spelled "First_name" or "FirstName" will. Build that convention into your template from the start.
Column name length cap: 20 characters. Any header longer than 20 characters is truncated or rejected during import. This affects custom variable columns most often — names like "LinkedInProfileURL" (18 characters, fine) versus "CompanyLinkedInPage" (19 characters, borderline) versus "PreviousConversationNotes" (24 characters, will break). Count characters before finalizing your headers.
Maximum custom variables per import: 50. This ceiling is rarely hit in practice, but large enriched lists exported from Clay or ZoomInfo sometimes exceed it. Strip columns you will not reference in your email sequences before uploading.
File encoding must be UTF-8. Leads with names containing accents (Rene, Francois, Jose), CJK characters, or Eastern European characters (Zbigniew, Andras) will display as garbled text or cause row-level import failures if your file is saved in Windows-1252 or Latin-1 encoding. In Microsoft Excel, use File > Save As > CSV UTF-8 (comma delimited) — the standard "CSV (Comma delimited)" option saves in ANSI/Windows-1252 by default, which is wrong.
No spaces before or after column names. A header saved as " Email" (with a leading space) will not map to the email field and will cause the entire import to fail. This is a common artifact when copying headers from documentation into Excel.
Actionable step: Before uploading any list, open your CSV in a plain-text editor (Notepad on Windows, TextEdit in plain-text mode on Mac), confirm the first line reads something like Email,FirstName,LastName,Company and that there are no leading spaces, no curly quotes, and no BOM character at the very start of the file.
---
Full Column Reference Table
The table below consolidates every predefined field Instantly recognizes, the exact CSV header spelling that triggers auto-detection, the variable tag used in email sequences, and whether the field is required.
| CSV Header Name | Instantly Field Label | Variable Tag | Required? |
| Email address | {{email}} | Yes | |
| First_name | First name | {{firstName}} | No |
| Last_name | Last name | {{lastName}} | No |
| Company | Company name | {{companyName}} | No |
| Title | Job title | {{jobTitle}} | No |
| Phone | Phone number | {{phone}} | No |
| Website | Website | {{website}} | No |
| Linkedin_url | LinkedIn URL | {{linkedIn}} | No |
| Location | Location | {{location}} | No |
For custom variables, the pattern is simple: whatever you name the CSV column header becomes the variable tag in your email sequences. A column named "Industry" produces the tag {{Industry}}. A column named "Painpoint" produces {{Painpoint}}. The match is case-sensitive — if the column is "Industry" and you type {{industry}} in your email, the variable will not resolve.
Custom variables beyond the nine predefined fields above follow the same capital-letter and 20-character rules. Name them clearly and consistently across all list uploads if you plan to use the same sequence template with multiple imports.
Actionable step: Copy this table into a reference doc or spreadsheet. Before building any list, decide which columns you need, confirm the exact header spelling, and name your custom columns in one place so they are consistent across every CSV you export.
---
A Ready-to-Use CSV Template (Copy and Import)
Below is a complete header row with one example data row. You can copy this directly into a plain-text file, save it as leads.csv with UTF-8 encoding, and import it into Instantly immediately.
Email,First_name,Last_name,Company,Title,Phone,Website,Linkedin_url,Location,Industry,Painpoint
[email protected],John,Smith,Acme Plumbing,Owner,+1-555-202-4444,acmeplumbing.com,linkedin.com/in/johnsmith,Chicago IL,Home Services,Slow season bookings
What this row demonstrates:
- Email is first and populated
- All predefined fields use the exact spellings from the reference table above
- Two custom variables (Industry and Painpoint) follow the capital-letter convention
- Phone is in E.164-style format with a country code prefix, which prevents Excel from stripping leading zeros
- No fields contain commas (if they did, they would need to be wrapped in double quotes)
If any field value contains a comma — for example, a company name like "Smith, Jones & Partners" — wrap the entire value in double quotes: "Smith, Jones and Partners". Most spreadsheet applications handle this automatically when you export to CSV, but verify by opening the file in a text editor.
Actionable step: Save the header row and example row above as a UTF-8 CSV file right now and test an import with one or two real leads. Confirming your template works before building a 10,000-row list takes five minutes and prevents hours of troubleshooting later.
---
How to Build a Compatible Lead List from Popular Data Sources
Apollo.io
Apollo's CSV export includes more than 60 columns. Most of them are either redundant, blank for most contacts, or named in ways that do not match Instantly's auto-detection logic. The mapping you need is:
| Apollo Export Column | Instantly CSV Header |
| First Name | First_name |
| Last Name | Last_name |
| Company | Company |
| Title | Title |
| Phone | Phone |
| Website | Website |
| LinkedIn URL | Linkedin_url |
| City, State | Location (combine manually or use one) |
Apollo exports use UTF-8 by default, so encoding is not usually a problem. The main cleanup task is deleting unnecessary columns (Apollo includes fields like "Number of Retail Locations," "SIC Codes," and "SEO Description" that add file size without adding personalization value) and renaming the headers to match the table above.
Keep Apollo's "Verified Email" status column during cleanup and filter to verified-only rows before uploading. Uploading unverified Apollo emails into Instantly and paying 0.25 credits per lead to re-verify them is wasteful when Apollo has already done the verification.
LinkedIn Sales Navigator
LinkedIn does not export contact data directly from Sales Navigator in a format ready for email outreach — it intentionally omits email addresses. The common workflow is to export a Sales Nav search to a third-party enrichment tool (Evaboot, Findymail, or GetLeadSnap.pro), which appends verified emails, and then export from that tool to CSV.
After enrichment, the field mapping challenge is similar to Apollo: column names from enrichment tools vary. Rename columns to match the Instantly reference table before importing.
Hunter.io
Hunter exports a CSV with columns named "Email," "First name," "Last name," "Company," "Job title," "Website," and "LinkedIn." The required renames are: "First name" to "First_name," "Last name" to "Last_name," and "Job title" to "Title." Hunter exports are UTF-8 by default.
Clay
Clay is flexible enough that column names depend entirely on how you built your table. The discipline here is to name your Clay columns using the Instantly conventions from the start rather than renaming after export. Build a column naming convention in Clay that mirrors the reference table above.
ZoomInfo
ZoomInfo exports tend to be large and include many columns. Apply the same approach as Apollo: map the core fields, delete columns you will not use in sequences, confirm the 50-variable ceiling is not exceeded, and verify encoding before upload. ZoomInfo's phone number formatting (often exported as "(555) 202-4444") may need cleanup to prevent Excel from corrupting the value on re-save.
Actionable step: For whichever tool you use most, create a saved export template or a reusable column-renaming macro that standardizes headers to Instantly format. One hour of setup here saves that time on every future export.
---
Step-by-Step Import Walkthrough
1. Navigate to the Leads section. From your Instantly dashboard, select "Leads" in the left sidebar, then click "Import Leads."
2. Select your upload method. Choose "Upload CSV" from the options (alternatives are Google Sheets link and API). Click the file picker and select your prepared CSV file.
3. Review the column mapping screen. Instantly displays a preview table showing each column header from your CSV alongside an auto-detected Instantly field. Review every row. Correct any mismatches by clicking the dropdown next to each column and selecting the right field. Columns that do not match a predefined field become custom variables automatically.
4. Configure duplicate behavior. Instantly asks what to do when an email address already exists in your account. Options are typically: skip the duplicate, update the existing lead's data, or create a new entry. For most workflows, "skip" is the safest default unless you are intentionally refreshing stale data.
5. Configure email verification. If you want Instantly to verify emails on import, enable the verification toggle. Verification costs 0.25 credits per lead. For a 10,000-lead list, that is 2,500 credits. Only enable this if your list has not already been verified through your data source or a dedicated SMTP verification tool.
6. Assign to a list or campaign. Select which lead list this import belongs to. If you are starting fresh, create a new named list before importing so your leads are organized from day one.
7. Confirm and upload. Click "Import" and wait for the processing confirmation. Instantly will show a summary of rows imported, rows skipped, and any errors encountered.
Actionable step: Screenshot or note the import summary numbers. If imported rows plus skipped rows do not add up to your total CSV row count (minus the header row), there are silently dropped rows — usually blank email cells.
---
Common Errors and How to Fix Them
UTF-8 Encoding Issues
Symptom: Leads with accented or non-ASCII characters import with garbled names (e.g., "François" instead of "Francois").
Fix in Excel: File > Save As > change the file type dropdown to "CSV UTF-8 (Comma delimited)" — not "CSV (Comma delimited)."
Fix in Google Sheets: File > Download > Comma Separated Values (.csv). Google Sheets always exports UTF-8, so this is the safest editing environment for lists with international characters.
Phone Number Formatting Corruption
Symptom: Phone numbers like "+1-555-0100" become "1.55501E+11" after saving in Excel.
Fix: Before saving, select the phone column, right-click > Format Cells > Text. This prevents Excel from interpreting the column as a number. Alternatively, prefix every phone value with a single quote (which Excel hides but preserves as text) or edit in Google Sheets, which does not auto-format phone numbers this way.
Column Name Too Long
Symptom: Import fails or custom variable does not resolve in email sequences.
Fix: Count characters in every column header. Any header over 20 characters must be shortened. "PreviousConversationNotes" (24 chars) becomes "PrevConvoNotes" (14 chars). Update your email sequence variable tags to match the shortened name.
Missing Email Rows Silently Dropped
Symptom: Import summary shows fewer leads than expected with no error details.
Fix: In your spreadsheet, filter the Email column for blank values before exporting. Delete or fill those rows. Re-export and re-import.
Windows CRLF Line Ending Issues
Symptom: The entire CSV imports as a single lead, or every row is corrupted.
Fix: Windows uses CRLF (carriage return + line feed) as a line ending; Unix/Mac uses LF only. Most CSV parsers handle both, but some edge cases cause issues. Open the file in Notepad++, go to Edit > EOL Conversion > Unix (LF), and save.
Actionable step: Build a pre-upload checklist: (1) encoding UTF-8, (2) phone column formatted as text, (3) all headers under 20 characters, (4) no blank email rows, (5) line endings verified. Run this checklist before every import.
---
CSV vs Google Sheets vs API — Which Import Method to Use
| Use Case | Best Method | Reason |
| One-time upload of a static list | CSV | Fastest for a prepared file; no ongoing connection needed |
| Ongoing sync from a live data source | Google Sheets | Sheet updates reflect in Instantly without re-uploading |
| Developer workflow, programmatic imports | API | Full control; supports automation and CRM integrations |
| Large list over 20MB | CSV (batched) | Split into multiple files; no single-file workaround via Sheets |
| Non-technical team member managing leads | Google Sheets or CSV | Familiar interface; no coding required |
| Real-time enrichment pipeline | API | Enables push from enrichment tool directly to Instantly |
For most individual users and small agencies doing periodic outreach, CSV is the right method. The Google Sheets method is most valuable when a team member is continuously adding or removing contacts and needs changes to propagate without a manual re-upload step. The API is the right choice only when you are building an automated pipeline — for example, a scraper that feeds directly into your sending infrastructure.
Actionable step: Pick one import method as your default and standardize on it. Mixing methods across campaigns makes deduplication behavior harder to predict and audit.
---
Batch Uploading Large Lists (Over 20MB)
Instantly enforces a 20MB per-upload file size limit. For most lead lists with standard fields, this translates to roughly 80,000 to 120,000 rows depending on how much data is in each column. A list with many long custom variable values (full LinkedIn URLs, long company descriptions) will hit the limit at a lower row count.
How to split your list:
If you are working in Excel or Google Sheets, sort the list by any column (email domain is a natural grouping), then manually copy rows into separate files of 50,000 rows each. At typical row sizes, 50,000 rows stays well under the 20MB ceiling with room to spare.
If you are comfortable with command-line tools, the split command on Mac/Linux splits a file by line count: split -l 50000 leads.csv batch_ creates files named batch_aa, batch_ab, and so on. Add the .csv extension and prepend the header row to each file before uploading. On Windows PowerShell, you can achieve the same with a short script that reads the CSV in chunks.
Row count estimates at typical sizes:
| Columns | Approximate Max Rows at 20MB |
| 5 columns (email + 4 fields) | ~200,000 rows |
| 10 columns | ~120,000 rows |
| 20 columns (heavy enrichment) | ~60,000 rows |
Actionable step: Check your file size before every upload. If it is over 15MB (leaving a safety margin), split it before attempting the upload. Processing a failed 25MB upload wastes time; splitting takes two minutes.
---
Deduplication Rules — What Happens to Duplicate Emails
Instantly deduplicates at two levels, and understanding both prevents confusion when your import counts do not match expectations.
Per-campaign deduplication: The same email address cannot appear twice in the same campaign. If you attempt to import a lead that already exists in the active campaign, Instantly skips the duplicate regardless of your import settings.
Global deduplication (optional): During import, Instantly gives you the option to skip leads that already exist in any campaign in your workspace — not just the current one. This is the "already exists in another campaign" checkbox. Enabling it prevents the same lead from receiving outreach from multiple campaigns simultaneously, which protects your domain reputation but reduces the effective import count.
Cross-list duplicates: If the same email address exists in two different lead lists but has not been added to a campaign, Instantly does not deduplicate at the list level. Duplicates only get caught when leads are assigned to a campaign.
Practical implication: If you are running multiple niche campaigns targeting overlapping audiences (for example, a plumbing owners campaign and a home services owners campaign), enable global deduplication to prevent the same contact from receiving two different cold email sequences from your domains simultaneously.
Actionable step: Decide your deduplication policy before your first import and apply it consistently. Document whether you use per-campaign or global dedup for each campaign so you can diagnose import count discrepancies later.
---
Using CSV Variables in Your Email Sequences
This is the end-to-end connection that most documentation skips: how a column in your CSV becomes a working personalization variable in a sent email.
Step 1 — CSV column header. You have a column named "Painpoint" in your CSV. The value for John Smith is "Slow season bookings."
Step 2 — Import mapping. During import, Instantly maps "Painpoint" as a custom variable. After import, the lead record for John Smith stores "Painpoint: Slow season bookings."
Step 3 — Variable tag in email body. In your sequence editor, you write: "I noticed that {{Painpoint}} is a common challenge for owners in your space." Note the exact capitalization matches the CSV header — "Painpoint" not "painpoint."
Step 4 — Rendered email. When Instantly sends to John Smith, the email reads: "I noticed that Slow season bookings is a common challenge for owners in your space."
Fallback value syntax. If a lead's Painpoint field is blank, the variable resolves to nothing — leaving an awkward gap in the sentence. Instantly supports fallback values with the pipe syntax: {{Painpoint|a common bottleneck}}. If the field is blank, the email reads: "I noticed that a common bottleneck is a common challenge..." This is not perfect prose, but it is better than a visible blank or a broken variable.
The predefined variable tags for reference:
- {{firstName}} — maps from First_name column
- {{lastName}} — maps from Last_name column
- {{companyName}} — maps from Company column
- {{jobTitle}} — maps from Title column
- {{phone}} — maps from Phone column
- {{website}} — maps from Website column
- {{location}} — maps from Location column
- {{linkedIn}} — maps from Linkedin_url column
Custom variables use the column header name exactly as written: a column named "Industry" produces {{Industry}}, not {{industry}} or {{INDUSTRY}}.
Actionable step: Before sending any campaign, use Instantly's preview mode to render the email for five to ten leads with varied data completeness. Confirm that fallback values display correctly for leads with missing fields and that no {{variable}} tags appear literally (which would indicate a header mismatch).
---
Building a Verified Lead List Before Import
The 0.25-credit-per-lead verification cost inside Instantly adds up fast on large lists. For a 20,000-lead list, in-platform verification costs 5,000 credits. Running SMTP verification upstream — before you even upload to Instantly — eliminates that cost and gives you a cleaner import.
Tools like GetLeadSnap.pro export leads in a CSV format that already maps closely to Instantly's required column structure, with SMTP-verified email addresses included. Other options include NeverBounce, ZeroBounce, and Debounce, all of which accept a CSV upload, verify each address via SMTP handshake, and return a results CSV you can filter to "valid" rows only.
Target bounce rate for cold email deliverability: below 1%. Instantly's own guidance and broader cold email best practices align on this threshold. Exceeding 1% bounce rate consistently triggers sending limit reductions and eventual domain suspension on major mailbox providers.
For context on what list quality looks like in practice: a freshly scraped list with no verification typically bounces at 8-15%. A list filtered to "catch-all" and "valid" by a dedicated SMTP verifier typically bounces at 0.3-0.8%. The difference in deliverability outcomes justifies the verification step every time.
Actionable step: Set a personal rule — never upload a list to Instantly without running it through SMTP verification first, whether through your data source, a dedicated tool, or Instantly's own verification feature. The cost of one domain suspension from high bounce rates is higher than the cost of verification.
---
FAQ
What is the maximum number of leads I can import in a single Instantly CSV upload?
There is no explicit row count limit, but the 20MB file size cap applies. At typical column counts, this means roughly 60,000 to 200,000 rows per upload. For larger lists, split into batches and import sequentially.
Does Instantly accept semicolon-delimited files or only comma-delimited?
Instantly expects comma-delimited files. If your export tool produces semicolons (common with European Excel locale settings), open the file in Google Sheets, copy all data, and re-export as a comma-delimited CSV.
Why are my custom variable tags showing up literally in sent emails?
The most common cause is a case mismatch between the CSV column header and the variable tag in the email body. Check that capitalization is identical: if the column is "Painpoint," the tag must be {{Painpoint}}, not {{painpoint}}.
Can I update existing lead data by re-importing the same list with new values?
Yes. During import, select "Update existing leads" in the duplicate handling settings. Instantly will overwrite the stored field values for any lead whose email address already exists in your workspace.
How do I add leads to an existing campaign without disrupting active sequences?
Import the new leads into the same lead list assigned to the campaign. Instantly adds them to the sequence queue without affecting contacts already mid-sequence.
What happens if my CSV has columns that are not in Instantly's predefined list and not mapped as custom variables?
If a column is left unmapped during the import mapping step (you select "Do not import" or leave it blank), that data is discarded. It will not appear on the lead record and cannot be used in sequences.
Is there a way to preview how variables will render before sending?
Yes. In the sequence editor, use the "Preview" or "Test" function. You can select a specific lead from your list and see exactly how the email renders with their data, including fallback values for any blank fields.
---
Building Your Pipeline End to End
The Instantly.ai CSV format is straightforward once you internalize the rules: UTF-8 encoding, capital-letter headers, a 20-character name limit, email as the only required field, and exact case-matching between column headers and variable tags. Most import failures trace back to one of those five rules.
The real leverage is in what happens upstream of the import. A well-structured lead list — sourced from verified data, exported with clean column names, filtered to remove blank emails and invalid addresses — imports in under two minutes and feeds directly into a personalized sequence without manual cleanup.
If you are building lists from scratch or need SMTP-verified exports in a format that maps cleanly to Instantly's required structure, tools like GetLeadSnap.pro export leads with headers pre-matched to Instantly's field names and verification status included. Whether you use a dedicated tool or build your own pipeline from Apollo or Sales Navigator exports, the column reference table and template in this guide give you everything you need to get a clean import on the first attempt.
The benchmark to aim for: below 1% bounce rate, above 5% reply rate. Getting there starts with the CSV.