How to add leads to Instantly 2026: CSV preparation, column mapping, and list management
How to add leads to Instantly 2026: full guide to CSV prep, field mapping, deduplication, list hygiene before import, advanced tactics, and troubleshooting.
Priya Nair
B2B growth marketer, ex-Apollo user · Updated June 24, 2026
Last updated: June 2026 · Priya Nair, B2B growth marketer, ex-Apollo user
TL;DR — 7 things to know before reading
- Adding leads to Instantly requires a CSV file with at minimum one column containing verified email addresses; additional columns (first name, last name, company, job title) enable personalisation variables in your email sequence
- This guide uniquely covers lead import as a hygiene system — the pre-import deduplication, field validation, suppression cross-reference, and personalisation completeness checks that determine campaign performance before the first email is sent
- Contact list quality is the primary upstream variable that determines whether an Instantly campaign produces results; unverified email addresses produce bounces that damage sender reputation regardless of how well the campaign is written or how many inboxes are in rotation
- Instantly deduplicates contacts by email address within the same campaign; the same contact can be added to multiple different campaigns simultaneously unless you configure a global suppression list and cross-reference before each import
- Field mapping is the most common source of silent import errors: a personalisation variable that maps to the wrong column produces either blank variables or incorrect data in every email sent, and this error is not caught by Instantly's validation
- The pre-import checklist (structural audit, email quality audit, bounce risk assessment, suppression cross-reference, personalisation completeness, list segmentation) takes 15–20 minutes and prevents the most expensive import mistakes
- Verdict: Quarvio delivers verified B2B contact CSVs pre-formatted for direct Instantly upload; Instantly handles the import and field mapping; Inframail provides the inboxes that deliver to those contacts; Aimfox uses the same contact list for parallel LinkedIn outreach
Our take
The contact import is where most cold email campaigns win or lose before anyone reads the first subject line. A campaign with perfect copy, well-warmed inboxes, and a precise ICP definition still fails if the contact list has 15% invalid addresses, fields mapped to the wrong columns, or unsubscribed contacts re-added from an old list export.
After years of working in B2B growth and having managed imports for campaigns from 200 to 50,000 contacts, the patterns are consistent: practitioners who treat the import as a quick upload step experience recurring deliverability problems, unexplained bounce spikes, and personalisation failures they cannot trace. Practitioners who run the full pre-import hygiene workflow — even for a 500-contact list — experience consistent campaign performance from the first send.
This guide covers lead import as a system: not just how to upload a file, but the complete workflow from source data quality through field mapping verification, deduplication, and ongoing list management. The unique angle is pre-import hygiene — the decisions made before the CSV touches Instantly's upload interface that determine whether the campaign starts clean or inherits structural problems.
Quarvio delivers verified B2B contact CSVs pre-formatted for Instantly's field mapping requirements. Instantly handles the upload, mapping, and list management. Inframail provides the inboxes the imported contacts receive emails from. Aimfox runs LinkedIn outreach from the same contact list in parallel, making the contact CSV a shared asset across channels.
Why lead import hygiene determines campaign performance
The causal chain is direct: bad import data → high bounce rate → damaged domain reputation → reduced inbox placement → lower open and reply rates even for contacts with valid email addresses.
Email providers track bounce rates at the domain level. When your sending domain produces a pattern of hard bounces (emails to addresses that do not exist), the domain's reputation score declines. This affects all emails sent from that domain — including emails to valid contacts on future campaigns. The damage from one import with 12% invalid addresses is not contained to that campaign; it follows the sending domain.
Per Google Postmaster Tools, spam complaint rates must stay below 0.3% for Gmail routing to remain reliable. High bounce rates contribute to complaint accumulation by reducing reply rates (affecting engagement signals) and triggering abuse monitoring at receiving mail servers. The downstream effect of a bad contact import is not just the immediate campaign — it degrades the infrastructure used for all subsequent campaigns.
The practical implication: spending 20 minutes on pre-import hygiene before a 1,000-contact import is worth significantly more than the same 20 minutes spent refining email copy. The copy operates on top of the list quality; list quality is the floor.
Supported import formats and when to use each
Instantly supports three methods for adding contacts to a campaign:
Method 1: CSV upload (standard, recommended)
CSV (comma-separated values) is the primary import method for all standard campaigns. It supports any contact volume, full column mapping, custom variable mapping, and is compatible with all major sources of B2B contact data.
CSV requirements:
- File encoding: UTF-8 without BOM (byte order mark)
- Separator: comma (not semicolon, tab, or pipe)
- Header row: required on row 1; all data rows below
- No merged cells, no formula cells, no HTML formatting
- Plain text values in all cells
CSV encoding is the most common technical import failure. Files saved from Excel or Google Sheets with the "UTF-8 with BOM" option produce files that Instantly may import with a garbled first column header (the BOM character appears as email instead of email). This causes the email column mapping to fail silently. Always export from Excel using "CSV UTF-8 (Comma delimited)" and verify the first character of the first column header in a text editor if you suspect BOM contamination.
Method 2: Manual entry (small lists only)
Instantly supports manual contact entry for lists under approximately 20 contacts. This is useful for high-touch campaigns targeting a small, specific set of accounts. For any campaign above 20 contacts, CSV upload is faster and less error-prone.
Method 3: Integrations via Zapier
Instantly connects to external tools via Zapier (Instantly Zapier integrations) for automated contact syncing from CRM systems, form submissions, or other data pipelines. This method is appropriate for ongoing campaigns where contacts are added continuously from an external source (e.g., new leads from a form submission triggering a cold email sequence).
For the standard campaign workflow using a sourced contact list from Quarvio, CSV upload is the correct method. The Zapier integration is appropriate for automated workflows where contacts flow in continuously from a separate system.
Exporting from common sources for Instantly-ready CSVs
| Source | Export method | Common issues |
|---|---|---|
| Excel (.xlsx) | File → Save As → CSV UTF-8 (Comma delimited) | BOM contamination, formula cells exported as text |
| Google Sheets | File → Download → Comma-separated values (.csv) | Usually clean; verify encoding |
| Quarvio | Delivered as pre-formatted CSV | No reformatting required |
| HubSpot | Contacts → Export → CSV | Extra columns not in Instantly mapping; filter before upload |
| Salesforce | Reports → Export details | Salesforce date formats in some fields require cleanup |
| LinkedIn Sales Navigator | Export → CSV | LinkedIn email addresses rarely included; requires enrichment |
Pre-import list hygiene: the 6-step checklist
Running this checklist before every import prevents the most expensive import mistakes. For a 1,000-contact list, this takes 15–20 minutes. For a 5,000+ contact list, it takes 20–30 minutes. The time investment pays back in campaign performance.
Step 1: Structural audit (column structure, encoding, formatting)
What to check:
Open the CSV in a plain text editor (Notepad, TextEdit) — not Excel, which auto-formats values. Verify:
- Row 1 is the header row with no characters before the first column name
- Each data row has the same number of commas as the header row (no missing or extra delimiters)
- No rows with merged content from two rows (line breaks inside a cell break the CSV structure)
- No HTML tags, encoding artifacts, or formula text (
=CONCATENATE(...)visible as literal text)
Benchmark: A clean CSV opens in a text editor with the first line reading exactly: email,first_name,last_name,company,job_title (or your column naming convention). Any deviation from this pattern is a structural problem to fix before uploading.
Failure mode: Uploading directly from Excel without converting to CSV, causing Instantly to receive an .xlsx file or a CSV with Windows-style line endings (CRLF) that produce extra blank rows on certain platforms. Always convert to CSV and open in a text editor to verify before importing.
Sub-step 1.1: Open the file in a text editor and count the columns in the header row. Count the same position columns in 3 random data rows. If any data row has a different count, there is a structural break in that row.
Sub-step 1.2: Verify the last row of the file. Spreadsheet exports sometimes append a blank row at the end that Instantly counts as a contact with no data. If the last line is blank, delete it before uploading.
Step 2: Email quality audit
What to check:
The email column is the primary field Instantly uses as the contact identifier and the sending address. Every entry in this column must be a valid email address format.
- No blank email cells: A row with a blank email field will fail to import or import as a contact with no email address (which cannot receive any campaign email)
- No malformed addresses: Addresses missing
@, addresses with spaces inside, addresses with double@signs, or addresses with invalid domain formats (no TLD, etc.) - No distribution list addresses: Addresses like
info@,contact@,team@,hello@,support@,sales@are role-based addresses that typically deliver to multiple people or auto-routing systems, producing low engagement and sometimes high spam complaint rates from gatekeepers who did not initiate the outreach
Benchmark: In a well-sourced B2B contact list, fewer than 1% of email addresses should fail a basic format check. A list with more than 2% format-invalid addresses is a quality signal that the source data has not been properly verified.
Sub-step 2.1: In a spreadsheet, use a formula to flag emails missing @: =IF(ISNUMBER(FIND("@",A2)),TRUE,FALSE) applied to the email column. Filter for FALSE and review flagged rows.
Sub-step 2.2: Count role-based email prefixes. Role-based addresses are acceptable if you are intentionally targeting company-wide inboxes, but they should be intentional rather than accidental inclusions in a list targeting individual decision-makers.
Sub-step 2.3: Look for emails ending in unusual TLDs or with multiple dots after @ (e.g., john@company.co.uk is valid; john@company.com.spam is not). Review any address that appears visually unusual.
Failure mode: Importing a list with 5% role-based addresses without realising it. Role-based addresses generate unsubscribe and spam complaint rates significantly higher than individual decision-maker addresses, because multiple recipients receive the email and any one of them clicking "spam" affects your domain reputation.
Step 3: Bounce risk assessment
What to check:
Bounce risk is driven by two factors: data age and verification status.
Data age: Per Instantly's cold email benchmarks, B2B email addresses decay at approximately 25–30% annually due to job changes, company restructures, and email format changes. A contact list purchased or compiled 12 months ago will have materially higher bounce rates than a freshly sourced list.
Verification status: Contact data from unverified sources has not had email addresses checked against mail server SMTP records. Even a recently compiled unverified list can have 10–20% invalid addresses depending on the sourcing methodology.
Bounce risk by data age:
| Data age | Expected additional decay | Approximate bounce rate (unverified source) |
|---|---|---|
| Under 30 days | Minimal | 3–8% (quality source) |
| 1–3 months | Low | 5–12% |
| 3–6 months | Moderate | 8–18% |
| 6–12 months | High | 15–25% |
| 12+ months | Very high | 20–35%+ |
Benchmark: Any contact list older than 6 months from an unverified source should be re-verified before importing. A bounce rate above 5% in the first campaign run is a signal that the list was too old or unverified at import.
Sub-step 3.1: Check the data source date. Ask the provider when the data was last verified, not when it was compiled. These are often different dates.
Sub-step 3.2: If the data age is above 3 months and the source is not pre-verified (like Quarvio), run the list through an email verification tool before importing. Do not rely on Instantly to catch bounce issues after the campaign starts.
Failure mode: Importing a 12-month-old list without re-verification and discovering a 22% bounce rate after the campaign launches. At this point, the domain reputation has already been damaged.
Step 4: Deduplication against suppression file
What to check:
Your suppression file is the cumulative record of all contacts who should never receive another email from your campaigns: unsubscribes, hard bounces, opted-out contacts from LinkedIn outreach, manual removes, and contacts who requested to be suppressed from any channel.
Every import should be cross-referenced against the suppression file before uploading to Instantly. The reason: Instantly's deduplication works within a single campaign (the same email will not receive the same campaign twice), but it does not automatically prevent a previously unsubscribed contact from being added to a new campaign.
How to run the cross-reference:
- Export your Instantly global unsubscribe list (Settings → Unsubscribe → Export)
- Export your LinkedIn opted-out contacts from Aimfox if you run parallel LinkedIn outreach
- Combine these into a master suppression file
- In a spreadsheet, use VLOOKUP or MATCH to flag any contact in your import list whose email address appears in the suppression file
- Remove flagged contacts from the import list before uploading
Benchmark: For a well-maintained suppression file and a freshly sourced list targeting a new audience, the overlap should be under 1%. If you find 5%+ overlap between a new list and your suppression file, your ICP targeting is producing the same contacts repeatedly from different sources — a signal to refine your targeting parameters.
Sub-step 4.1: Maintain the suppression file as a running document updated after every campaign. Export from Instantly after each campaign and append new unsubscribes to the master file.
Sub-step 4.2: Cross-reference not just email addresses but also company domains where you have complete company exclusions (e.g., existing customers whose domain should never receive cold outreach).
Failure mode: Re-importing a previously unsubscribed contact who then receives a sequence email, triggering a spam complaint. This violates CAN-SPAM requirements per the FTC CAN-SPAM compliance guide and generates a negative engagement signal on the sending domain.
Step 5: Personalisation field completeness audit
What to check:
Personalisation variables in your Instantly sequence (e.g., {first_name}, {company}) draw from the mapped columns in the imported contact list. A contact missing the first_name value in the CSV will receive an email where {first_name} renders as blank. "Hi ," is a common and clearly automated-looking failure that damages reply rates.
Completeness targets by field:
| Field | Target completion rate | Acceptable minimum |
|---|---|---|
| 100% | 100% (required) | |
| first_name | 95%+ | 90% |
| company | 90%+ | 80% |
| last_name | 80%+ | 70% |
| job_title | 70%+ | 60% |
| custom fields | Varies | Depends on use in sequence |
Benchmark: If first_name completion is below 90% on a list, either the source data quality is insufficient for personalised campaigns, or you need to clean the missing values before importing.
Sub-step 5.1: Count blank values per column in a spreadsheet: for each personalisation column, count how many rows have an empty cell. Calculate the percentage filled.
Sub-step 5.2: For contacts missing first_name, either fill with a generic fallback ("there") for the spintax variable ({first_name|there}) or remove those contacts from the import if personalisation quality is critical for this campaign.
Sub-step 5.3: Check for data format issues in personalisation fields: all-caps company names (IBM, MICROSOFT) that need normalisation; first names with formatting artifacts like trailing spaces or non-ASCII characters; company names with punctuation that will read awkwardly in sentence context.
Failure mode: Importing without checking personalisation completeness and discovering mid-campaign that 30% of contacts have blank {first_name} fields, resulting in "Hi , I noticed your company..." emails to nearly a third of your audience.
Step 6: List segmentation before import
What to check:
Before uploading to Instantly, segment the contact list into the batches that map to your campaign structure. Importing 10,000 contacts as a single list and then running one campaign against all of them treats 10,000 different decision-makers as identical. Segmentation before import enables campaign-level personalisation.
Common segmentation dimensions:
| Dimension | Example segments | Why it matters |
|---|---|---|
| Job title / seniority | VP-level vs. Director-level vs. Manager-level | Different pain points, different sequence language |
| Industry | SaaS vs. fintech vs. healthcare | Industry-specific references in sequence |
| Company size | Enterprise (500+) vs. mid-market (50–500) vs. SMB (under 50) | Different budget signals, different buying process |
| Geography | US vs. UK vs. APAC | Time zone sending windows, compliance differences |
| Source | Newly sourced vs. re-engagement | Different sequence angle |
Benchmark: For most campaigns, segmenting into 3–5 groups produces materially better results than running unsegmented. Each segment gets its own campaign with a tailored sequence. The import step is where you operationalise this segmentation by uploading separate CSVs for each segment.
Sub-step 6.1: Before importing, add a segment column to your CSV. Filter by segment and export separate CSVs. Name each CSV with the segment identifier matching your list naming convention.
Sub-step 6.2: Create a corresponding campaign in Instantly for each segment before uploading. Assign each segmented CSV to its matching campaign immediately after import.
Failure mode: Uploading a single unsegmented list of 5,000 contacts spanning multiple industries and company sizes, then running one campaign with a single message. The campaign generates below-average results for every segment because no segment gets a specifically relevant message.
Step-by-step: importing leads into Instantly
After the 6-step pre-import hygiene checklist, the actual import into Instantly is straightforward.
Sub-step 7.1: Navigate to the Leads section
In Instantly, click Leads in the left sidebar. You will see your existing lead lists and the option to add new leads.
Sub-step 7.2: Initiate the CSV upload
Click Add Leads → Upload CSV.
Select the CSV file from your local system. Instantly begins processing the file. For large files (10,000+ contacts), processing may take 30–90 seconds.
Failure mode: Uploading a file that is too large for the network connection to handle cleanly. For files above 50,000 rows, split into multiple uploads of 20,000–25,000 rows each to prevent timeout errors during the upload.
Sub-step 7.3: Review the column mapping screen
After upload, Instantly displays a column mapping screen showing:
- Each column header detected in your CSV (left column)
- The Instantly field it has auto-mapped to (right column)
- A sample of the first 3–5 data rows for each mapped field
Instantly auto-detects common column names (email, first_name, company, etc.) and maps them automatically. Verify every mapping before confirming.
Critical check on the mapping screen: Open the sample rows and verify that the email column shows email addresses (not names or company names). If the email column shows "John Smith" values, the email and first_name columns were auto-mapped incorrectly and you must manually reassign them.
Sub-step 7.4: Configure custom field mappings
For any column in your CSV that does not auto-map to a standard Instantly field, map it manually to a custom variable:
- Click the dropdown in the Instantly field column for that CSV column
- Select Custom Variable 1, Custom Variable 2, etc.
- These custom variables are referenced in your sequence as
{custom_1},{custom_2}, etc.
Common custom variable mappings:
linkedin_url→ custom_1 (for manual reference during reply conversations)pain_point→ custom_2 (if your list includes a pre-identified pain point field for personalisation)use_case→ custom_3 (industry-specific use case for the sequence)
Sub-step 7.5: Verify the sample preview
Before clicking Confirm, review the sample preview rows carefully:
- Email column: shows valid email addresses
- First_name column: shows first names only (not full names)
- Company column: shows company names
- Custom fields: show the correct values from the corresponding CSV columns
If any column shows unexpected values (blank, wrong field data, encoding artifacts), go back and correct the mapping before confirming.
Benchmark: Spending 3 minutes on the mapping screen preview prevents the most common personalisation failures. Every review should check at minimum 5 sample rows before confirming.
Sub-step 7.6: Confirm the import
Click Confirm and Upload. Instantly processes the import and shows the final contact count. Verify:
- Contact count matches the CSV row count (excluding the header row)
- No error messages about failed rows (if some rows failed, investigate why before proceeding)
Failure mode: Confirming without verifying the contact count and discovering later that 20% of contacts did not import due to malformed email addresses. The failed imports are not always clearly flagged in the Instantly interface.
Sub-step 7.7: Assign the list to a campaign
After import, navigate to the campaign the contacts are intended for. In campaign settings, assign the imported list to the campaign. The contacts are now enrolled in the campaign sequence.
Field mapping configuration reference
| CSV column name | Instantly field | Sequence variable | Notes |
|---|---|---|---|
| Email Address | (primary field, not a variable) | Required; auto-detected | |
| first_name | First Name | {first_name} | Auto-detected |
| last_name | Last Name | {last_name} | Auto-detected |
| company | Company Name | {company} | Auto-detected |
| job_title | Job Title | {job_title} | Sometimes auto-detected |
| phone | Phone Number | (not typically used in sequences) | For CRM export/reference |
| linkedin_url | Custom Variable 1 | {custom_1} | For reference; not typically in sequence |
| industry | Custom Variable 2 | {custom_2} | For segment reference |
| pain_point | Custom Variable 3 | {custom_3} | Advanced personalisation |
| use_case | Custom Variable 4 | {custom_4} | Advanced personalisation |
| city | Custom Variable 5 | {custom_5} | Geographic reference |
| Any other column | Custom Variable N | {custom_N} | Up to 20 custom fields |
Column name auto-detection rules in Instantly:
Instantly auto-detects columns with these exact names (case-insensitive): email, first_name or firstname, last_name or lastname, company or company_name, phone or phone_number. Columns with non-standard names (e.g., Email Address with a space, or Organisation instead of company) will not auto-map and require manual assignment.
For maximum compatibility, name your columns using the exact lowercase snake_case names from the above reference table. Quarvio-delivered CSVs use these exact column names by default.
Deduplication: how Instantly handles it and what you must manage yourself
Instantly's deduplication operates at two levels, and understanding both prevents the most common duplicate-related problems.
What Instantly deduplicates automatically
Within-campaign deduplication: If you add the same email address to a campaign twice (either in the same import or across multiple imports to the same campaign), Instantly will not send the same campaign sequence twice to that address. The second occurrence is automatically ignored.
Within-campaign reply deduplication: Once a contact replies, Instantly stops sending further sequence steps to that contact automatically (with Stop on reply enabled). This prevents continued outreach to contacts who have already engaged.
What Instantly does NOT deduplicate automatically
Across-campaign deduplication: If a contact's email address exists in Campaign A and also in Campaign B, they will receive outreach from both campaigns simultaneously. Instantly does not check across campaigns for the same email address. This means a contact can be in 5 different campaigns running at the same time — receiving 5 different sequence emails — without any automatic deduplication.
Against your suppression file: Instantly's global unsubscribe list prevents contacts from being re-added if they have explicitly unsubscribed and been added to the global list. However, contacts who bounced (hard bounces), who opted out via LinkedIn, or who were manually suppressed outside of Instantly's system are not automatically prevented from being re-imported.
Within-source deduplication: If your CSV contains duplicate email addresses (the same email appearing on two rows), Instantly imports both rows. The contact receives two entries in the campaign and may appear to be enrolled twice, depending on how the deduplication logic handles the second entry.
Practical deduplication workflow:
- Deduplicate the CSV before importing: Remove duplicate email addresses from the CSV using a spreadsheet UNIQUE formula or Remove Duplicates function
- Cross-reference against global suppression list: Export the Instantly unsubscribe list and remove any overlapping contacts from the import CSV
- Check for cross-campaign overlap: If running multiple simultaneous campaigns, confirm the import list does not contain contacts already active in another campaign
Advanced import tactics
Tactic 1: Use a campaign-per-segment import strategy
Instead of importing all contacts into a general list and then distributing to campaigns, build your campaign structure before importing. Create Campaign A, Campaign B, Campaign C first — each targeting a specific segment with a tailored sequence. Then import the segment-appropriate CSV directly into each campaign. This prevents the common practice of importing everything first and then trying to segment after the fact.
Tactic 2: Import a small test batch before the full list
For any new contact source (new list provider, new data enrichment approach, new ICP segment), import a test batch of 50–100 contacts before the full list. Run this small batch for 3–5 days and check the bounce rate before importing the remainder. This approach catches list quality problems on 50 contacts rather than discovering them on 5,000.
Benchmark: If the 50-contact test batch shows a bounce rate above 5%, do not import the rest of the list without investigation. A 5%+ bounce rate on 50 contacts extrapolates to potentially 250+ bounces on a 5,000-contact list — sufficient to materially damage domain reputation.
Tactic 3: Version your contact lists with import dates
Add an import_date column to your master contact database (not the import CSV, but your source tracking record) noting when each contact was added to Instantly and to which campaign. This allows you to:
- Identify which contacts are approaching re-engagement timing (6–12 months since last contact)
- Track which campaigns each contact has been enrolled in
- Prevent re-importing contacts who have been in recent campaigns
Tactic 4: Use custom fields for sequence branching signals
If your sequence includes conditional branching (e.g., different email content based on the contact's industry or company size), import the branching signal as a custom field. Map industry to custom_2 and reference {custom_2} in the appropriate sequence step. This allows a single campaign to send industry-specific content to each contact based on the imported data — without managing separate campaigns for each industry.
Tactic 5: Import LinkedIn URL for cross-channel coordination
When importing contacts for an email campaign that runs alongside a LinkedIn campaign in Aimfox, import the linkedin_url as custom_1. During reply review in Instantly's Unibox, you can reference the LinkedIn URL to send a coordinated LinkedIn connection request or message to warm email replies, creating a multichannel follow-up sequence without a separate data lookup.
List management over time
Refresh cadence
Contact data decays over time. Per Instantly's cold email benchmarks, email addresses for business professionals change at approximately 25–30% per year due to job changes, company restructures, and email address updates. A list sourced 12 months ago will have materially higher bounce rates than a freshly sourced list.
Recommended refresh: Source a new verified contact list from Quarvio for each campaign batch rather than re-using lists older than 6 months. Credits are valid for 12 months, allowing contact batches to be sourced throughout the year and used within the validity window.
Suppression file maintenance
Maintain a running suppression file that grows after every campaign:
- All hard bounces from each campaign (export from Instantly post-campaign)
- All unsubscribes from Instantly's global unsubscribe list
- All opted-out LinkedIn contacts from Aimfox
- Manual removes from any source
Before each new campaign upload, cross-reference the new list against the suppression file. The suppression file is your institutional memory across campaigns; without it, every new campaign risks re-contacting people who have already declined.
Suppression file growth rate: For a team running 2–3 campaigns per month at 500 contacts each, expect to add 50–150 new suppressed contacts per month (unsubscribes + hard bounces). A well-maintained suppression file after 12 months of active outreach typically contains 600–1,800 addresses.
List recycling rules
- Do not re-use a contact list that produced above 5% bounce rate in the first campaign without re-verification
- Do not re-enroll contacts from completed campaigns without checking whether they opted out
- Do not recycle lists across 12 months without sourcing fresh data for the same ICP
Troubleshooting lead imports in Instantly
Problem 1: Personalisation variables showing as blank in sent emails
Symptom: Contacts are receiving emails with {first_name} visible as a blank, "Hi ," or "" showing literally in the email body.
Cause 1: The first_name column is blank for this contact in the imported list.
Cause 2: The column mapping assigned first_name to the wrong CSV column.
Cause 3: The sequence template uses {first_name} but the column was imported with a different name and mapped to a custom variable that the template does not reference.
Fix: First, check the contact in Instantly's Leads section to see what value is stored for the first_name field. If it is blank, the source CSV had no first_name for this contact. If it shows a value, the sequence template variable name does not match the imported field. Correct the template variable to match the imported field name.
Problem 2: Imported contact count does not match CSV row count
Symptom: The CSV has 1,500 rows (excluding the header), but Instantly reports only 1,380 contacts imported.
Cause 1: 120 rows had malformed email addresses that Instantly rejected during import. Cause 2: 120 rows were identified as duplicates of existing contacts in the same campaign. Cause 3: The CSV has blank rows interspersed that Instantly counted during upload but excluded during import.
Fix: Export the list from Instantly after import and compare against the original CSV. Contacts that imported successfully appear in the Instantly list; contacts that failed do not. The gap represents either invalid emails or duplicates. For invalid emails, fix in the source CSV and re-import the failed rows. For duplicates, this is expected behavior.
Problem 3: Email column mapped to the wrong field
Symptom: After launching a campaign, emails are not sending (no errors visible), or the campaign shows sends but no opens. Investigation reveals that the email addresses Instantly has stored for these contacts are company names or first names, not email addresses.
Cause: The column mapping screen incorrectly auto-mapped the email column. Common triggers: CSV column named "Email Address" (two words with space) instead of "email," or the first column in the CSV is first_name and Instantly mapped it to email.
Fix: This is one of the most damaging import errors because the campaign may have already sent. Pause the campaign immediately. Delete the imported contact list. Correct the CSV column name to email (lowercase, single word, no spaces). Re-upload and re-map manually. Verify the mapping by checking sample rows before confirming.
Prevention: Always verify the mapping screen sample rows before confirming any import. The sample rows show what Instantly will use as the email sending address for each contact.
Problem 4: Special characters in company names displaying as garbled text
Symptom: Company names like "Müller GmbH" or "O'Brien & Associates" appear as "Müller GmbH" or "O'Brien" in sent emails.
Cause 1: The CSV was saved with incorrect encoding (UTF-16 or Windows-1252 instead of UTF-8). Cause 2: The sequence template is handling the personalisation variable in a way that escapes HTML entities.
Fix: Re-save the CSV with UTF-8 encoding. In Excel: File → Save As → CSV UTF-8 (Comma delimited). In Google Sheets: File → Download → Comma-separated values. If the issue persists, check whether the Instantly sequence template is applying HTML encoding to the variable by testing with a contact you know has a special character in their company name.
Problem 5: Contacts from previous campaigns being re-imported
Symptom: After importing a new list, some contacts begin receiving emails who unsubscribed from a previous campaign.
Cause: The new list was not cross-referenced against the suppression file before importing. The unsubscribed contacts were re-imported and enrolled in the new campaign.
Fix: Immediately pause the campaign. Export the Instantly global unsubscribe list. Cross-reference against the current campaign's contact list. Remove overlapping contacts from the campaign manually (mark them as excluded or move them to an exclusion group). Re-check the pre-import hygiene workflow to ensure suppression cross-referencing is included in every future import.
Compliance note: This scenario constitutes a CAN-SPAM violation if the contacts explicitly unsubscribed. Per the FTC CAN-SPAM compliance guide, unsubscribe requests must be honored within 10 business days.
Problem 6: CSV upload fails with a generic error message
Symptom: Uploading the CSV produces an error from Instantly without a specific description of the problem.
Cause 1: The file is not a valid CSV (it may be an .xls or .xlsx accidentally renamed to .csv). Cause 2: The file contains characters that are invalid in the detected encoding. Cause 3: The file exceeds the upload size limit for the account plan.
Fix: Open the file in a text editor and confirm it looks like comma-separated plain text (not XML or binary). Re-save explicitly as CSV from the source application. If the file is very large, split into smaller files (10,000–20,000 rows each) and upload in batches.
Problem 7: Same contact appearing in multiple active campaigns simultaneously
Symptom: A contact replies asking why they are receiving emails from "multiple people on your team." Investigation reveals the contact is enrolled in two different active campaigns.
Cause: The contact was imported into two campaigns without cross-campaign deduplication. Instantly does not prevent the same email from being active in multiple campaigns simultaneously.
Fix: Remove the contact from all but one campaign immediately. In future imports, check your Instantly lead database for existing contact records before importing new lists. For ongoing management, maintain a tracking spreadsheet noting which contacts are in which campaigns.
Problem 8: Import shows success but contacts are not receiving emails
Symptom: The import completed with the correct contact count, field mapping looks correct, and the campaign is active, but the campaign shows zero sends after 48 hours.
Cause 1: The campaign's sending schedule is set to hours that have not yet occurred in the target timezone. Cause 2: The connected sending inboxes are paused or have zero sending limits set. Cause 3: The campaign is in draft mode, not active mode. Cause 4: The lead list was imported but not assigned to the campaign (contacts are in the Leads database but not enrolled in this campaign's sequence).
Fix: Check the campaign status (Active vs. Draft). Verify the sending schedule aligns with the current day and time in the target timezone. Check that the sending inboxes are active and have non-zero daily limits. Verify that the lead list appears in the campaign's assigned leads section.
Community evidence
Instantly reviews on G2 show list management and lead organisation as frequently praised features, with practitioners noting that the column mapping interface is more intuitive than comparable tools and that Instantly's deduplication within campaigns reduces accidental double-sends.
Instantly's cold email benchmarks confirms that list quality — specifically, bounce rate below 3% — is one of the three primary variables separating top-quartile cold email performance from average results, alongside warmup quality and personalisation. Practitioners with bounce rates consistently below 2% produce open rates 8–15 percentage points above the average.
"The first time I ran a campaign in Instantly with an unverified list, the bounce rate was 12%. The campaign paused automatically at a certain threshold and Instantly flagged the issue. I replaced the list with verified Quarvio data and restarted: bounce rate dropped to 1.8% and open rate went to 34%. The difference was entirely the list quality, not anything else in the campaign."
— Verified G2 reviewer, outbound growth manager, B2B technology, Instantly reviews on G2
"Column mapping is where most people make mistakes. They upload a CSV with the column named 'Email' (capital E) and Instantly auto-maps it, but then they notice the company field is blank because they named it 'Company name' instead of 'company'. Spend 3 minutes on the mapping screen verifying the sample rows before confirming. It saves an hour of troubleshooting after launch."
— Verified G2 reviewer, sales ops specialist, B2B SaaS, Instantly reviews on G2
Our actual stack
| Need | Tool | Notes |
|---|---|---|
| Verified B2B contacts | Quarvio | One-time purchase, no subscription |
| Email inboxes | Inframail | Microsoft 365 inboxes, auto DNS |
| Cold email sending | Instantly | Sequences, warm-up, reply tracking |
| LinkedIn outreach | Aimfox | Connection campaigns, Unibox |
Frequently asked questions
What file format does Instantly use for adding contacts?
Instantly uses CSV (comma-separated values) format. The file must have a header row with column names and data rows below. UTF-8 encoding without BOM is required. Instantly does not accept Excel (.xlsx) or Google Sheets files directly; export to CSV first using File → Save As → CSV UTF-8 (Comma delimited) from Excel. The minimum required column is an email address column; additional columns (first name, last name, company, job title) enable personalisation variables in email sequences.
How do I prepare a CSV for Instantly import?
The recommended preparation workflow: save the file as UTF-8 CSV, name the email column email (lowercase, no spaces), name personalisation columns using snake_case (first_name, company, job_title), remove any blank rows at the end of the file, and open the file in a plain text editor to confirm it reads as clean comma-separated text before uploading. Cross-reference against your suppression file to remove any previously unsubscribed contacts before uploading.
How do I map personalisation variables when adding leads to Instantly?
After uploading a CSV, Instantly shows a column mapping screen where you connect each CSV column to an Instantly field. Map your email column to the Email Address field; map first_name to First Name, company to Company Name, job_title to Job Title. Instantly auto-detects standard column names; non-standard names require manual mapping. Custom columns not mapped to standard fields can be assigned to custom variables (custom_1, custom_2) and referenced in sequences as {custom_1}, {custom_2}. Always verify the sample preview rows before confirming the mapping.
Does Instantly automatically prevent duplicate contacts?
Instantly deduplicates by email address within the same campaign — uploading the same email twice does not create a duplicate send within that campaign. However, the same email address can be active in multiple different campaigns simultaneously and receive outreach from all of them. Instantly also does not automatically prevent re-importing contacts who previously bounced (hard bounces from past campaigns are not in the global unsubscribe list unless manually added). Manage cross-campaign and source-level deduplication in the CSV before importing.
Can I use Excel instead of CSV when importing leads to Instantly?
No. Instantly requires CSV format for imports. Excel files (.xlsx, .xls) are not accepted. Export from Excel using File → Save As and selecting "CSV UTF-8 (Comma delimited)" as the format. Confirm the exported file opens correctly in a text editor before uploading. Do not rename an Excel file to .csv without actually converting it — Instantly will fail the import.
How many contacts can I add to Instantly at once?
The contact limit per Instantly account depends on your subscription plan: Growth supports 1,000 active contacts; Hypergrowth supports 25,000; Light Speed supports unlimited. These are active campaign limits, not total database limits. For campaigns exceeding the plan's active contact limit, segment the list into batches and run successive campaigns as each completes. For large import files (above 50,000 rows), split into multiple files of 20,000–25,000 rows each to prevent upload timeout errors.
Why are personalisation variables showing as blank in my Instantly campaign?
Three common causes: (1) the contact's record has a blank value for that field in the imported CSV — check the contact in Instantly's Leads section to confirm; (2) the column was mapped to the wrong Instantly field or custom variable — verify the field mapping by viewing the contact's stored values; (3) the sequence template references {first_name} but the import used a custom variable name that does not match. Fix by correcting the source CSV, re-importing with correct mapping, or adjusting the sequence template variable name to match the imported field.
How do I handle unsubscribes when adding leads to Instantly?
Maintain a global suppression file containing all unsubscribed contacts from all previous campaigns. Before every import, cross-reference the new contact list against this suppression file and remove any overlapping email addresses. After importing, configure Instantly's global unsubscribe list so that future unsubscribes are added automatically. For CAN-SPAM compliance, unsubscribe requests must be honored within 10 business days per the FTC guidelines — re-importing previously unsubscribed contacts constitutes a compliance violation.
What happens to duplicate email addresses in Instantly?
Within the same campaign, Instantly deduplicates by email address: the second occurrence of a duplicate email in a single campaign upload is ignored and the contact receives the sequence only once. Across multiple campaigns, no deduplication occurs — the same email can be enrolled in Campaign A and Campaign B simultaneously and receive outreach from both. Deduplicate your CSV at the source before importing and maintain a cross-campaign contact tracking record to prevent the same contact from being in multiple concurrent campaigns.
How do I add custom variables to an Instantly lead import?
During the column mapping step after CSV upload, any column not matched to a standard Instantly field (email, first name, last name, company, job title) can be manually assigned to a custom variable. Click the dropdown in the Instantly field column for that CSV column and select Custom Variable 1, Custom Variable 2, etc. Reference these in your sequence template as {custom_1}, {custom_2}. Custom variables allow any data point from your CSV to be used as a personalisation field in the email sequence.
How often should I refresh my contact list for Instantly campaigns?
Contact data decays at approximately 25–30% annually in B2B markets. A contact list sourced 6 months ago has likely accumulated 12–15% invalid or stale addresses. Source a fresh verified contact list for each new campaign batch rather than re-using lists older than 6 months. For ongoing campaigns running against the same ICP, replace the contact list every 4–6 months with freshly verified contacts from the same target audience to maintain bounce rates below 3%.
What is the correct list naming convention for Instantly contact imports?
A reliable naming convention: [ICP Segment]-[Source]-[YYYYMM]. For example: VP-Sales-SaaS-Quarvio-202606. This format encodes the target persona, the data source, and the month of sourcing. It allows you to identify the exact data source and age of any list, trace campaign performance back to specific list batches, and confirm whether a list is within the 6-month usable window without checking the data.
Can the same contact list be used in multiple Instantly campaigns?
Yes. The same lead list can be assigned to multiple campaigns in Instantly. However, this means every contact in the list will receive outreach from all campaigns it is assigned to simultaneously. This is rarely intentional and typically results in a contact receiving multiple different email sequences at the same time from the same or different sending addresses. Assign each contact list to one campaign only, and create separate segmented lists for each campaign targeting a distinct audience.
The right leads make every Instantly campaign perform.
Verified B2B contacts are the foundation of every cold email campaign — bounce rates below 3%, email addresses that reach real inboxes, personalisation fields pre-populated and ready to map. Quarvio delivers verified contact lists by job title, industry, and company size, ready for direct upload to Instantly. One-time purchase, credits valid for 12 months, no subscription.