Skip to content

Open Data

The Log as Data

Every hike as a spreadsheet row, every recorded track as GPX

Everything the log measures is here to download. One CSV holds every published hike, one row each, in the units the log stores. Each hike page serves its GPS track as a GPX file. Both are licensed CC BY 4.0: use them for anything, name HikeAlong and link back here.

In the Files

What Is Here

152Hikes in the CSVsince January 1, 2024
5Trails
121GPX Filesall recorded by a watch
27Columns
October 2, 2026Latest Morning

One File

The Spreadsheet

One row per published hike, oldest first, with a header row. Values are the numbers the log stores: meters, seconds, Celsius, kilometers per hour and hectopascals, never the rounded imperial figures the pages show. A cell is empty when the value was not measured; nothing is estimated to fill it. Fields are quoted the RFC 4180 way (only when they hold a comma, a quote or a line break, with quotes doubled), lines end in CRLF, and the file is UTF-8. It is rebuilt from the source files every time the site is published, so it always matches the pages.

Download hikes.csv (47 KB)

The columns of hikes.csv
Column Unit What it holds
date YYYY-MM-DD The morning's date, local time (America/New_York).
trail slug The trail's identifier, the last part of its page address: hikealongtours.com/trails/<trail>/.
trail_name text The trail's name as the site prints it.
distance_m m Distance walked, the summed great-circle distance between GPS points. A map estimate on a route drawn after the walk.
gain_m m Elevation gain after the filter named on the hike page. The two methods are not comparable with each other.
loss_m m Elevation loss, same method as the gain.
moving_time_s s Moving time. Any stretch slower than 1 km/h counts as stopped and is dropped.
elapsed_time_s s Start to finish as the watch recorded it, stops included.
sunrise_local ISO 8601 with offset Sunrise at the trail's sunrise spot on that date.
civil_dawn_local ISO 8601 with offset Civil dawn at the same spot.
sunrise_azimuth_deg degrees The sun's compass bearing at sunrise from the same spot, clockwise from north (about 61 in June, 119 in December here).
temp_c degrees C Air temperature at the sunrise hour, from the Open-Meteo archive (2 m above ground).
cloud_cover_pct % Total cloud cover from the model, every layer, as Open-Meteo reports it.
sky_cover_pct % The cloud cover figure the site uses: the low and middle layers combined, 100 * (1 - (1 - low/100) * (1 - mid/100)), rounded. Falls back to cloud_cover_pct when a layer is missing.
cloud_low_pct % Low cloud fraction, the layer that hides a sunrise.
cloud_mid_pct % Middle cloud fraction.
cloud_high_pct % High cloud fraction, the cirrus a sunrise lights up.
wind_kmh km/h Wind speed at 10 m.
humidity_pct % Relative humidity at 2 m.
pressure_hpa hPa Surface pressure at the site, not reduced to sea level.
color_index 0 to 100 Color index of the sunrise photograph that fronts the hike page, version 1 of the formula on the methods page. Empty when the page is fronted by a photograph from later on the trail, which is not a reading of the sunrise sky.
palette 5 hex colors, space separated The five dominant sky colors of that sunrise photograph as #rrggbb, the one covering the most pixels first. Empty when the photograph carries no palette, and when the page is fronted by a photograph from later on the trail.
has_photo true or false Whether the entry has at least one photograph.
photo_taken_local ISO 8601 with offset Capture time of the photograph that fronts the hike page.
url URL The hike's page, where every number above is shown with its method.
avg_hr bpm Average heart rate. Filled only where the entry publishes it; empty otherwise.
max_hr bpm Maximum heart rate, same rule.

Heart rate is private by default. The avg_hr and max_hr columns are always present so the header never changes, and they are filled only in rows whose entry publishes it (none today). Gain and loss depend on the elevation method named on each hike page, and a route drawn on a map after the walk has map estimates for distance and elevation and no times at all; those rows keep moving_time_s and elapsed_time_s empty.

One File for Scripts

The JSON

The same log as one JSON array, one object per published hike, oldest first, for a script or a page that would rather not parse CSV; the site's own compare page reads it. It carries the main columns of the spreadsheet plus the paths of each morning's photograph and route map on this site, so a page can show them. Numbers are the stored SI values as in the CSV, a value that was not measured is null, the object keys never change, and heart rate is not in the file at all.

Download hikes.json (143 KB)

