Claude-code-plugins-plus-skills serpapi-prod-checklist

install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/serpapi-pack/skills/serpapi-prod-checklist" ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-skills-serpapi-prod-checklist && rm -rf "$T"
manifest: plugins/saas-packs/serpapi-pack/skills/serpapi-prod-checklist/SKILL.md
source content

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.status
    before using results
  • Handle
    error
    field 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

AlertConditionSeverity
Credits Lowremaining < 10%P2
Credits Exhaustedremaining = 0P1
API UnreachableAccount check failsP1
High Error Rate> 5% searches failP2

Resources

Next Steps

For version upgrades, see

serpapi-upgrade-migration
.