apollo-incident-runbook
Apollo.io incident response procedures. Use when handling Apollo outages, debugging production issues, or responding to integration failures. Trigger with phrases like "apollo incident", "apollo outage", "apollo down", "apollo production issue", "apollo emergency".
Install
mkdir -p .claude/skills/apollo-incident-runbook && curl -L -o skill.zip "https://mcp.directory/api/skills/download/5383" && unzip -o skill.zip -d .claude/skills/apollo-incident-runbook && rm skill.zipInstalls to .claude/skills/apollo-incident-runbook
About this skill
Apollo Incident Runbook
Overview
Structured incident response for Apollo.io API failures. Covers severity classification, quick diagnosis, circuit breaker implementation, graceful degradation, and post-incident review. Apollo's public status page is at status.apollo.io.
Prerequisites
- Valid Apollo API key
- Access to monitoring dashboards
Instructions
Step 1: Classify Severity
Severity | Criteria | Response Time
---------+---------------------------------------------+--------------
P1 | Apollo API completely unreachable | 15 min
| All enrichments/searches returning 5xx |
P2 | Partial failures (>10% error rate) | 1 hour
| Rate limiting blocking critical workflows |
P3 | Intermittent errors (<10%), degraded latency | 4 hours
| Non-critical endpoint failures |
P4 | Cosmetic issues, minor data inconsistencies | Next sprint
Step 2: Quick Diagnosis Script
#!/bin/bash
# scripts/apollo-diagnosis.sh
set -euo pipefail
echo "=== Apollo Quick Diagnosis $(date -u +%Y-%m-%dT%H:%M:%SZ) ==="
# 1. Check Apollo status page
echo -e "\n--- Status Page ---"
curl -s https://status.apollo.io/api/v2/status.json 2>/dev/null | \
python3 -c "import sys,json; d=json.load(sys.stdin); print(f'Status: {d[\"status\"][\"description\"]}')" \
2>/dev/null || echo "Could not reach status page"
# 2. Test auth
echo -e "\n--- Auth Check ---"
curl -s -w "HTTP %{http_code} in %{time_total}s\n" \
-H "x-api-key: $APOLLO_API_KEY" \
"https://api.apollo.io/api/v1/auth/health" | head -1
# 3. Test people search (free endpoint)
echo -e "\n--- People Search ---"
curl -s -w "HTTP %{http_code} in %{time_total}s\n" -o /dev/null \
-X POST -H "Content-Type: application/json" -H "x-api-key: $APOLLO_API_KEY" \
-d '{"q_organization_domains_list":["apollo.io"],"per_page":1}' \
"https://api.apollo.io/api/v1/mixed_people/api_search"
# 4. Check rate limit headers
echo -e "\n--- Rate Limits ---"
curl -s -D - -o /dev/null \
-X POST -H "Content-Type: application/json" -H "x-api-key: $APOLLO_API_KEY" \
-d '{"q_organization_domains_list":["apollo.io"],"per_page":1}' \
"https://api.apollo.io/api/v1/mixed_people/api_search" 2>/dev/null | grep -i "x-rate-limit" || echo "No rate limit headers"
# 5. DNS resolution
echo -e "\n--- DNS ---"
dig +short api.apollo.io 2>/dev/null || nslookup api.apollo.io 2>/dev/null || echo "DNS lookup failed"
Step 3: Circuit Breaker
// src/resilience/circuit-breaker.ts
type State = 'closed' | 'open' | 'half-open';
export class CircuitBreaker {
private state: State = 'closed';
private failures = 0;
private lastFailure = 0;
private halfOpenSuccesses = 0;
constructor(
private failureThreshold: number = 5,
private resetTimeoutMs: number = 60_000,
private requiredSuccesses: number = 3,
) {}
async execute<T>(fn: () => Promise<T>, fallback?: () => T): Promise<T> {
if (this.state === 'open') {
if (Date.now() - this.lastFailure > this.resetTimeoutMs) {
this.state = 'half-open';
this.halfOpenSuccesses = 0;
} else {
if (fallback) return fallback();
throw new Error(`Circuit OPEN — Apollo calls blocked for ${Math.round((this.resetTimeoutMs - (Date.now() - this.lastFailure)) / 1000)}s`);
}
}
try {
const result = await fn();
if (this.state === 'half-open') {
this.halfOpenSuccesses++;
if (this.halfOpenSuccesses >= this.requiredSuccesses) {
this.state = 'closed';
this.failures = 0;
}
} else {
this.failures = 0;
}
return result;
} catch (err) {
this.failures++;
this.lastFailure = Date.now();
if (this.failures >= this.failureThreshold) this.state = 'open';
if (fallback) return fallback();
throw err;
}
}
get status() { return { state: this.state, failures: this.failures }; }
}
Step 4: Graceful Degradation by Severity
import { CircuitBreaker } from './circuit-breaker';
const breaker = new CircuitBreaker(5, 60_000);
// P1: Total outage — serve cached data
async function handleP1() {
console.error('[P1] Apollo API unreachable');
return breaker.execute(
() => client.post('/mixed_people/api_search', { per_page: 1 }),
() => {
console.warn('Serving cached search results');
return { data: { people: [], source: 'cache', degraded: true } };
},
);
}
// P2: Partial failures — reduce load
async function handleP2() {
console.warn('[P2] Apollo degraded — reducing concurrency');
// Disable bulk enrichment, reduce search concurrency to 1
// Continue serving search from cache where possible
}
// P3: Intermittent — retry with backoff
async function handleP3() {
console.info('[P3] Intermittent errors — backoff enabled');
// Retry with longer delays, log for monitoring
}
Step 5: Post-Incident Review Template
## Post-Incident Review: Apollo Integration
**Incident ID:** INC-YYYY-MM-DD-NNN
**Severity:** P1 / P2 / P3
**Duration:** HH:MM start to HH:MM resolved (X minutes)
**Apollo Status Page:** Reporting outage? Y/N
### Timeline
| Time (UTC) | Event |
|------------|-------|
| HH:MM | First alert fired (source: Prometheus/PagerDuty) |
| HH:MM | On-call acknowledged |
| HH:MM | Root cause identified |
| HH:MM | Mitigation applied (circuit breaker / cache fallback) |
| HH:MM | Apollo API restored |
| HH:MM | Circuit breaker closed, normal operations resumed |
### Impact
- Searches affected: N requests failed / served from cache
- Enrichments failed: N (credits not consumed)
- Sequences paused: N contacts delayed
- Revenue impact: $X (estimated pipeline delay)
### Root Cause
[Apollo-side outage / rate limiting / key rotation / network issue]
### Action Items
- [ ] Add/improve circuit breaker coverage (owner, due)
- [ ] Increase cache TTL for critical data (owner, due)
- [ ] Add alerting for [specific gap] (owner, due)
Output
- Severity classification matrix (P1-P4) with response times
- Bash diagnostic script (status page, auth, search, rate limits, DNS)
- Circuit breaker with closed/open/half-open states
- Graceful degradation procedures per severity level
- Post-incident review template
Error Handling
| Issue | Escalation |
|---|---|
| P1 > 15 min | Page on-call, open Apollo support ticket |
| P2 > 2 hours | Notify engineering management |
| Recurring P3 | Promote to P2 tracking issue |
| Apollo outage | Verify at status.apollo.io, enable cache fallback |
Resources
Next Steps
Proceed to apollo-data-handling for data management.
More by jeremylongshore
View all skills by jeremylongshore →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
fastapi-templates
wshobson
Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.
Related MCP Servers
Browse all serversIntegrate with Panther Labs to streamline cybersecurity workflows, manage detection rules, triage alerts, and boost inci
Safely connect cloud Grafana to AI agents with MCP: query, inspect, and manage Grafana resources using simple, focused o
Integrate with Gemini CLI for large-scale file analysis, secure code execution, and advanced context control using Googl
Access official Microsoft Docs instantly for up-to-date info. Integrates with ms word and ms word online for seamless wo
Docfork delivers up-to-date documentation and code examples for any software library, enhancing your config management t
Codex CLI is a code analysis tool for structured command execution, brainstorming, and workflow automation with static c
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.