Skip to content
Back to skills

Serpapi Ci Integration

ASecurity

'Set up CI/CD for SerpApi integrations with fixture-based testing. Use when automating SerpApi tests without consuming credits, or validating search result parsing in CI. Trigger: \"serpapi CI\", \"serpapi GitHub Actions\", \"serpapi automated tests\". '

  • 3 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 12, 2026
ai-agentspythongobashreacttestinggitapici/cd

Works with

  • cli
  • api
  • mcp

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned September 12, 2026

npx -y skills add thedixitjain/the-mega-skill-library --skill serpapi-ci-integration --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Serpapi Ci Integration?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Serpapi Ci Integration
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/thedixitjain-serpapi-ci-integration/badge)](https://www.skillsdirectory.com/skills/thedixitjain-serpapi-ci-integration)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: serpapi-ci-integration
description: "'Set up CI/CD for SerpApi integrations with fixture-based testing. Use when automating SerpApi tests without consuming credits, or validating search result parsing in CI. Trigger: \"serpapi CI\", \"serpapi GitHub Actions\", \"serpapi automated tests\". '"
allowed-tools: "Read, Write, Edit, Bash(gh:*)"
category: mcp-and-integrations
source_repo: jeremylongshore/claude-code-plugins-plus-skills
source_path: "plugins/saas-packs/serpapi-pack/skills/serpapi-ci-integration/SKILL.md"
source_url: https://github.com/jeremylongshore/claude-code-plugins-plus-skills/blob/HEAD/plugins/saas-packs/serpapi-pack/skills/serpapi-ci-integration/SKILL.md
---

# SerpApi CI Integration

## Overview

CI for SerpApi should use fixture-based tests (no API credits consumed) for PRs, with optional live integration tests on main branch only.

## Instructions

### Step 1: GitHub Actions Workflow

```yaml
name: SerpApi Tests
on: [push, pull_request]

jobs:
  unit-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: { python-version: '3.12' }
      - run: pip install serpapi pytest
      - run: pytest tests/ -v  # Uses fixtures, no API key needed

  integration:
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    env:
      SERPAPI_API_KEY: ${{ secrets.SERPAPI_API_KEY }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: { python-version: '3.12' }
      - run: pip install serpapi pytest
      - run: pytest tests/integration/ -v --timeout=30
```

### Step 2: Fixture-Based Unit Tests

```python
# tests/test_search_parser.py
import json, pytest

def load_fixture(name):
    with open(f"tests/fixtures/{name}.json") as f:
        return json.load(f)

def test_parse_organic_results():
    result = load_fixture("google_python_tutorial")
    assert "organic_results" in result
    assert len(result["organic_results"]) > 0
    assert result["organic_results"][0]["title"]

def test_parse_youtube_results():
    result = load_fixture("youtube_react_hooks")
    assert "video_results" in result
    assert result["video_results"][0]["length"]

def test_handle_no_results():
    result = load_fixture("google_no_results")
    assert result.get("organic_results", []) == []
```

### Step 3: Live Integration Test (Controlled)

```python
# tests/integration/test_serpapi_live.py
import serpapi, os, pytest

@pytest.fixture
def client():
    key = os.environ.get("SERPAPI_API_KEY")
    if not key:
        pytest.skip("SERPAPI_API_KEY not set")
    return serpapi.Client(api_key=key)

def test_account_has_credits(client):
    account = client.account()
    assert account["plan_searches_left"] > 0

def test_google_search_returns_results(client):
    result = client.search(engine="google", q="python", num=1)
    assert result["search_metadata"]["status"] == "Success"
    assert len(result["organic_results"]) > 0
```

## Error Handling

| CI Issue | Cause | Solution |
|----------|-------|----------|
| Fixture not found | Missing test data | Record fixtures with `record_fixture()` |
| Integration test uses credits | Tests on every PR | Only run on `main` branch |
| Flaky results | Search results change | Use fixtures for deterministic tests |

## Resources

- [SerpApi Playground](https://serpapi.com/playground)
- [pytest Docs](https://docs.pytest.org/)

## Next Steps

For deployment patterns, see `serpapi-deploy-integration`.

---

**Source:** [`jeremylongshore/claude-code-plugins-plus-skills`](https://github.com/jeremylongshore/claude-code-plugins-plus-skills) → `plugins/saas-packs/serpapi-pack/skills/serpapi-ci-integration/SKILL.md`

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.