diff --git a/scripts/insert_influx.py b/scripts/insert_influx.py
new file mode 100644
index 0000000000000000000000000000000000000000..d36e1461a83322efd841a6c669d06ac9153bc9ea
--- /dev/null
+++ b/scripts/insert_influx.py
@@ -0,0 +1,56 @@
+import logging
+from datetime import datetime
+
+import requests
+
+from metobs.data import wind_vector_components
+from aosstower.l00.parser import read_frames
+
+LOG = logging.getLogger(__name__)
+
+
+def _mktime(frame):
+    return int((frame['stamp'] - datetime(1970, 1, 1)).total_seconds() * 10**9)
+
+
+def frame_records(frame):
+    nanos = _mktime(frame)
+    if 'wind_speed' in frame and 'wind_dir' in frame:
+        spd = frame.pop('wind_speed')
+        dr = frame.pop('wind_dir')
+        e, n, _ = wind_vector_components(spd, dr)
+        frame['wind_east'] = e
+        frame['wind_north'] = n
+    for name, value in frame.items():
+        if name == 'stamp':
+            continue
+        valstr = '{}i'.format(value) if isinstance(value, int) else str(value)
+        yield '{},inst=tower,site=aoss value={} {}'.format(name, valstr, nanos)
+
+
+def file_records(filepath):
+    lines = []
+    for frame in read_frames(filepath):
+        lines += frame_records(frame)
+    return lines
+
+
+def insert(filepath):
+    LOG.info('reading %s', filepath)
+    lines = file_records(filepath)
+    LOG.info("posting %d record from %s...", len(lines), filepath)
+    resp = requests.post(
+        'http://bikini.ssec.wisc.edu:8086/write?db=metobs',
+        data='\n'.join(lines))
+    resp.raise_for_status()
+
+
+if __name__ == '__main__':
+    import argparse
+    parser = argparse.ArgumentParser()
+    parser.add_argument('asciifile')
+    args = parser.parse_args()
+
+    logging.basicConfig(level=logging.DEBUG, format='%(asctime)s -- %(message)s')
+    logging.getLogger('requests').setLevel(logging.WARN)
+    insert(args.asciifile)