Skip to Content
CoursesMCP courseSocial signals

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

ToolCostRequired inputReturns
linkedin_profile_reactions0.2profile_urlPosts they reacted to
linkedin_profile_comments0.2profile_urlComments they left, with parent-post context
linkedin_profile_posts0.3profile_urlPosts they authored
linkedin_profile_enrich1profile_urlWork history, education, skills
check_job_change2profile_urlWhether they changed jobs recently
check_promotions2profile_urlWhether 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 is any and you get stale material. 3months is 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.

Browse all GTM agents →


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