Enrich CSV and Excel lists with Leadsets
To enrich a CSV list with emails using Leadsets, connect your agent to the Leadsets MCP server (https://mcp.leadsets.ai) or call the REST API, then use the free Bulk enrich a CSV skill. It runs enrich_person as an async job, checks limits with get_usage before each batch, and labels every email verified, catch-all, unknown or invalid. Paid plans start at $29 a month.
What you can do with Leadsets and a CSV or Excel file
CSV is a plain-text format for tabular data, and Excel is Microsoft's spreadsheet application. Leadsets lists CSV and Excel on its integrations page as import and export: you bring a file of people, companies or emails, an agent or your code runs Leadsets tools on each row, and you get a file back with the new fields and their statuses.
The free, MIT-licensed skills in the skills library cover the common file jobs:
- Bulk enrich a CSV (
enrich_person,get_usage): enriches a whole file as an async job, checking your limits before each batch. Listed for CSV, Excel and Google Sheets. - Enrich companies from domains (
enrich_company): adds industry, headcount band, location and stack to a list of domains. - Clean a list before sending (
verify_email): verifies every address and returns send-safe, catch-all, unknown and invalid segments. - Catch-all segmenter (
verify_email): separates catch-all domains so you can send to them at lower volume instead of dropping them. - Find and enrich by name (
search_people,enrich_person): goes from name plus company to contact data, no LinkedIn URL needed. - Build an outbound prospect list: builds a new list from your ICP and exports it as CSV, Google Sheets or a LinkedCamp campaign.
On the way out, Leadsets exports CSV for any sequencer, and works with Instantly and Smartlead through skills and CSV.
How to connect it
The Leadsets site does not describe a plugin, add-in or setting inside Excel or any CSV tool. The connection happens on the Leadsets side, through the generic MCP or REST setup in the docs. Your file stays a file.
Option 1: an agent with the MCP server and a skill (Claude)
- Create a free Leadsets account. You get 1,000 records, one time, with no card.
- In Claude on the web or desktop, open Customize, Connectors, click + Add, then Add custom connector. Name it Leadsets and enter the MCP server URL
https://mcp.leadsets.ai. Click Continue, choose Sign in now, click Add and sign in. It uses OAuth, so there is no key to paste. - In a chat, click +, Connectors and switch Leadsets on. Ask "What's my Leadsets usage?" If the agent calls
get_usageand answers with your remaining balance, you are connected. - Add the skill: download the Bulk enrich a CSV folder and upload it in Claude under Settings, Skills, or clone the whole library with
git clone github.com/leadsets/leadsets-skills. - Give the agent your file and ask in plain language, for example "Enrich this list and add a verified work email and status for each row."
In Claude Code, add the server with one command:
claude mcp add --transport http leadsets \ https://mcp.leadsets.ai
In Cursor, open Settings, MCP (or edit ~/.cursor/mcp.json) and add a server named leadsets with the URL https://mcp.leadsets.ai and an Authorization: Bearer ls_live_… header. Full steps for each client are in the MCP setup docs.
Option 2: your own code over REST
- Copy your API key from the dashboard. Keys start with
ls_live_and should stay server-side. - Read the rows from your file in your script, then call
POST https://api.leadsets.ai/v1/people/enrichfor people orPOST /v1/companies/enrichfor domains, with the key as a bearer token. - To check existing addresses, call
POST /v1/emails/verify, single or batch. Bulk lists return an async job ID; pollGET /v1/jobs/{id}or receive results by webhook. - Write the results back as new columns: email, status, confidence and checked date.
The TypeScript and Python SDKs (npm i @leadsets/sdk, pip install leadsets) return typed responses and retry 429s for you.
Example: Maya cleans an event list before a campaign
Maya Chen runs revenue operations at Northwind Analytics (northwind.co). After a conference she has a CSV of 800 attendees: some rows have an email, some only a name and company. She is on the Pro plan.
She asks Claude: "Clean this list of 800 emails before I send. Flag catch-alls separately. For rows with no email, find the best work email." With the skills installed, the agent:
- Calls
get_usage(free) to confirm there is room in the five-hour enrichment window. Pro allows 15k enrichments per five hours. - Runs
verify_emailon rows that already have an address. - Runs
enrich_personon rows with only a name and company. Those emails come back already verified, so they are not checked twice. - Returns segments: verified, catch-all, unknown and invalid, each with a confidence score and checked date.
Maya loads the verified segment into Instantly with the push skill and CSV, keeps catch-alls in a separate file to send at lower volume, holds the unknowns, and drops the invalids. On Solo, with 1k enrichments per five hours and 5k a week, the same skill would pace a larger file across windows instead of stalling halfway.
What to watch for
- Records and requests. A record counts only when data comes back, so a row with nothing to enrich (a
404 not_found) uses no records. Every call still counts as one request; the request limit is five times the record allowance. Details are in limits and costs. - Verification counts toward enrichment. Standalone
verify_emailuses one enrichment per email. Emails fromenrich_personare already verified, so do not re-verify them. - Limits mid-file. Over a limit you get a
429with a Retry-After time, and the blocked call counts against nothing. Forweekly_limit, resume afterresets_ator use an async job. - Retries. Send an
Idempotency-Keyon paid calls so a retried row is never counted twice. Keys last 24 hours. - Keep the status column. Catch-all means the domain accepts everything, so no one can confirm the mailbox. Unknown means the server gave no clear answer. Neither is ever labelled valid; see how the verification waterfall works and what a catch-all email is.
- Free plan. The 1,000 free records are shared across search and enrichment and do not refill. Bulk async list jobs are listed on paid plans. When free records run out, the API returns
402 free_records_exhausted. - Your uploaded file. Under the DPA you are the controller of lists you submit. Leadsets does not use them to train models or add them to its dataset, and deletes them within 30 days after your subscription ends.
What it does not do
- No phone numbers. Leadsets returns work emails, US personal emails on paid plans, roles and company data. Phone columns stay empty.
- No sending and no CRM. Leadsets feeds your sequencer or CRM; it does not send email or store your pipeline.
- No in-spreadsheet add-in described. The site lists import and export, not a plugin inside Excel.
- No scraping on Free.
scrape_companyandscrape_jobsneed scrape units, an add-on on paid plans from $9 for 1,000 units. Compare plans on the pricing page. - No resale. Records are licensed for your own prospecting. Rebuilding or reselling the data, or embedding it in a product you sell without a written agreement, is not allowed.
- No 100% promise. Leadsets publishes its benchmark method and labels uncertainty instead of guaranteeing every row.
Questions and answers
How do I enrich a CSV list with emails using Leadsets?
Connect your agent to the Leadsets MCP server at https://mcp.leadsets.ai and install the free Bulk enrich a CSV skill, or call the REST API from your own script. The skill runs enrich_person as an async job and checks your limits with get_usage before each batch. Each email comes back labelled verified, catch-all, unknown or invalid.
Does Leadsets have an Excel add-in?
The Leadsets site lists CSV and Excel as import and export and does not describe an add-in inside Excel. You work with the file through an agent using the MCP server and skills, or through your own code using the REST API and SDKs. Results are written back to a file you can open anywhere.
How many rows can I enrich at once with Leadsets?
It depends on your plan's fair-use limits. Solo allows 1,000 enrichments per five hours and 5,000 per week, Pro 15,000 and 75,000, Team 150,000 and 750,000, and Max 225,000 and 1,125,000. Larger files can be split across windows or run as async jobs.
Do I pay twice to verify emails that Leadsets enrichment returns?
No. Every email returned by enrich_person is already verified, with no second tool and no second bill. Standalone verify_email calls, for addresses already in your file, count toward your enrichment limit.
What should I do with catch-all and unknown emails in my CSV?
Leadsets suggests sending to catch-all addresses at lower volume rather than dropping them, and treating unknown as unconfirmed. Invalid addresses bounce and are never served as contact emails. Keep the status column so your sequencer can segment by it.
Can I try CSV enrichment on the Leadsets free plan?
Yes, within limits. The free plan gives 1,000 records once, with no card, shared across search and enrichment, and the free skills work on the free key. Bulk async list jobs are listed on paid plans, which start at $29 a month.
Go deeper