The fields of hikes.json
Field Type What it holds
slug string The hike's identifier: the date and the trail slug, which is also the last part of its page address.
url URL The hike's page, where every number below is shown with its method.
date YYYY-MM-DD The morning's date, local time (America/New_York).
trail object The trail as { slug, name }; the slug is the last part of hikealongtours.com/trails/<slug>/.
distance_m number or null Distance walked in meters, the summed great-circle distance between GPS points. A map estimate on a drawn route.
gain_m number or null Elevation gain in meters after the filter named on the hike page. The two methods are not comparable with each other.
moving_time_s number or null Moving time in seconds. Any stretch slower than 1 km/h counts as stopped and is dropped. Null on a drawn route.
sunrise_local ISO 8601 with offset Sunrise at the trail's sunrise spot on that date.
sunrise_azimuth_deg number or null The sun's compass bearing at sunrise from the same spot, degrees clockwise from north.
sky string or null The sky in one word from the low and middle cloud together: clear, scattered, broken or overcast.
sky_cover_pct number or null The cloud cover figure the site uses, in percent: the low and middle layers combined, 100 * (1 - (1 - low/100) * (1 - mid/100)), rounded.
cloud_low_pct number or null Low cloud fraction in percent, the layer that hides a sunrise.
cloud_mid_pct number or null Middle cloud fraction in percent.
cloud_high_pct number or null High cloud fraction in percent, the cirrus a sunrise lights up.
temp_c number or null Air temperature in degrees Celsius at the sunrise hour, from the Open-Meteo archive (2 m above ground).
has_photo boolean Whether the entry has at least one photograph.
drawn boolean True when the route was drawn on a map after the walk: distance and gain are map estimates and there are no times.
hero path or null The photograph that fronts the hike page, built 960 px wide, as a path on this site. Null when the entry has no photograph.
hero_alt string or null That photograph's alt text.
map path or null The route map as an SVG path on this site. Null when the entry has no track.
color_index number or null Color index of the fronting photograph when it is a sunrise, version 1 of the formula on the methods page; null when the page is fronted by a photograph from later on the trail.
palette array of 5 strings The five dominant sky colors of the fronting sunrise photograph as #rrggbb, the one covering the most pixels first. Present only when that photograph is a sunrise and carries one.
sun_azimuth_deg number or null Where the sun (its disk, or the glow above the treeline) sits in the fronting photograph, as a compass bearing read off the spot's calibrated reference view. Null when the photograph was not taken from a calibrated spot or the sun was not found.
conditions array of {text, inferred} or null Trail conditions lifted verbatim from the morning's notes: the text as written, inferred true when a keyword rather than the spoken cue picked the line. Null when the notes hold none.
other_years array of slugs The nearest morning to this date in each other year of the log, within 14 days, same trail first, oldest year first.
closest_weather slug or null The morning most like this one by low, middle and high cloud, humidity, temperature and day of year, among mornings with a full weather record.
closest_sky slug or null The sunrise morning whose sky palette sits nearest this one's, by the same measure as the hike page's look-alike strip (Lab, weighted by pixel share).

One File for the Kit

The Gear

Every item on the gear page with its service window and the mornings and miles the log counted inside it, as one JSON array, oldest window first. The numbers are the sums the page shows, meters as everywhere in the data, and nothing is estimated across a gap: a weekend with no morning in the log adds nothing, and the count of those weekends is in the file beside the miles. The buy links are not in the file.

Download gear.json (8 KB)

The fields of gear.json
Field Type What it holds
slug string The item's id: its folder name in the log's source and its anchor on the gear page.
url URL The item on this site.
name string The item as I call it.
category string One of feet, clothing, carry, drink, light, audio, phone, watch, camera, other.
in_use_from YYYY-MM-DD, YYYY-MM or null The first day it came along. An item worn by the weather may give only the month, or null when nobody recorded it.
in_use_to YYYY-MM-DD, YYYY-MM or null The last day; null while it is current.
sometimes boolean True when it is worn or used by the weather or the walk rather than every morning (the clothing): its mornings and miles are then null, not the whole window.
replaced_by slug or null The item that took over, when one did.
retire_reason string or null A few words on why it retired.
tested boolean True only when a review exists; everything else is used, not tested.
review_url URL or null The review, when tested.
provided_by string or null The brand, when a brand supplied the item.
mornings number or null Logged mornings inside the window; an open window runs to the newest logged morning. Null for an item worn by the weather.
distance_m number or null The sum of those mornings' distances in meters, map estimates included, nothing estimated across a gap. Null for an item worn by the weather.
weekends number or null Saturday and Sunday pairs in the counted span, from the later of the window start and the first logged morning. Null for an item worn by the weather.
weekends_without_record number or null Of those, the ones with no morning in the log. Null for an item worn by the weather.

