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
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.
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.
Instantly supports three methods for adding contacts to a campaign:
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:
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.
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.
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.
| 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 |
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.
What to check:
Open the CSV in a plain text editor (Notepad, TextEdit) — not Excel, which auto-formats values. Verify:
=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.
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.
@, addresses with spaces inside, addresses with double @ signs, or addresses with invalid domain formats (no TLD, etc.)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 outreachBenchmark: 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.
What to check:
Bounce risk is driven by two factors: data age and verification status.
Data age: Per Woodpecker's 2025 cold email benchmark study, 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.
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:
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.
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.
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.
After the 6-step pre-import hygiene checklist, the actual import into Instantly is straightforward.
In Instantly, click Leads in the left sidebar. You will see your existing lead lists and the option to add new leads.
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.
After upload, Instantly displays a column mapping screen showing:
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.
For any column in your CSV that does not auto-map to a standard Instantly field, map it manually to a custom variable:
{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)Before clicking Confirm, review the sample preview rows carefully:
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.
Click Confirm and Upload. Instantly processes the import and shows the final contact count. Verify:
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.
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.
| 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.
Instantly's deduplication operates at two levels, and understanding both prevents the most common duplicate-related problems.
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.
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:
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.
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.
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:
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.
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.
Contact data decays over time. Per Woodpecker's 2025 cold email benchmark study, 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.
Maintain a running suppression file that grows after every campaign:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Woodpecker's 2025 cold email benchmark study 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
| 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 |
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.