Import an email list and turn it into a running campaign
By the Yirlo team · Product details checked against the app
Save your spreadsheet as a CSV holding email, first name, last name, company domain and job title, then drop it on Campaign > New campaign > Import leads to bring an email list into Yirlo. Duplicates and contacts on your do-not-contact lists are skipped, each address is verified, and every person receives an individually written opening message before the campaign launches. Uploading costs nothing, and the charge is roughly five cents per delivered email. A single file may contain as many as 30,000 rows.
How to import your lead list, step by step
The whole job takes a few minutes of spreadsheet work and one upload. Nothing needs configuring on the sending side, because Yirlo sends from mailboxes and domains it already manages.
Here is the order that works best for a cold email list or a bulk email from Excel.
- Open your spreadsheet and keep one row per person.
- Arrange the columns: email, first name, last name, company domain and job title. A LinkedIn URL column is optional.
- Save or export the sheet as CSV (UTF-8 if your program asks which kind).
- In Yirlo, go to Campaign, choose New campaign, then Import leads, and drop the file in.
- Review the result. Yirlo creates a campaign made only of the people in your file and starts it, with a downloadable report listing every row it skipped and the reason.
Prepare the file: from Excel or Google Sheets to CSV
Most import problems begin in the spreadsheet, so a few minutes of cleanup pays off. Keep a single header row at the top, and delete blank rows, notes, merged cells and extra tabs, since a CSV holds one sheet only.
If your list lives in a newsletter tool or a CRM, export the contacts as a CSV and rename the columns to match the table below. Exports from those tools often carry only an email and a name, so you may need to add the company domain and job title before the file is useful for outreach.
Use the website domain for the company column, for example acme-example.com, rather than the company's marketing name. The domain tells Yirlo which company the person works at, and it is what the first email is built around.
| Column | What to put in it | Example (illustrative) |
|---|---|---|
| The person's work address, one per cell, no spaces | [email protected] | |
| First name | Given name only, in normal capitalization | Jane |
| Last name | Family name only | Doe |
| Company domain | The company's website domain without extra text | acme-example.com |
| Job title | Their current role as you know it | Head of Operations |
| LinkedIn URL (optional) | The link to their profile | linkedin.com/in/example |
What gets checked and skipped on import
Before anything is written or sent, Yirlo goes through the file row by row and skips three kinds of rows.
The first is duplicates: the same person listed twice in the file. The second is people already in your project, so nobody receives a second campaign because they sit in two lists. The third is anyone on your do-not-contact lists, such as past unsubscribes and suppressed addresses.
Every skipped row appears in a downloadable report with the reason beside it. That report is useful for housekeeping: if 300 of 2,000 rows were skipped as already in the project, for example, you know the list overlaps heavily with earlier outreach and you can decide whether it deserves a fresh source.
The email check that runs before sending
A message goes out once its address has also passed the email check. Each address is verified before it is emailed, and only addresses that pass the check are sent to.
This matters for lists that have aged. A spreadsheet exported from a conference two years ago will contain people who changed jobs, domains that were retired and typos from hand entry. Mailing those addresses damages the reputation of the mailbox you send from, which affects every later message. Sending only to checked addresses protects the pre-warmed mailboxes Yirlo manages for you.
You pay for emails sent, so addresses that do not pass the check do not become sent emails. A rough way to plan: if you upload 1,000 rows and some fail the check, you are charged for the ones that were actually emailed.
The campaign your import starts
The import creates a single campaign containing just the people in your file. For each person, Yirlo writes a first email that refers to their own company, using the domain and job title you supplied. It does not send one template to everyone.
Yirlo emails a single person at each company, so trim your list to one name per firm. If your sheet lists three people at one firm, keep whoever is most likely to own the problem you solve. Multiple contacts per company is coming soon.
Once the campaign is running, control stays with you. In the app you can change the campaign, its audience or any email, browse the inbox, and set a daily budget, which paces a 20,000-row file over time rather than sending everything at once. Results land in your inbox three times a week, and Yirlo gives campaigns that earn replies a larger slice of daily spend while pausing the weak ones.
What an import costs: an example
Importing is free. Sending is billed at roughly $0.05 per email from prepaid credit, with pricing free of subscriptions and seat fees. Finding leads and writing emails add nothing extra, so your file is the sole input.
The numbers below are an example to show how the math works, not a promise of results.
| Step (example) | Rows or emails | Cost |
|---|---|---|
| Rows in your CSV | 2,000 | Free to import |
| Skipped as duplicates or do-not-contact | 150 | Free |
| Addresses that fail the email check | 100 | Not sent |
| Emails sent | 1,750 | About $87.50 |
Bulk email from Excel versus a newsletter tool
Newsletter platforms such as Mailchimp or Constant Contact are designed for people who opted in to hear from you. Their import screens usually ask you to confirm permission, and their rules reflect that. A cold email list is a different situation: these are business contacts who have not heard from you yet, so the message has to be relevant to the person and their company.
With a plain mail merge, one identical paragraph reaches both a CFO at a 40-person firm and an operations lead at a 4,000-person one. Yirlo instead writes every opening email about the recipient's own company.
Keep your newsletter tool for customers and subscribers. Use the import for prospects.
Mistakes to avoid with an imported list
- Uploading a purchased or very old list without looking at it. Sample 20 rows first and remove anything that looks wrong.
- Leaving the company domain blank or filling it with a company name. The first email depends on it.
- Mixing buyers and non-buyers in one file. A campaign of just one kind of person produces clearer reply data, so split by segment, for example one file for finance leaders and one for IT managers.
- Including shared inboxes such as info@ or sales@. A named decision maker gets a more personal email.
- Pasting names in capitals or with the title in the name cell. Clean casing makes the greeting read like a person wrote it.
- Uploading a file with unusual characters saved in the wrong encoding. Names such as Müller or García can turn into garbled text, so choose UTF-8 when saving the CSV.
- Sending the whole list on day one. Set a daily budget and let the results guide how fast to go.
Example lists and the angle each first email takes
The strongest imports come from lists where you already know something about the people. A few realistic cases follow.
A webinar no-show list of 600 people: the first email can acknowledge the topic they registered for and offer the recording or a short call. A list pulled from an old CRM of lapsed trial users: the email can reference their company and ask what stopped them from continuing. A trade show badge scan of 1,200 contacts, for example: the email can mention the event and tie your product to the job title on the badge.
A list you built yourself of 300 target accounts in one niche, such as regional logistics firms, works well when you already know the buying trigger. For each one, the email speaks to that company's business. Common objections to expect in replies include bad timing, an existing vendor and a request for pricing, and Yirlo labels these so you can see them at a glance.
Another source of leads is the crowd engaging with your own LinkedIn or X content. Open the same Import tab, drop in the link, and Yirlo collects each person who left a comment or reply. Your prepaid balance covers the cost at $0.04 per person on LinkedIn and under a cent per person on X, and every address gets verified before any email goes out.
After the import: replies, CRM and API
The moment someone shows interest, you get an email flagging a hot lead, and the app inbox lets you open any thread.
For regular imports, skip the screen: the API takes a file at POST /agentapp/campaigns/import (docs at yirlo.com/api-docs), and the MCP server provides import_leads and get_import, so an assistant such as Claude Code or Cursor can upload a file and check the outcome. Coming soon: your own domains and mailboxes as the sending source. For now, every email leaves from the pre-warmed mailboxes Yirlo sets up and manages.
Questions
How do I import an email list from a CSV file?
Save your sheet as a CSV with email, first name, last name, company domain and job title columns. In Yirlo, go to Campaign, New campaign, then Import leads, and drop the file in. Yirlo skips duplicates, people already in the project and do-not-contact addresses, then starts a campaign for everyone else who passes the email check.
How do I send a bulk email from Excel?
Since Excel cannot send outreach by itself, lay out your contacts in columns and save the sheet as a CSV. After you upload it to Yirlo, each person gets an individually written first email rather than one merged message, sent from managed, pre-warmed mailboxes.
Is there a CSV template I should follow?
Give the file a single header row: email, first name, last name, company domain and job title, with LinkedIn URL as an optional extra column. Each row should be one person, and each company should appear once. The file preparation table above describes what belongs in every column.
Why does a tool say an email address is invalid?
Typical causes are a missing @, a trailing space, a typo in the domain, two addresses in one cell or a mailbox that no longer exists. Open the file, use find and replace to trim spaces, and fix obvious typos. In Yirlo, every address passes an email check before sending, so only valid ones are emailed.
Can I import contacts with tags or groups?
The import file carries contact details rather than tags. Each import becomes its own campaign, so the practical way to group people is to upload one file per segment, for example one for finance leaders and one for IT managers. The lead CSV export includes the campaign name, so you can still sort results by segment.
Why does UTF-8 encoding matter?
UTF-8 keeps accented and non-English characters intact, so a name like Zoë or Müller reaches the first email as written. If you save from Excel, pick the CSV UTF-8 option when it is offered. Open the saved file once to confirm the names look right before uploading.
How many contacts can I import at once?
A single file can hold up to 30,000 rows. Larger lists can be split into several files, ideally by segment. The daily budget you set controls how many emails go out each day.
Can I move contacts over from Mailchimp or Constant Contact?
Yes. Export the contacts as a CSV from either tool, rename the columns to match the layout above, and add the company domain and job title if they are missing. Keep in mind that a newsletter audience was built for opt-in mail, so check that these people are relevant business prospects before running outreach.
How much does it cost to import a lead list?
Uploading costs nothing. Sending runs about five cents per email from prepaid credit, without a subscription or seats. As an example, 1,000 sent emails cost roughly $50.
Can I import leads through the API?
Yes. Post your file to /agentapp/campaigns/import with your API key, and use the MCP tools import_leads and get_import if you work from an AI assistant. The API documentation is at yirlo.com/api-docs.