Agentic Company Researcher
A multi-agent web application that turns company research into formatted diligence reports.
- Source repo
- guy-hartstein/company-research-agent
- Stars
- ★ 2.3k
- Last updated
- 10d ago
- License
- Apache-2.0
- Primary language
- Python
- FA score
- Insufficient evidence
At a glance
- How it runs
- Works with
- Platform-specificOpenAI API
- Cost
- Free software; you pay for model usage
- Setup effort
- Medium · a few setup steps
- You'll need
- Typical use
- An investment researcher assessing a target company who needs an initial report spanning company background, industry context, financial information, and recent news.
- Not a fit if
- Users unwilling to sign up for Tavily, Gemini, OpenAI, and Google Maps API keys
- Non-technical users who want a ready-made hosted tool without deploying backend and frontend
- Source review
- Insufficient evidence 8 safety controls not found
What does this agent do, and when should you use it?
Agentic Company Researcher is a self-hosted company-diligence application that uses LangGraph to coordinate specialized research and processing nodes. CompanyAnalyzer, IndustryAnalyzer, FinancialAnalyst, and NewsScanner cover core company information, market context, financial metrics, and recent developments before Collector, Curator, Briefing, and Editor assemble the output. Tavily supplies search relevance scoring, Gemini 2.5 Flash produces category briefings, and GPT-5.1 compiles, deduplicates, and formats the final Markdown report. Its backend is a FastAPI service that runs research asynchronously and exposes polling endpoints, while a React frontend provides progress tracking and download options. It can run locally or through Docker Compose, but requires configured credentials for Tavily, Google Gemini, OpenAI, and Google Maps.
A user submits a research request through the React frontend, which calls POST /research and receives a job_id. CompanyAnalyzer, IndustryAnalyzer, FinancialAnalyst, and NewsScanner gather company, industry, financial, and news material; Collector aggregates it, while Curator in curator.py cleans content, normalizes and deduplicates URLs, and orders documents by Tavily relevance score, with a documented default minimum threshold of 0.4. Briefing in briefing.py uses Gemini 2.5 Flash to generate category-specific briefings, and Editor in editor.py uses GPT-5.1 to compile, deduplicate, and format a Markdown report. The frontend polls GET /research/{job_id}/report for completion, and POST /generate-pdf generates a PDF from report content.
- An investment researcher assessing a target company who needs an initial report spanning company background, industry context, financial information, and recent news.
- A corporate strategy team conducting desk research on a potential supplier, partner, or competitor and needing a repeatable company-briefing workflow.
- A consulting team at the start of an engagement that needs structured source material before analysts perform manual validation.
- An internal research team with Python and React operations capacity that wants a web application with asynchronous research jobs and progress polling.
- A team that needs a PDF deliverable after report creation and can use the repository's documented PDF-generation endpoint.
How do you install or deploy this agent?
Provide Python, Node.js, a Tavily API Key, a Google Gemini API Key, an OpenAI API Key, and a Google Maps API Key. After cloning the repository, run chmod +x setup.sh && ./setup.sh; the script detects uv, installs backend and frontend dependencies, and guides environment setup. For manual setup, run uv venv .venv && source .venv/bin/activate && uv pip install -r requirements.txt, then run npm install inside ui. Set TAVILY_API_KEY, GEMINI_API_KEY, and OPENAI_API_KEY in a root .env file; set VITE_API_URL=http://localhost:8000 and VITE_GOOGLE_MAPS_API_KEY in ui/.env. For Docker, configure both .env files and run docker compose up --build.
How do you use this agent?
Start the backend with python -m application.py, or use uvicorn application:app --reload --port 8000. In another terminal, run npm run dev from ui and open http://localhost:5173; submit a company research request in the frontend, which receives a job_id and polls /research/{job_id}/report. Under Docker Compose, the documented backend URL is http://localhost:8000 and the frontend URL is http://localhost:5174. For API use, POST /research submits work and GET /research/{job_id}/report retrieves the completed report; the supplied documentation does not specify request or response schemas for those endpoints.
What are this agent's strengths and limitations?
- It separates research responsibilities into CompanyAnalyzer, IndustryAnalyzer, FinancialAnalyst, and NewsScanner rather than relying on one undifferentiated research step.
- Curator combines Tavily relevance scoring with content cleanup and URL deduplication, using a documented default threshold of 0.4.
- Gemini 2.5 Flash is assigned to high-context briefings while GPT-5.1 is assigned to final formatting and deduplication, giving the pipeline explicit model roles.
- FastAPI, a React interface, asynchronous job polling, and PDF generation provide a deployable application boundary rather than only a backend workflow.
- Operation explicitly depends on API credentials for Tavily, Google Gemini, OpenAI, and Google Maps, so it is not an offline research tool.
- The documentation requires both Gemini and OpenAI keys but does not describe fallback behavior if either model provider or Tavily is unavailable.
- The supplied material does not document payload or response schemas for POST /research or POST /generate-pdf, increasing integration work for API consumers.
- License evidence conflicts: the repository metadata says Apache-2.0, while the README's License section says MIT; adopters should verify the LICENSE file.
How does this agent compare with similar options?
Key facts side by side with the most closely related agents.
| Agent | Source review | Form / cost | Stars | Updated | Language | Full support on |
|---|---|---|---|---|---|---|
| Agentic Company Researcher This agent | Insufficient evidence | Self-hosted serviceFree + model costs | ★ 2.3k | 10d ago | Python | OpenAI API |
| AI Bank Statement Automation | 48 · Major gaps | CLIFree + model costs | ★ 631 | 3mo ago | Jupyter Notebook | OpenAI API |
| FinnewsHunter Financial Intelligence | 29 · Major gaps | Self-hosted serviceFree + model costs | ★ 1.5k | 1d ago | Python | OpenAI API |
| Vibe-Research: Personal AI Investment Research Dashboard | 59 · Major gaps | Self-hosted serviceFree + model costs | ★ 3.5k | 8d ago | TypeScript | Codex · Claude Code · OpenAI API · Claude API |
How does FollowAgents rate this agent?
Why each dimension lost points
Evidence only includes README and LICENSE, no code or configuration details. Unable to assess least privilege, user confirmation, data flow transparency, sensitive data handling, dependency security, external effects, rollback, or source attribution. All criteria scored 0 due to lack of evidence.
Insufficient evidence. README describes architecture but no code or tests to verify self-consistency, dependency availability, or failure messages. All criteria scored 0.
Insufficient evidence. README describes target users and scenarios but no code or configuration to assess capability boundaries, trigger precision, or environment fit. All criteria scored 0.
Insufficient evidence. README provides installation instructions and architecture info but no code, examples, FAQ, known limitations, versioning, or maintenance responsibility. License present but unverified. All criteria scored 0.
Insufficient evidence. README describes outputs and features but no code or tests to assess output usability, marginal value, or cost-benefit. All criteria scored 0.
Insufficient evidence. README describes features but no code or tests to verify claim traceability, cross-source corroboration, or fact-inference separation. All criteria scored 0.
- Not found in source: least-privilege scopingGrant only what the task needs: a dedicated account or read-only token, scoped to specific directories and repos.
- Not found in source: confirmation before actingTurn on (or add) a confirmation step before it acts, and try it in a sandbox or test environment before real data.
- Not found in source: data-flow disclosureWatch which external services it contacts (proxy or firewall logs) and keep sensitive data out until you know where it goes.
- Not found in source: sensitive-data handlingUse dedicated, low-privilege, revocable API keys — never production credentials — and keep secrets out of logs.
- Not found in source: dependency securityPin versions and run a dependency audit (npm audit, pip-audit) before installing; prefer running it in a container.
- Not found in source: disclosed external effectsEstablish which external systems it writes to, sends to or changes, and verify with test accounts or repos before production.
- Not found in source: rollback or recovery pathBack up first, or work on a git branch or snapshot, so its changes can be undone.
- Not found in source: verifiable attributionInstall from the official repo or registry and check the publisher and URL to avoid look-alike packages.
- Static review based only on README and LICENSE; code not examined, so security and reliability claims cannot be verified.
- Publisher identity unverified; do not infer quality from brand or reputation.
- README mentions API keys and external services (Tavily, Gemini, OpenAI, Google Maps, MongoDB) requiring user configuration, posing data exposure risks.
Recent releases
Latest entries from the project's GitHub Releases. Notes are quoted from upstream as written, not rewritten or tested by FollowAgents.
-
Release notes excerpt
What's New in v2.3.0 Pick any model you want! Company Research Agent now runs on [OpenRouter](https://openrouter.ai), so one API key gives you access to hundreds of models (Claude, GPT, Gemini, Grok, DeepSeek, Qwen, and more). You no longer need a Google Gemini key. 🔀 OpenRouter model selection - New Settings panel. Click the model button in the top-right corner to paste your OpenRouter key and choose a model. You can search the full live OpenRouter catalog, filter by provider, and see each model's logo, context window and price per 1M tokens. …View on GitHub ↗ -
Release notes excerpt
What's Changed Company research UI gets a big refresh! Thanks, @RobertTylman, for your help. * Refresh company research UI and streamline research by @RobertTylman in https://github.com/guy-hartstein/company-research-agent/pull/73 * Fix setup repository links by @HUAN2022A in https://github.com/guy-hartstein/company-research-agent/pull/59 * Bump js-yaml from 4.2.0 to 4.3.1 in /ui by @dependabot[bot] in https://github.com/guy-hartstein/company-research-agent/pull/67 * Bump brace-expansion in /ui by @dependabot[bot] in https://github.com/guy-hartstein/company-research-agent/pull/66 …View on GitHub ↗ -
Release notes excerpt
Highlights All Tavily calls now run at advanced depth: the four researcher web searches (search_depth) and the enricher's URL extraction (extract_depth). The grounding crawl was already advanced. This deepens source coverage for every research run, at roughly 2x the Tavily credit cost per run. Also on LangChain 1.3.9 (up from 1.2.17), plus the usual UI dependency updates. What's Changed * Search + extract now use advanced depth by @guy-hartstein in https://github.com/guy-hartstein/company-research-agent/commit/400c6bde210e81572340e484f756dd89dd3eae2a …View on GitHub ↗