One File for the Sightings

The Sightings

Every animal and flower photographed on the walks, one row per photograph, oldest first, as a spreadsheet and as JSON: the species as I identified it and the scientific name the iNaturalist taxonomy gives that name, the morning the photograph was matched to by its clock, the trail, the position along the track at the capture time, the minutes from sunrise and the camera. Coordinates are rounded to three decimals, about 100 m. A sensitive species (a nest, or a taxon iNaturalist obscures) keeps its trail and its month and nothing that places it: no day, no time, no hike, no position, in both files and on every page. Numbers are SI as everywhere in the data, an empty cell or a null is a value that was not measured, and the photographs themselves are not part of the data set.

Download sightings.csv (23 KB) Download sightings.json (60 KB)

The columns of sightings.csv
Column Unit What it holds
id slug The sighting's identifier: the date, the species slug and a counter for that day; for a sensitive species the month, the slug and a counter for that month.
kind wildlife or flower Which log the sighting belongs to.
species slug The species as identified, the last part of its page address: hikealongtours.com/wildlife/<species>/ or /flowers/<species>/. unidentified-wildlife and unidentified-flower carry no identification.
common_name text The species name as the site prints it.
scientific_name text The scientific name from the iNaturalist taxonomy for that common name. Empty when the lookup found no close match.
taxon_id integer The iNaturalist taxon the scientific name came from: https://www.inaturalist.org/taxa/<taxon_id>.
iconic_group text bird, mammal, reptile, amphibian, insect, spider, plant or other, from the same taxonomy.
sensitive true or false True for a species whose position is withheld: a nest, or a taxon iNaturalist obscures. Such a row carries the trail and the month only.
date YYYY-MM-DD, or YYYY-MM when sensitive The day of the sighting, local time (America/New_York); the month alone for a sensitive species.
taken_local ISO 8601 with offset The capture time from the photograph's EXIF. Empty for a sensitive species.
hike slug The morning the sighting was matched to by its clock, hikealongtours.com/hikes/<hike>/. Empty when no logged morning holds the capture time, and for a sensitive species.
trail slug The trail of that morning, hikealongtours.com/trails/<trail>/.
trail_name text The trail's name as the site prints it.
journey slug The trip the sighting belongs to, when it was made on a journey rather than a morning.
place text Where it was seen on that journey, in the journey's own words. Empty for a sensitive species.
lat degrees, 3 decimals Latitude from the photograph's GPS, from the track at the capture time, or supplied by hand (see position_source), rounded to about 100 m. Empty for a sensitive species and when neither was available.
lon degrees, 3 decimals Longitude, same rule.
position_source text How the position was arrived at: exif, the photograph's own GPS; track, the morning's recording at the capture time; spot, a photo spot named by hand, whose surveyed coordinate this is; stated, a coordinate supplied by hand; trail_default, the trail's sunrise spot standing in, which says the trail and nothing about where along it. Empty when there is no position.
track_distance_m m Distance along the matched track at the capture time, interpolated between the trackpoints either side. Empty without a matched recording, and for a sensitive species.
track_offset_s s Seconds after the first trackpoint of the matched recording. Same rule.
minutes_from_sunrise min Minutes after that morning's sunrise; negative is before. Empty without a matched morning, and for a sensitive species.
young spots, plumage or beside-adult Set when a young animal of the year is in the frame (a fawn, a gosling) and says how the photograph shows it: spots, a fawn's juvenile coat; plumage, a bird's down or juvenile feathers; beside-adult, clearly smaller than the adult beside it, a judgment from the frame. Called by hand, never detected. Empty when none was called, which is not a claim that none was there, and for a sensitive species.
camera text The camera from the EXIF.
lens text The lens from the EXIF, when it names one.
focal_mm mm Focal length as recorded.
focal_eq_mm mm Focal length in 35 mm equivalent terms.
aperture f-number Aperture as recorded, f/1.9 style.
shutter s Shutter speed as recorded, 1/120 style.
iso ISO ISO as recorded.
url URL The species page the photograph is on.
The fields of sightings.json
Field Type What it holds
id string The sighting's identifier: the date, the species slug and a counter for that day; for a sensitive species the month, the slug and a counter for that month.
url URL The species page the photograph is on.
kind string wildlife or flower.
species string The species slug, the last part of the page address; unidentified-wildlife and unidentified-flower carry no identification.
common_name string The species name as the site prints it.
scientific_name string or null From the iNaturalist taxonomy for that common name; null when the lookup found no close match.
taxon_id number or null The iNaturalist taxon: https://www.inaturalist.org/taxa/<taxon_id>.
iconic_group string or null bird, mammal, reptile, amphibian, insect, spider, plant or other; null for an unidentified sighting.
sensitive boolean True for a species whose position is withheld: a nest, or a taxon iNaturalist obscures. Such an object carries the trail and the month only.
date YYYY-MM-DD or YYYY-MM The day of the sighting, local time; the month alone for a sensitive species.
taken_local ISO 8601 with offset or null The capture time from the EXIF; null for a sensitive species.
hike object or null The matched morning as { slug, url }; null when no logged morning holds the capture time, and for a sensitive species.
trail object or null The trail as { slug, name }.
journey object or null The trip as { slug, url } when the sighting was made on a journey rather than a morning.
place string or null Where on that journey it was seen, in the journey's own words; null for a sensitive species.
lat number or null Latitude to 3 decimals (about 100 m), from the GPS, the track at the capture time, or supplied by hand (see position_source); null for a sensitive species.
lon number or null Longitude, same rule.
position_source string or null How the position was arrived at: exif, track, spot (a named photo spot's surveyed coordinate), stated (supplied by hand) or trail_default (the trail's sunrise spot standing in). Null when there is no position.
track_distance_m number or null Meters along the matched track at the capture time; null without a matched recording, and for a sensitive species.
track_offset_s number or null Seconds after the first trackpoint; same rule.
minutes_from_sunrise number or null Minutes after that morning's sunrise, negative before; null without a matched morning, and for a sensitive species.
young string or null spots, plumage or beside-adult when a young animal of the year is in the frame (a fawn, a gosling), saying how the photograph shows it: a fawn's juvenile coat, a bird's down or juvenile feathers, or clearly smaller than the adult beside it, a judgment from the frame. Called by hand. Null when none was called, which is not a claim that none was there, and for a sensitive species.
camera string or null The camera from the EXIF.
focal_eq_mm number or null Focal length in 35 mm equivalent terms.
aperture string or null Aperture as recorded.
shutter string or null Shutter speed as recorded.
iso number or null ISO as recorded.
photo path The photograph, built 960 px wide, as a path on this site.
alt string That photograph's alt text; for a sensitive species the name and the month only.

