[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71MEQGD30VAMGQ6MBF6XEBP":3,"skill-same:01M71MEQGD30VAMGQ6MBF6XEBP":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M71MEQGD30VAMGQ6MBF6XEBP","Lemlist Automation",null,"Automate Lemlist multichannel outreach -- manage campaigns, enroll leads, add personalization variables, export campaign data, and handle unsubscribes via the Composio MCP integration.","q2805187159\u002FAnvil","q2805187159","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F105276843?v=4","01M71KF4TN999VNJX9FY9QT06A","铁甲勇士宋小宝","01M71KF4V97XXQ7AGES97R4Q9F",3,"MIT","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fcomposio-skills\u002Flemlist-automation\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"automation","automate","add","personalization","composio","data","export","outreach","integration","via","MCP Integration","Variables","MCP","campaign","handle","manage","campaigns","leads","2026-11-10 10:56:23",false,"---\nname: Lemlist Automation\ndescription: \"Automate Lemlist multichannel outreach -- manage campaigns, enroll leads, add personalization variables, export campaign data, and handle unsubscribes via the Composio MCP integration.\"\nrequires:\n  mcp:\n    - rube\n---\n\n# Lemlist Automation\n\nAutomate your Lemlist multichannel outreach workflows -- manage campaigns, enroll leads at scale, enrich with custom variables, export campaign data, and clean up unsubscribes.\n\n**Toolkit docs:** [composio.dev\u002Ftoolkits\u002Flemlist](https:\u002F\u002Fcomposio.dev\u002Ftoolkits\u002Flemlist)\n\n---\n\n## Setup\n\n1. Add the Composio MCP server to your client: `https:\u002F\u002Frube.app\u002Fmcp`\n2. Connect your Lemlist account when prompted (API key authentication)\n3. Start using the workflows below\n\n---\n\n## Core Workflows\n\n### 1. List and Discover Campaigns\n\nUse `LEMLIST_GET_LIST_CAMPAIGNS` to enumerate all campaigns by status, with pagination support.\n\n```\nTool: LEMLIST_GET_LIST_CAMPAIGNS\nInputs:\n  - status: \"running\" | \"draft\" | \"archived\" | \"ended\" | \"paused\" | \"errors\" (optional)\n  - limit: integer (max 100, default 100)\n  - offset: integer (pagination offset)\n  - sortBy: \"createdAt\"\n  - sortOrder: \"asc\" | \"desc\"\n```\n\n**Important:** The response may be wrapped as `{campaigns: [...], pagination: {...}}` instead of a flat list. Always extract from the `campaigns` key.\n\n### 2. Get Campaign Details\n\nUse `LEMLIST_GET_CAMPAIGN_BY_ID` to validate campaign configuration before writes.\n\n```\nTool: LEMLIST_GET_CAMPAIGN_BY_ID\nInputs:\n  - campaignId: string (required) -- e.g., \"cam_A1B2C3D4E5F6G7H8I9\"\n```\n\n### 3. Enroll Leads into a Campaign\n\nUse `LEMLIST_POST_CREATE_LEAD_IN_CAMPAIGN` to add leads with optional email finding, phone lookup, and LinkedIn enrichment.\n\n```\nTool: LEMLIST_POST_CREATE_LEAD_IN_CAMPAIGN\nInputs:\n  - campaignId: string (required)\n  - email: string (required)\n  - firstName, lastName, companyName, companyDomain: string (optional)\n  - jobTitle, phone, linkedinUrl, icebreaker: string (optional)\n  - deduplicate: boolean (prevents cross-campaign duplicates)\n  - findEmail, findPhone, verifyEmail, linkedinEnrichment: boolean (optional)\n  - timezone: string (IANA format, e.g., \"America\u002FNew_York\")\n```\n\n**Bulk pattern:** Chunk leads into batches of ~50 and checkpoint progress between batches.\n\n### 4. Add Custom Variables to a Lead\n\nUse `LEMLIST_POST_ADD_VARIABLES_TO_LEAD` to enrich leads with personalization fields after enrollment.\n\n```\nTool: LEMLIST_POST_ADD_VARIABLES_TO_LEAD\nInputs:\n  - leadId: string (required) -- internal Lemlist lead ID (NOT email)\n  - company: string (required) -- must match your company name in Lemlist\n  - variables: object (required) -- key-value pairs, e.g., {\"score\": \"42\", \"color\": \"yellow\"}\n```\n\n**Important:** This is NOT an upsert -- attempting to add variables that already exist will fail. Resolve the internal `leadId` via `LEMLIST_GET_RETRIEVE_LEAD_BY_EMAIL` if you only have the email address.\n\n### 5. Export Campaign Leads\n\nUse `LEMLIST_GET_EXPORT_CAMPAIGN_LEADS` to download leads with state filtering for reporting or QA.\n\n```\nTool: LEMLIST_GET_EXPORT_CAMPAIGN_LEADS\nInputs:\n  - campaignId: string (required)\n  - (supports state filtering and JSON\u002FCSV output)\n```\n\n### 6. Unsubscribe Lead from Campaign\n\nUse `LEMLIST_DELETE_UNSUBSCRIBE_LEAD_FROM_CAMPAIGN` to stop outreach by removing a lead from a campaign.\n\n```\nTool: LEMLIST_DELETE_UNSUBSCRIBE_LEAD_FROM_CAMPAIGN\nInputs:\n  - campaignId: string (required)\n  - leadId or email: string (required)\n```\n\n---\n\n## Known Pitfalls\n\n| Pitfall | Detail |\n|---------|--------|\n| Wrapped campaign list | `LEMLIST_GET_LIST_CAMPAIGNS` may return `{campaigns: [...], pagination: {...}}` instead of a flat array. Always extract from the `campaigns` key. |\n| Cross-campaign deduplication | `LEMLIST_POST_CREATE_LEAD_IN_CAMPAIGN` with deduplication enabled fails with HTTP 500 \"Lead already in other campaign\" -- disable deduplication for intentional cross-campaign enrollment. |\n| Bulk import failures | Chunk bulk imports to ~50 per batch with checkpoints to avoid losing partial progress on intermittent failures. |\n| Invalid leadId | `LEMLIST_POST_ADD_VARIABLES_TO_LEAD` returns HTTP 400 \"Invalid leadId\" when using an email as the leadId -- resolve the internal ID via `LEMLIST_GET_RETRIEVE_LEAD_BY_EMAIL` first. |\n| Variable collisions | `LEMLIST_POST_ADD_VARIABLES_TO_LEAD` is not an upsert. Adding keys that already exist returns HTTP 400 \"Variables X already exist\". |\n\n---\n\n## Quick Reference\n\n| Tool Slug | Description |\n|-----------|-------------|\n| `LEMLIST_GET_LIST_CAMPAIGNS` | List all campaigns with status filter and pagination |\n| `LEMLIST_GET_CAMPAIGN_BY_ID` | Get detailed campaign info by ID |\n| `LEMLIST_POST_CREATE_LEAD_IN_CAMPAIGN` | Create and enroll a lead into a campaign |\n| `LEMLIST_POST_ADD_VARIABLES_TO_LEAD` | Add custom personalization variables to a lead |\n| `LEMLIST_GET_RETRIEVE_LEAD_BY_EMAIL` | Look up a lead by email address |\n| `LEMLIST_GET_EXPORT_CAMPAIGN_LEADS` | Export leads from a campaign with state filtering |\n| `LEMLIST_DELETE_UNSUBSCRIBE_LEAD_FROM_CAMPAIGN` | Remove a lead from a campaign |\n\n---\n\n*Powered by [Composio](https:\u002F\u002Fcomposio.dev)*\n","# Lemlist Automation\n\nAutomate your Lemlist multichannel outreach workflows -- manage campaigns, enroll leads at scale, enrich with custom variables, export campaign data, and clean up unsubscribes.\n\n**Toolkit docs:** [composio.dev\u002Ftoolkits\u002Flemlist](https:\u002F\u002Fcomposio.dev\u002Ftoolkits\u002Flemlist)\n\n---\n\n## Setup\n\n1. Add the Composio MCP server to your client: `https:\u002F\u002Frube.app\u002Fmcp`\n2. Connect your Lemlist account when prompted (API key authentication)\n3. Start using the workflows below\n\n---\n\n## Core Workflows\n\n### 1. List and Discover Campaigns\n\nUse `LEMLIST_GET_LIST_CAMPAIGNS` to enumerate all campaigns by status, with pagination support.\n\n```\nTool: LEMLIST_GET_LIST_CAMPAIGNS\nInputs:\n  - status: \"running\" | \"draft\" | \"archived\" | \"ended\" | \"paused\" | \"errors\" (optional)\n  - limit: integer (max 100, default 100)\n  - offset: integer (pagination offset)\n  - sortBy: \"createdAt\"\n  - sortOrder: \"asc\" | \"desc\"\n```\n\n**Important:** The response may be wrapped as `{campaigns: [...], pagination: {...}}` instead of a flat list. Always extract from the `campaigns` key.\n\n### 2. Get Campaign Details\n\nUse `LEMLIST_GET_CAMPAIGN_BY_ID` to validate campaign configuration before writes.\n\n```\nTool: LEMLIST_GET_CAMPAIGN_BY_ID\nInputs:\n  - campaignId: string (required) -- e.g., \"cam_A1B2C3D4E5F6G7H8I9\"\n```\n\n### 3. Enroll Leads into a Campaign\n\nUse `LEMLIST_POST_CREATE_LEAD_IN_CAMPAIGN` to add leads with optional email finding, phone lookup, and LinkedIn enrichment.\n\n```\nTool: LEMLIST_POST_CREATE_LEAD_IN_CAMPAIGN\nInputs:\n  - campaignId: string (required)\n  - email: string (required)\n  - firstName, lastName, companyName, companyDomain: string (optional)\n  - jobTitle, phone, linkedinUrl, icebreaker: string (optional)\n  - deduplicate: boolean (prevents cross-campaign duplicates)\n  - findEmail, findPhone, verifyEmail, linkedinEnrichment: boolean (optional)\n  - timezone: string (IANA format, e.g., \"America\u002FNew_York\")\n```\n\n**Bulk pattern:** Chunk leads into batches of ~50 and checkpoint progress between batches.\n\n### 4. Add Custom Variables to a Lead\n\nUse `LEMLIST_POST_ADD_VARIABLES_TO_LEAD` to enrich leads with personalization fields after enrollment.\n\n```\nTool: LEMLIST_POST_ADD_VARIABLES_TO_LEAD\nInputs:\n  - leadId: string (required) -- internal Lemlist lead ID (NOT email)\n  - company: string (required) -- must match your company name in Lemlist\n  - variables: object (required) -- key-value pairs, e.g., {\"score\": \"42\", \"color\": \"yellow\"}\n```\n\n**Important:** This is NOT an upsert -- attempting to add variables that already exist will fail. Resolve the internal `leadId` via `LEMLIST_GET_RETRIEVE_LEAD_BY_EMAIL` if you only have the email address.\n\n### 5. Export Campaign Leads\n\nUse `LEMLIST_GET_EXPORT_CAMPAIGN_LEADS` to download leads with state filtering for reporting or QA.\n\n```\nTool: LEMLIST_GET_EXPORT_CAMPAIGN_LEADS\nInputs:\n  - campaignId: string (required)\n  - (supports state filtering and JSON\u002FCSV output)\n```\n\n### 6. Unsubscribe Lead from Campaign\n\nUse `LEMLIST_DELETE_UNSUBSCRIBE_LEAD_FROM_CAMPAIGN` to stop outreach by removing a lead from a campaign.\n\n```\nTool: LEMLIST_DELETE_UNSUBSCRIBE_LEAD_FROM_CAMPAIGN\nInputs:\n  - campaignId: string (required)\n  - leadId or email: string (required)\n```\n\n---\n\n## Known Pitfalls\n\n| Pitfall | Detail |\n|---------|--------|\n| Wrapped campaign list | `LEMLIST_GET_LIST_CAMPAIGNS` may return `{campaigns: [...], pagination: {...}}` instead of a flat array. Always extract from the `campaigns` key. |\n| Cross-campaign deduplication | `LEMLIST_POST_CREATE_LEAD_IN_CAMPAIGN` with deduplication enabled fails with HTTP 500 \"Lead already in other campaign\" -- disable deduplication for intentional cross-campaign enrollment. |\n| Bulk import failures | Chunk bulk imports to ~50 per batch with checkpoints to avoid losing partial progress on intermittent failures. |\n| Invalid leadId | `LEMLIST_POST_ADD_VARIABLES_TO_LEAD` returns HTTP 400 \"Invalid leadId\" when using an email as the leadId -- resolve the internal ID via `LEMLIST_GET_RETRIEVE_LEAD_BY_EMAIL` first. |\n| Variable collisions | `LEMLIST_POST_ADD_VARIABLES_TO_LEAD` is not an upsert. Adding keys that already exist returns HTTP 400 \"Variables X already exist\". |\n\n---\n\n## Quick Reference\n\n| Tool Slug | Description |\n|-----------|-------------|\n| `LEMLIST_GET_LIST_CAMPAIGNS` | List all campaigns with status filter and pagination |\n| `LEMLIST_GET_CAMPAIGN_BY_ID` | Get detailed campaign info by ID |\n| `LEMLIST_POST_CREATE_LEAD_IN_CAMPAIGN` | Create and enroll a lead into a campaign |\n| `LEMLIST_POST_ADD_VARIABLES_TO_LEAD` | Add custom personalization variables to a lead |\n| `LEMLIST_GET_RETRIEVE_LEAD_BY_EMAIL` | Look up a lead by email address |\n| `LEMLIST_GET_EXPORT_CAMPAIGN_LEADS` | Export leads from a campaign with state filtering |\n| `LEMLIST_DELETE_UNSUBSCRIBE_LEAD_FROM_CAMPAIGN` | Remove a lead from a campaign |\n\n---\n\n*Powered by [Composio](https:\u002F\u002Fcomposio.dev)*\n",{"name":5,"requires":47,"description":7},{"mcp":48},[49],"rube","main","6ffadc67c9777282fa1f9330ec12ac8778064409","skills\u002Fcomposio-skills\u002Flemlist-automation",0,"https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil","https:\u002F\u002Fgithub.com\u002Fq2805187159","Independent Researcher\r\n\r\nEmail: q2805187159@gmail.com\r\n\r\nGithub: q2805187159\r\n\r\nResearch Interests:\r\n- LLM Agents\r\n- Tool Routing\r\n- RAG","2026-06-24 18:31:41",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add q2805187159\u002FAnvil --skill \"Lemlist Automation\"",{"tool":64,"command":65},"bunx","bunx skills add q2805187159\u002FAnvil --skill \"Lemlist Automation\"",{"tool":67,"command":68},"pnpm","pnpm dlx skills add q2805187159\u002FAnvil --skill \"Lemlist Automation\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fcomposio-skills\u002Flemlist-automation\u002FSKILL.md",true,[],[73,105,138,145,169,192],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":77,"licenseFileUrl":78,"sourceHtmlUrl":79,"categories":80,"keywords":87,"publishedAt":42},"01M71NPWVVMB1AZ8XGKNJFT0YP","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fwebapp-testing\u002FSKILL.md",[81,84],{"categoryNo":82,"categoryName":83,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":85,"categoryName":86,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104],"webapp","testing","webapp testing","for","applications","local","frontend","debugging","toolkit","logs","browser","with","playwright","web","behavior","ui","screenshots",{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":119,"publishedAt":42},"01M71NPTQ96H4XSZVZT422BNRB","web-design-guidelines","Review UI code for Web Interface Guidelines compliance. Use when asked to \"review my UI\", \"check accessibility\", \"audit design\", \"review UX\", or \"check my site against best practices\".","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fweb-design-guidelines\u002FSKILL.md",[111,114],{"categoryNo":112,"categoryName":113,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":115,"categoryName":116,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[120,121,101,122,123,91,124,125,126,127,128,129,130,131,132,133,134,135,136,137],"guidelines","design","web design guidelines","web design","vercel","interface","web interface guidelines","use","when","best practices","file","code","review","check","compliance","audit","ux","accessibility",{"skillNo":139,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":144,"publishedAt":42},"01M71NPS2D31Y2BGFYA9DB7CE4","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fweb-design-guidelines copy\u002FSKILL.md",[142,143],{"categoryNo":112,"categoryName":113,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":115,"categoryName":116,"taxonomyType":117,"taxonomyTypeDesc":118},[120,121,101,122,123,91,124,125,126,127,128,129,130,131,132,133,134,135,136,137],{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":155,"publishedAt":42},"01M71NPQ9DRT54QSQJ0BHBM3VG","video-generation","Use this skill when the user requests to generate, create, or imagine videos. Supports structured prompts and reference image for guided generation.","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fvideo-generation\u002FSKILL.md",[151,154],{"categoryNo":152,"categoryName":153,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[156,157,158,91,127,128,159,160,161,162,163,164,165,166,167,168],"Video","video generation","generation","image","create","imagine","requests","generate","videos","reference","prompts","user","structured",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":176,"publishedAt":42},"01M71NPN57CT154SWXAS52475X","youtube-downloader","Download YouTube videos with customizable quality and format options. Use this skill when the user asks to download, save, or grab YouTube videos. Supports various quality settings (best, 1080p, 720p, 480p, 360p), multiple formats (mp4, webm, mkv), and audio-only downloads as MP3.","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fvideo-downloader\u002FSKILL.md",[175],{"categoryNo":152,"categoryName":153,"taxonomyType":21,"taxonomyTypeDesc":22},[177,178,179,180,181,182,183,127,128,184,99,185,186,187,188,189,164,190,167,191],"youtube","youtube downloader","mp4","as","downloads","Audio","only","mp3","options","quality","format","settings","grab","formats","download",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":196,"categories":197,"keywords":198,"publishedAt":42},"01M71NPKD95YB8N3J6J78QGFFW","verification-before-completion","Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always","https:\u002F\u002Fgithub.com\u002Fq2805187159\u002FAnvil\u002Fblob\u002Fmain\u002Fskills\u002Fverification-before-completion\u002FSKILL.md",[],[199,200,201,202,203,204,205,127,206,128,207,208,209,210,211,212],"verification","verification before completion","running","evidence","complete","prs","claim","assertions","committing","output","claims","work","about","commands"]