Leadspicker Data Enrichment (MCP)
Prepares and enriches contact data in Leadspicker projects through the Leadspicker MCP server. Each enrichment creates a magic column that Leadspicker populates asynchronously for every contact in the project.
This skill works in two modes:
- Selective mode — user names specific columns (e.g., "enrich LinkedIn company description and website summary"). Run only those, plus any prerequisites they depend on.
- Pipeline mode — user describes a goal (e.g., "prepare data for outreach"). Pick a recommended pipeline.
MCP tools used
| MCP tool | Purpose |
|---|---|
mcp__leadspicker__list_projects |
Look up project by name (search_query) or list recent (order_by="last_active", limit=20) |
mcp__leadspicker__get_project |
Fetch project detail by project_id |
mcp__leadspicker__enrich_contacts |
Create an enrichment / AI magic column. Parameters: project_id, magic_column_type, column_name, optional prompt, optional is_boolean, optional model |
mcp__leadspicker__list_magic_columns |
List existing magic columns in a project |
mcp__leadspicker__update_magic_column |
Rename an existing magic column |
mcp__leadspicker__list_contacts |
Fetch a page of contacts (used to size the project: page=1, page_size=1 returns count) |
If you need an endpoint not covered above, use mcp__leadspicker__leadspicker_api_call and
introspect via mcp__leadspicker__leadspicker_api_spec. For everything in this skill the
curated tools are enough.
User input
Always confirm these before running anything:
| Parameter | Description | Example |
|---|---|---|
project_id |
Target Leadspicker project (resolved by name) | 26256 |
| Enrichment request | Specific columns OR a goal | "LinkedIn Company Description and Website Summary" or "prepare for outreach" |
Project resolution
Display format: always render projects as {name} (#{id}) — name first, ID in parentheses.
- User named a project → call
mcp__leadspicker__list_projects(search_query="{name}", limit=5). If multiple match, ask which one. - User did not name a project → call
mcp__leadspicker__list_projects(order_by="last_active", limit=20)and ask the user to pick.
Use the resolved project's id for subsequent calls.
⚠️ Credit discipline
Every enrichment column costs credits. Default to a lean minimum, never auto-enrich "just in case". Add optional columns only when the user's persona / criteria explicitly require them.
Lean default for outreach prep:
| Always | Only if user explicitly mentions |
|---|---|
company_name, company_website, company_linkedin, person_linkedin, li_full_name, person_position (Core Identity) |
person_country — person geography |
li_company_description |
li_company_country — company geography |
website_text_summary |
li_company_size (range, never the exact count) — size band |
enrich_emails + validate_emails (for email outreach) |
li_company_people_* — specific department headcount |
company_founded_year — company age / stage |
|
li_company_employee_count — only if user explicitly asks for exact count (very rare; prefer the range) |
|
li_about_me, present_experience, past_experience, li_city, education_summary, linkedin_skills — person-level personalization needs them |
|
li_latest_posts — icebreaker from LinkedIn activity (expensive — confirm with user first) |
Hard rules:
- NEVER default to
li_company_employee_count. Always preferli_company_size(range like51-200). - NEVER default to
li_latest_posts. It is the most expensive enrichment. - Before launching, parse the user's request for triggers (geography, size, department, age) and include the matching optional column only if triggered.
Dependency map
Some columns need other columns to exist first. When the user requests a column, auto-include its prerequisites.
No prerequisites:
company_name, company_website, company_linkedin,
person_linkedin, li_full_name, person_position, person_country,
li_location, li_city, li_company_size, li_company_country,
company_founded_year, li_company_employee_count,
enrich_emails, linkedin_premium, is_first_degree_connection,
followers_count, linkedin_skills
Needs person_linkedin:
li_about_me, li_latest_posts, present_experience, past_experience,
education_summary
Needs company_linkedin:
li_company_description, all li_company_people_* department headcounts
Needs company_website:
website_text_summary
Needs enrich_emails:
validate_emails, email_mx
Needs data from earlier enrichments (for AI context):
any ai_custom_column (classification, icebreakers, cleaning, …)
Selective resolution example. User: "I want LinkedIn Company Description and Company Website Summary":
li_company_descriptionneedscompany_linkedinwebsite_text_summaryneedscompany_website- Neither prerequisite has its own prerequisite
Result — run in this order:
- Batch 1 (prerequisites):
company_linkedin,company_website - Batch 2 (requested):
li_company_description,website_text_summary
Always show this resolved plan to the user before executing.
Available enrichment columns
Each enrichment is created with mcp__leadspicker__enrich_contacts(project_id, magic_column_type, column_name). AI columns also pass prompt and is_boolean. Built-in columns don't need a prompt.
Person data (from LinkedIn)
| Column name | magic_column_type |
Variable | What it does |
|---|---|---|---|
| Full Name | li_full_name |
{{full_name}} |
Clean full name from LinkedIn |
| Position | person_position |
{{position}} |
Current job title |
| Person Country | person_country |
{{person_country}} |
Country from LinkedIn profile |
| LinkedIn Location | li_location |
{{linkedin_location}} |
Location string from LinkedIn |
| LinkedIn City | li_city |
{{linkedin_city}} |
City extracted from LinkedIn |
| LinkedIn About Me | li_about_me |
{{linkedin_about_me}} |
LinkedIn bio / summary |
| LinkedIn Latest Posts | li_latest_posts |
{{linkedin_latest_posts}} |
Recent LinkedIn post content |
| Present Positions Summary | present_experience |
{{present_experiences}} |
Current roles summary |
| Past Positions Summary | past_experience |
{{past_experiences}} |
Previous roles summary |
| Education Summary | education_summary |
{{education_summary}} |
Education background |
| LinkedIn Skills | linkedin_skills |
{{linkedin_skills}} |
Listed skills |
| LinkedIn Followers | followers_count |
{{followers_count}} |
Follower count |
| Is LinkedIn Premium | linkedin_premium |
{{linkedin_premium}} |
Premium account flag |
| Is First Degree Connection | is_first_degree_connection |
{{is_first_degree_connection}} |
Connection degree check |
| Person LinkedIn Profile | person_linkedin |
{{linkedin}} |
LinkedIn profile URL |
Company data
| Column name | magic_column_type |
Variable | What it does |
|---|---|---|---|
| Company Name | company_name |
{{company_name}} |
Resolved company name |
| Company Website | company_website |
{{company_website}} |
Company website URL |
| Company LinkedIn Profile | company_linkedin |
{{company_linkedin}} |
Company LinkedIn page URL |
| LinkedIn Company Description | li_company_description |
{{linkedin_company_description}} |
Company description from LinkedIn |
| LinkedIn Company Size | li_company_size |
{{linkedin_company_size}} |
Size range (e.g. 51-200) |
| LinkedIn Company Country | li_company_country |
{{linkedin_company_country}} |
HQ country |
| Company Founded Year | company_founded_year |
{{company_founded_year}} |
Year founded |
| Company Employee Count | li_company_employee_count |
{{company_employee_count}} |
Exact employee count |
| Company Website Summary | website_text_summary |
{{website_text_summary}} |
AI summary of company website |
Department headcounts
| Column name | magic_column_type |
Variable |
|---|---|---|
| Sales Headcount | li_company_people_sales |
{{linkedin_people_category_sales}} |
| Engineering Headcount | li_company_people_engineering |
{{linkedin_people_category_engineering}} |
| Marketing Headcount | li_company_people_marketing |
{{linkedin_people_category_marketing}} |
| Research Headcount | li_company_people_research |
{{linkedin_people_category_research}} |
| Operations Headcount | li_company_people_operations |
{{linkedin_people_category_operations}} |
| Human Resources Headcount | li_company_people_human_resources |
{{linkedin_people_category_human_resources}} |
| Business Development Headcount | li_company_people_business_development |
{{linkedin_people_category_business_development}} |
| Column name | magic_column_type |
Variable | What it does |
|---|---|---|---|
| Enrich Emails | enrich_emails |
{{email}} |
Finds email addresses for contacts |
| Validate Emails | validate_emails |
{{email}} |
Verifies deliverability |
| Email MX (host + provider) | email_mx |
{{email_mx_host}}, {{email_mx_provider}} |
Resolves MX host and classifies provider |
AI-powered columns (custom)
magic_column_type: "ai_custom_column" with a prompt. They reference any variable from
the columns above. For prompt-writing details, use the mcp-classification skill.
Common AI enrichments: Clean First Name, Clean Company Name, Job Title Cleaning,
Company Industry, B2B/B2C, Icebreaker — Latest LI Posts, LinkedIn Post Summarization,
Targeted Job Titles, First Name Vocative — CZ, Last Name Vocative — CZ.
Other built-in types
| Column name | magic_column_type |
What it does |
|---|---|---|
| HTTP Request | http_request |
Calls an HTTP endpoint per contact and extracts a value from the JSON response |
Recommended pipelines
Order matters — later steps often depend on earlier ones. Show the picked pipeline to the user, confirm, then execute.
Lean Outreach Prep — DEFAULT for "prepare for outreach"
Minimum column set for classification + personalization + email outreach. Start here; add optional columns from the credit-discipline table only when triggered.
Batch 1 — Core Identity (ALWAYS):
company_name, company_website, company_linkedin,
person_linkedin, li_full_name, person_position
Batch 2 — Classification context (ALWAYS):
li_company_description, website_text_summary
Batch 2b — Conditional company-level (only if triggered):
li_company_country — user cares where the company is based
li_company_size (RANGE) — user cares about employee category / size band
li_company_people_* — user mentioned that department
company_founded_year — user mentioned company age / stage
li_company_employee_count — only if user explicitly asked for exact count
Batch 3 — Conditional person-level (only if triggered):
person_country — user cares where the person is based
li_about_me — personalization depends on bio
present_experience — personalization uses role tenure
li_latest_posts — icebreaker uses post activity (EXPENSIVE — confirm first)
Batch 4 — Email (ALWAYS for email outreach):
enrich_emails, then validate_emails
Batch 5 — AI columns:
any classification / scoring / personalization (ai_custom_column).
Hand off to mcp-classification or mcp-personalizer skills.
Show the plan with three sections: Always, Added because you mentioned X, NOT enriching (saves credits). Only proceed after explicit confirmation.
Quick email enrichment
Batch 1: enrich_emails
Batch 2: validate_emails (after batch 1 completes)
Company research
Batch 1: company_name, company_website, company_linkedin
Batch 2: li_company_description, website_text_summary,
li_company_size, company_founded_year (li_company_employee_count only if asked)
Batch 3: li_company_people_* as needed
LinkedIn person enrichment
Batch 1: person_linkedin, li_full_name, person_position
Batch 2: li_about_me, li_latest_posts, present_experience,
past_experience, education_summary, linkedin_skills
Outreach prep (CZ market)
Batch 1–4: Lean Outreach Prep (with credit discipline)
Batch 5: AI custom columns:
Clean First Name, First Name Vocative — CZ, Clean Company Name,
any classification columns,
Icebreaker — Latest LI Posts (only if li_latest_posts was enriched)
For prompt details on AI columns, use mcp-personalizer (vocatives, hooks, salutations) or mcp-classification (boolean / string / scored classifications).
Full historical enrichment (legacy)
Use only when the user explicitly says "run full enrichment" and reconfirms after the cost warning. Otherwise prefer Lean Outreach Prep.
All of Lean Outreach Prep, plus:
li_company_size, li_company_country, company_founded_year,
li_company_employee_count, li_about_me, li_latest_posts,
present_experience, li_city, person_country
Workflow
Step 1 — collect input
Resolve the project (see Project resolution) and gather the enrichment request.
Step 2 — determine mode and build the plan
Selective mode (user named specific columns):
- Match the user's words to columns in the tables above
- Look up the
magic_column_type(this is whatmcp__leadspicker__enrich_contactsneeds) - Check the dependency map — add missing prerequisites
- Group into batches: prerequisites first, then requested
- Present the plan separating prerequisites from requested columns
Example to show user:
I'll enrich these columns for Marketing Q4 (#26256):
Prerequisites (needed first):
• Company LinkedIn Profile (company_linkedin)
• Company Website (company_website)
Your requested columns:
• LinkedIn Company Description (li_company_description)
• Company Website Summary (website_text_summary)
Total: 4 enrichments in 2 batches. OK to proceed?
Pipeline mode (user described a goal):
- Pick the best matching recommended pipeline
- Apply credit-discipline triggers (geography, size, department, age, posts)
- Present the full pipeline with all batches
- Show what's NOT enriched and why (credit-saving)
Step 3 — confirm with user
Before any enrichment call, show the plan and get explicit approval. For AI columns, show the prompt text or hand off to mcp-classification / mcp-personalizer.
Step 4 — execute
For each batch, call mcp__leadspicker__enrich_contacts once per column. Wait briefly
between calls (≈1 s) to avoid rate-limits.
mcp__leadspicker__enrich_contacts(
project_id=26256,
magic_column_type="company_website",
column_name="Company Website",
)
For an AI custom column:
mcp__leadspicker__enrich_contacts(
project_id=26256,
magic_column_type="ai_custom_column",
column_name="Company Industry",
prompt="Determine the primary industry of this company.\n\n…\n\nInput:\n- Company Name: {{company_name}}\n- Company Website: {{company_website}}\n- LinkedIn Company Description: {{linkedin_company_description}}\n- Company Website Summary: {{website_text_summary}}",
is_boolean=False,
)
Escape newlines in
promptas\nin the JSON payload that the MCP tool builds. Template variables like{{company_name}}are filled by Leadspicker server-side.
For pipelines where later batches genuinely need earlier data (e.g. validate_emails after
enrich_emails, AI columns after enrichment), ask the user to confirm the previous batch
completed in the Leadspicker UI before launching the next one.
Step 5 — report summary
After the batch finishes, report:
- Columns created (mark prerequisites vs requested)
- Any failures with reason
- Suggested next steps:
- After company data → "You can now run AI classification (mcp-classification)."
- After email enrichment → "Validate emails next."
- After LinkedIn person data → "Good base for icebreaker / personalization (mcp-personalizer)."
Natural language → column matching
Users won't always use exact column names. Map common phrases:
| User says... | Column(s) | magic_column_type |
|---|---|---|
| "company description", "popis firmy" | LinkedIn Company Description | li_company_description |
| "website summary", "shrnutí webu", "co dělá firma" | Company Website Summary | website_text_summary |
| "find emails", "najdi emaily" | Enrich Emails | enrich_emails |
| "verify emails", "validuj emaily" | Validate Emails | validate_emails |
| "LinkedIn data" | All LinkedIn person columns | (multiple) |
| "company info", "firemní data" | All company data columns | (multiple) |
| "job title", "pozice" | Position | person_position |
| "headcount", "team size", "kolik lidí" | Department headcounts | li_company_people_* |
| "everything", "full enrichment" | Full pipeline (warn about cost) | (multiple) |
| "prepare for outreach", "připrav na outreach" | Lean Outreach Prep | (multiple) |
| "company size", "velikost firmy" | LinkedIn Company Size + Employee Count | li_company_size (+ li_company_employee_count if user asks for exact) |
| "posts", "příspěvky" | LinkedIn Latest Posts | li_latest_posts |
| "bio", "about", "o sobě" | LinkedIn About Me | li_about_me |
| "skills", "dovednosti" | LinkedIn Skills | linkedin_skills |
| "industry", "odvětví" | Company Industry (AI) | ai_custom_column |
| "icebreaker", "opener" | Icebreaker — Latest LI Posts (AI) | ai_custom_column |
| "email host", "MX" | Email MX | email_mx |
When in doubt, show the column list and ask the user to pick.
Common errors
| Symptom | Likely cause | Fix |
|---|---|---|
Tool returns 404 |
Wrong project | Re-list projects via mcp__leadspicker__list_projects and reconfirm |
Tool returns 400 |
Invalid magic_column_type |
Check the tables above for the exact value |
Tool returns 422 |
Column with that name already exists, or invalid prompt | Pick a unique name or fix the prompt |
Tool returns 429 |
Rate limit | Increase delay between calls to 2-3 s |
Safety
- Always show the plan to the user for approval before launching a batch.
- For AI columns, always show the prompt before launching.
- Default to lean enrichment; only add optional columns when explicitly triggered by user input.