diff --git a/recordGenerators/TideForecast.py b/recordGenerators/TideForecast.py
new file mode 100644
index 0000000..72d535a
--- /dev/null
+++ b/recordGenerators/TideForecast.py
@@ -0,0 +1,87 @@
+import shutil
+from xmlrpc.client import DateTime
+import requests
+import logging,coloredlogs
+import datetime
+from py2Lib import bit
+import Util.MachineProductCfg as MPC
+import records.LFRecord as LFR
+import gzip
+from os import remove
+import xml.dom.minidom
+
+l = logging.getLogger(__name__)
+coloredlogs.install()
+
+geocodes = []
+tideStations = []
+
+for i in MPC.getTideStations():
+ tideStations.append(i)
+ geocodes.append(LFR.getLatLong(i))
+
+apiKey = "21d8a80b3d6b444998a80b3d6b1449d3"
+
+def getData(tideStation, geocode):
+ today = datetime.date.today()
+ startDate = today.strftime('%Y%m%d')
+ endDate_unformatted = datetime.datetime.strptime(startDate, '%Y%m%d') + datetime.timedelta(days=5)
+ endDate = endDate_unformatted.strftime('%Y%m%d')
+
+ fetchUrl = f"https://api.weather.com/v1/geocode/{geocode}/forecast/tides.xml?language=en-US&units=e&startDate={startDate}&endDate={endDate}&apiKey={apiKey}"
+
+ res = requests.get(fetchUrl)
+
+ if res.status_code != 200:
+ l.error("DO NOT REPORT THE ERROR BELOW")
+ l.error(f"Failed to write TidesForecast record -- Status code {res.status_code}")
+ return
+
+ data = res.text
+ newData = data[53:-16]
+
+ i2Doc = f'\n \n {newData}\n {tideStation}\n '
+
+ f = open('./.temp/TidesForecast.i2m', 'a')
+ f.write(i2Doc)
+ f.close()
+
+def makeRecord():
+ if len(tideStations) < 1:
+ l.debug("Skipping TidesForecast -- No locations.")
+ return
+
+ l.info("Writing TidesForecast record.")
+
+ header = ''
+ footer = ''
+
+ with open('./.temp/TidesForecast.i2m', 'a') as doc:
+ doc.write(header)
+
+ for (x, y) in zip(tideStations, geocodes):
+ getData(x,y)
+
+ with open('./.temp/TidesForecast.i2m', 'a') as end:
+ end.write(footer)
+
+ dom = xml.dom.minidom.parse('./.temp/TidesForecast.i2m')
+ xmlPretty = dom.toprettyxml(indent= " ")
+
+ with open('./.temp/TidesForecast.i2m', 'w') as g:
+ g.write(xmlPretty[23:])
+ g.close()
+
+
+ # Compresss i2m to gzip
+ with open ('./.temp/TidesForecast.i2m', 'rb') as f_in:
+ with gzip.open('./.temp/TidesForecast.gz', 'wb') as f_out:
+ shutil.copyfileobj(f_in, f_out)
+
+ file = "./.temp/TidesForecast.gz"
+ command = ''
+
+ bit.sendFile([file], [command], 1, 0)
+
+ remove('./.temp/TidesForecast.i2m')
+ remove('./.temp/TidesForecast.gz')
\ No newline at end of file