Running the pipeline

Uploading contacts

Contacts enter Kai through a CSV upload. Think of your file as a company list with a contact inside each company, not just a people list. The richer the company data, the better Kai's research and the sharper the outreach it writes.

What Kai actually needs

Kai's research engine starts with the company, not the person. It crawls the company website, pulls recent news, reads the tech stack signals, and builds a picture of what this business is doing right now. Only then does it personalise the outreach to the individual. So while the contact fields (name, email, title) are required to send, the company fields (website, signals) are what make the sequences worth sending.

Company URL is the most important optional field. Without it, Kai can only search by company name, which is slower and less accurate. With it, Firecrawl crawls the site directly and finds recent product launches, published reports, job listings, and content that becomes the hook in Email 1. Always include it if you have it.

Required and recommended columns

FieldRequiredColumn names Kai recognises automatically
First nameYesfirst_name, First Name, firstname, fname
Last nameYeslast_name, Last Name, lastname, lname
EmailYesemail, Email, email_address, work_email
CompanyYescompany, Company, company_name, Account, Organization
Job titleYestitle, Title, job_title, position, role
Company websiteStrongly recommendedcompany_url, website, domain, Website, company_website
LinkedIn URLRecommendedlinkedin_url, LinkedIn, linkedin, profile_url
PhoneOptionalphone, Phone, mobile, phone_number

Kai's column mapper reads your CSV header row and matches columns to the fields above automatically. If a column name is not on this list, Kai treats it as an intent signal rather than discarding it, which is the right default for most exports from tools like Clay, Apollo, or HubSpot.

Intent data

Intent signals are extra pieces of information about a prospect that indicate buying intent, relevant behaviour, or useful context. They are not required, but when present they make Kai's outreach meaningfully more specific.

Examples of intent signals that belong in your CSV:

  • Technology used: Marketo, Pardot, HubSpot
  • Funding event: Series B, $12M raised Q1 2026
  • Hiring signal: hiring demand gen manager
  • Content engagement: downloaded AI report, visited pricing page
  • Competitor used: Turtl, Foleon competitor
  • ICP score or tier: A, 87, tier 1
  • Job change: joined 3 months ago
  • Event attended: Content Marketing World 2025

How to include intent data in your CSV

Add intent signals as extra columns in your CSV. The column name becomes the label and the cell value becomes the signal. You do not need to use special names: Kai's column mapper recognises intent-flavoured words automatically (including: intent, competitor, trigger, signal, visit, score, mover, funding, tech, stack, tool, technology, industry, event, activity, engage, source, stage, health) and pre-selects Intent signal in the column type dropdown.

For any column Kai does not recognise as a standard field, it defaults to Intent signal rather than discarding the data. This means if your Clay or Apollo export has extra enrichment columns, they will all carry through into Kai's research context without any extra configuration.

Column mapping 8 columns detected
first_name First name
work_email Email
company_website Company URL
technology_used Intent signal
funding_round Intent signal
icp_tier Intent signal

Standard fields mapped automatically. Intent signals shown in indigo. You can change any column type using the dropdown.

The column mapping screen. Standard fields are matched automatically. Columns with intent keywords (technology, funding, icp) are flagged as Intent signal. Any unrecognised column defaults to Intent signal rather than being dropped.

Changing a column type manually

In the column mapping screen, every column has a dropdown showing its detected type. You can change any column from Intent signal to Skip (to exclude it entirely) or to one of the standard fields if Kai mapped it incorrectly. You can also change a standard-mapped column to Intent signal if, for example, your export has a column called "notes" that contains contextual information you want Kai to use.

How Kai uses intent data

Intent signals are stored against the contact and passed to Claude as part of the research context when generating the sequence. If a contact has a funding signal, Claude may reference the round in the hook or angle the value proposition toward growth. If they are using a specific technology, Claude may position Foleon's integration story or contrast with that tool. The signals do not guarantee a specific angle, but they give Claude the raw material to write something more timely and relevant than generic copy.

Intent signals are visible in the contact card in Kai, shown as badges below the contact's name and title. This lets you see at a glance what signals Kai had available when it wrote the sequence.

Uploading the file

1
Open your campaign

Go to Campaigns in the sidebar and select the campaign you want to add contacts to.

2
Click "Upload CSV"

The button is in the top right of the campaign contact list. This opens the file picker and column mapping screen.

3
Review the column mapping

Check that standard fields have been mapped correctly and that intent columns have been detected. Change any that are wrong using the dropdown on each column row.

4
Click Upload

Contacts are added with status Pending. Research and sequence generation start when you click Run in the campaign view.

Duplicate handling

Kai checks for duplicate email addresses within the same workspace before inserting a contact. If a contact with that email already exists in the campaign, the upload skips them silently. Contacts in different workspaces are not treated as duplicates.

Status flow after upload

  • Pending -- Uploaded, not yet researched
  • Researched -- Firecrawl has crawled the company and Claude has distilled the data
  • Pending Approval -- Sequence written, waiting for review in Approvals
  • Approved -- Reviewed and approved, ready to push
  • Injected -- Pushed live to Lemlist, sequence running
Run one contact first. Before running your full list, run a single contact and check the sequence in Approvals. If the research hooks are specific and the copy quality is good, run the rest. If something looks off, it is easier to diagnose with one contact.
Previous Connecting tokens in Lemlist