PANO: The Ultimate Tool for OSINT Investigation Platform
PANO is Investigation Platform Combining Graph Visualization, Timeline Analysis, And AI Assistance To Uncover Hidden Connections In Data

Have you ever wondered how investigators connect the dots in complex digital cases? Meet PANO – a powerful platform that’s changing the game for online investigations.
What is PANO?
PANO (Platform for Analysis and Network Operations) is a tool that helps you visualize connections between different pieces of information. Think of it as a digital corkboard where you can pin items and draw strings between them – except it’s much smarter and does a lot of the work for you.
Whether you’re researching someone’s online presence, investigating connections between different accounts, or trying to understand complex relationships in data, PANO gives you the tools to see the bigger picture.
Key Features That Make PANO Stand Out
Interactive Graph View
Remember those detective movies where they have photos connected with red string on a wall? PANO gives you exactly that, but digital and interactive. You can:
- Drag and drop different types of information onto your workspace
- See how everything connects automatically
- Arrange items in different ways to spot patterns
- Customize how everything looks to focus on what matters
Timeline View
Sometimes, when things happened is just as important as what happened. PANO’s timeline feature lets you:
- See events in chronological order
- Zoom in on specific time periods
- Filter events by type
- Spot patterns that might be hidden when looking at data in other ways
Map Integration
Location data comes to life with PANO’s mapping features:
- Plot locations on interactive maps
- See how geographic data connects to other information
- Track movement patterns
- Analyze location-based relationships
What Kind of Information Can You Work With?
PANO works with lots of different types of digital information, including:
- Email addresses
- Usernames
- Websites
- Images
- Locations
- Events
- Text content
- And you can even create custom types!
The Magic Behind PANO: Transforms
One of PANO’s most powerful features is its “transform” system. Transforms are like automated research assistants that can:
- Take an email address and find connected accounts
- Search for a username across multiple platforms
- Analyze images for hidden data
- Make connections between seemingly unrelated pieces of information
For example, give PANO an email address, and it might discover associated social media accounts, images, locations, and more – all with just a few clicks.
AI-Powered Analysis with PANAI
PANO comes with its own AI assistant called PANAI, which can:
- Help you spot patterns you might miss
- Suggest new avenues for investigation
- Extract important information from text
- Work across multiple languages
- Give context-aware suggestions
Think of it as having a digital analyst right by your side, helping you make sense of complex information.
Getting Started with PANO
Installation
Getting up and running with PANO is surprisingly easy:
For Windows users:
- Make sure you have Python 3.11 or higher installed
- Open Command Prompt and run:
1 2 3 4 |
git clone https://github.com/ALW1EZ/PANO.git cd PANO start_pano.bat |
For Linux users:
- Make sure you have Python 3.11 or higher installed
- Open Terminal and run:
1 2 3 4 5 |
git clone https://github.com/ALW1EZ/PANO.git cd PANO chmod +x start_pano.sh ./start_pano.sh |
The startup script handles everything else – checking for updates, setting up the environment, and launching the application.
Using Email Lookup Transform
To use the Email Lookup transform (which helps discover information from Google accounts), you need to:
- Start PANO using the startup script
- Activate the virtual environment:
- Windows:
call venv\Scripts\activate
- Linux:
source venv/bin/activate
- Windows:
- Login with GHunt (follow instructions at the GHunt repository)
Basic Workflow
Once you’re in, here’s a typical workflow:
- Create a new investigation (File → New Investigation)
- Add your first piece of information:
- Drag an entity type (like Email) from the sidebar
- Enter the details (like the email address)
- Run transforms to discover connections:
- Right-click on the entity
- Select “Run Transform”
- Choose the transform you want to run
- Explore the results in different views:
- Graph View for connections
- Timeline View for chronological analysis
- Map View for geographic data
- Save your work to continue later (File → Save Investigation)
Real-World Uses
While PANO was designed with digital investigations in mind, it’s useful for many different purposes:
- Journalists researching complex stories
- Researchers studying online networks
- Security professionals investigating incidents
- Anyone trying to make sense of complex digital connections
Case Study: Investigating a Suspicious Email
Let’s walk through how you might use PANO to investigate a suspicious email:
- Setup: Create a new investigation and name it “Suspicious Email Case”
- Initial Data Entry:
- Drag an Email entity from the sidebar
- Enter the suspicious email address: suspicious.sender@example.com
- Add any notes about why this email is suspicious
- Running Basic Transforms:
- Right-click on the email entity
- Select “Run Transform” > “Email Analysis”
- PANO will search for information linked to this email
- Investigating the Results:
- PANO might discover:
- Connected usernames
- Social media accounts
- Websites
- Previous activities
- PANO might discover:
- Timeline Analysis:
- Switch to Timeline View
- Look for patterns in when accounts were created or used
- Pay attention to activity spikes around suspicious dates
- Geographic Analysis:
- If location data was found, switch to Map View
- Look for discrepancies in location data
- Check if locations match claimed origins
- PANAI Assistance:
- Ask PANAI: “What patterns do you see in this data?”
- PANAI might detect unusual patterns or suggest new leads
- Documentation:
- Use the Notes feature to document your findings
- Export a report of your investigation
- Save the investigation file for future reference
This workflow shows how PANO can help turn a single piece of information (an email address) into a comprehensive investigation with multiple connected data points.
Want to Contribute?
PANO is a project that welcomes contributions. If you have coding skills and want to help make it even better:
- Fork the repository
- Make your improvements
- Test thoroughly
- Submit a pull request with details about what you changed and why
The Technical Side
For those interested in the technical details, PANO is built with:
- Python 3.11+
- PySide6 for the user interface
- A flexible architecture that makes it easy to add new features
Developers can create custom entity types, transforms, and helper tools to extend PANO’s capabilities even further.
Sample Code: Creating a Custom Entity
Want to create your own entity type? Here’s a simple example of how to create a Phone Number entity:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
from dataclasses import dataclass from typing import ClassVar, Dict, Any from .base import Entity @dataclass class PhoneNumber(Entity): name: ClassVar[str] = "Phone Number" description: ClassVar[str] = "A phone number entity with country code and validation" def init_properties(self): self.setup_properties({ "number": str, "country_code": str, "carrier": str, "type": str, "verified": bool }) def update_label(self): self.label = self.format_label(["country_code", "number"]) |
Sample Code: Creating a Custom Transform
Here’s how you can create a transform that looks up information about a phone number:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
from dataclasses import dataclass from typing import ClassVar, List from .base import Transform from entities.base import Entity from entities.phone_number import PhoneNumber from entities.location import Location from ui.managers.status_manager import StatusManager @dataclass class PhoneLookup(Transform): name: ClassVar[str] = "Phone Number Lookup" description: ClassVar[str] = "Lookup phone number details and location" input_types: ClassVar[List[str]] = ["PhoneNumber"] output_types: ClassVar[List[str]] = ["Location"] async def run(self, entity: PhoneNumber, graph) -> List[Entity]: if not isinstance(entity, PhoneNumber): return [] status = StatusManager.get() operation_id = status.start_loading("Phone Lookup") try: location = Location(properties={ "country": "Example Country", "region": "Example Region", "carrier": "Example Carrier", "source": "PhoneLookup transform" }) return [location] except Exception as e: status.set_text(f"Error during phone lookup: {str(e)}") return [] finally: status.stop_loading(operation_id) |
Practical Example: Username Investigation
Here’s a real-world example of how you might use PANO to investigate a username:
- Add a Username entity with the value “techguru42”
- Run the “Username Search” transform
- PANO might discover accounts on Twitter, GitHub, and Reddit
- Add these as connected entities in your graph
- Run the “Social Media Analysis” transform on the Twitter account
- This might reveal location data and commonly used hashtags
- Run transforms on these new entities to discover even more connections
- View the timeline to see when posts were made across all platforms
- Export your findings as a report
Final Thoughts
In a world where digital information is everywhere, tools like PANO help us make sense of the chaos. Whether you’re conducting serious investigations or just exploring connections between different pieces of information, PANO gives you a powerful set of tools to see the bigger picture.
Want to try it out? Head over to GitHub to get started with PANO today!
PANO is licensed under Creative Commons Attribution-NonCommercial (CC BY-NC), which means you can use and modify it for non-commercial purposes as long as you give credit to the original author.