diff --git a/geomagio/Controller.py b/geomagio/Controller.py
index d05f45ae4e8d4848da8e062adddb8540f839e3ef..41bffe20acf04e34835e751585944395901cff0f 100644
--- a/geomagio/Controller.py
+++ b/geomagio/Controller.py
@@ -1,7 +1,7 @@
 """Controller class for geomag algorithms"""
 
 import argparse
-from io import BytesIO
+from io import BytesIO, StringIO
 import sys
 from typing import List, Optional, Tuple, Union
 
@@ -506,7 +506,12 @@ def get_input_factory(args):
             input_factory_args["urlInterval"] = args.input_url_interval
             input_factory_args["urlTemplate"] = args.input_url
         else:
-            input_stream = BytesIO(Util.read_url(args.input_url))
+            try:
+                input_stream = BytesIO(Util.read_url(args.input_url))
+            except TypeError as e:
+                print(str(e), file=sys.stderr)
+                print("Warning: reading url as BytesIO failed; attempting StringIO", file=sys.stderr)
+                input_stream = StringIO(Util.read_url(args.input_url))
     input_type = args.input
     if input_type == "edge":
         input_factory = edge.EdgeFactory(