Module 04 · Profiles and person signals
Outcome: an opening line based on something the person actually said, plus a check on whether they just moved seats.
- Surface
- MCP server
- Level
- Beginner
- Uses
linkedin_profile_enrichlinkedin_profile_postslinkedin_profile_reactionslinkedin_profile_commentscheck_job_changecheck_promotions- Credits
- ~5.7 to run every example once
- Prerequisite
- A LinkedIn profile URL
Tools in this module
| Tool | Cost | Required input | Returns |
|---|---|---|---|
linkedin_profile_reactions | 0.2 | profile_url | Posts they reacted to |
linkedin_profile_comments | 0.2 | profile_url | Comments they left, with parent-post context |
linkedin_profile_posts | 0.3 | profile_url | Posts they authored |
linkedin_profile_enrich | 1 | profile_url | Work history, education, skills |
check_job_change | 2 | profile_url | Whether they changed jobs recently |
check_promotions | 2 | profile_url | Whether they were promoted recently |
The three activity tools cost 0.2–0.3 credits. They are the cheapest personalization on the server and the most under-used.
Example prompts
linkedin_profile_enrich — the record
Use linkedin_profile_enrich with profile_url
"https://linkedin.com/in/janedoe".
Return current title, current company, time in role, previous two roles,
and top five skills.linkedin_profile_posts — what they say
Use linkedin_profile_posts with profile_url
"https://linkedin.com/in/janedoe", max_posts 20.
Return each post's date, first 200 characters, and engagement count.
Rank by engagement.linkedin_profile_reactions — what they endorse
Two filters worth knowing: posted_limit accepts any, 24h, week, month, 3months, 6months; max_results is 1–50 and defaults to 3.
Use linkedin_profile_reactions with profile_url
"https://linkedin.com/in/janedoe", posted_limit "3months",
max_results 25.
Return the post author, the topic and the post URL.
Tell me the three topics that come up most.linkedin_profile_comments — their own words
Use linkedin_profile_comments with profile_url
"https://linkedin.com/in/janedoe", posted_limit "6months",
max_results 25.
Return the comment text and what the parent post was about.
Flag any comment that names a tool or a vendor.Comments beat posts for personalization. A post is marketing; a comment is an opinion. At 0.2 credits it is the cheapest useful signal on the server.
check_job_change — the timing signal
Use check_job_change with profile_url
"https://linkedin.com/in/janedoe".
If they changed jobs, tell me the new company and roughly when.check_promotions — the budget signal
Use check_promotions with profile_url
"https://linkedin.com/in/janedoe".
If promoted, tell me the new title and roughly when.The 1.7-credit personalization pass
Pull the cheap signals first
Reactions and comments at 0.2 each, posts at 0.3. Total 0.7 for a picture of what they care about.
Read before you enrich
If nothing in the activity is relevant, stop. You just saved a credit.
Enrich the ones worth writing to
linkedin_profile_enrich at 1 credit fills in the history and skills.
Check timing only on the shortlist
check_job_change and check_promotions are 2 credits each. Run them on people you are about to contact, not on a list.
Run it as one message:
For https://linkedin.com/in/janedoe:
1. linkedin_profile_comments, posted_limit "3months", max_results 20
2. linkedin_profile_posts, max_posts 10
3. linkedin_profile_enrich
Then draft a two-sentence opener that quotes one specific thing they said.
Do not write anything generic — if there is no usable material, say so.Workflow prompts
Person signals are worth most when they reach you without being asked for.
Alert the owner when a champion moves
- take the champions list out of the CRM
- check each for a job change
- alert the rep who owns them and open a task
1. Pull every Attio contact tagged "champion" that has a LinkedIn URL.
2. For each: check_job_change — 2 credits per person, so tell me the
headcount and total cost before starting.
3. For anyone who moved: get the new company and role.
4. Post one Slack message per mover to #sales:
"<name> moved from <old company> to <new company> as <new title>.
Owner: <record owner>."
5. Create an Attio task for that owner, due in 3 days, titled
"Reach out — <name> just moved to <new company>".Personalize a sequence from what people actually said
- take the list about to be sequenced
- pull their comments and posts
- write one custom line per person, or mark them skip
For each of these 20 LinkedIn URLs:
1. linkedin_profile_comments — posted_limit "3months", max_results 20
2. linkedin_profile_posts — max_posts 10
Then write one opening line per person that references something specific
they said, and include the URL of the post or comment it came from.
If a person has no usable material, write "SKIP — no signal" instead of
inventing something. I would rather send 12 good lines than 20 generic ones.
Return a CSV: name, linkedin_url, opening_line, source_url.Brief before a call, from the calendar
- read today’s external meetings
- pull the attendee’s recent activity
- hand back a short brief per meeting
1. List my external calendar meetings for today with attendee names
and email domains.
2. For each external attendee, find their LinkedIn profile, then run
linkedin_profile_enrich and linkedin_profile_comments
(posted_limit "3months").
3. Give me one brief per meeting: who they are, how long in seat, what
they have been talking about, and one question worth asking them.
Keep each brief under 120 words.Best prompting practices
- Use
posted_limit. Without it the default isanyand you get stale material.3monthsis usually right. - Raise
max_results. The default is 3 on reactions and comments. At 0.2 credits per call, 25 costs the same as 3. - Ask for the source URL. A quote you cannot link back to is a quote you cannot check.
- Say “if there is no usable material, say so.” Otherwise you get a generic opener dressed as personalization.
- Run the 2-credit signal tools last. Job change and promotion matter for timing, not for qualification.
Where this breaks
A profile with no public activity returns empty and the model may fill the gap from the profile headline. Ask for the post URL alongside every quote — no URL, no quote.
check_job_change on a whole list is 2 credits a row. For “who moved recently” across many companies, use find_people with recently_changed_jobs: true instead — see module 02.
Further automation
MCP Profile Signals is this module as a skill file — /mcp-profile-signals pulls the cheap signals, decides whether to enrich, and drafts the opener with its source URL.
Job Change Detector and the champion-tracking agents run it on a schedule, so a move reaches you before the sequence does.
Next module
05 — Engagement and social sourcing, the other half of the social-signals cluster: turning a post into a warm list.
Reference: LinkedIn Profile Enrich · Profile Posts · Profile Reactions · Profile Comments · Check Job Change · Check Promotions · Job Changes & Champions