Use this workflow to turn contact-level signals into timely, personalized outreach. You’ll connect a watchlist to a campaign, generate an AI icebreaker from signal data, and prepare your sequence so new leads can be contacted with much better timing and relevance.
Learning Objective
By the end of this tutorial, you’ll know how to automatically send contact-level signals into a campaign, create an AI variable that uses signal data, and use that output in your sequence for personalized outreach.
Why This Matters
Contact-level signals help you reach out when there is a real reason to start a conversation. Instead of sending generic outbound messages, you can react to actions like a LinkedIn topic interaction and use AI to generate a relevant icebreaker at the moment the lead enters your campaign.
Prerequisites
You should already know how to create a watchlist and a campaign in lemlist.
You should already have a contact-level signal configured, such as LinkedIn topic signals.
You should already have a campaign with at least one outreach step planned, such as an email or LinkedIn message.
You should understand that this workflow is currently designed for contact-level signals, not company-level signals.
Important: This workflow is best suited for contact-level signals such as LinkedIn topic signals, job change, new hire, competitors, or new connections. Company-level signals follow a different logic.
Core Lesson — Step-by-Step Workflow
Phase 1: Link your watchlist to a campaign
Open the watchlist’s Signals processing step.
In your watchlist setup, go to Signals processing and choose Push to campaign automatically. This tells lemlist to send every new matching signal into a campaign instead of leaving it for manual review.Select the campaign that should receive new signal-based leads.
After enabling automatic push, choose the campaign from the dropdown. This is the destination campaign where new leads and their signal variables will be added.Review your import handling options before moving on.
Decide whether to include contacts already linked to existing signals and whether contacts already present in another campaign should be imported. These settings matter because they control duplicates and how strictly you want to separate campaigns. When you’re done, click Next.
When a signal is detected on an existing contact, or when a contact is created from that signal, lemlist adds the signal data as variables on the lead. That is what makes AI-powered personalization possible in the next steps.
Phase 2: Create an AI column for your signal-based icebreaker
Open the campaign lead list and create a new AI column.
Go to your destination campaign, open the Lead list, click Add, then select Create AI column. This creates a reusable AI field that can generate personalized text for each lead.Start from scratch.
In the AI Column Templates window, click Create from scratch. This gives you full control over the prompt so you can use your signal variables and tailor the output to your use case.Name the AI variable.
Enter a clear name such as icebreaker_from_signals, then click Save. A descriptive name makes it easier to find and insert later in your campaign sequence.
Phase 3: Add the prompt and map the signal variables
Configure the AI variable.
Select your new AI variable, choose the AI provider, and paste the prompt into the Prompt field. This is where you define how the model should transform raw signal data into a natural email icebreaker.
For LinkedIn topic signals, you can use a prompt like this:
You are a skilled sales strategist with over 10 years of experience in crafting effective cold emails for prospecting. You excel at personalizing icebreakers to align with the prospect's needs, interests, and their company's values, ensuring a higher response rate.
Write an email icebreaker for the following contact who liked or commented a post from a profile they monitor in a watchlist:
Name of the author of the LinkedIn post:
{{signalLinkedInTopicPostAuthorName}}Reaction type of the contact:
{{signalLinkedInTopicInteraction}}Comment on the post (if any):
{{signalLinkedInTopicCommentContent}}Date of the post:
{{signalLinkedInTopicPostDate}}Company name of the contact:
{{companyName}}
For personalization:
Do not copy or closely paraphrase any sentences or phrases from the company description
Mention the author's name (first name and last name), ex: "I saw you liked Charles Tenot's last post about..."
Mention the date not as absolute date but as relative and vague compared to today (ex: "from a few days ago")
Mention the fact whether the lead liked or commented the post to make it natural and like we really saw the engagement itself
If the user commented, analyze whether the comment can be used in the icebreaker. Don't mention the comment if it has low value, don't use any emoji if they were used in the comment
Don't use the word "engagement", or other words that may seem not natural
Infer a subtle, relevant reason for reaching out, or express a genuine curiosity or connection inspired by the description
Don't assume we know the topic of the post, we don't
Guidelines:
Tone: natural, conversational, warm, light, casual, friendly
Language: plain, simple English; no sales clichés, superlatives, buzzwords, or adverbs. Keep it SIMPLE
Content: no unnecessary fluff (e.g., "I hope you are well"); no unrelated content; never assume details about the prospect's work, expertise, or challenges, only reference what is explicitly stated; don't advertise the sender's company; do not include greetings
Formatting: do not include bold text, emojis, or any distracting formatting elements
Words/sentences to never use: hypothetical questions (e.g., "what if..."); over-positive words (e.g., "fascinating", "admire", "amazing", "impressive", etc.); formulaic statements that feel copy-pasted (e.g., "I noticed your focus on...", "I saw how you're doing...")
Output the icebreaker only, no other information
{{signalMergersAcquisitionsAcquirerName}}
This prompt uses variables captured from the signal itself. In the LinkedIn topic use case, that can include:
{{signalLinkedInTopicPostAuthorName}}{{signalLinkedInTopicInteraction}}{{signalLinkedInTopicCommentContent}}{{signalLinkedInTopicPostDate}}{{companyName}}
Depending on the signal type, other variables may also be available. The exact variable set depends on the signal that created or updated the lead.
Phase 4: Turn on autorun and use the output in your sequence
Enable autorun for new leads.
In the AI variable settings, turn on Auto run on new leads. This makes sure the AI icebreaker is generated automatically as soon as a new signal-based lead is added to the campaign.Insert the AI variable into your first outreach step.
In your sequence, use the AI variable where you want the personalized intro to appear, for example:
Hello {{firstName}},{{icebreaker_from_signals}}
This keeps the outreach both scalable and timely.Decide whether to fully automate or add a manual review step.
If you want speed and scale, let the campaign launch automatically. If you want more quality control, make the first step manual so a rep can quickly review and adjust the icebreaker before sending.
Best practice: Start with a manual first step while refining your prompt. Once the output quality is consistent, you can move to more automation.
Practical Application / Real-Life Example
Here’s what this workflow looks like in practice:
A prospect likes or comments on a LinkedIn post from someone monitored in your watchlist.
The signal is detected and the prospect is automatically pushed into your campaign.
lemlist adds the signal variables to the lead record.
Your AI column generates a custom icebreaker from those variables.
Your first sequence step uses that output in an email or LinkedIn message.
An example output could look like this:
Commenting on John Johnson's post from a few days ago about invoicing, your reaction stood out. Felt like a good reason to reach out.
You will usually want to refine the prompt over time so the output better matches your tone, market, and offer. The closer the prompt is to your business context, the better the result.
Troubleshooting & Pitfalls
Issue: New signals are not entering the campaign
Root cause: The watchlist is not set to push signals automatically, or no campaign was selected.
Fix:
Open the watchlist
Go to Signals processing
Confirm Push to campaign automatically is selected
Make sure a destination campaign is chosen
Issue: The AI column returns empty output
Root cause: The prompt may reference variables that are missing for that signal type, or autorun is not enabled.
Fix:
Review the variables used in the prompt
Confirm the leads actually came from the expected signal type
Enable Auto run on new leads
Test the prompt on a lead with known signal data
Issue: The icebreaker sounds unnatural
Root cause: The prompt is too generic or too close to source wording.
Fix:
Tighten the instructions in your prompt
Remove phrasing that feels too formal or sales-heavy
Add clearer rules about tone, wording, and what to avoid
Review a sample of outputs before scaling
Issue: Leads are not imported because they already exist elsewhere
Root cause: Your campaign conflict settings are blocking leads already present in another campaign.
Fix:
Go back to the watchlist’s Signals processing step
Review the setting for leads already in another campaign
Choose the handling option that matches your workflow
Issue: The sequence sends too fast without review
Root cause: Full automation is enabled before the prompt is fully optimized.
Fix:
Make the first step manual
Review the generated icebreakers
Adjust the prompt based on real outputs
Only then switch to broader automation
Summary
This workflow helps you combine signal-based timing, AI personalization, and campaign automation in one setup. Once configured, new contact-level signals can automatically create or update leads, generate a relevant icebreaker, and feed that message directly into your campaign sequence.






