SKILL.md
Apollo Local Dev Loop
Overview
Set up an efficient local development workflow for Apollo.io integrations. Includes sandbox API key support, MSW mock server for offline testing, request logging, and npm scripts for daily development. Apollo provides a sandbox API token that returns dummy data without consuming credits.
Prerequisites
- Completed
apollo-install-authsetup - Node.js 18+
- Git repository initialized
Instructions
Step 1: Set Up Environment Files
Apollo offers a sandbox token for testing. Generate one at Settings > Integrations > API Keys > Sandbox.
# .env.example (commit this — team reference)
APOLLO_API_KEY=your-api-key-here
APOLLO_SANDBOX_KEY=your-sandbox-key-here
APOLLO_USE_SANDBOX=false
# .env (gitignored — copy from example)
cp .env.example .env
echo '.env' >> .gitignore
echo '.env.local' >> .gitignore
Step 2: Create a Dev Client with Request Logging
// src/apollo/dev-client.ts
import axios from 'axios';
import dotenv from 'dotenv';
dotenv.config();
const apiKey = process.env.APOLLO_USE_SANDBOX === 'true'
? process.env.APOLLO_SANDBOX_KEY
: process.env.APOLLO_API_KEY;
export const devClient = axios.create({
baseURL: 'https://api.apollo.io/api/v1',
headers: {
'Content-Type': 'application/json',
'x-api-key': apiKey!,
},
timeout: 30_000,
});
// Log all requests in development
devClient.interceptors.request.use((config) => {
console.log(`[Apollo] ${config.method?.toUpperCase()} ${config.url}`);
if (config.data) console.log('[Apollo] Body:', JSON.stringify(config.data, null, 2));
return config;
});
devClient.interceptors.response.use(
(res) => {
const remaining = res.headers['x-rate-limit-remaining'];
console.log(`[Apollo] ${res.status} ${res.config.url}${remaining ? ` — ${remaining} req remaining` : ''}`);
return res;
},
(err) => {
console.error(`[Apollo] ERROR ${err.response?.status}: ${err.response?.data?.message ?? err.message}`);
return Promise.reject(err);
},
);
