This project was started due to the fact that I could not find a unified map showing all of the free (or near-free) hot springs throughout the United States. These are undeveloped and non-resort hot springs where each location has unique attributes that make them special. By putting all of these locations into one place I am hoping to make it easier to visualize where the hot springs are to better enable trip planning.
Not cost me a bunch of money (<$5) per month
Automated information from scrapable sources
Show all hot springs in the lower 48
The data is always the first place to start, as that is where all the value can be exposed. Getting high-quality data on free hot springs is arduous, to say the least. There is expert knowledge out there, it just takes a great deal of research to see the big picture for one spring let alone all the hot springs along a road trip route. The first step was to determine where the foremost lists of all hot springs, which is hard enough. What makes it harder is the lack of information and amount of disinformation. The two sites I find most helpful are the USGS 1980 survey and https://www.ultimatehotspringsguide.com/. The issue with these two sites is that they have a lot of trust (hence the corresponding SEO ranking) and the entropy of their information being mostly static. While the data was not the best, it served as a good starting point. The biggest disadvantage that all other hot spring sites present is the lack of filtering; without filtering or other relevant information that makes trip planning and correlation of desired traits a task best left for a person who is strong-willed. The closest example I give that is high-quality data without the VC hype and polished turd UX dark-patterns that makes road-tripping and staying off-grid so much easier is https://freecampsites.net/
Copy and pasting the results from Ultimate Hotsprings was the first step. Since new hot springs are not popping up all over the place, wrangling the data by hand is more efficient than mindlessly scraping the Google Places API, which is a violation of the terms of service! This allows for the first pass analysis that provides feedback on the data much easier than doing QA on automated results. Since I was looking at the data I already went through and removed anything with the word “hotel”, “resort”, or “spa” from the results like an idiot. I told myself, “This map is for Free Hot Springs, and I will be damned if I put any paid locations up.” As I continue to check all the locations I start to have an existential crisis about the term free and what that means and how much is too much to pay to soak in water that you can find free in other places. For some hot springs that are “free” there are these locations nearby that attract people without scruples who charge to park and walk to the actual hot springs which are located on public land. The drama of Deep Creek Hot Springs is what I am specifically talking about, where a rancher was charging $5 per person to park on his land and some other group claiming to “officially” represent the Deep Creek Hot Springs (which is on public lands) bought the land next door to the rancher and started charging $10 per person and fenced off access from the ranchers land to the trails on public land. Of course, you can park down the road from both of these parties for free if you have 4×4, or drive to the other side of the canyon and park at the public trailheads.
Stories filled with drama and questionable circumstances haunt so many of these locations. To keep things simple, if it is less than $10 per person to get in, it is on the list. Backtracking, I start over on the list being sure to document commercial locations. I resolve this issue with little fret, pivoting again to a more broad approach where I document the prices for all hot springs rather than just the free ones. This was due to the fact that the research was taking so much effort that was going to be throwaway for anything more than $20. At some point, I find one hot springs map that has hardly any locations and actually charges commercial locations for the privilege of being listed with a premium package to have a larger marker on the map and more details; an interesting business opportunity that seems like it would have trouble scaling. My OCD and doing this the hard way is a challenge that paid off on the first road trip after using this map.
Sifting through all the springs gets harder with the occasional outlier, which specifically was Dirty Socks/Soaks Hot Spring. This spring is a warm spring with a temperature of 90F and not really enjoyable to soak in due to the site not being maintained. The water temperature being low is not so bad, the fact is the spot is like Corn Springs in temperature (which is not listed on Ultimate Hot Springs) and about 30 minutes North of Holtville Hot Springs. I decided that anything higher than 95 should be stored in the hot springs data set.
The names of the springs change or people call them the wrong names. The story of Boyle Hot Springs was hard to determine. There was a hotel that got built like 3 times using the water from Boyle (the dude who drilled the first well to 70 feet. The Fairmont Hotel sits on this site and uses a new well that is at 1100 feet and has hotter water. In this case, I am removing Boyle Hot Springs from the list as its own entry and combining it with the Fairmont Sonoma Mission Inn which is the only place I can tell in that tiny town that is sourcing water from that well. The history is not lost, as the alternative names column can have multiple entries.
Speaking of columns, it would appear there are more data points that are unique and still tussing themselves out. While comparing the data points of competitor hot spring locators sites I saw a variety of useful and ridiculous attributes. Regardless, adding in additional columns as needed requires revisiting locations that have already been documented. With this revelation, I realize that this is not a task that is simple enough to outsource. I found out there are seasons where these places are open only during the winter, as the summers in the Southern California desert do not allow for the water to cool to an enjoyable temperature. The 4×4 requirements of Saline Valley Hot Springs have necessitated another column. PAM (aka Brain-Eating Ameba) warning was a necessity after realizing the potential risk. And what about where to sleep! I missed the lodging opportunities column as well, which I realized on the next road trip when I had to figure out where we were gonna sleep after a relaxing hot spring soak! I got some education and exposure to so many facets of hot springs that I am feeling more confident as an SME.
Getting hold of some of these paid commercial hot springs to get information is a challenge. At this point, I feel like I understand hot springs on a much more intimate level, but getting data the hard way is HARD. Some locations are closed and have plans to open sometime in the future has made this map feel less valuable. This is where I see other sites trying to act as an aggregator for hot springs, allowing for users to join the site to review and provide data on each location. For the reasons I described above, I feel like determining the research as a motivated individual is hard enough let alone left trusted to any user who feeds into the site. There is a variety and as of this writing there is a direct competitor of this site which is using users to source data; not only is the guy who made it a user, he is the president. As mentioned above, the disinformation is rich on hot springs to the point where it is common to see people talking about dirty needles and disgusting filth littering the hot springs. I believe this is mostly to dissuade people from visiting the hot springs and keep some sort of semblance of secrecy. While I have found trash near hot springs, I have never encountered a dirty needle (at least not on the level they are found on the streets of SF). And in the instance that there is some trash, you do what everyone should be legally required to do when visiting public lands and clean up the surrounding area.
As mentioned above, the ability to scrape data is a challenge to the point where the scope of automated descriptions was moved out. Finding images that are able to be legally used is a separate challenge that was briefly explored. I asked a competitor what they are doing to source images, I did not feel bad when they admitted they were just taking them off of the commercial hot springs site! The solution I explored was to use this API https://api.creativecommons.engineering/v1/#operation/image_search to find images that are free to use via the Creative Commons license. While a good number of the larger hot springs had images that were clear to use, there were no results for any commercial locations. To compensate for a lack of images and descriptions I turned to everyone’s favorite time-eater, YouTube! Searching the results for a location and saving the top 5 YouTube videos was the easiest way to automate images and descriptions. For most locations, there are relevant videos, while some of the more remote and less known locations usually just display generic “Top N Hot Springs in Whatever State” videos. This is a good enough solution that hopefully does not need any enhancements. The code is hosted on Google App Script which was chosen due to the fact that the data was living in Google Sheets and YouTube is a Google company.
With the completion of the initial U.S. dataset, I am realizing the complexity of this project is growing as much as I am willing to let it. While I want to put all this in a database to simplify the complexity, the Google Sheets solution works well enough as long as the data is cleaned and cached. My method for extracting data has turned out to be a downside, as I removed multiple locations that were closed and/or not publicly accessible. This is a bad thing because for each new set of hot springs data I interact with I am seeing sites that are closed and do not have the information on why or when it was closed. Some locations I have come across the same location three or four times, to the point where I can explain why it is closed and the situation with the local watershed while directing folks to the next closest hot spring. The reason I removed the entries was to reduce the file size in the MVP’s JSON. :FACEPALM. For this reason, I would make two unique recommendations: an automatic data export pipeline or just putting the data in a database from the start. The data export pipeline can read from Google Sheets no problem and then export the data (fake report rollup) that should cover the minimal amount of data to render the map, followed by the description data needed to render the card/information about each location.
Overall this project is developing into more of a curated information app, rather than just slapping some commenting system on top of a specific type of place of interest dataset. Working for the data in a manual search effort was very rewarding, or at least it feels like it when you are soaking in a hot spring. This is part one of the http://freehotsprings.com/ writeup, with auto descriptions, optimal season to visit, MVP to scale, building a better map, and UI/UX will be future enhancements with their own blog posts.