--- title: SerpApi Google Search Tool description: A tool for performing Google searches using the SerpApi service --- # SerpApi Google Search Tool The SerpApi Google Search Tool enables performing Google searches using the SerpApi service. It provides location-aware search capabilities with comprehensive result filtering. ## Installation ```bash pip install 'crewai[tools]' pip install serpapi ``` ## Prerequisites You need a SerpApi API key to use this tool. You can get one from [SerpApi's website](https://serpapi.com/manage-api-key). Set your API key as an environment variable: ```bash export SERPAPI_API_KEY="your_api_key_here" ``` ## Usage Here's how to use the SerpApi Google Search Tool: ```python from crewai import Agent from crewai_tools import SerpApiGoogleSearchTool # Initialize the tool search_tool = SerpApiGoogleSearchTool() # Create an agent with the tool search_agent = Agent( role='Web Researcher', goal='Find accurate information online', backstory='I help research and analyze online information', tools=[search_tool] ) # Use in a task task = Task( description="Research recent AI developments", agent=search_agent, context={ "search_query": "latest artificial intelligence breakthroughs 2024", "location": "United States" # Optional } ) ``` ## Input Schema ```python class SerpApiGoogleSearchToolSchema(BaseModel): search_query: str # The search query for Google Search location: Optional[str] = None # Optional location for localized results ``` ## Function Signatures ### Base Tool Initialization ```python def __init__(self, **kwargs): """ Initialize the SerpApi tool with API credentials. Raises: ImportError: If serpapi package is not installed ValueError: If SERPAPI_API_KEY environment variable is not set """ ``` ### Search Execution ```python def _run( self, **kwargs: Any, ) -> dict: """ Execute the Google search. Args: search_query (str): The search query location (Optional[str]): Optional location for results Returns: dict: Filtered search results from Google Raises: HTTPError: If the API request fails """ ``` ## Best Practices 1. **API Key Management**: - Store the API key securely in environment variables - Never hardcode the API key in your code - Verify API key validity before making requests 2. **Search Optimization**: - Use specific, targeted search queries - Include relevant keywords and time frames - Leverage location parameter for regional results 3. **Error Handling**: - Handle API rate limits gracefully - Implement retry logic for failed requests - Validate input parameters before making requests ## Example Integration Here's a complete example showing how to integrate the SerpApi Google Search Tool with CrewAI: ```python from crewai import Agent, Task, Crew from crewai_tools import SerpApiGoogleSearchTool # Initialize the tool search_tool = SerpApiGoogleSearchTool() # Create an agent with the tool researcher = Agent( role='Research Analyst', goal='Find and analyze current information', backstory="""I am an expert at finding and analyzing information from various online sources.""", tools=[search_tool] ) # Create tasks research_task = Task( description=""" Research the following topic: 1. Latest developments in quantum computing 2. Focus on practical applications 3. Include major company announcements Provide a comprehensive analysis of the findings. """, agent=researcher, context={ "search_query": "quantum computing breakthroughs applications companies", "location": "United States" } ) # Create and run the crew crew = Crew( agents=[researcher], tasks=[research_task] ) result = crew.kickoff() ``` ## Error Handling The tool handles various error scenarios: 1. **Missing API Key**: ```python try: tool = SerpApiGoogleSearchTool() except ValueError as e: print("API key not found. Set SERPAPI_API_KEY environment variable.") ``` 2. **API Request Errors**: ```python try: results = tool._run( search_query="quantum computing", location="United States" ) except HTTPError as e: print(f"API request failed: {str(e)}") ``` 3. **Invalid Parameters**: ```python try: results = tool._run( search_query="", # Empty query location="Invalid Location" ) except ValueError as e: print("Invalid search parameters provided.") ``` ## Response Format The tool returns a filtered dictionary containing Google search results. Example response structure: ```python { "organic_results": [ { "title": "Page Title", "link": "https://...", "snippet": "Page description or excerpt...", "position": 1 } # Additional results... ], "knowledge_graph": { "title": "Topic Title", "description": "Topic description...", "source": { "name": "Source Name", "link": "https://..." } }, "related_questions": [ { "question": "Related question?", "answer": "Answer to related question..." } # Additional related questions... ] } ``` The response is automatically filtered to remove metadata and unnecessary fields, focusing on the most relevant search information. Fields like search metadata, parameters, and pagination are omitted for clarity.