Geowifi is an open-source WiFi geolocation lookup tool that searches public databases using a wireless network’s Basic Service Set Identifier (BSSID) or Service Set Identifier (SSID). It helps security researchers and OSINT practitioners compare available location records across multiple sources from a single command-line interface.
Geowifi queries supported databases and combines the returned information into one result. Depending on the network and the database, results may include geographic coordinates, hardware vendor information, and whether a location record was found. The tool is useful for authorized wireless network research, digital investigations, and WiFi-related OSINT.
Database coverage varies. Some sources may return coordinates while others report that no matching location was found. A returned location should be treated as an estimate rather than proof of a network’s current physical position.
Before running Geowifi, prepare the following:
On Windows, the newer Windows Terminal is recommended for better emoji display in command-line output.
To use Wigle for SSID searches, obtain the required API credentials from Wigle and configure the wigle_auth parameter in utils/API.yaml. Replace its value with the encoded authentication data provided by Wigle. Keep API credentials private and avoid publishing them in repositories or logs.
Download the source code from the official Geowifi GitHub repository. Open a terminal in the project directory and install the required Python packages:
python3 -m pip install -r requirements.txt
Using a Python virtual environment is recommended to keep the project’s dependencies separate from other Python applications.
Geowifi accepts an SSID or BSSID as the search input. The following options control how results are retrieved and displayed:
-h, --help: Display the command-line help message.-s SSID, --ssid SSID: Search using a wireless network name.-b BSSID, --bssid BSSID: Search using a wireless access point’s BSSID, commonly represented by a MAC address.-j, --json: Export results in JSON format.-m, --map: Display available location results on an HTML map.Use the -b option to search for a wireless access point by its BSSID. Replace the example value with the identifier you are authorized to investigate.
python3 geowifi.py -b A0:XX:XX:XX:6F:90
The tool checks its supported sources and displays the available information for that identifier. Results may include the hardware vendor, MAC address type, and coordinates returned by individual databases.
Use the -s option to search by the WiFi network name:
python3 geowifi.py -s "Example Network"
SSID searches can be less precise than BSSID searches because multiple access points may use the same network name. Configure Wigle authentication if you want to use that service for SSID lookups.
To save the search results in JSON format, add the -j option:
python3 geowifi.py -b A0:XX:XX:XX:6F:90 -j
To display available geolocation results on an HTML map, use -m:
python3 geowifi.py -b A0:XX:XX:XX:6F:90 -m
The JSON output organizes information under a data object. Fields can include the BSSID, hardware vendor, MAC address type, and each database’s latitude and longitude. A source may return not_found when it has no matching coordinates.
For example, a result could contain a BSSID, a vendor name, coordinates from Wigle or OpenWifi, and not_found values for Apple or Milnikov. These values illustrate the output structure; actual results depend on the query and current database records.
For additional reconnaissance techniques, explore this guide to website OSINT tools and reconnaissance techniques.
WiFi geolocation data can reveal approximate locations associated with wireless access points. Use Geowifi only for authorized security research, investigations, or network assessments. Avoid using lookup results to track individuals or access private networks without permission. Public database records may be outdated, incomplete, or inaccurate, so verify findings before drawing conclusions.
Project source: Geowifi on GitHub