One Per Hike

The GPX Files

Every hike page with a track has a download link under its route map, at /hikes/<id>/track.gpx, where the id is the folder name in the url column: the date and the trail slug. The file is the track as the watch exported it, GPX 1.1 with a latitude, longitude, elevation and UTC timestamp for every point, the numbers untouched. A route drawn on a map after the walk is served the same way and carries no timestamps.

Heart rate is not in the files. The watch writes it into every point as a Garmin TrackPointExtension, and the served copy has that extension and the app's own summary elements removed, leaving only the elements the GPX 1.1 schema defines. An entry that publishes its heart rate (publish_hr in the log's source) serves the export whole instead, extension included, and says so beside its link.

Example: 2026-10-02-stone-mountain-cherokee.gpx (1.4 MB), the October 2, 2026 track, 13,423 points.

Use It

License and Citation

The CSV, the JSON files and the GPX files are licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). Copy them, chart them, publish work built on them, commercially or not; the one condition is credit. Name HikeAlong and link to https://hikealongtours.com/data/ wherever the data appears, and say so if you changed it. The photographs are not part of the data set and are not covered by this license; they remain all rights reserved.

The weather columns come from the Open-Meteo historical archive, itself CC BY 4.0, so work that uses them should credit Open-Meteo as well. Sunrise and civil dawn are computed, not observed. The methods page lists every source and the known limitations.

A suggested citation, with the date of the last morning in the file at the time you took it:

HikeAlong (2026). HikeAlong hiking log, mornings through October 2, 2026 [data set]. https://hikealongtours.com/data/. Licensed CC BY 4.0.

Entries can be corrected after they are published, a trimmed track or a re-fetched weather block for instance, and the files are regenerated every time the site is. If a number matters, take the url column to the hike's page, which shows the method behind it, and check the method changes before comparing across versions.

  • hikes.csv, every published hike, 47 KB.
  • hikes.json, the same hikes as JSON with the photograph and map paths, 143 KB.
  • gear.json, the kit with its service windows, mornings and miles, 8 KB.
  • sightings.csv, every published wildlife and flower sighting, 23 KB.
  • sightings.json, the same sightings as JSON with the photograph paths, 60 KB.
  • GPX files, one under each hike's route map. Start from the hike feed.
  • How the log works: the methods, the sources, the limitations and what changed.
  • The RSS feed announces each new morning, which is when the files change.