THIS ARTICLE IS FOR: All ListKit customers
Stage: Optimization
Owner: CS
Last updated: Aug 2026
TL;DR
Instead of sending generic templates, you can use Claude to generate a unique, custom pitch for every single lead in your list
Export your leads from ListKit, drop the CSV into Claude with your script and examples, and Claude visits each company website to generate a custom line for every contact
Always run the first 10 outputs before running the full list — this saves time and tokens if the output needs adjusting
Import the enriched CSV back into ListKit, map the personalized column to a custom field, and use it as a variable inside your campaign sequence
You need an Anthropic API key and the Python and JSON scripts — download them here: https://drive.google.com/drive/folders/1hi7oXUbiSole6PruJhyv0XCNnvw5f2aJ
Why this matters / When you'd use this
Generic cold email templates get ignored. The more your email looks like it was written specifically for the person reading it, the more likely they are to reply, and reply with genuine interest.
Most people think highly personalized outreach at scale requires expensive tools like Clay. It does not. With ListKit leads, Claude, and a Python script, you can generate a completely unique pitch for every contact in your list, at a fraction of the cost and without leaving your workflow.
Christian, ListKit's co-founder, has used this approach internally and seen reply rates significantly higher than standard templated campaigns. This article walks through exactly how to do it.
What you need before you start
1. A ListKit leads export
Export your leads from ListKit as a CSV. Make sure the export includes company website URLs, Claude uses these to research each company and generate a custom pitch.
2. The Python and JSON scripts
Download the two files here:
https://drive.google.com/drive/folders/1hi7oXUbiSole6PruJhyv0XCNnvw5f2aJ
These files contain the personalization script and the context Claude needs to run the enrichment. You cannot run this process without them.
3. An Anthropic API key
Claude Code requires an API key from Anthropic to run the personalization script. You can get one at console.anthropic.com. Note that running the script uses Claude tokens, always test with the first 10 rows before running the full list to avoid unnecessary costs.
4. Claude Code
Download Claude Code at claude.ai/code if you do not already have it installed.
Step 1: Identify what to personalize in your script
Before you run anything, look at your cold email script and identify one specific line that can be customized to each prospect. This is the line Claude will replace with something unique to their business.
The personalization should be specific enough to show you understand their business, but not so complex that it requires deep research. Good examples:
For a viral video service: "videos like a factory technician filming a day in the life where your software schedules every job automatically"
For a lead generation service: "we can get you 10 to 15 accounting firms that need bookkeeping help"
For a logistics company: "we can ship and store your medical devices and syringes"
The more specific and creative your examples, the better Claude's output will be. Write 2 to 3 examples of what a great personalization looks like for your offer, Claude uses these to understand the pattern and replicate it across your full list.
Step 2: Drop your CSV into Claude Code and run the script
Open Claude Code and drag your ListKit CSV export into the window. Load the Python and JSON scripts from the files you downloaded.
Give Claude your cold email script with the placeholder text replacements and your 2 to 3 examples of what a good personalization looks like. Claude will then visit each company website in your leads list and generate a custom replacement line for every contact.
Important: always run the first 10 rows before running the full list.
Running thousands of rows at once is expensive in tokens and time. Run 10 first, review the outputs, and make sure they look right before giving Claude the green light to run the full list. If the output is off, adjust your examples and run 10 again before scaling up.
Once the first 10 look good, tell Claude to run the full list. Depending on the size of your list this can take some time, Claude is visiting every website individually.
Step 3: Review your enriched CSV
When Claude finishes, you will have a CSV with a new column containing a unique personalized line for every contact in your list. Review a sample of the outputs to make sure the quality is consistent before importing into ListKit.
Step 4: Import the enriched CSV into ListKit
Go to Email Engine and create a new campaign or open an existing one. When importing your leads, upload the enriched CSV. During the column mapping step, map the personalized column to a custom field, for example, personalized_email.
This tells ListKit to treat that column as a variable that can be pulled into your email sequence.
Step 5: Add the custom variable to your campaign sequence
Inside your campaign sequence, insert the custom field variable, personalized_email, at the point in your email where you want the personalized line to appear.
When you preview your emails, you will see each contact's unique personalization pulled in from their row in the CSV. Every email in your campaign will look completely different to every prospect, custom to their specific business, written in a way that shows you did your research.
Expected outcome
Every contact in your list receives a cold email with a line that appears to have been written specifically for them, referencing their industry, their business type, or something specific about what they do. Reply rates from personalized campaigns significantly outperform generic templates. The more relevant the personalization, the more high-intent the replies.
Frequently asked questions
Do I need to know how to code to use this?
Basic familiarity with running a Python script helps, but Christian's scripts are designed to be straightforward. The README file in the download folder walks through how to use them. If you get stuck, reach out to the team in the VIP Slack community.
How much does it cost to run the Claude personalization?
Costs depend on the size of your list and the length of your script. Always run the first 10 rows first to validate the output before committing to a full run. Costs are generally very low compared to alternatives like Clay.
Where do I get the Python and JSON scripts?
Download them here: https://drive.google.com/drive/folders/1hi7oXUbiSole6PruJhyv0XCNnvw5f2aJ
What if Claude's output looks off on the first 10 rows?
Adjust your example personalizations to be more specific and clear about what a good output looks like. The quality of Claude's output is directly tied to the quality of the examples you give it. Run 10 again after adjusting before scaling up.
Can I use this for any offer?
Yes. The approach works for any B2B offer. The key is identifying one specific thing in your script that can be customized to each prospect, lead types, product use cases, industry-specific outcomes, or anything else that shows you understand their business.
Who do I contact if I need help setting this up?
Reach out in the ListKit VIP Slack community or contact support at [email protected]. You can also DM Christian directly in the community.