HealthMap is an open-source tool to visualize the structure of the U.S. healthcare system — including payers, providers, vendors, and their complex web of relationships.
This project helps people explore:
- Who owns whom (e.g. UnitedHealth → Optum → Change)
- How companies are connected (partnerships, contracts, investments)
- Where the money flows (administrative vs clinical)
- How new entrants fit into the healthcare ecosystem
It's like a periodic table of healthcare companies — with AI-backed auto-updates and real-time relationship mapping.
-
🔍 AI-generated healthcare knowledge graph
Automatically parses Wikipedia and news sources to build structured JSONs of each company and its relationships. -
🥸 Interactive visualization
Built using React + react-force-graph, so you can click around the industry like a map. -
🤖 Claude-powered enrichment
Uses Anthropic's Claude to analyze and infer relationships between healthcare entities. -
🏗️ Composable JSON schema
Each company is defined in its own.json
file, easy to modify or regenerate via LLMs.
healthmap/
├── README.md
├── frontend/ # React app to visualize the graph
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── hooks/ # Custom React hooks
│ │ ├── utils/ # Utility functions
│ │ ├── styles/ # CSS styles
│ │ ├── App.jsx # Main application component
│ │ └── index.jsx # Entry point
│ ├── package.json # Frontend dependencies
│ └── vite.config.js # Vite configuration
├── backend/ # Python backend to fetch/scrape/enrich
│ ├── scraper/ # Data scraping modules
│ │ ├── wikipedia.py # Wikipedia scraper
│ │ └── news.py # News scraper
│ ├── enrichment/ # LLM enrichment modules
│ │ ├── claude.py # Claude API integration
│ │ └── openai.py # OpenAI API integration (fallback)
│ ├── utils/ # Utility functions
│ │ └── json_utils.py # JSON handling utilities
│ ├── main.py # Main entry point
│ └── requirements.txt # Python dependencies
├── data/
│ └── entities/ # Entity JSON files
│ ├── unitedhealthcare.json
│ ├── elevance_health.json
│ └── kaiser_permanente.json
├── prompts/ # LLM prompt templates
│ ├── entity_extraction.txt
│ └── relationship_inference.txt
└── tools/ # CLI tools for batch updates
├── batch_update.py
└── add_entity.py
git clone https://github.com/joechen018/healthmap.git
cd healthmap
You can also access the hosted version of HealthMap on GitHub Pages:
https://joechen018.github.io/healthmap/
This version includes pre-processed healthcare entity data and is updated automatically when changes are pushed to the main branch.
cd backend
pip install -r requirements.txt
Set your Claude API key:
# On macOS/Linux
export CLAUDE_API_KEY=your_key
# On Windows
set CLAUDE_API_KEY=your_key
Process a single entity:
python main.py "UnitedHealth Group"
This will generate data/entities/unitedhealth_group.json
.
List all processed entities:
python main.py --list
Process multiple entities in batch:
python ../tools/batch_update.py -e "UnitedHealth Group" "Elevance Health" "Kaiser Permanente"
cd ../frontend
npm install
npm run dev
Then open http://localhost:3000
in your browser.
HealthMap is configured for automatic deployment to GitHub Pages:
- Fork this repository
- Enable GitHub Pages in your repository settings:
- Go to Settings > Pages
- Set the source to "GitHub Actions"
- Push changes to the main branch to trigger deployment
- Your site will be available at
https://yourusername.github.io/healthmap/
The deployment workflow:
- Builds the React frontend
- Copies the entity data files to the build
- Deploys to the gh-pages branch
You can also manually trigger a deployment from the Actions tab in your repository.
You can help by:
- Adding new healthcare entities
- Improving scraping/LLM enrichment prompts
- Building out the visual layers
- Suggesting alternative views (donut, tree, sankey)
To generate a new company file:
python backend/main.py "Hinge Health"
Each healthcare entity is represented as a JSON file with the following structure:
{
"name": "UnitedHealthcare",
"type": "Payer",
"parent": "UnitedHealth Group",
"revenue": "240B",
"subsidiaries": [
"UnitedHealthcare Community & State",
"UnitedHealthcare Medicare & Retirement"
],
"relationships": [
{"target": "UnitedHealth Group", "type": "owned_by"},
{"target": "Optum", "type": "partner"},
{"target": "Elevance Health", "type": "competitor"}
]
}
Entity types include:
- Payer: Insurance companies
- Provider: Healthcare providers
- Vendor: Healthcare vendors
- Integrated: Integrated health systems
Relationship types include:
- owned_by: Entity is owned by the target
- owns: Entity owns the target
- partner: Entity has a partnership with the target
- competitor: Entity competes with the target
- customer: Entity is a customer of the target
- vendor: Entity is a vendor to the target
- Auto-track M&A and healthcare news
- Classify companies by admin vs clinical spend
- Let users generate custom landscape maps (e.g. MSK, behavioral)
- Add financial flow visualization
- Implement search and filtering capabilities
- Add user accounts and saved views
- Frontend: React, react-force-graph, Vite
- Backend: Python, BeautifulSoup, Requests
- AI: Anthropic Claude API (with OpenAI fallback)
Built by Joe Chen
Open an issue to suggest a new feature or company!