SerpApi Production Checklist
Checklist
API Key & Authentication
- [ ] API key stored in secret manager (not env files)
- [ ] Backend proxy for all client-side search requests
- [ ] Key not exposed in frontend bundles or logs
- [ ] Usage monitoring configured
Credit Budget
- [ ] Monthly search volume estimated
- [ ] Plan tier matches expected volume
- [ ] Response caching implemented (LRU or Redis)
- [ ] Archive API used for result retrieval (free)
- [ ] Budget alerts set (e.g., 80% threshold)
Error Handling
- [ ] Check
search_metadata.statusbefore using results - [ ] Handle
errorfield in responses - [ ] Retry on 500/timeout (max 2 retries)
- [ ] Graceful fallback when credits exhausted
- [ ] Log search IDs for debugging (
search_metadata.id)
Performance
- [ ] Response caching with appropriate TTL
- [ ] Rate limiting per plan tier (see
serpapi-rate-limits) - [ ] Async search for non-critical queries
- [ ] Proxy endpoint rate-limited to prevent abuse
Health Check
app.get('/health', async (req, res) => {
try {
const account = await fetch(
`https://serpapi.com/account.json?api_key=${process.env.SERPAPI_API_KEY}`
).then(r => r.json());
res.json({
status: account.plan_searches_left > 0 ? 'healthy' : 'degraded',
serpapi: {
plan: account.plan_name,
remaining: account.plan_searches_left,
used: account.this_month_usage,
},
});
} catch {
res.status(503).json({ status: 'unhealthy', serpapi: { error: 'unreachable' } });
}
});
Error Handling
| Alert | Condition | Severity | |-------|-----------|----------| | Credits Low | remaining < 10% | P2 | | Credits Exhausted | remaining = 0 | P1 | | API Unreachable | Account check fails | P1 | | High Error Rate | > 5% searches fail | P2 |
Resources
Next Steps
For version upgrades, see serpapi-upgrade-migration.