ICP Enrichment on Every Inbound Signup, in 8 Lines of Prompt
How a sales ops team running LinkFetch and Claude enriches every new signup in under 30 seconds: firmographic data, ICP score, and a tailored first-touch, automatically.
Most inbound signups arrive with an email address and nothing else. With LinkFetch, a Claude prompt, and a webhook, your CRM can know their company size, whether they're hiring, ICP fit score, and have a personalized first-touch drafted before you finish your morning coffee. The whole pipeline takes about 30 seconds per signup and costs roughly 13 credits.
Why manual signup research is a hidden revenue leak
A typical sales rep spends over 20 hours per week on manual research and data entry before first contact. That's more than half of a 40-hour week consumed before a single substantive conversation happens [source: Gartner, 2025 B2B Sales Productivity Report]. For a team of five, that is over 100 rep-hours weekly: the equivalent of two and a half full-time hires doing nothing but Googling company names and checking LinkedIn profiles.
The problem compounds in two directions. First, there is the time cost. Second, and this is the expensive part, the research is not systematic. Different reps check different signals. Some look at company size; others look at tech stack; almost nobody checks for the strongest intent signal of all: whether the company is actively hiring into a role that indicates they are in a buying cycle for what you sell.
B2B data decays at approximately 2 to 3% per month. A list enriched manually six months ago and filed in a spreadsheet has a meaningful probability of wrong title, wrong company, or both [source: Gartner, The Cost of Bad Data, 2025]. Running enrichment at webhook time (the moment a new signup row is created, not the morning before a rep dials) eliminates this decay problem. The data is current within the last 24 hours of that profile's publicly visible state.
LinkFetch, the AI interface to your LinkedIn, reads people data live through your own connected LinkedIn account, and company and job data from its own dataset of LinkedIn job posts, which needs no account. No proxy rotation, no synthetic sessions. Which means the data is both fresher and legally cleaner than most enrichment alternatives. For teams already running the daily outreach agent setup, adding signup enrichment is the natural complement: you're already running enrichment on prospects you find; now run it on the ones who found you.
The 8-line prompt that runs the whole pipeline
The enrichment prompt fits in eight lines. Here is the reference implementation:
You are a sales enrichment assistant.
Given a signup's name and email, look up the employer from the email
domain with search_companies and get_company, check search_jobs for its
recent posts, then find the person with search_people and get_person.
Return JSON with these fields:
- company_size: LinkedIn size band from get_company (e.g. 51-200)
- industry: one of SaaS, fintech, agency, e-commerce, media, other
- seniority_level: IC, manager, director, VP, C-suite
- growth_signal: any GTM hiring or burst of job posts in the last 30 days
- icp_score: 1 to 10 (10 = perfect: 51-500 person SaaS, VP+ title, active GTM hiring)
- first_touch: one sentence of outreach referencing a specific growth signal
If data is unavailable, return null for that field rather than guessing.
Drop this into Claude with the LinkFetch MCP server connected (https://linkfetch.io/mcp, setup guide). The server exposes these lookups as native tools Claude calls directly. No custom glue code, no intermediate API layer. Connect the MCP tool to whatever automation layer you use (Zapier, n8n, a simple webhook handler) and the pipeline runs on every new signup event.
The first_touch field is the part that looks like magic the first time you see it. Claude uses the growth signal it extracted (an open engineering director role, three new SDR postings, a new regional office) to write one sentence that would not survive a spam filter, because it is not spam. It references something real. Response rates for first-touches grounded in a specific signal outperform template sequences by 40 to 60% in reported A/B tests across outbound platforms [source: Outreach.io State of Sales Execution Report, 2025].
What LinkFetch pulls from a signup
When get_person runs against the LinkedIn profile that search_people matched (the signup's name plus the company from the email domain), it returns:
| Field | What it is | Why it matters |
|---|---|---|
| Current role | Job title as shown on the profile | Seniority classification without brittle regex |
| Current company | Employer name | Feeds get_company for firmographic data |
| Experience | Prior roles with dates | Tenure signal and career trajectory |
| Education | Schools and degrees | Context for the first touch |
| Skills | Skills listed on the profile | Hints at the tools and functions they own |
And from get_company on the matched employer:
| Field | What it is | Why it matters |
|---|---|---|
| Size band | LinkedIn size range, e.g. 51-200 | The single most reliable ICP filter |
| Jobs in last 30 days | Count of recent LinkedIn job posts | Scaling vs. standing still, directional spend signal |
| Latest jobs | Most recent job posts with titles | Is the GTM team growing? That is your signal |
| Founded year | Year the company was founded | Young vs. established at a glance |
| Description and website | The company's own LinkedIn description | Product type at a glance; pull tech stack from job text with ai_extract |
The latest-jobs list is where enrichment earns its cost. If a company that just signed up also just posted three SDR roles and a Head of RevOps, they are building out a GTM function. And they are doing it now, not six months ago. That is not a signal available in any static firmographic database; it comes from LinkFetch's dataset of LinkedIn job posts, which needs no LinkedIn account to query.
Scoring against your ICP definition
The prompt above uses a generic ICP score. In practice, replace it with the exact criteria your team has aligned on. A concrete scored ICP definition looks like this:
icp_score scoring rules:
+ 3 points: size band 51-200 or 201-500
+ 2 points: SaaS or API-driven product company (not agency, not services)
+ 2 points: VP-level or above current title
+ 2 points: active GTM hiring in the last 30 days of job posts (SDR, AE, RevOps, Demand Gen)
+ 1 point: 5 or more jobs posted in the last 30 days
= 10 points maximum
Claude interprets the structured output from LinkFetch and applies the scoring in a single reasoning step. No separate scoring model, no hand-coded rule engine. The ICP definition lives as plain text in the prompt, which means updating it is a one-minute edit, not a sprint.
One refinement worth adding: if the experience section shows a previous VP title at a recognizable company, even if the person's current title is lower, score them as VP-equivalent. Career downtitling is common in early-stage companies (the "VP of Sales" who came from Salesforce and now runs revenue at a 12-person startup as "Head of Sales"). Claude can catch this pattern if you instruct it to.
What "enriched" still misses: the retention dimension
Enrichment at signup time tells you who walked in the door this morning. It tells you nothing about who walked out the back door at one of your existing customer accounts last week. Both are revenue events, and a sales-ops function that only watches one of them is leaving the other half of the data leak unwatched.
The flip-side recipe to enrichment is champion tracking. When a key contact at an existing customer changes employer on LinkedIn, you have roughly a 30-day window to manage the transition before the renewal goes sideways. Recent ignitedigital reporting puts 64% of preventable churn cases on uncaught champion departures that the vendor missed for more than 30 days. The detection mechanism is the same get_person lookup you're already running for inbound enrichment, pointed at your CRM contact set instead.
We wrote up the full recipe in tracking champion departures at customer accounts. The credit math is similar (one 5-credit profile lookup per watched contact per check) and the same Claude prompt that scores ICP at signup can be reused for the routing step on the retention side. Sales ops teams that run both ends of this together get full coverage of every revenue event the LinkedIn data layer can see.
Routing and CRM write-back
The enrichment output goes wherever your signups live. Two production patterns:
Zapier / Make. When a new row appears in your signups table, Zapier fires a webhook to a Claude automation step. The step runs the prompt, returns JSON, and Zapier maps the fields back into your CRM. Round-trip time is 20 to 30 seconds. This pattern works with Airtable, HubSpot, Salesforce, Attio, or any CRM with a Zapier integration.
n8n (self-hosted). More control over the data flow. An n8n workflow watches the signups table, sends the email and company domain to a Claude node with the LinkFetch MCP tools attached, and writes the enriched object back to your CRM. The extra control matters when you want conditional routing: a Slack notification for every icp_score ≥ 8, an AE assignment for scores ≥ 6, nurture enrollment for scores below 4.
In both cases, the CRM receives a structured object with company_size, industry, seniority_level, growth_signal, icp_score, and first_touch as separate fields. The first_touch is stored as a draft note, not auto-sent. A human reviews it and fires. That is the correct posture: automated enrichment, human judgment on send.
Handling the edge cases
Three cases break the basic pipeline. Handle them explicitly or they will quietly corrupt your enrichment data.
No LinkedIn match. Some signup emails have no accessible LinkedIn profile, typically disposable domains, personal emails (Gmail, Outlook) where the person has not connected their professional identity, or accounts with no public presence. The prompt already handles this: return null for unavailable fields rather than guessing. The CRM row gets partial enrichment. Flag these automatically for a manual review queue, run at end of day. In a B2B product with reasonably screened signups, this is typically 10 to 20% of the total.
Company not in the dataset. LinkFetch's company dataset covers companies that have posted a LinkedIn job (about 560,000). If the signup's employer isn't there, fall back to search_linkedin_companies (5 credits), which finds any company on LinkedIn by name: less detail, but still enough for coarse ICP filtering. A company that has never posted a LinkedIn job also tells you something: it is not in an active hiring cycle.
Seniority mismatch. Sometimes the signup is from an IC doing vendor research on behalf of a decision-maker. The experience section from get_person helps here: if the person has VP or director history at a previous company, they are likely experienced buyers even if their current title is a level down. Add an instruction to your prompt: "If the person's prior employment shows VP or above within the last 3 years, note this in the growth_signal field and score seniority accordingly."
What this costs and what it returns
At roughly 13 credits per signup, 100 new signups in a week costs 1,300 credits. A 5,000-credit pack ($79) covers almost four weeks of that, a rounding error in most sales tooling budgets, less than a single outbound tool's per-seat license for a month.
The return calculation is straightforward. If each rep would have spent 12 minutes manually researching a signup before the first call (a conservative estimate; many take 20 or more), 100 signups represents 20 rep-hours recovered weekly. At a fully-loaded rep cost of $60/hour, that is $1,200 of rep time recovered per 100 signups, before counting the revenue impact of better ICP accuracy.
The number that compounds faster than time savings is ICP accuracy. When reps enter every call knowing the company size, seniority, and active hiring signals, qualification happens faster. Pipeline stages clear faster. The 20-minute discovery call becomes 10 minutes of confirmation rather than 20 minutes of information gathering. Teams running this pattern consistently report a 15 to 25% reduction in time-to-qualify across their inbound motion.
For teams evaluating enrichment options, the post-Proxycurl enrichment options landscape covers the alternatives and their relative compliance posture. LinkFetch's session-based model is structurally different from proxy-based enrichment tools, relevant if you are selling to regulated buyers or have a DPA obligation. Founders building both inbound and outbound motions simultaneously will find the signal-based founder cold outreach playbook a natural complement: the same LinkFetch data that enriches your signups also powers a weekly watchlist of high-intent outbound targets.
FAQ
How does LinkFetch find the LinkedIn profile from an email address?
It doesn't look up emails directly; there is no email-to-profile lookup. The reliable path is domain-to-company matching: extract the domain from the signup email, look up the company with search_companies (or search_linkedin_companies), then run search_people with the person's name and that company. That means your signup form needs to collect a name. For consumer email providers (Gmail, Outlook), fall back to a name-plus-company search if the form also asked for a company.
Should the enrichment run before or after email verification?
After verification. Pre-verification emails include a meaningful proportion of invalid or throwaway addresses that will never convert to active users. Running the enrichment webhook on the confirmation event rather than the registration event avoids wasting credits on addresses that never confirm, and keeps your enrichment data set cleaner.
What if we already use Clay or Apollo for enrichment?
LinkFetch complements rather than replaces both. Clay and Apollo draw from third-party data warehouses with variable freshness, typically 30 to 90 days stale for less-visited profiles. LinkFetch pulls against live LinkedIn data as seen by the signed-in user, which is materially more current for role changes and hiring signals. The two sources can run in parallel, with the ICP scoring prompt synthesizing both outputs.
Is enriching inbound signups GDPR-compliant?
LinkFetch operates on data the user's LinkedIn session can already see, the same public profile data you would read manually before a call. The compliance posture is equivalent to standard B2B due diligence. Your DPA with customers should cover the enrichment as B2B data processing under legitimate interest; consult legal on jurisdiction-specific requirements, particularly for EU data subjects. For a deeper treatment of the compliance landscape, see the current LinkedIn data API landscape.
What is the right ICP score threshold for AE routing?
A workable starting point: scores of 7 to 10 go directly to an AE for same-day outreach, scores of 4 to 6 go into a 5-touch sequenced nurture, scores of 1 to 3 go into a monthly newsletter-style nurture. Calibrate after 30 days of data, look at which scores actually converted to opportunities and adjust the thresholds from there.
Can the first_touch field be auto-sent as a LinkedIn invite message?
Not as an invite note: LinkFetch sends connection requests (send_invitation) without a note. The first_touch works as the first send_message once they accept, or right away if they're already a 1st-degree connection, and either way LinkFetch shows a preview and sends nothing until you confirm. That human review step before send is deliberate, not a limitation. Fully automated send tends to erode message quality over time as the prompt drifts; a 5-minute morning review catches the cases where the growth signal Claude cited is stale or misread.
Last updated 2026-10-10 · LinkFetch team