The Company Research Agent implements several custom tools that extend CrewAI’s BaseTool class. These tools provide specialized functionality for gathering company information from various sources.
class CompanyNewsSearchTool(BaseTool): """ @class CompanyNewsSearchTool @description Searches for and retrieves recent news articles about a company @param actor - Apify Actor instance """ name: str = "Company News Search" description: str = """ Searches for and retrieves recent news articles about a company using its domain name. Returns articles with titles, URLs, descriptions, and publication dates. """ actor: Actor = Field(description="Apify Actor instance")
class ProfessionalProfilesTool(BaseTool): """ @class ProfessionalProfilesTool @description Finds company profiles on professional platforms @param actor - Apify Actor instance """ name: str = "Professional Profiles Search" description: str = """ Finds company profiles on LinkedIn, Crunchbase, and PitchBook using domain name. Returns profile URLs and descriptions for each platform. """ actor: Actor = Field(description="Apify Actor instance")
class LinkedInScraperTool(BaseTool): """ @class LinkedInScraperTool @description Scrapes detailed company information from LinkedIn @param actor - Apify Actor instance """ name: str = "LinkedIn Company Profile Scraper" description: str = """ Scrapes detailed company information from LinkedIn company profiles. Requires a valid LinkedIn company profile URL. """ actor: Actor = Field(description="Apify Actor instance")
class CrunchbaseScraperTool(BaseTool): """ @class CrunchbaseScraperTool @description Scrapes company information from Crunchbase @param actor - Apify Actor instance """ name: str = "Crunchbase Organization Scraper" description: str = """ Scrapes detailed company information from Crunchbase organization profiles. Requires a valid Crunchbase organization URL. """ actor: Actor = Field(description="Apify Actor instance")
class PitchBookScraperTool(BaseTool): """ @class PitchBookScraperTool @description Scrapes company information from PitchBook @param actor - Apify Actor instance """ name: str = "PitchBook Company Profile Scraper" description: str = """ Scrapes detailed company information from PitchBook company profiles. Requires a valid PitchBook company profile URL. """ actor: Actor = Field(description="Apify Actor instance")
class GoogleSearchTool(BaseTool): """ @class GoogleSearchTool @description Performs Google searches for company information @param actor - Apify Actor instance """ name: str = "Google Search" description: str = """ Searches google for a given query and returns the results """ actor: Actor = Field(description="Apify Actor instance")
try: actor_run = await self.actor.call(actor_id="actor_id", run_input=run_input) if actor_run is None: raise RuntimeError('Actor task failed to start.')except Exception as e: logging.error(f"Error in tool execution: {str(e)}") raise
All tools are designed to be thread-safe and can be used concurrently by multiple agents. They handle their own error cases and resource cleanup.