An AI-powered business research tool that automates the process of gathering comprehensive information about professionals and companies using web search and LLM-based analysis.
Person Research:
- LinkedIn profile, role, and work email
- Current location and company
- Work history and years of experience
- Contact information and career trajectory
Company Research:
- Official details (website, LinkedIn, Crunchbase)
- Leadership team and organizational structure
- Products, services, and company overview
- Funding information (rounds, amounts, dates)
- Distinguishing features from similar companies
Built using LangGraph as a state-based workflow orchestrator with a multi-step research pipeline:
- Query Writer - Generates optimized search queries based on input
- Web Search - Executes searches using Tavily API integration
- Note Taker - Extracts structured information from search results
- Note Reviewer - Validates and refines extracted data with iterative improvement
- LangGraph: Workflow orchestration and state management
- LangChain: LLM integrations and model abstraction
- Tavily: Web search API for real-time information
- Pydantic: Data validation and structured outputs
- Rich: Enhanced console output formatting
- Groq: Llama-3.3-70b-versatile, DeepSeek-R1-distill
- OpenAI: GPT-4.1, O3 reasoning model
- vLLM: Custom model endpoints
- Ollama: Local model deployment
# Clone the repository
git clone <repository-url>
cd business-researcher
# Install dependencies using uv
uv sync
Set up your API keys in the configuration:
GROQ_API_KEY
- For Groq LLM accessOPENAI_API_KEY
- For OpenAI modelsTAVILY_API_KEY
- For web search functionality
from business_researcher import BusinessResearcher, SearchType
from ai_common import LlmServers
# Initialize the researcher
researcher = BusinessResearcher(
llm_server=LlmServers.GROQ,
llm_config=llm_config,
web_search_api_key=tavily_api_key
)
# Research a person
person_input = {
"name": "John Doe",
"company": "Tech Corp",
"search_type": SearchType.PERSON
}
# Research a company
company_input = {
"name": "Techy Tech Studios",
"search_type": SearchType.COMPANY
}
# Get results
results_for_person = researcher.get_response(person_input)
results_for_company = researcher.get_response(company_input)
src/
├── business_researcher/
│ ├── components/ # Individual processing components
│ │ ├── query_writer.py # Search query generation
│ │ ├── note_taker.py # Information extraction
│ │ ├── note_reviewer.py # Quality validation
│ │ └── routing.py # Workflow routing logic
│ ├── researcher.py # Main orchestrator class
│ ├── schema.py # Data models and validation
│ ├── state.py # Workflow state management
│ └── enums.py # Type definitions
└── main_dev.py # Development entry point
This project is licensed under the MIT License.