Skip to main content
Glama
masridigital

Apollo.io MCP Server

by masridigital

analyze_sequence

Analyze email sequence performance metrics including open rates, reply rates, bounce rates, and step-by-step analytics to optimize sales outreach effectiveness.

Instructions

Analyze a sequence's performance with detailed metrics: open rates, reply rates, bounce rates, contacts added, active contacts, and step-by-step analytics.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesSequence ID to analyze

Implementation Reference

  • The main handler function for the analyze_sequence tool. Fetches sequence data from Apollo API, computes and displays performance metrics (open/reply/click/bounce rates), step breakdown, and provides performance insights.
    private async analyzeSequence(args: any) {
      const response = await this.axiosInstance.get(`/emailer_campaigns/${args.id}`);
      const seq = response.data.emailer_campaign;
    
      let result = `Sequence Analysis: ${seq.name}\n\n`;
      result += `=== Overview ===\n`;
      result += `ID: ${seq.id}\n`;
      result += `Status: ${seq.active ? "Active" : "Inactive"}\n`;
      result += `Created: ${seq.created_at ? new Date(seq.created_at).toLocaleDateString() : "N/A"}\n`;
      result += `Total Steps: ${seq.num_steps || 0}\n\n`;
    
      result += `=== Performance Metrics ===\n`;
      result += `Total Contacts Added: ${seq.unique_scheduled || 0}\n`;
      result += `Active Contacts: ${seq.num_contacted_people || 0}\n`;
      result += `Bounced: ${seq.bounce_rate ? `${(seq.bounce_rate * 100).toFixed(2)}%` : "0%"}\n`;
      result += `Replied: ${seq.reply_rate ? `${(seq.reply_rate * 100).toFixed(2)}%` : "0%"}\n`;
      result += `Opened: ${seq.open_rate ? `${(seq.open_rate * 100).toFixed(2)}%` : "0%"}\n`;
      result += `Clicked: ${seq.click_rate ? `${(seq.click_rate * 100).toFixed(2)}%` : "0%"}\n\n`;
    
      if (seq.emailer_steps && seq.emailer_steps.length > 0) {
        result += `=== Step-by-Step Breakdown ===\n`;
        seq.emailer_steps.forEach((step: any, index: number) => {
          result += `\nStep ${index + 1}: ${step.type || "Email"}\n`;
          result += `  Subject: ${step.subject || "N/A"}\n`;
          result += `  Wait Time: ${step.wait_time || 0} days\n`;
          result += `  Max Emails: ${step.max_emails_per_day || "Unlimited"}\n`;
        });
      }
    
      result += `\n=== Insights ===\n`;
      if (seq.reply_rate && seq.reply_rate > 0.1) {
        result += `✓ Strong reply rate - this sequence is performing well\n`;
      } else if (seq.reply_rate && seq.reply_rate < 0.05) {
        result += `⚠ Low reply rate - consider reviewing messaging and targeting\n`;
      }
    
      if (seq.bounce_rate && seq.bounce_rate > 0.05) {
        result += `⚠ High bounce rate - verify email quality\n`;
      }
    
      if (seq.open_rate && seq.open_rate < 0.3) {
        result += `⚠ Low open rate - test different subject lines\n`;
      }
    
      return {
        content: [
          {
            type: "text",
            text: result,
          },
        ],
      };
    }
  • src/index.ts:326-340 (registration)
    Tool registration in getTools() method, including name, description, and input schema requiring sequence ID.
    {
      name: "analyze_sequence",
      description:
        "Analyze a sequence's performance with detailed metrics: open rates, reply rates, bounce rates, contacts added, active contacts, and step-by-step analytics.",
      inputSchema: {
        type: "object",
        properties: {
          id: {
            type: "string",
            description: "Sequence ID to analyze",
          },
        },
        required: ["id"],
      },
    },
  • Input schema definition for analyze_sequence tool, validating a required 'id' string parameter.
    inputSchema: {
      type: "object",
      properties: {
        id: {
          type: "string",
          description: "Sequence ID to analyze",
        },
      },
      required: ["id"],
    },
  • Switch case dispatcher in CallToolRequestSchema handler that routes analyze_sequence calls to the analyzeSequence method.
    case "analyze_sequence":
      return await this.analyzeSequence(args);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/masridigital/apollo.io-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server