Skip to main content

How to generate AI variables from contact-level signals

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

  1. 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.

    Signals processing settings showing Push to campaign automatically and campaign selector

  2. 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.

  3. 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.

    Signals processing options for existing contacts and leads already in another campaign

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

  1. 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.

    Lead list showing Add menu with Create AI column selected

  2. 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.

    AI Column Templates modal with Create from scratch button highlighted

  3. 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.

    Add a new variable modal with icebreaker_from_signals entered and Save highlighted

Phase 3: Add the prompt and map the signal variables

  1. 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.

    Create AI variable panel showing selected variable, AI provider, and prompt editor

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

  1. 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.

  2. 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.

  3. 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.

Did this answer your question?