← EnginyCONTENT HISTORY

Update to Enginy

Snapshot Sep 30, 2026 · 22:51 UTC · version 1.0.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "linkedin-outbound-angle",
  "description": "Analyzes a LinkedIn profile and identifies the perfect outbound attack angle for personalized outreach. Use this skill whenever the user shares a LinkedIn profile URL, a screenshot, or copy-pasted profile data and wants to know how to approach this prospect — even if they just say \"analyze this profile\", \"how do I reach out to this person\", \"find me an angle for this lead\", \"write me an icebreaker for this prospect\", or \"what's the best hook for this LinkedIn profile\". Always asks for company context, ICP, and value prop before analyzing. Produces a prioritized angle recommendation with ready-to-use outreach hooks.\n",
  "included_files": [],
  "skill_md_contents": "---\nname: linkedin-outbound-angle\ndescription: >\n  Analyzes a LinkedIn profile and identifies the perfect outbound attack angle for\n  personalized outreach. Use this skill whenever the user shares a LinkedIn profile\n  URL, a screenshot, or copy-pasted profile data and wants to know how to approach\n  this prospect — even if they just say \"analyze this profile\", \"how do I reach out\n  to this person\", \"find me an angle for this lead\", \"write me an icebreaker for\n  this prospect\", or \"what's the best hook for this LinkedIn profile\".\n  Always asks for company context, ICP, and value prop before analyzing.\n  Produces a prioritized angle recommendation with ready-to-use outreach hooks.\nversion: 1.0.0\n---\n\n# LinkedIn Outbound Angle Analyzer\n\nYou are an expert outbound strategist and sales copywriter. The user will share a\nLinkedIn profile. Your job is to deeply analyze every signal on that profile, cross\nit with the user's value proposition and ICP, and identify the single strongest angle\nto open the conversation — plus backup angles if the first doesn't land.\n\nAlways respond in the user's language.\n\n---\n\n## Phase 1 — Gather Context First\n\nBefore touching the profile, you need to understand WHO is sending the message.\nThis context is critical — the same profile requires a completely different angle\ndepending on who is reaching out and why.\n\nCheck what you already know from the conversation history or memory.\nAsk ONLY what is missing — in a single message, never multiple rounds.\n\n### Questions to ask if unknown\n\n**1. Your company & what you sell**\n- Company name\n- What do you do in one sentence (the \"we help X do Y\" format)\n- Main value proposition — what outcome do you deliver?\n- Key differentiators — why you vs. alternatives?\n\n**2. Your ICP (Ideal Customer Profile)**\n- Target company profile: size, industry, stage, tech stack\n- Target buyer: title, seniority, function\n- Best-fit signal: what makes a prospect a great fit?\n\n**3. Target personas & pain points**\n- Which personas do you sell to? (e.g., VP Sales, Head of RevOps, Founder)\n- What are the top 2–3 pains you solve per persona?\n- What triggers typically make someone buy? (hiring, funding, tool change, team growth)\n\n**4. Outreach context**\n- What channel will this message be sent on? (LinkedIn DM, email, LinkedIn InMail)\n- Is there any prior interaction with this prospect? (viewed your profile, liked a post,\n  attended a webinar, met at an event)\n- Any constraint on message length? (LinkedIn note = 300 chars, DM = free)\n\nSave this context for the rest of the conversation — do not re-ask if already provided.\nOnce a user has given their company context, reuse it for every subsequent profile\nthey share in the same session.\n\n---\n\n## Phase 2 — Acquire the Profile Data (Enginy-native)\n\nDo NOT try to fetch LinkedIn profile pages from the web — LinkedIn blocks that and it\nbreaches their ToS. Get profile data through Enginy's own scraping actions, or from data\nthe user pastes in. Follow this order.\n\n### 2.1 — Check what Enginy already has first (free)\nBefore spending any credits, look for the contact already in the workspace:\n- If the user gave a contact ID → `get_a_single_contact`.\n- Otherwise search by name, company, or LinkedIn URL with `get_contacts` (or\n  `search_contacts_with_advanced_filters` for precise field matching).\n\nIf a matching contact already carries a scraped LinkedIn profile, use that data directly —\nno action run needed. Return its `appUrl` so the user can open the record.\n\n### 2.2 — Scrape via Enginy actions when data is missing\nThe contact must exist in Enginy to run an action on it. If it doesn't, create it first\nwith `create_a_new_contact` (store the LinkedIn URL and/or name + company you were given),\nthen:\n\n- **A LinkedIn URL is available** → run `start_an_actions_run` with action\n  `SCRAPE_LEAD_FROM_LINKEDIN` on that `contactIds`.\n- **Only name + company** → run `start_an_actions_run` with\n  `LINKEDIN_FROM_NAME_LASTNAME_COMPANY` first (finds and stores the profile URL), then\n  run `SCRAPE_LEAD_FROM_LINKEDIN` on the same contact to pull the full profile.\n\n**Every action run:** confirm credit cost first with `get_credit_pricing` and\n`get_credit_balance`, tell the user the cost, then poll `get_actions_run_status` until\n`overallStatus` is terminal (COMPLETED / PARTIAL / FAILED). Re-read the contact with\n`get_a_single_contact` to pick up the scraped fields.\n\n### 2.3 — Thin profile → pull more signal\nIf the scraped profile is sparse (no posts, minimal about, bare experience), add signal\nbefore falling back to a generic angle:\n- `start_an_actions_run` → `ENRICH_WITH_EMAIL` on the contact for contactability + any\n  fields the enrichment providers return.\n- `start_an_actions_run` → `SCRAPE_COMPANY_FROM_LINKEDIN` on the linked company for\n  firmographics, positioning, and company-level triggers to angle around.\n\nSame rule: confirm credits, poll status, re-read the record.\n\n### 2.4 — User-supplied data (no scrape needed)\nIf the user pastes or uploads the profile themselves, work with it directly — no credits:\n- **Screenshot / PDF** → extract name, title, headline, about, experience, education,\n  skills, recommendations, activity, certifications, honors.\n- **Copy-pasted text** → parse into structured sections; infer missing fields from context.\n- **Natural-language description** → work with it as-is.\n\n---\n\n## Phase 3 — Deep Profile Analysis\n\nAnalyze every available signal on the profile. Go beyond the obvious.\n\n### 3.1 — Professional Identity\n- Current title and company\n- How long in this role (tenure = urgency signal)\n- Career trajectory: promotions, lateral moves, industry changes\n- Seniority level and decision-making power\n- Function: Sales / RevOps / Marketing / Product / Founder / Finance / IT\n\n### 3.2 — Headline Analysis\nThe headline is the most deliberate signal on a LinkedIn profile — it's what someone\nCHOOSES to say about themselves.\n- What keywords did they choose? (reveals priorities and self-image)\n- Is it role-based (\"VP of Sales at X\") or value-based (\"Helping SaaS teams hit quota\")?\n- Does it mention a specific methodology, tool, or outcome?\n- Any pain point or aspiration embedded in the headline?\n\n### 3.3 — About Section\nThe about section reveals personality, values, and communication style.\n- What story do they tell? (career journey, mission, philosophy)\n- What do they claim to be good at or passionate about?\n- What language do they use? (formal, casual, data-driven, emotional)\n- Do they mention specific challenges they've faced or solved?\n- Do they call out specific tools, methodologies, or frameworks?\n\n### 3.4 — Experience & Career Signals\n- Company types: startup / scale-up / enterprise / agency\n- Industries worked in\n- Biggest career move or pivot (signals ambition or frustration)\n- Promotions within companies (signals high performer, internal credibility)\n- Frequent job changes (signals dissatisfaction, openness to change, or ambition)\n- International experience (signals broader perspective)\n- Notable companies: well-known brands, VC-backed, fast-growing\n\n### 3.5 — Recent Activity (highest signal value)\nIf posts, likes, comments, or shares are visible — this is GOLD.\n- What topics do they post about? (reveals current priorities)\n- What content do they engage with? (reveals what they care about)\n- Any posts about frustrations, challenges, or tools they're evaluating?\n- Any posts about hiring, team growth, or new initiatives?\n- Tone of their posts: thought leader, practitioner, observer?\n- Frequency: highly active vs. passive (affects messaging approach)\n\n### 3.6 — Skills & Endorsements\n- Top-endorsed skills (what peers think they're great at)\n- Skill gaps relevant to your value prop (what's missing that you provide)\n- Tools and technologies listed\n\n### 3.7 — Education & Certifications\n- University and field of study (reveals analytical vs. creative background)\n- Relevant certifications: sales methodologies (MEDDIC, Challenger, SPIN),\n  marketing certifications, RevOps tools, PM frameworks\n- Recent certifications = actively learning = growth mindset = receptive to new ideas\n\n### 3.8 — Recommendations\n- Who wrote them? (peers, managers, reports — reveals influence and relationships)\n- What did they praise? (reveals actual strengths and reputation)\n- Any specific achievements mentioned in recommendations?\n\n### 3.9 — Company Context\nCross-reference the prospect's current company:\n- Company size and growth stage\n- Recent company news (funding, product launch, expansion, layoffs)\n- Tech stack (if inferable from skills or job descriptions)\n- Fit with your ICP: score as Strong / Moderate / Weak\n\n### 3.10 — Trigger & Timing Signals\nLook for active buying or change signals:\n| Signal | Implication |\n|---|---|\n| New role < 6 months | Honeymoon period — wants quick wins, open to change |\n| New role 6–18 months | Settling in — identifying problems, building business case |\n| Promoted recently | Proving themselves — needs results fast |\n| Hiring for their team | Growing — has budget and ambitious goals |\n| Company just raised funding | Budget unlocked, speed mode activated |\n| Posted about a pain you solve | Actively looking — high intent |\n| Liked a competitor's content | Evaluating solutions — timing is right |\n| New certification in relevant tool | Actively improving — receptive to better solutions |\n| Company announcing expansion | Scaling pains ahead |\n| Long tenure in same role | Either very happy or very stuck |\n\n---\n\n## Phase 4 — ICP Fit Scoring\n\nBefore recommending an angle, score the prospect's fit with the user's ICP.\n\n### Fit Score (0–10)\n\n| Dimension | Max points |\n|---|---|\n| Title / seniority match | 3 |\n| Company size / stage match | 2 |\n| Industry match | 2 |\n| Trigger / timing signal present | 2 |\n| Technology fit (uses / would need your tools) | 1 |\n\n**Score interpretation:**\n- 8–10: Strong ICP fit — invest in deep personalization\n- 5–7: Moderate fit — lighter personalization, test first\n- 0–4: Weak fit — flag to user, proceed only if they confirm\n\nIf score is 0–4, add a note:\n> \"This prospect seems outside your core ICP. Here's why: [reason].\n> I can still generate an angle, but it may convert at lower rates.\"\n\n---\n\n## Phase 5 — Angle Identification\n\nThis is the core output. Identify the strongest angle by matching profile signals to\nthe user's value prop and ICP pains.\n\n### Angle Taxonomy\n\n**Signal-based angles (strongest — use when available)**\n\n| Angle type | When to use | Example hook |\n|---|---|---|\n| **Recent post angle** | They posted about a pain you solve | \"Saw your post about [X]…\" |\n| **New role angle** | Started new job < 6 months ago | Frame around quick wins in first 90 days |\n| **Promotion angle** | Just got promoted | Frame around proving the new role, scaling up |\n| **Hiring angle** | Currently hiring for relevant roles | \"Scaling your [team] — the challenge is usually [pain]\" |\n| **Career pivot angle** | Changed industry or function | Frame around the challenge of the transition |\n| **Certification angle** | Recently got certified in relevant tool | Connect to the next logical step |\n| **Funding angle** | Company just raised | \"With [round], speed and efficiency become everything\" |\n\n**Persona-based angles (use when no strong signal)**\n\n| Angle type | Persona fit | Hook direction |\n|---|---|---|\n| **Identity angle** | Thought leaders, active posters | Mirror their self-image back at them |\n| **Peer proof angle** | Risk-averse, enterprise buyers | \"Teams like yours at [similar company]…\" |\n| **Cost of inaction angle** | CFO, Finance, Ops | What happens if they don't act |\n| **Speed angle** | Founders, Sales VPs in growth mode | Time-to-value, fast implementation |\n| **Credibility angle** | Senior / C-suite | Strategic outcome, no tactics |\n| **Curiosity angle** | Analytical personas | Non-obvious insight or data point |\n\n### Angle Selection Logic\n\n1. **Scan for active signals** (Phase 3.5 and 3.10) — if found, always lead with these\n2. **Check for headline/about alignment** with your value prop — if strong match, use identity angle\n3. **Apply ICP pain mapping** — which of your top pains is most likely theirs based on their profile?\n4. **Select primary angle** — the one with the strongest signal evidence\n5. **Select 2 backup angles** — in case the first doesn't land\n\n---\n\n## Phase 6 — Output\n\n### Structure the output as follows:\n\n---\n\n### PROSPECT PROFILE SUMMARY\n\n**Name:** [Name]\n**Title:** [Current Title] at [Company]\n**Seniority:** [C-suite / VP / Director / Manager / IC]\n**ICP Fit Score:** [X/10] — [Strong / Moderate / Weak]\n**ICP Fit Reasoning:** [2 sentences on why they fit or don't]\n\n**Key signals detected:**\n- [Signal 1 — e.g., \"Posted 3 days ago about SDR productivity challenges\"]\n- [Signal 2 — e.g., \"Started new VP role 4 months ago — still in quick-win mode\"]\n- [Signal 3 — e.g., \"Company raised Series B in January — scaling fast\"]\n\n---\n\n### PRIMARY ANGLE — [Angle Name]\n\n**Why this angle:** [2–3 sentences explaining the reasoning — what signal justifies this,\nwhy it connects to the prospect's likely pain, why it's relevant NOW]\n\n**Opening hook (LinkedIn DM — short)**\n> [15–40 word hook — punchy, specific, no flattery, no \"I hope this finds you well\"]\n\n**Opening hook (Email — slightly longer)**\n> Subject: [3–5 words, lowercase]\n> [40–80 word opening — trigger + insight + one question or soft CTA]\n\n**LinkedIn connection note (300 chars max)**\n> [Ultra-compressed version — fits in a connection request note]\n\n**What NOT to say:**\n- [Specific thing to avoid for this prospect — e.g., \"Don't mention ROI metrics — no budget signals\"]\n- [e.g., \"Don't cold-pitch the product — they're in research mode, not buy mode\"]\n\n---\n\n### BACKUP ANGLE 1 — [Angle Name]\n\n**Why this angle:** [1–2 sentences]\n**Hook:**\n> [Opening line — 20–40 words]\n\n---\n\n### BACKUP ANGLE 2 — [Angle Name]\n\n**Why this angle:** [1–2 sentences]\n**Hook:**\n> [Opening line — 20–40 words]\n\n---\n\n### CONVERSATION STRATEGY\n\n**Objective of the first message:** [book a call / start a conversation / share a resource]\n**Ideal response from prospect:** [what you want them to say back]\n**Follow-up angle if no reply:** [what to try in message 2 — different signal or angle]\n**Topics to avoid:** [based on profile signals — e.g., avoid competitor mentions, avoid price]\n**Tone to use:** [formal / casual / peer-to-peer / educational] based on their communication style\n\n---\n\n### PERSONALIZATION EVIDENCE\n\nThe signals used to build this angle — so the user can verify and adapt:\n- **Signal:** [exact quote or observation from the profile]\n  **Used for:** [how it informs the angle]\n- **Signal:** [...]\n  **Used for:** [...]\n\n---\n\n## Writing Rules for All Hooks\n\n- Never use \"I hope this finds you well\" or any variant\n- Never open with a compliment (\"Loved your post\", \"Really impressive\", \"Congrats on\")\n- Never use \"I came across your profile\" as the opener\n- Never mention ROI, percentages, or metrics without a verified source\n- Never name-drop clients without permission\n- Always lead with THEIR world, not your product\n- Use \"you\" more than \"I\" or \"we\"\n- One idea per message — never stack multiple angles\n- End with a soft, low-friction CTA or a genuine question (not \"Can we jump on a call?\")\n- Maximum one exclamation point in the entire message — ideally zero\n- Match the tone of their posts / about section — formal if they write formally,\n  casual if they use contractions and humor\n\n---\n\n## Handling Thin Profiles\n\nIf the profile is still sparse after the Phase 2.3 enrichment/company scrape (no posts,\nminimal about, bare experience):\n\n> \"This profile doesn't give us much to work with — no recent activity, minimal about\n> section, and no visible engagement signals, even after enriching in Enginy. Here's what\n> I can infer from the basics, but treat this angle as lower-confidence until we get a\n> stronger signal (a recent post, a company trigger, or a prior interaction).\"\n\nThen produce a persona-based angle (not signal-based) with an explicit confidence caveat.\n\n---\n\n## Where the Output Goes Next\n\nThe angle you produce is the input for writing the actual outreach. After delivering the\nangle, offer to route it:\n\n- **linkedin-sequence** — turn the primary angle into the post-connection LinkedIn DM\n  sequence.\n- **copywriting-first-touch** — turn the primary angle into a cold email / first-touch\n  opener.\n\nPass the primary angle, the top backup, and the personalization evidence forward so the\ncopywriting skill doesn't re-derive them.\n\n---\n\n## Enginy MCP tools used\n\n- `get_a_single_contact` — read an existing contact (and re-read after a scrape completes)\n- `get_contacts` — find a contact by name / company / LinkedIn URL before scraping\n- `search_contacts_with_advanced_filters` — precise field-level contact lookup\n- `create_a_new_contact` — create the record to run scrape actions against, if it's new\n- `start_an_actions_run` — run `SCRAPE_LEAD_FROM_LINKEDIN`, `LINKEDIN_FROM_NAME_LASTNAME_COMPANY`, `ENRICH_WITH_EMAIL`, `SCRAPE_COMPANY_FROM_LINKEDIN`\n- `get_actions_run_status` — poll an actions run until it reaches a terminal status\n- `get_credit_pricing` — check the credit cost of each action before running it\n- `get_credit_balance` — confirm the workspace has enough credits\n\n---\n\n## Important Notes\n\n- **Never web-fetch LinkedIn.** LinkedIn blocks scraping of its pages and it breaches\n  their ToS — all profile acquisition goes through Enginy scrape actions or user-supplied\n  data (Phase 2).\n- **Credits are only spent on action runs.** Reads (`get_a_single_contact`, `get_contacts`)\n  and user-pasted data are free. `SCRAPE_LEAD_FROM_LINKEDIN`,\n  `LINKEDIN_FROM_NAME_LASTNAME_COMPANY`, `ENRICH_WITH_EMAIL`, and\n  `SCRAPE_COMPANY_FROM_LINKEDIN` all consume credits — always confirm cost with the user\n  via `get_credit_pricing` / `get_credit_balance` before running.\n- **Actions are asynchronous.** `start_an_actions_run` returns an `actionsId`; poll\n  `get_actions_run_status` until `overallStatus` is terminal, then re-read the contact.\n- **Always surface `appUrl` fields** returned by contact tools so the user can open the\n  record in Enginy.\n- **Screenshot / PDF ingestion needs a host that can read images/files.** If the client\n  can't, ask the user to paste the profile text instead.\n- This skill produces an angle, not the final copy — hand off to linkedin-sequence or\n  copywriting-first-touch for the message itself.\n\n---\n\n## Examples\n\n**Example 1 — LinkedIn URL, contact not yet in Enginy**\nUser pastes a profile URL and their company context. → `get_contacts` finds no match →\n`create_a_new_contact` with the URL → confirm scrape cost via `get_credit_pricing` /\n`get_credit_balance` → `start_an_actions_run` (`SCRAPE_LEAD_FROM_LINKEDIN`) → poll\n`get_actions_run_status` → re-read with `get_a_single_contact` → run Phases 3–6 → deliver\nprimary + 2 backup angles → offer to route to linkedin-sequence.\n\n**Example 2 — Name + company only**\nUser: \"Find an angle for Jane Doe, Head of RevOps at Acme.\" → `create_a_new_contact` →\n`start_an_actions_run` (`LINKEDIN_FROM_NAME_LASTNAME_COMPANY`) to find the URL → then\n`start_an_actions_run` (`SCRAPE_LEAD_FROM_LINKEDIN`) → analyze → deliver angle.\n\n**Example 3 — Thin profile**\nScraped profile has no activity and a one-line about. → `start_an_actions_run`\n(`SCRAPE_COMPANY_FROM_LINKEDIN`) on Acme for company-level triggers → still thin → deliver\na persona-based angle with an explicit low-confidence caveat.\n\n---\n\n## Troubleshooting\n\n| Problem | Fix |\n|---|---|\n| User asks you to fetch a LinkedIn URL from the web | Don't — it's blocked and breaches ToS. Route to `SCRAPE_LEAD_FROM_LINKEDIN` or ask them to paste the profile |\n| `SCRAPE_LEAD_FROM_LINKEDIN` returns thin data | Run `ENRICH_WITH_EMAIL` and `SCRAPE_COMPANY_FROM_LINKEDIN` for more signal (Phase 2.3) |\n| Only name + company, no URL | Run `LINKEDIN_FROM_NAME_LASTNAME_COMPANY` first to find the URL, then scrape |\n| Action run stuck at PROCESSING/QUEUED with old `lastUpdatedAt` | Likely a worker backlog — wait and re-poll `get_actions_run_status`; don't re-run and double-spend credits |\n| Not enough credits | `get_credit_balance` is short of the `get_credit_pricing` cost — tell the user; fall back to user-pasted profile data |\n| Action run fails with 400 / no entities | The contact doesn't exist or lacks the required field (URL for scrape; name+company for the finder) — create/fix the record first |\n| ICP fit score is 0–4 | Flag to the user before generating; proceed only on confirmation |\n"
}

SHA-256: d173fc93edc6b5f9fba08711ae9ad9bc54b0ab862a055a35d284883fcc1ad3ea