Write a personalized first message grounded in verified
contact data and live account signals. Verify first.
Write second. Never use a template. Never send to a
contact who has departed.
Input
The user will provide via $ARGUMENTS:
- Contact: name and company, email, or LinkedIn URL
(one contact or a list of up to 20)
- What you sell: one sentence — product and the
problem it solves
- Signal: [optional] — if the user knows the trigger
event, pass it here. If not, the skill finds it.
- Target outcome: [optional] — default is
"book a discovery call"
- Tone: [optional] — direct / conversational / formal
Default is calibrated by seniority automatically.
If contact is missing, ask once.
If what you sell is missing, ask once.
For a list, process each contact individually.
Never write a message before verifying the contact.
Workflow
CONTACT VERIFICATION
Resolve and verify each contact via Lusha:
- Current title and company confirmed
- Tenure in current role
- Verified email address
- Seniority level: C-suite / VP / Director /
Manager / IC
- Flag departed contacts — do not write message,
ask user for updated contact
- Flag title changes — adjust message angle
to reflect new role
SIGNAL PULL
For each verified contact, check for live signals
at their account:
- Executive moves in last 30 days
- Funding events in last 90 days
- Hiring surges in target function
- Intent signals above score 60
- Tech stack changes relevant to product
- Rank signals by strength and recency
- If no signals found: note it and proceed
with role and tenure as the hook instead
HOOK SELECTION
Select the strongest opening hook:
- Priority 1: stacked signals — multiple events
at same account create urgency
- Priority 2: single strong signal — specific,
time-stamped, tied to the contact's role
- Priority 3: recent hire — tenure under 6 months
creates a natural opening
- Priority 4: role and relevance — no signal but
strong ICP fit and relevant outcome to reference
TONE CALIBRATION
Calibrate message tone by seniority:
- C-suite: under 80 words, outcome-first,
no product features, one direct ask
- VP: under 100 words, peer-to-peer, signal-led,
one specific ask
- Director / Manager: under 120 words,
problem-led, practical, one low-friction ask
- Override with user-specified tone if provided
WRITE THE MESSAGE
For each contact:
- Subject line: specific, references signal or
account where possible, under 8 words
- Body: opens with the hook, connects to a
relevant outcome, closes with one ask
- CTA: specific and low-friction — not
"let me know if interested"
- Under 120 words total for body copy
BATCH OUTPUT
For a list of contacts, return each message
individually — do not aggregate or average.
Flag any contacts that could not be verified
separately at the end.
PRIVACY RULES
- Mask contact name to initials in output
- Show email domain only: j.k@[company].com
- Mask phone if shown: +1 415 555 ••••
- Tag: Contact confirmed live via Lusha
connector, [date]
Output Format — single contact
Contact verified
| Field |
Value |
| Name |
[initials] |
| Title |
|
| Tenure |
|
| Seniority |
|
| Company |
|
| Verified email |
[domain only] |
| Status |
Active / Departed / Title changed |
Contact confirmed live via Lusha connector, [date]
Signal used
Hook selected: [signal / recent hire / role and
relevance]
Message
Subject: [subject line]
[body copy]
[CTA]
Word count: [X] words
Tone: [direct / conversational / formal]
Hook: [what the opening is based on]
Output Format — batch
Return individual message blocks for each contact
in the same format as above.
After all messages, return a summary table:
| Contact |
Company |
Signal used |
Hook type |
Status |
Flag unverified or departed contacts separately:
Contacts not messaged:
- [Contact] at [Company] — [reason: departed /
not found in Lusha]
Recommended action: [find new contact /
verify manually / skip]
Title-changed contacts are messaged, with the angle
adjusted to the new role, and flagged in the summary
table.
From Lusha's Campus plays library: https://www.lusha.com/campus/plays/outreach-personalization-skill/
1---2name: outreach-personalization3description: Use this skill for the first touch on a signal-triggered prospect - a signal fired, you have the contact, you need the message. Verifies the contact via Lusha, pulls live account signals, and writes one personalized first message per contact, grounded in what is actually happening at their company. Never a template, and never a message to a departed contact. Requires a Lusha connection.4---56Write a personalized first message grounded in verified7contact data and live account signals. Verify first.8Write second. Never use a template. Never send to a9contact who has departed.1011## Input1213The user will provide via $ARGUMENTS:1415- Contact: name and company, email, or LinkedIn URL16 (one contact or a list of up to 20)17- What you sell: one sentence — product and the18 problem it solves19- Signal: [optional] — if the user knows the trigger20 event, pass it here. If not, the skill finds it.21- Target outcome: [optional] — default is22 "book a discovery call"23- Tone: [optional] — direct / conversational / formal24 Default is calibrated by seniority automatically.2526If contact is missing, ask once.27If what you sell is missing, ask once.28For a list, process each contact individually.29Never write a message before verifying the contact.3031## Workflow32331. CONTACT VERIFICATION34 Resolve and verify each contact via Lusha:35 - Current title and company confirmed36 - Tenure in current role37 - Verified email address38 - Seniority level: C-suite / VP / Director /39 Manager / IC40 - Flag departed contacts — do not write message,41 ask user for updated contact42 - Flag title changes — adjust message angle43 to reflect new role44452. SIGNAL PULL46 For each verified contact, check for live signals47 at their account:48 - Executive moves in last 30 days49 - Funding events in last 90 days50 - Hiring surges in target function51 - Intent signals above score 6052 - Tech stack changes relevant to product53 - Rank signals by strength and recency54 - If no signals found: note it and proceed55 with role and tenure as the hook instead56573. HOOK SELECTION58 Select the strongest opening hook:59 - Priority 1: stacked signals — multiple events60 at same account create urgency61 - Priority 2: single strong signal — specific,62 time-stamped, tied to the contact's role63 - Priority 3: recent hire — tenure under 6 months64 creates a natural opening65 - Priority 4: role and relevance — no signal but66 strong ICP fit and relevant outcome to reference67684. TONE CALIBRATION69 Calibrate message tone by seniority:70 - C-suite: under 80 words, outcome-first,71 no product features, one direct ask72 - VP: under 100 words, peer-to-peer, signal-led,73 one specific ask74 - Director / Manager: under 120 words,75 problem-led, practical, one low-friction ask76 - Override with user-specified tone if provided77785. WRITE THE MESSAGE79 For each contact:80 - Subject line: specific, references signal or81 account where possible, under 8 words82 - Body: opens with the hook, connects to a83 relevant outcome, closes with one ask84 - CTA: specific and low-friction — not85 "let me know if interested"86 - Under 120 words total for body copy87886. BATCH OUTPUT89 For a list of contacts, return each message90 individually — do not aggregate or average.91 Flag any contacts that could not be verified92 separately at the end.93947. PRIVACY RULES95 - Mask contact name to initials in output96 - Show email domain only: j.k@[company].com97 - Mask phone if shown: +1 415 555 ••••98 - Tag: Contact confirmed live via Lusha99 connector, [date]100101## Output Format — single contact102103### Contact verified104105| Field | Value |106|---|---|107| Name | [initials] |108| Title | |109| Tenure | |110| Seniority | |111| Company | |112| Verified email | [domain only] |113| Status | Active / Departed / Title changed |114115Contact confirmed live via Lusha connector, [date]116117---118119### Signal used120121| Signal | Type | Score | Date |122|---|---|---|---|123124Hook selected: [signal / recent hire / role and125relevance]126127---128129### Message130131Subject: [subject line]132133[body copy]134135[CTA]136137---138139Word count: [X] words140Tone: [direct / conversational / formal]141Hook: [what the opening is based on]142143---144145## Output Format — batch146147Return individual message blocks for each contact148in the same format as above.149150After all messages, return a summary table:151152| Contact | Company | Signal used | Hook type | Status |153|---|---|---|---|---|154155Flag unverified or departed contacts separately:156157Contacts not messaged:158- [Contact] at [Company] — [reason: departed /159 not found in Lusha]160 Recommended action: [find new contact /161 verify manually / skip]162163Title-changed contacts are messaged, with the angle164adjusted to the new role, and flagged in the summary165table.166167---168169From Lusha's Campus plays library: https://www.lusha.com/campus/plays/outreach-personalization-skill/