Configure Apollo.io local development workflow. Use when setting up development environment, testing API calls locally, or establishing team development practices. Trigger with phrases like "apollo local dev", "apollo development setup", "apollo dev environment", "apollo testing locally".
/plugin marketplace add jeremylongshore/claude-code-plugins-plus-skills/plugin install apollo-pack@claude-code-plugins-plusThis skill is limited to using the following tools:
Set up efficient local development workflow for Apollo.io integrations with proper environment management, testing, and debugging.
apollo-install-auth setup# Create environment files
touch .env .env.example .env.test
# Add to .gitignore
echo '.env' >> .gitignore
echo '.env.local' >> .gitignore
# .env.example (commit this)
APOLLO_API_KEY=your-api-key-here
APOLLO_RATE_LIMIT=100
APOLLO_ENV=development
// src/lib/apollo-dev.ts
import axios from 'axios';
const isDev = process.env.NODE_ENV !== 'production';
export const apolloClient = axios.create({
baseURL: 'https://api.apollo.io/v1',
params: { api_key: process.env.APOLLO_API_KEY },
});
// Add request logging in development
if (isDev) {
apolloClient.interceptors.request.use((config) => {
console.log(`[Apollo] ${config.method?.toUpperCase()} ${config.url}`);
return config;
});
apolloClient.interceptors.response.use(
(response) => {
console.log(`[Apollo] Response: ${response.status}`);
return response;
},
(error) => {
console.error(`[Apollo] Error: ${error.response?.status}`, error.message);
return Promise.reject(error);
}
);
}
// src/mocks/apollo-mock.ts
import { rest } from 'msw';
export const apolloHandlers = [
rest.post('https://api.apollo.io/v1/people/search', (req, res, ctx) => {
return res(
ctx.json({
people: [
{ id: '1', name: 'Test User', title: 'Engineer', email: 'test@example.com' },
],
pagination: { page: 1, per_page: 10, total_entries: 1 },
})
);
}),
rest.get('https://api.apollo.io/v1/organizations/enrich', (req, res, ctx) => {
return res(
ctx.json({
organization: {
name: 'Test Company',
domain: 'test.com',
industry: 'Technology',
},
})
);
}),
];
{
"scripts": {
"dev": "NODE_ENV=development tsx watch src/index.ts",
"dev:mock": "MOCK_APOLLO=true npm run dev",
"test:apollo": "vitest run src/**/*.apollo.test.ts",
"apollo:quota": "tsx scripts/check-apollo-quota.ts"
}
}
// scripts/check-apollo-quota.ts
import { apolloClient } from '../src/lib/apollo-dev';
async function checkQuota() {
try {
const { data } = await apolloClient.get('/auth/health');
console.log('API Status:', data);
// Note: Apollo doesn't expose quota directly, track usage manually
} catch (error: any) {
if (error.response?.status === 429) {
console.error('Rate limited! Wait before making more requests.');
}
}
}
checkQuota();
| Error | Cause | Solution |
|---|---|---|
| Missing API Key | .env not loaded | Run source .env or use dotenv |
| Mock Not Working | MSW not configured | Ensure setupServer is called |
| Rate Limited in Dev | Too many test calls | Use mock server for tests |
| Stale Credentials | Key rotated | Update .env with new key |
# Terminal 1: Run dev server with watch
npm run dev
# Terminal 2: Test API calls
curl -X POST http://localhost:3000/api/apollo/search \
-H "Content-Type: application/json" \
-d '{"domain": "stripe.com"}'
// src/services/apollo.apollo.test.ts
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import { setupServer } from 'msw/node';
import { apolloHandlers } from '../mocks/apollo-mock';
import { searchPeople } from './apollo';
const server = setupServer(...apolloHandlers);
beforeAll(() => server.listen());
afterAll(() => server.close());
describe('Apollo Service', () => {
it('searches for people', async () => {
const results = await searchPeople({ domain: 'test.com' });
expect(results.people).toHaveLength(1);
expect(results.people[0].name).toBe('Test User');
});
});
Proceed to apollo-sdk-patterns for production-ready code patterns.
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
This skill should be used when the user asks to "create a hookify rule", "write a hook rule", "configure hookify", "add a hookify rule", or needs guidance on hookify rule syntax and patterns.