Build a LinkedIn profile analyzer that knows who to prioritize
This post is part of the GTM Automation Playbook — a 13-part series on building AI-powered GTM agents with HubSpot.
Your SDRs look at every LinkedIn profile the same way. Open the page, skim the headline, glance at the company, move on. The ones who actually read career trajectories and spot role transitions close at a higher rate. But doing that for 80 prospects a day is not realistic.
So you build something that does it in two seconds per profile.
Why LinkedIn data beats form fills
A form fill tells you someone downloaded a whitepaper. A LinkedIn profile tells you they just got promoted to VP of Engineering six weeks ago, spent the last four years at a company that uses your competitor's product, and share two mutual connections with your champion at another account.
Personalized outreach that references LinkedIn-specific details gets roughly 27% higher response rates than generic templates. The signal quality is high because people maintain their own profiles. Nobody lies about their job title on LinkedIn (they inflate it, which is still useful data).
The problem is access. LinkedIn aggressively blocks scraping. Proxycurl, which was the best LinkedIn data API for years, shut down in 2025 after LinkedIn sued them. The safe path is an enrichment API that licenses data legitimately.
The five-node workflow in n8n
I use n8n for this because the flow is linear: trigger, enrich, analyze, write back. No branching logic, no multi-step reasoning. A workflow tool is the right fit.
Node 1: HubSpot Trigger. Fire on "Contact Created" to analyze every new prospect automatically. If you'd rather run in batches, swap this for a Schedule Trigger that polls a HubSpot list of un-analyzed contacts via POST /crm/v3/objects/contacts/search.
Node 2: HTTP Request to enrichment API. Call Apollo's person enrichment endpoint with the contact's email or LinkedIn URL. Apollo returns seniority level, current title, employment history, skills, and company data. At roughly $0.05 per enrichment on their Starter plan, 1,000 profiles costs $50. If you're already paying for HubSpot's Breeze Intelligence (formerly Clearbit), use that instead since it writes directly to contact properties without an extra API call.
Node 3: Basic LLM Chain with Anthropic Chat Model. Feed the enrichment data into Claude Sonnet. The prompt extracts what matters for sales:
You are analyzing a LinkedIn profile for sales relevance.
Given this profile data, extract:
1. Decision-making authority (individual contributor, manager, director, VP+)
2. Tenure at current company (new hire = potential change agent)
3. Career trajectory (rising through ranks vs lateral moves)
4. Relevant domain experience (years in our target industry)
5. Technology exposure (tools/platforms mentioned in experience descriptions)
6. Recommended outreach angle (what to reference in a first touch)
Return JSON with these fields plus a 1-2 sentence "outreach_hook" suggestion.
Profile data:
{{ $json.enrichment_data }}
Node 4: Code node. Parse the JSON response. Handle malformed output by retrying once.
Node 5: HubSpot node. Update the contact via PATCH /crm/v3/objects/contacts/{contactId} with custom properties: linkedin_seniority (dropdown), linkedin_tenure_months (number), linkedin_analysis (textarea), linkedin_outreach_hook (text), linkedin_analyzed_at (date).
What the AI catches that humans skip
A human scanning a LinkedIn profile sees "VP of Sales at Acme Corp." The AI reads the full employment history and notices this person was previously Director of Sales Ops at a company that churned off your competitor 18 months ago. That context changes your entire outreach strategy.
The analysis also catches career velocity. Someone promoted twice in three years is likely a decision-maker on the rise with budget authority coming soon, even if their current title doesn't suggest it. A lateral mover between similar companies in the same industry has deep domain expertise you can reference in your messaging.
Set up the HubSpot properties as filterable fields, not just textarea dumps. When linkedin_seniority is a dropdown with values like "IC," "Manager," "Director," and "VP+," you can build smart lists and workflow branches. Route VP+ contacts to your senior AEs. Route ICs with strong domain fit to a nurture sequence.
Connecting it to your outbound sequence
The outreach_hook property feeds directly into the personalization writer from post 2 in this series. Instead of generating an opener from just job title and company name, the personalization prompt now has a specific angle: "Reference their transition from Competitor Corp and the operational challenges of switching platforms at scale."
The compound effect matters more than any single agent. The company research agent (post 1) gives you account context, the LinkedIn analyzer gives you contact context, and the personalization writer turns both into an email that sounds like you actually did your homework.
Cost and performance
Apollo enrichment: ~$0.05 per contact. Claude Sonnet analysis: ~$0.002 per contact. Total: under $0.06 per profile analyzed. Running 500 profiles a month costs about $30.
The n8n workflow processes roughly 60 contacts per minute, limited by the enrichment API's rate limits rather than n8n or Claude. HubSpot's API limit of 100 requests per 10 seconds is not the bottleneck here.
Build the properties first, get the enrichment API connected, and let it run on every new contact. After a week, check the outreach hooks against what your reps are actually writing. The AI won't beat your best rep's intuition on a single profile, but it will beat your average rep's effort across 500 of them.

Need a Fractional Head of AI?
I help companies build an AI operating system — shared context across teams, AI handling the repetitive work, and your people focused on what actually matters.
15+
Years in Tech
12+
AI Products Shipped
3
Fortune 500 Brands