{"id":"7ae8ffb0-5cee-4e3b-9a75-4c94708bd9cc","entityType":"agent","slug":"thebormann-linkedin-research","name":"outreach-research","canonicalUrl":"https://www.xpersona.co/agent/thebormann-linkedin-research","canonicalPath":"/agent/thebormann-linkedin-research","generatedAt":"2026-10-09T12:04:47.546Z","source":"GITHUB_OPENCLEW","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-04-15T05:21:22.124Z","emptyReason":null},"description":"Generate targeted LinkedIn search queries based on problem space and outreach phase, then research and qualify contacts for problem discovery outreach. User tells the skill what problem they're exploring and what phase they're in (problem discovery, validation, or decision). Skill generates tailored search queries, then handles company research via public sources, Google-cached LinkedIn enrichment, scoring, and A/B outreach draft generation. Triggers on \"find people to interview about X\", \"I'm exploring Y problem\", \"who should I talk to about Z problem\", \"generate search queries for [problem]\", \"qualify these contacts\", \"draft outreach for these people\". --- name: outreach-research description: Generate targeted LinkedIn search queries based on problem space and outreach phase, then research and qualify contacts for problem discovery outreach. User tells the skill what problem they're exploring and what phase they're in (problem discovery, validation, or decision). Skill generates tailored search queries, then handles company research via public sources, Google-cache","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.","installCommand":"git clone https://github.com/TheBormann/linkedin-research.git","sourceUrl":"https://github.com/TheBormann/linkedin-research","homepage":null,"primaryLinks":[{"label":"View Source","url":"https://github.com/TheBormann/linkedin-research","kind":"source"}],"safetyScore":89,"overallRank":42.7,"popularityScore":0,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Generate targeted LinkedIn search queries based on problem space and outreach phase, then research and qualify contacts for problem discovery outreach. User tel"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-04-15T05:21:22.124Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[{"label":"see","status":"self-declared"},{"label":"extract","status":"self-declared"},{"label":"decide","status":"self-declared"}],"verifiedCount":0,"selfDeclaredCount":4,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"},{"key":"see","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"},{"key":"extract","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"},{"key":"decide","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile capability:see|supported|profile capability:extract|supported|profile capability:decide|supported|profile"}},"adoption":{"evidence":{"source":"no-adoption-signals","verified":false,"confidence":"low","updatedAt":"2026-04-15T05:21:22.124Z","emptyReason":"No source adoption metrics were available."},"stars":0,"forks":0,"downloads":null,"packageName":null,"latestVersion":null,"tractionLabel":null},"release":{"evidence":{"source":"agent-index","verified":false,"confidence":"medium","updatedAt":"2026-02-25T01:46:32.799Z","emptyReason":null},"lastUpdatedAt":"2026-04-15T05:21:22.124Z","lastCrawledAt":"2026-02-25T01:46:32.799Z","lastIndexedAt":null,"nextCrawlAt":"2026-02-26T01:46:32.799Z","lastVerifiedAt":null,"highlights":[]},"execution":{"evidence":{"source":"GITHUB OPENCLEW","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"git clone https://github.com/TheBormann/linkedin-research.git","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/thebormann-linkedin-research/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/thebormann-linkedin-research/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/thebormann-linkedin-research/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/thebormann-linkedin-research/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/thebormann-linkedin-research/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/thebormann-linkedin-research/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"GITHUB_OPENCLEW","generatedAt":"2026-10-09T12:04:47.545Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/thebormann-linkedin-research/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/thebormann-linkedin-research/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/thebormann-linkedin-research/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/thebormann-linkedin-research/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"GITHUB OPENCLEW","verified":false,"confidence":"high","updatedAt":"2026-04-15T05:21:22.124Z","emptyReason":null},"readme":"---\nname: outreach-research\ndescription: Generate targeted LinkedIn search queries based on problem space and outreach phase, then research and qualify contacts for problem discovery outreach. User tells the skill what problem they're exploring and what phase they're in (problem discovery, validation, or decision). Skill generates tailored search queries, then handles company research via public sources, Google-cached LinkedIn enrichment, scoring, and A/B outreach draft generation. Triggers on \"find people to interview about X\", \"I'm exploring Y problem\", \"who should I talk to about Z problem\", \"generate search queries for [problem]\", \"qualify these contacts\", \"draft outreach for these people\".\n---\n\n# Outreach Research\n\nGenerate persona-specific LinkedIn search queries, qualify contacts, and generate A/B-tested outreach drafts. The user tells the skill their problem space and outreach phase. The skill generates search queries tailored to who actually feels the pain (not just who owns the company). User manually browses LinkedIn using those queries and pastes contact info. The skill does everything else: company research via public sources, scoring, and draft generation.\n\n**Core principle: zero LinkedIn automation.** The skill never clicks, scrolls, or interacts with LinkedIn pages. The user does all navigation. The skill only reads what is already rendered in open tabs — no different from looking at the screen.\n\n## LinkedIn Tab Reading (Preferred Method)\n\nThis is the highest-quality enrichment path. The user logs into LinkedIn in the openclaw browser, manually opens profiles and posts, and the skill reads the open tabs passively.\n\n**Why this works:**\n- The skill reads rendered page content — it does not click, scroll, or interact\n- LinkedIn sees a normal logged-in user browsing their own session\n- Zero automation risk: no API calls, no headless scraping, no bot patterns\n- Full page content: work history, about section, recent posts, contact info — everything a logged-in user can see\n\n### How to use it\n\n**Step 1 — User opens the browser and logs in:**\n```bash\nopenclaw browser start --browser-profile openclaw\n```\nNavigate to linkedin.com, log in manually (one time only — session persists in the profile).\n\n**Step 2 — User browses LinkedIn:**\n- Run the search queries the skill generated\n- Open profiles that look relevant (Cmd+click to open in new tabs)\n- Open posts you want to use as hooks (open in new tabs)\n- No need to do anything else — just browse normally\n\n**Step 3 — Skill reads what is open:**\n```bash\n# List all open tabs\nopenclaw browser tabs --browser-profile openclaw\n\n# Read a specific tab by its target-id\nopenclaw browser snapshot --target-id <id> --browser-profile openclaw\n```\n\nThe skill scans all open tabs, identifies which are LinkedIn profiles vs. posts vs. search results, and extracts content from each.\n\n**Step 4 — Skill enriches all profiles automatically:**\nFrom a LinkedIn profile page the skill can extract:\n- Full name, current title, company\n- Location\n- About section (self-description in their own words — great for hooks)\n- Work history (tenure, career trajectory)\n- Recent activity/posts visible on profile\n\nFrom a LinkedIn post page the skill can extract:\n- Full post text\n- Post date\n- Engagement signals (comment count visible on page)\n\n**This replaces Google cache enrichment for any contact the user has opened in a tab.** Google cache is the fallback when no tab is open for that person.\n\n## Phase 1: Research Brief & Search Query Generation\n\n**IMPORTANT: When the user invokes this skill, the first thing you do is ask them about their problem space and outreach phase, then immediately generate tailored LinkedIn search queries for them to use.**\n\nCollect from the user:\n\n- **Problem space**: What problem are they exploring? (e.g., \"SOP handling in Pharma\", \"sales onboarding at SaaS companies\", \"AI agent evaluation workflows\")\n- **Outreach phase**: What phase are they in?\n  - **Phase A (Problem Discovery)**: Early exploration, need to understand the pain deeply → target people who FEEL the pain daily\n  - **Phase B (Validation)**: Problem understood, validating scope and willingness to solve → target people accountable for the problem\n  - **Phase C (Decision)**: Solution direction clear, testing willingness to pay → target budget holders and decision makers\n- **Company sweet spot**: Industry, stage, size range (default: 5-200 employees)\n- **Geography** (optional): Location constraints\n- **Interview goal**: What specific insight do they need?\n- **Already contacted** (optional): Names of people they've already reached out to. Parse into a simple exclusion list of `name + company` pairs. Skip these throughout the process.\n\n### Persona Mapping Framework\n\n**The key insight: match search filters to who FEELS the pain, not who OWNS the company.**\n\nBefore generating searches, determine:\n1. **Who experiences this problem daily?** (the doer)\n2. **Who gets blamed when it goes wrong?** (accountability holder)\n3. **Who has budget authority to fix it?** (decision maker)\n\n**Persona tiers by phase:**\n\n| **Phase** | **Target Tier** | **Who to Search For** | **Why** |\n|-----------|-----------------|----------------------|---------|\n| **Phase A (Problem Discovery)** | Tier 1 | Individual contributors, specialists, managers who do the work daily | Deep operational knowledge, specific pain examples, frustrated enough to talk |\n| **Phase B (Validation)** | Tier 2 | Directors, Heads of Function, Senior Managers accountable for outcomes | Understand scope + business impact, connect pain to priorities |\n| **Phase C (Decision)** | Tier 3 | VPs, C-suite in relevant function | Buying authority, budget allocation, strategic priorities |\n\n**EXCEPTION - Founder-Led Companies (<50 employees):**\nWhen the problem space naturally sits with **founders/CEOs of small companies** (e.g., AI agent tooling, developer tools, early-stage product challenges), search for founders REGARDLESS of phase, but filter by:\n- Company size: 5-50 employees (founders still feel operational pain)\n- Stage: Seed to Series A (founders still in the weeds)\n- Industry match: Their company must work in the problem domain\n\n### Search Query Generation\n\n**After collecting the brief, immediately generate 3-5 LinkedIn search queries tailored to the problem space and phase.**\n\n#### Query Structure Principles\n\n**IMPORTANT: Keep queries BROAD. Over-filtering in the search query returns zero results. Use LinkedIn's UI filters instead.**\n\n**Winning pattern:**\n- Search query: 2-3 broad terms maximum\n- Refinement: Use LinkedIn's company size, location, industry filters in the UI\n\n**For Problem Spaces in Established Companies (Pharma, Manufacturing, Enterprise):**\n\n```\nPhase A (Problem Discovery):\n\"[Job Title]\" [Industry]\nExample: \"Quality Manager\" Pharma\n\nPhase B (Validation):\n\"Head of [Function]\" [Industry]\nExample: \"Head of Quality\" Pharma\n\nPhase C (Decision):\n\"VP [Function]\" [Industry]\nExample: \"VP Quality\" Pharma\n```\n\nThen use LinkedIn filters: Company size (50-1000), Location (Germany), etc.\n\n**For Founder-Led Problems (Startups, Tech, AI):**\n\n```\nAll Phases (target founders at small companies):\nfounder [Industry/Tech]\nExample: founder AI\nExample: CEO SaaS\n\nThen use LinkedIn filters: Company size (1-50), Location, Industry\n```\n\n#### Example: SOP Handling in Pharma\n\n**User says:** \"I'm exploring SOP handling in Pharma companies, Phase A (problem discovery)\"\n\n**You generate:**\n\n```\nPhase A - Tier 1 (Problem Discovery):\n\nLinkedIn People Search (copy these one by one):\n1. \"Quality Manager\" Pharma\n2. \"Regulatory Affairs\" Pharma\n3. \"Compliance Manager\" Biotech\n\nThen apply these LinkedIn UI filters:\n- Company size: 50-1,000 employees\n- Location: Germany (or your target region)\n- Current company (to filter out job seekers)\n\nGoogle alternative (no LinkedIn login):\nsite:linkedin.com/in \"Quality Manager\" Pharma Germany\n```\n\n**Expected results:** 200-500+ profiles per search. Pick 10-15 who have Manager/Director titles and paste their info back.\n\n#### Example: AI Agent Evaluation Workflows\n\n**User says:** \"I'm exploring AI agent evaluation workflows, Phase A (problem discovery)\"\n\n**You generate:**\n\n```\nPhase A - Founders at AI-Agent Companies (5-50 employees):\n\nLinkedIn People Search (copy these one by one):\n1. founder AI\n2. CEO \"machine learning\"\n3. CTO agent\n\nThen apply these LinkedIn UI filters:\n- Company size: 1-50 employees (founders still feel operational pain)\n- Industry: Software Development, Internet\n- Location: San Francisco, Berlin, London (or your target)\n\nGoogle alternative (no LinkedIn login):\nsite:linkedin.com/in founder AI Berlin\nsite:linkedin.com/in CEO \"AI agent\" \"San Francisco\"\n\n**Where to find AI-agent startups:**\n- YC W24/S24/W25 batches — filter for AI/agent companies\n- EU AI startup lists: Sifted, Tech.eu, HTGF portfolio pages\n- Product Hunt launches tagged \"AI agent\" in last 6 months\n- VC portfolios: HTGF, Earlybird, Cherry Ventures, La Famiglia, Accel — filter for AI\n- GitHub trending — founders of popular agent frameworks often have startups\n```\n\n**Expected results:** 1000+ profiles. Pick 10-15 founders whose companies are building AI agents as core product (not just using AI internally).\n\n#### Example: Sales Onboarding at SaaS Companies\n\n**User says:** \"I'm exploring sales onboarding at SaaS companies, Phase B (validation)\"\n\n**You generate:**\n\n```\nPhase B - Tier 2 (Validation):\n\nLinkedIn People Search (copy these one by one):\n1. \"Sales Enablement\" SaaS\n2. \"VP Sales\" SaaS\n3. \"Revenue Operations\" SaaS\n\nThen apply these LinkedIn UI filters:\n- Company size: 50-500 employees (sales teams large enough to have onboarding pain)\n- Industry: Software Development\n- Location: US, Europe (or your target)\n\nGoogle alternative:\nsite:linkedin.com/in \"Sales Enablement\" SaaS\n```\n\n**Expected results:** 500+ profiles. Pick 10-15 who are VP/Director level at B2B SaaS companies.\n\n### When to Default to Founders (Small Companies)\n\n**Use founder searches (regardless of phase) when:**\n1. The problem space is inherently a startup/tech problem (AI agents, developer tools, early-stage product decisions, PLG growth, etc.)\n2. The user mentions \"AI startups\", \"SaaS companies\", \"tech companies\" without specifying a function\n3. The problem requires technical depth + decision authority in one person (only true at <50 employee companies)\n\n**Always add these filters for founder searches:**\n- Company size: 5-50 employees (at 50+, founders are too far from operational pain)\n- Stage: Seed to Series A (Series B+ founders are in board meetings, not feeling daily pain)\n\n**Do NOT use founder searches when:**\n1. The problem sits in a specific department of larger companies (QA in Pharma, Sales Ops in Enterprise SaaS)\n2. The user explicitly mentions a non-founder role (\"I want to talk to sales managers\")\n3. The company size is >100 employees (founders are too removed from operational reality)\n\n### Output Format\n\nAfter collecting the research brief, output:\n\n```markdown\n## Search Queries for [Problem Space] - Phase [A/B/C]\n\n**Target Persona:** [Tier 1/2/3 description]\n**Why this persona:** [1 sentence explaining why they're the right people to talk to in this phase]\n\n### LinkedIn People Search (copy-paste these):\n\n1. [Query 1]\n2. [Query 2]\n3. [Query 3]\n\n### Google Site Search (no LinkedIn login needed):\n\n[Google query]\n\n### Filters to Apply on LinkedIn:\n- Company size: [range]\n- Location: [if specified]\n- Industry: [if relevant]\n- [Any other relevant filters]\n\n### Additional sourcing ideas:\n[If applicable: YC batches, VC portfolios, industry lists, conferences, etc.]\n\n---\n\n**Next step:** Browse these searches, pick 10-15 people who look relevant, and paste their info (name, title, company, LinkedIn URL if available). I'll research their companies and draft personalized outreach.\n```\n\nTell the user to browse these, pick people who look relevant, and paste what they find.\n\n## Phase 2: User Pastes Contacts → Auto-Filter & Prioritize\n\n**CRITICAL: When user pastes contacts, DO NOT ask them for more information. Immediately start enriching and filtering.**\n\nThe user browses LinkedIn manually and pastes contact information. Accept **any format** — the skill must parse all of these:\n\n**Accepted input formats:**\n- Plain text: `\"Max Müller, CTO at AgentStack, linkedin.com/in/maxmueller\"`\n- Bullet lists or numbered lists\n- Pasted LinkedIn search result snippets (name, headline, company from the cards)\n- Pasted LinkedIn profile URLs (one per line)\n- CSV or spreadsheet paste\n- Screenshot descriptions (\"I see these 5 people...\")\n- Partial info: just names and companies, or just profile URLs\n\n**What to extract from user input:**\n- Name\n- Title / headline\n- Company name\n- LinkedIn profile URL (if provided)\n- Location (if visible)\n- Any other context the user mentions\n\n**Immediate next step after parsing:**\n1. Check open browser tabs for LinkedIn pages the user already has open:\n   ```bash\n   openclaw browser tabs --browser-profile openclaw\n   ```\n   For any contact who has a tab open, snapshot it immediately — this gives richer data than Google cache:\n   ```bash\n   openclaw browser snapshot --target-id <id> --browser-profile openclaw\n   ```\n2. For contacts with no open tab, enrich via Google cache (see Phase 3)\n3. Do quick company research (website check, Crunchbase if available)\n4. Apply scoring rules (see Phase 4) to identify high-value contacts (score 3+)\n5. Output a filtered list showing:\n   - **HIGH PRIORITY (score 4-5):** [Name, Title, Company, why they're high-value]\n   - **MEDIUM PRIORITY (score 3):** [Name, Title, Company]\n   - **SKIP (score 1-2):** [Name, Company, reason to skip]\n\n6. For HIGH and MEDIUM priority contacts, check if any post tabs are open for them. If yes, snapshot those too for hook extraction. If not, fall back to Google search for public content.\n\n**What to do with partial info:**\n- If the user gives only a profile URL: enrich via Google cache\n- If the user gives only a name + company: enrich via Google cache, then start company research\n- NEVER ask the user to go back to LinkedIn for more data. Work with what you have + Google cache.\n\n**Deduplication:** Cross-check against the exclusion list from Phase 1. Skip anyone already contacted.\n\n## Phase 3: Enrich and Research\n\nFor each contact, enrich missing data and research their company. Use the tab-reading method first, fall back to Google cache if no tabs are open.\n\n### Method 1: Read Open LinkedIn Tabs (Preferred)\n\nIf the user has opened the profile in the browser, read it directly. This gives full profile content — work history, about section, recent posts — all in one snapshot.\n\n```bash\n# Check what is open\nopenclaw browser tabs --browser-profile openclaw\n\n# Read a profile tab\nopenclaw browser snapshot --target-id <id> --browser-profile openclaw\n```\n\nExtract from profile snapshot:\n- Full name, current title, company, location\n- About section — often contains personal framing and priorities in their own words\n- Work history — tenure and career trajectory signal how deeply they feel the problem\n- Recent posts visible on profile — direct hook material with dates\n\nExtract from post tab snapshots:\n- Full post text — use this as the `[Personal Hook]`\n- Source citation: `Quelle: linkedin.com/posts/...` (URL from the tab)\n\n**Never click, scroll, or interact. Only snapshot what is already loaded.**\n\n### Method 2: Google-Cached LinkedIn Enrichment (Fallback)\n\nWhen no tab is open for a contact. Google indexes LinkedIn profiles and shows name, headline, company, and location in the search snippet — **without ever visiting LinkedIn**.\n\n**When to use:** For every contact where you're missing title, company, location, or profile URL.\n\n**How it works:**\n\n```bash\n# If you have a name + company:\nopenclaw browser navigate \"https://www.google.com/search?q=site%3Alinkedin.com%2Fin+%22<Name>%22+%22<Company>%22\" --browser-profile openclaw\nopenclaw browser snapshot --browser-profile openclaw\n\n# If you have only a profile URL slug:\nopenclaw browser navigate \"https://www.google.com/search?q=site%3Alinkedin.com%2Fin%2F<slug>\" --browser-profile openclaw\nopenclaw browser snapshot --browser-profile openclaw\n\n# If you want to find more decision makers at a qualified company:\nopenclaw browser navigate \"https://www.google.com/search?q=site%3Alinkedin.com%2Fin+%22<Company>%22+%22CTO%22+OR+%22founder%22+OR+%22VP%22\" --browser-profile openclaw\nopenclaw browser snapshot --browser-profile openclaw\n```\n\n**What you get from Google snippets (without visiting LinkedIn):**\n- Full name\n- Headline (usually title + company)\n- Location (city, country)\n- Profile URL\n- Sometimes first ~200 chars of About section\n\n**What you do NOT get (and that's fine):**\n- Full work history\n- Connections\n- Contact info\n- Full activity feed\n\n**This is enough.** Name + title + company + location is all you need for scoring and outreach drafting. The `[Company Detail]` for outreach comes from the company website and Google searches about the person — not from their LinkedIn profile.\n\n**Important:** Never click through to the LinkedIn profile from Google results. Only read the snippet text visible on the Google results page itself.\n\n### Company Website\n\nUse web fetch or the openclaw browser to check the company website:\n\n```bash\nopenclaw browser navigate \"<company-website>\" --browser-profile openclaw\nopenclaw browser snapshot --browser-profile openclaw\n```\n\nCheck: `/about`, `/team`, `/about-us`, `/careers`, `/pricing`, `/blog`\n\n**Green flags (general):**\n- Professional site, clear product, customer logos/case studies\n- Active blog (<3 months), hiring page with open roles, pricing page\n\n**Green flags (strong — from outreach learnings):**\n- AI agents / autonomous workflows are the **core product** (not a feature)\n- Founder talks publicly about agent reliability, hallucination, context, eval\n- Company has raised seed-Series B in the last 18 months\n- Product involves RAG, multi-agent, agentic workflows, or LLM orchestration\n- Visible customer base (not just \"coming soon\")\n\n**Red flags:**\n- Dead/parked site, no product (just buzzwords), \"coming soon\", 2+ year old blog\n- AI is a bolt-on feature, not the core product\n- No visible agent/LLM work — just classical ML or analytics\n- Founder has no public presence (no posts, no talks, no blog)\n\n### Crunchbase / Funding\n\n```bash\nopenclaw browser navigate \"https://www.crunchbase.com/organization/<company-slug>\" --browser-profile openclaw\nopenclaw browser snapshot --browser-profile openclaw\n```\n\nExtract: funding stage, amount, date, employee count, investors.\n\n### Google the Person (CRITICAL FOR OUTREACH HOOKS)\n\n**ALWAYS do this automatically for score 3+ contacts. This is how you find personal hooks without asking the user.**\n\nFor each contact, search for public content to find the `[Personal Hook]` needed for outreach:\n\n**Priority 1 - LinkedIn Posts (via Google):**\n```\nsite:linkedin.com/posts/<profile-slug>\nsite:linkedin.com/feed/update (if recent posts are indexed)\n```\nLinkedIn posts are the BEST source because they're recent, specific, and show what the person is currently thinking about.\n\n**Priority 2 - Interviews, Podcasts, Talks:**\n```\n\"<full-name>\" \"<company>\" podcast OR interview OR talk\n\"<full-name>\" \"<company>\" conference OR speaking OR panel\n```\n\n**Priority 3 - Twitter/X Posts:**\n```\n\"<full-name>\" site:twitter.com OR site:x.com\n\"<full-name>\" \"<company>\" site:twitter.com\n```\n\n**Priority 4 - Company Blog:**\nCheck the company blog for posts written by the contact. Often reveals their interests and current technical focus.\n\n**Priority 5 - GitHub Activity (for technical founders):**\n```\n\"<full-name>\" \"<company>\" site:github.com\n```\n\n### Decision Tree for Personal Hooks\n\nFor each HIGH/MEDIUM priority contact, work through these steps in order:\n\n**Step 1 — Check open tabs first:**\n```bash\nopenclaw browser tabs --browser-profile openclaw\n```\nIf a post tab is open for this person → snapshot it → extract hook text → go to Phase 5\nIf a profile tab is open → snapshot it → check About section and visible posts for hook material\n\n**Step 2 — If no useful tabs, Google for public content:**\nSearch for interviews, podcasts, talks, Twitter posts (see \"Google the Person\" section above).\nIf found → extract quote → go to Phase 5\n\n**Step 3 — If nothing found and contact is score 4-5 (HIGH PRIORITY):**\n→ Tell the user: \"**HIGH PRIORITY - NEED MANUAL RESEARCH:** [Name] at [Company] scores [X]/5. Please open their LinkedIn profile in the browser — I'll read it from the tab. Or paste any posts/quotes directly here.\"\n→ If user opens tab: snapshot it, extract hook, draft\n→ If user pastes text: use it as hook, no URL needed\n\n**Step 4 — If nothing found and contact is score 3 (MEDIUM PRIORITY):**\n→ Mark as \"SKIP - no hook found\"\n→ Move on. Do not ask the user for manual research.\n\n**Source citation rules:**\n- **Tab snapshot (profile or post):** Use the URL from the tab as source\n  - `Quelle: https://linkedin.com/posts/name-activity-123`\n- **Google search result:** Full URL of the article, podcast, tweet\n- **User pasted it manually:** No URL needed\n  - `Quelle: LinkedIn Post (bereitgestellt vom User)`\n  - `Source: LinkedIn post (user-provided)`\n\n### Size Estimation\n\nUse website (team page, careers page) + Crunchbase for employee count. Don't rely on LinkedIn employee count (we're not checking it).\n\n### Company Rating\n\n| Rating | Profile | Action |\n|--------|---------|--------|\n| A | 5-200 employees, AI-agent-first product, funded/growing, active online | Research further — highest response rate |\n| B | 20-500 employees, AI is a significant product line but not sole focus | Research if A-tier is thin |\n| C | <5 (too early), >1000 (enterprise), AI is tangential, or stale presence | Skip |\n\n## Phase 4: Score and Rank\n\n### Title Priority\n\n| Tier | Titles | Why |\n|------|--------|-----|\n| 1 | Founder, CEO, CTO, COO | Own the problem and the budget |\n| 2 | VP, SVP, Head of [Function] | Direct authority over team/budget |\n| 3 | Director | Influence + context, often closer to the problem |\n| 4 | Senior Manager | Only at small companies (<100) where this is effectively director-level |\n\n**Skip:** ICs, analysts, associates, coordinators, interns. \"Lead ML Engineer\" at a 200+ person company is still an IC — skip unless they're effectively running the team.\n\n### Company Targeting Priority\n\n| Priority | Company type | Size | Why |\n|----------|-------------|------|-----|\n| 1 (Best) | AI-agent-first startup — agents ARE the product | 5-80 employees | Founder feels the pain, can decide in 5 min |\n| 2 | AI platform / infra (eval, observability, orchestration) | 20-200 employees | Adjacent problem space, sees many agent teams |\n| 3 | Vertical SaaS actively shipping AI agents | 50-300 employees | Has the problem but may not prioritize it |\n| 4 (Skip) | Enterprise with \"AI transformation\" initiatives | >1000 employees | Too slow, wrong level of access |\n\n### Combined Score (1-5)\n\n| Score | Person | Company | Verdict |\n|-------|--------|---------|---------|\n| 5 | Tier 1, AI-agent-first, active online | Priority 1 | Interview immediately |\n| 4 | Tier 1-2, relevant domain, agents are core | Priority 1 or 2 | Strong candidate |\n| 3 | Tier 1-2, somewhat relevant, AI is a feature | Priority 2 or 3 | Worth reaching out |\n| 2 | Right title wrong domain, or right domain but IC | Priority 3 | Only if pipeline is thin |\n| 1 | IC, enterprise, or no visible agent work | Priority 4 | Do not contact |\n\n**Disqualify (omit from CSV):**\n- ICs at large companies\n- Dead company websites\n- Role tenure <3 months\n- Companies where AI/agents are not core\n- Anyone on the exclusion list from Phase 1\n\n## Phase 5: Draft Outreach (A/B Testing Framework)\n\nFor contacts scored 3+, strictly generate TWO distinct outreach variations based on [references/outreach-templates.md](references/outreach-templates.md). Read that file before drafting.\n\n### Hard Enforcement Rules\n\nThese are non-negotiable. If a draft violates any of them, it is a failure. Regenerate.\n\n**Rule 1 — Personal Hook, Not Company Description:**\nThe opening MUST reference something the person *said, wrote, or publicly decided*. NEVER describe what their company does, how big they are, who their customers are, what their tech stack is, or what stage they are at. They founded it. They live it every day. Telling them facts about their own company is condescending.\n\nBANNED OPENERS (all variations of telling them what they already know):\n- FAIL: \"Synthflow processes 65M voice calls\" → describing their scale\n- FAIL: \"You build AI agents for contact centers\" → describing their product\n- FAIL: \"ihr verarbeitet 65 Millionen Calls und habt nach der Series A noch mehr Volumen vor euch\" → describing their scale AND funding\n- FAIL: \"Brand Eins schrieb über dich als Mitverantwortlichen für das DSGVO-konforme Langdock-Stack\" → describing their tech stack\n- FAIL: \"Cognigy powers enterprise CX agents for Fortune 500s\" → describing their customers\n- FAIL: \"Nexus lets non-technical teams build agents\" → describing their value prop\n\nCORRECT OPENERS (reference something they personally said or decided):\n- PASS: \"du hast beim SaaStock erwähnt, dass die Qualitätsmessung im letzten Schritt das eigentliche Problem ist\" → references what they said\n- PASS: \"your LinkedIn post about proving prompt changes to stakeholders hit home\" → references what they wrote\n- PASS: \"ihr habt euch bewusst für EU-Infrastruktur entschieden statt US-Cloud\" → references a specific decision they made (not what the company does)\n\nIf you cannot find something they personally said, wrote, or decided, DO NOT SEND. Use a fallback contact where you do have a personal hook.\n\n**Rule 2 — Honest Framing, No Fake Credibility:**\nNEVER say \"my 20 teams\", \"the teams I work with\", or imply you have clients or a consultancy. You are having research conversations with founders. Say \"ich spreche gerade mit ein paar Gründern darüber\" or \"I've been talking to a few founders about this.\" That is true from the first conversation.\n\n**Rule 3 — Forward-Selling Arbitrage:**\nEnd with the trade: offer to share what you are hearing from other founders in exchange for their perspective. Do not quantify it falsely. \"Ich teile dir gerne, was ich höre\" is enough. Honest and open.\n\n**Rule 4 — 40-Word Ceiling:**\nMaximum 3-4 sentences. Maximum 40 words total. Cut everything that is not load-bearing.\n\n**Rule 5 — Flat, Normal Tone:**\nWrite like a normal person texting a peer. No marketing verbs, no cool-sounding language, no words that try to sound energetic (\"jagt durch\", \"spannend\", \"krass\", \"revolutioniert\"). Slightly boring is correct. Authenticity beats style.\nAvoid words that sound negative or accusatory in German: \"betonst du überall\", \"rumklicken\", \"herumexperimentieren\". Re-read each draft and ask: does any word make the recipient feel criticized or looked down on? If yes, rewrite.\nAvoid words that minimize their writing or work: \"blurb\", \"snippet\", \"little post\". Treat what they wrote as something worth taking seriously.\n\n**Rule 6 — One Language Per Message:**\nEach message must be entirely in one language. German for DACH contacts, English otherwise. Do not mix. The only exception is proper nouns, product names, and established technical terms (e.g. \"Prompt\", \"RAG\", \"Eval\") that have no natural German equivalent.\n\n**Rule 7 — No Em-Dashes (—):** Use commas or periods.\n\n**Rule 8 — No Disclaimers:** Drop \"kein Pitch\", \"not selling\", \"rein explorativ\". If the message is interesting it will not read as a pitch.\n\n**Rule 9 — Source citation (flexible based on source):**\nAfter every generated message, add a source line showing where the hook came from.\n\n**If YOU found the hook via Google/public search:**\n- Add \"Quelle:\" (German) or \"Source:\" (English) with the full URL\n- LinkedIn post: full LinkedIn post URL\n- Interview/article: full article URL\n- Podcast: episode URL or show notes URL\n\n**If USER manually provided the hook (after you asked for manual research):**\n- Add \"Quelle:\" or \"Source:\" with just the content type, NO URL needed\n- Examples:\n  - \"Quelle: LinkedIn Post (bereitgestellt vom User)\"\n  - \"Source: LinkedIn post (user-provided)\"\n  - \"Quelle: Podcast-Interview (bereitgestellt vom User)\"\n\n**If you cannot find a hook via Google:**\n- High-relevance (score 4-5): Ask user \"HIGH PRIORITY - NEED MANUAL RESEARCH: [Name] at [Company] scores [X]/5. Please check their LinkedIn profile and paste any relevant posts or quotes.\"\n- Medium-relevance (score 3): Skip contact, move to next\n\nExamples (YOU found it):\n```\nQuelle: https://www.linkedin.com/posts/lennard-schmidt_langdock-prompt-regression-activity-123456789\nSource: https://www.businessinsider.com/langdock-growth-2026-02\n```\n\nExamples (USER provided it):\n```\nQuelle: LinkedIn Post (bereitgestellt vom User)\nSource: Podcast interview (user-provided)\n```\n\n### Variations\n\nGenerate these two variations for every contact:\n- **Winkel A (The Reality Check):** Based on Template 1. Provokes a reaction about a specific, ugly bottleneck.\n- **Winkel B (The Contrarian):** Based on Template 3. Poses a counter-intuitive market observation.\n\nOutput both drafts in the JSON under `outreach_draft_A` and `outreach_draft_B`. Add `source_A` and `source_B` fields with the verification sources.\n\n**Language:** Default to German for DACH-region contacts, English otherwise. Ask user if unclear.\n\n## Phase 6: Sync to Google Sheets\n\n**First time only:** Follow the setup guide at `~/.openclaw/skills/outreach-research/SHEETS_SETUP.md`.\n\nAfter drafts are ready, sync all scored contacts directly to the shared Google Sheet:\n\n```bash\npython3 ~/.openclaw/skills/outreach-research/scripts/sync_to_sheets.py \\\n  --data '<JSON array>' \\\n  --min-score 3\n```\n\nIf the user has a specific sheet they want to write to, pass `--sheet-id`:\n\n```bash\npython3 ~/.openclaw/skills/outreach-research/scripts/sync_to_sheets.py \\\n  --data '<JSON array>' \\\n  --sheet-id 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms\n```\n\n**What happens:**\n- New contacts are appended as new rows\n- If a contact's LinkedIn URL already exists in the sheet, their row is updated (drafts, score, notes refreshed) without touching the Status or Contacted On columns the user manages manually\n- The sheet is created automatically if it doesn't exist yet\n- Script prints the sheet URL on completion\n\n**Sheet columns (auto-created):**\n\n| Column | Source | Who manages |\n|--------|--------|-------------|\n| Name, Title, Company, URL, Size, Rating, Notes, Location, LinkedIn, Score, Experience | Skill research | Skill (auto-updated) |\n| Draft A, Draft B, Source A, Source B | Phase 5 output | Skill (auto-updated) |\n| Status | e.g. \"To Send\", \"Sent\", \"Replied\", \"Skip\" | You manually |\n| Contacted On | Date you sent | You manually |\n\n**Fallback — CSV output (if Sheets not configured):**\n\n```bash\npython3 ~/.openclaw/skills/outreach-research/scripts/generate_csv.py \\\n  --output ~/.openclaw/workspace/linkedin_research_$(date +%Y-%m-%d).csv \\\n  --data '<JSON array>' \\\n  --min-score 3\n```\n\n**JSON format per contact (used for both Sheets sync and CSV):**\n\n```json\n{\n  \"name\": \"Jane Smith\",\n  \"title\": \"VP Product\",\n  \"company\": \"Acme Corp\",\n  \"company_url\": \"https://acme.com\",\n  \"company_size\": \"~120 employees\",\n  \"company_rating\": \"A\",\n  \"company_notes\": \"Series B, active SaaS product, hiring 8 roles\",\n  \"location\": \"San Francisco, CA\",\n  \"profile_url\": \"https://linkedin.com/in/janesmith\",\n  \"relevance_score\": 4,\n  \"relevance_notes\": \"Led product at 3 B2B SaaS cos, posts about user research methods\",\n  \"experience_summary\": \"10yr product leadership, prev. Stripe and Notion\",\n  \"outreach_draft_A\": \"Hi Jane, ...\",\n  \"outreach_draft_B\": \"Hi Jane, ...\",\n  \"source_A\": \"https://linkedin.com/posts/janesmith-activity-123\",\n  \"source_B\": \"https://techcrunch.com/interview-jane-smith\"\n}\n```\n\n## Tips\n\n- **Google `site:linkedin.com/in` is your best friend** — gets profile URLs and titles without logging into LinkedIn\n- **Company-first saves time:** Qualifying 20 companies (5 min each via their website) then finding 1-2 people each is faster than researching people one by one\n- **Sales Navigator** (if available) has better filters: `linkedin.com/sales/search/people`\n- **Boolean search:** `\"VP Engineering\" AND (SaaS OR \"B2B\") NOT \"looking for\"`\n- **Batch by company:** Find one good person → ask the user if they see more relevant contacts at the same company\n- **2nd connections** are warm intro opportunities — if the user mentions mutual connections, prioritize those contacts\n","readmeExcerpt":"--- name: outreach-research description: Generate targeted LinkedIn search queries based on problem space and outreach phase, then research and qualify contacts for problem discovery outreach. User tells the skill what problem they're exploring and what phase they're in (problem discovery, validation, or decision). Skill generates tailored search queries, then handles company research via public sources, Google-cache","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"openclaw browser start --browser-profile openclaw"},{"language":"bash","snippet":"# List all open tabs\nopenclaw browser tabs --browser-profile openclaw\n\n# Read a specific tab by its target-id\nopenclaw browser snapshot --target-id <id> --browser-profile openclaw"},{"language":"text","snippet":"Phase A (Problem Discovery):\n\"[Job Title]\" [Industry]\nExample: \"Quality Manager\" Pharma\n\nPhase B (Validation):\n\"Head of [Function]\" [Industry]\nExample: \"Head of Quality\" Pharma\n\nPhase C (Decision):\n\"VP [Function]\" [Industry]\nExample: \"VP Quality\" Pharma"},{"language":"text","snippet":"All Phases (target founders at small companies):\nfounder [Industry/Tech]\nExample: founder AI\nExample: CEO SaaS\n\nThen use LinkedIn filters: Company size (1-50), Location, Industry"},{"language":"text","snippet":"Phase A - Tier 1 (Problem Discovery):\n\nLinkedIn People Search (copy these one by one):\n1. \"Quality Manager\" Pharma\n2. \"Regulatory Affairs\" Pharma\n3. \"Compliance Manager\" Biotech\n\nThen apply these LinkedIn UI filters:\n- Company size: 50-1,000 employees\n- Location: Germany (or your target region)\n- Current company (to filter out job seekers)\n\nGoogle alternative (no LinkedIn login):\nsite:linkedin.com/in \"Quality Manager\" Pharma Germany"},{"language":"text","snippet":"Phase A - Founders at AI-Agent Companies (5-50 employees):\n\nLinkedIn People Search (copy these one by one):\n1. founder AI\n2. CEO \"machine learning\"\n3. CTO agent\n\nThen apply these LinkedIn UI filters:\n- Company size: 1-50 employees (founders still feel operational pain)\n- Industry: Software Development, Internet\n- Location: San Francisco, Berlin, London (or your target)\n\nGoogle alternative (no LinkedIn login):\nsite:linkedin.com/in founder AI Berlin\nsite:linkedin.com/in CEO \"AI agent\" \"San Francisco\"\n\n**Where to find AI-agent startups:**\n- YC W24/S24/W25 batches — filter for AI/agent companies\n- EU AI startup lists: Sifted, Tech.eu, HTGF portfolio pages\n- Product Hunt launches tagged \"AI agent\" in last 6 months\n- VC portfolios: HTGF, Earlybird, Cherry Ventures, La Famiglia, Accel — filter for AI\n- GitHub trending — founders of popular agent frameworks often have startups"}],"parameters":{},"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["typescript"],"docsSourceLabel":"GITHUB OPENCLEW","editorialOverview":"Generate targeted LinkedIn search queries based on problem space and outreach phase, then research and qualify contacts for problem discovery outreach. User tells the skill what problem they're exploring and what phase they're in (problem discovery, validation, or decision). Skill generates tailored search queries, then handles company research via public sources, Google-cached LinkedIn enrichment, scoring, and A/B outreach draft generation. Triggers on \"find people to interview about X\", \"I'm exploring Y problem\", \"who should I talk to about Z problem\", \"generate search queries for [problem]\", \"qualify these contacts\", \"draft outreach for these people\". --- name: outreach-research description: Generate targeted LinkedIn search queries based on problem space and outreach phase, then research and qualify contacts for problem discovery outreach. User tells the skill what problem they're exploring and what phase they're in (problem discovery, validation, or decision). Skill generates tailored search queries, then handles company research via public sources, Google-cache","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":452,"uniquenessScore":57,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-04-15T05:21:22.124Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-04-15T05:21:22.124Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-09T12:04:47.546Z","emptyReason":null},"items":[{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-10T18:48:31.762Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/github_openclew","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}