---
title: SerplyWebSearchTool
description: A Google search tool powered by Serply API with configurable search parameters
icon: search
---

## SerplyWebSearchTool

The SerplyWebSearchTool provides Google search capabilities using the Serply API. It allows for customizable search parameters including language, result limits, device type, and proxy location for region-specific results.

## Installation

```bash
pip install 'crewai[tools]'
```

## Usage Example

```python
from crewai import Agent
from crewai_tools import SerplyWebSearchTool

# Set environment variable
# export SERPLY_API_KEY='your-api-key'

# Basic initialization
search_tool = SerplyWebSearchTool()

# Advanced initialization with custom parameters
search_tool = SerplyWebSearchTool(
    hl="fr",              # French language results
    limit=20,             # Return 20 results
    device_type="mobile", # Mobile search results
    proxy_location="FR"   # Search from France
)

# Create an agent with the tool
researcher = Agent(
    role='Web Researcher',
    goal='Find relevant information online',
    backstory='Expert at web research and information gathering.',
    tools=[search_tool],
    verbose=True
)
```

## Input Schema

```python
class SerplyWebSearchToolSchema(BaseModel):
    search_query: str = Field(
        description="Mandatory search query for Google search"
    )
```

## Function Signature

```python
def __init__(
    self,
    hl: str = "us",
    limit: int = 10,
    device_type: str = "desktop",
    proxy_location: str = "US",
    **kwargs
):
    """
    Initialize the Google search tool.

    Args:
        hl (str): Host language code for results (default: "us")
            Reference: https://developers.google.com/custom-search/docs/xml_results?hl=en#wsInterfaceLanguages
        limit (int): Maximum number of results [10-100] (default: 10)
        device_type (str): "desktop" or "mobile" results (default: "desktop")
        proxy_location (str): Region for local results (default: "US")
            Options: US, CA, IE, GB, FR, DE, SE, IN, JP, KR, SG, AU, BR
        **kwargs: Additional arguments for tool creation
    """

def _run(
    self,
    **kwargs: Any
) -> str:
    """
    Perform Google search using Serply API.

    Args:
        search_query (str): Search query

    Returns:
        str: Formatted string containing search results:
            - Title
            - Link
            - Description
    """
```

## Best Practices

1. Set up API authentication:
   ```bash
   export SERPLY_API_KEY='your-serply-api-key'
   ```

2. Configure search parameters appropriately:
   - Use relevant language codes
   - Set reasonable result limits
   - Choose appropriate device type
   - Select relevant proxy location

3. Handle potential API errors
4. Process structured results effectively
5. Consider rate limits and quotas

## Integration Example

```python
from crewai import Agent, Task, Crew
from crewai_tools import SerplyWebSearchTool

# Initialize tool with custom configuration
search_tool = SerplyWebSearchTool(
    hl="en",              # English results
    limit=15,             # 15 results
    device_type="desktop",
    proxy_location="US"
)

# Create agent
researcher = Agent(
    role='Web Researcher',
    goal='Research emerging technology trends',
    backstory='Expert at finding and analyzing tech trends.',
    tools=[search_tool]
)

# Define task
research_task = Task(
    description="""Research the latest developments in artificial 
    intelligence and machine learning, focusing on practical 
    applications in business.""",
    agent=researcher
)

# The tool will use:
# {
#   "search_query": "latest AI ML developments business applications"
# }

# Create crew
crew = Crew(
    agents=[researcher],
    tasks=[research_task]
)

# Execute
result = crew.kickoff()
```

## Advanced Usage

### Language and Region Configuration
```python
# French search from France
fr_search = SerplyWebSearchTool(
    hl="fr",
    proxy_location="FR"
)

# Japanese search from Japan
jp_search = SerplyWebSearchTool(
    hl="ja",
    proxy_location="JP"
)
```

### Device-Specific Results
```python
# Mobile results
mobile_search = SerplyWebSearchTool(
    device_type="mobile",
    limit=20
)

# Desktop results
desktop_search = SerplyWebSearchTool(
    device_type="desktop",
    limit=20
)
```

### Error Handling
```python
try:
    results = search_tool._run(
        search_query="artificial intelligence trends"
    )
    print(results)
except Exception as e:
    print(f"Search error: {str(e)}")
```

## Notes


- Requires valid Serply API key
- Supports multiple languages and regions
- Configurable result limits (10-100)
- Device-specific search results
- Thread-safe operations
- Efficient search capabilities
- Handles API rate limiting automatically
- Returns structured search results
