{"kind":"Skill","metadata":{"namespace":"community","name":"apollo-automation","version":"0.1.0"},"spec":{"description":"Automate Apollo.io lead generation -- search organizations, discover contacts, enrich prospect data, manage contact stages, and build targeted outreach lists -- using natural language through the Composio MCP integration.","files":{"SKILL.md":"---\nname: Apollo Automation\ndescription: \"Automate Apollo.io lead generation -- search organizations, discover contacts, enrich prospect data, manage contact stages, and build targeted outreach lists -- using natural language through the Composio MCP integration.\"\ncategory: sales-intelligence\nrequires:\n  mcp:\n    - rube\n---\n\n# Apollo Automation\n\nSupercharge your sales prospecting with Apollo.io -- search companies, discover decision-makers, enrich contact data with emails and phone numbers, and manage your sales pipeline stages -- all through natural language commands.\n\n**Toolkit docs:** [composio.dev/toolkits/apollo](https://composio.dev/toolkits/apollo)\n\n---\n\n## Setup\n\n1. Add the Composio MCP server to your client configuration:\n   ```\n   https://rube.app/mcp\n   ```\n2. Connect your Apollo.io account when prompted (API key authentication).\n3. Start issuing natural language commands to prospect and enrich leads.\n\n---\n\n## Core Workflows\n\n### 1. Search Organizations\nFind target companies using filters like name, location, employee count, and industry keywords.\n\n**Tool:** `APOLLO_ORGANIZATION_SEARCH`\n\n**Example prompt:**\n\u003e \"Find SaaS companies in Texas with 50-500 employees on Apollo\"\n\n**Key parameters:**\n- `q_organization_name` -- Partial name match (e.g., \"Apollo\" matches \"Apollo Inc.\")\n- `organization_locations` -- HQ locations to include (e.g., \"texas\", \"tokyo\")\n- `organization_not_locations` -- HQ locations to exclude\n- `organization_num_employees_ranges` -- Employee ranges in \"min,max\" format (e.g., \"50,500\")\n- `q_organization_keyword_tags` -- Industry keywords (e.g., \"software\", \"healthcare\")\n- `page` / `per_page` -- Pagination (max 100 per page, max 500 pages)\n\n---\n\n### 2. Discover People at Companies\nSearch Apollo's contact database for people matching title, seniority, location, and company criteria.\n\n**Tool:** `APOLLO_PEOPLE_SEARCH`\n\n**Example prompt:**\n\u003e \"Find VPs of Sales at microsoft.com and apollo.io\"\n\n**Key parameters:**\n- `person_titles` -- Job titles (e.g., \"VP of Sales\", \"CTO\")\n- `person_seniorities` -- Seniority levels (e.g., \"director\", \"vp\", \"senior\")\n- `person_locations` -- Geographic locations of people\n- `q_organization_domains` -- Company domains (e.g., \"apollo.io\" -- exclude \"www.\")\n- `organization_ids` -- Apollo company IDs from Organization Search\n- `contact_email_status` -- Filter by email status: \"verified\", \"unverified\", \"likely to engage\"\n- `page` / `per_page` -- Pagination (max 100 per page)\n\n---\n\n### 3. Enrich Individual Contacts\nGet comprehensive data (email, phone, LinkedIn, company info) for a single person using their email, LinkedIn URL, or name + company.\n\n**Tool:** `APOLLO_PEOPLE_ENRICHMENT`\n\n**Example prompt:**\n\u003e \"Enrich Tim Zheng at Apollo.io on Apollo\"\n\n**Key parameters (at least one identifier required):**\n- `email` -- Person's email address\n- `linkedin_url` -- Full LinkedIn profile URL\n- `first_name` + `last_name` + (`organization_name` or `domain`) -- Name-based matching\n- `domain` -- Bare hostname without protocol (e.g., \"apollo.io\", not \"https://apollo.io\")\n- `reveal_personal_emails` -- Set true to get personal emails (may use extra credits)\n- `reveal_phone_number` -- Set true for phone numbers (requires `webhook_url`)\n\n---\n\n### 4. Bulk Enrich Prospects\nEnrich up to 10 people simultaneously for efficient batch processing.\n\n**Tool:** `APOLLO_BULK_PEOPLE_ENRICHMENT`\n\n**Example prompt:**\n\u003e \"Bulk enrich these 5 leads with their Apollo data: [list of names/emails]\"\n\n**Key parameters:**\n- `details` (required) -- Array of 1-10 person objects, each with identifiers like `email`, `linkedin_url`, `first_name`, `last_name`, `domain`, `company_name`\n- `reveal_personal_emails` -- Include personal emails (extra credits)\n- `reveal_phone_number` -- Include phone numbers (requires `webhook_url`)\n\n---\n\n### 5. Manage Contact Pipeline Stages\nList available stages and update contacts through your sales funnel.\n\n**Tools:** `APOLLO_LIST_CONTACT_STAGES`, `APOLLO_UPDATE_CONTACT_STAGE`\n\n**Example prompt:**\n\u003e \"Move contacts X and Y to the 'Qualified' stage in Apollo\"\n\n**Key parameters for listing stages:** None required.\n\n**Key parameters for updating stage:**\n- `contact_ids` (required) -- Array of contact IDs to update\n- `contact_stage_id` (required) -- Target stage ID (from List Contact Stages)\n\n---\n\n### 6. Create and Search Saved Contacts\nCreate new contact records and search your existing Apollo contact database.\n\n**Tools:** `APOLLO_CREATE_CONTACT`, `APOLLO_SEARCH_CONTACTS`\n\n**Example prompt:**\n\u003e \"Search my Apollo contacts for anyone at Stripe\"\n\n**Key parameters for search:**\n- Keyword search, stage ID filtering, sorting options\n- `page` / `per_page` -- Pagination\n\n**Key parameters for create:**\n- `first_name`, `last_name`, `email`, `organization_name`\n- `account_id` -- Link to an organization\n- `contact_stage_id` -- Initial sales stage\n\n---\n\n## Known Pitfalls\n\n- **Organization domains can be empty**: Some organizations from `APOLLO_ORGANIZATION_SEARCH` return missing or empty domain fields. Use `APOLLO_ORGANIZATION_ENRICHMENT` to validate domains before relying on them.\n- **HTTP 403 means config issues**: A 403 response indicates API key or plan access problems -- do not retry. Fix your credentials or plan first.\n- **People search returns obfuscated data**: `APOLLO_PEOPLE_SEARCH` may show `has_email`/`has_direct_phone` flags or obfuscated fields instead of full contact details. Use `APOLLO_PEOPLE_ENRICHMENT` to get complete information.\n- **Pagination limits are strict**: People search supports `per_page` up to 100 and max 500 pages. Stopping early can miss large portions of the result set.\n- **Bulk enrichment has small batch limits**: `APOLLO_BULK_PEOPLE_ENRICHMENT` accepts only 10 items per call. It can return `status='success'` with `missing_records \u003e 0` when identifiers are insufficient -- retry individual records with `APOLLO_PEOPLE_ENRICHMENT`.\n- **No automatic deduplication**: `APOLLO_CREATE_CONTACT` does not deduplicate. Check for existing contacts first with `APOLLO_SEARCH_CONTACTS`.\n- **Domain format matters**: Always use bare hostnames (e.g., \"apollo.io\") without protocol prefixes (\"https://\") or \"www.\" prefix.\n\n---\n\n## Quick Reference\n\n| Action | Tool Slug | Required Params |\n|---|---|---|\n| Search organizations | `APOLLO_ORGANIZATION_SEARCH` | None (optional filters) |\n| Enrich organization | `APOLLO_ORGANIZATION_ENRICHMENT` | `domain` |\n| Bulk enrich orgs | `APOLLO_BULK_ORGANIZATION_ENRICHMENT` | `domains` |\n| Search people | `APOLLO_PEOPLE_SEARCH` | None (optional filters) |\n| Enrich person | `APOLLO_PEOPLE_ENRICHMENT` | One of: `email`, `linkedin_url`, or name+company |\n| Bulk enrich people | `APOLLO_BULK_PEOPLE_ENRICHMENT` | `details` (1-10 person objects) |\n| List contact stages | `APOLLO_LIST_CONTACT_STAGES` | None |\n| Update contact stage | `APOLLO_UPDATE_CONTACT_STAGE` | `contact_ids`, `contact_stage_id` |\n| Create contact | `APOLLO_CREATE_CONTACT` | Name + identifiers |\n| Search contacts | `APOLLO_SEARCH_CONTACTS` | None (optional filters) |\n\n---\n\n*Powered by [Composio](https://composio.dev)*\n"},"import":{"commit_sha":"f2b5e29bc315f04c8e09591ba275f4c4f7d4b8fe","imported_at":"2026-05-18T20:07:47Z","license_text":"","owner":"ComposioHQ","repo":"ComposioHQ/awesome-claude-skills","source_url":"https://github.com/ComposioHQ/awesome-claude-skills/tree/f2b5e29bc315f04c8e09591ba275f4c4f7d4b8fe/composio-skills/apollo-automation"}},"content_hash":[156,212,93,172,115,187,230,109,214,8,138,13,132,70,116,127,90,3,144,14,191,149,89,134,42,128,233,26,241,64,87,214],"trust_level":"unsigned","yanked":false}
