diff --git a/geomagio/WebService.py b/geomagio/WebService.py
index bea1ac5cb9a3f87f8f44b804576a78a6c683f208..1b97fd4606fe693d79023a4756edae5579dcb4f6 100644
--- a/geomagio/WebService.py
+++ b/geomagio/WebService.py
@@ -3,6 +3,8 @@
 
 from __future__ import print_function
 from builtins import bytes, str
+from cgi import parse_qs, escape
+from datetime import datetime
 
 from geomagio.edge import EdgeFactory
 from geomagio.iaga2002 import IAGA2002Writer
@@ -15,21 +17,16 @@ class WebService(object):
 
     def __call__(self, environ, start_response):
         """Implement WSGI interface"""
+        self.query = WebServiceQuery
         # parse params
+        self.query.parse(environ['QUERY_STRING'])
         # fetch data
+        data = self.query.fetch(self.factory)
         # send response
         start_response('200 OK',
                 [
                     ("Content-Type", "text/plain")
                 ])
-        data = self.factory.get_timeseries(
-                observatory='BOU',
-                channels=('H', 'E', 'Z', 'F'),
-                starttime=UTCDateTime('2017-07-14T00:00:00Z'),
-                endtime=UTCDateTime('2017-07-15T00:00:00Z'),
-                type='variation',
-                interval='minute')
-        data = IAGA2002Writer.format(data, ('H', 'E', 'Z', 'F'))
         if isinstance(data, str):
             data = data.encode('utf8')
         return [data]
@@ -69,19 +66,62 @@ class WebServiceQuery(object):
         self.format = format
 
     @classmethod
-    def parse(params):
+    def parse(self, params):
         """Parse query parameters from a dictionary.
 
         Parameters
         ----------
         params : dict
+        """
+        # Create dictionary of lists
+        dict = parse_qs(params)
+        # Return values
+        id = dict.get('id', [''])[0]
+        starttime = dict.get('starttime', [''])[0]
+        endtime = dict.get('endtime', [''])[0]
+        elements = dict.get('elements', [''])[0]
+        sampling_period = dict.get('sampling_period', [''])[0]
+        type = dict.get('type', [''])[0]
+        format = dict.get('format', [''])[0]
+        # Escape to avoid script injection
+        self.id = escape(id)
+        self.starttime = escape(starttime)
+        self.endtime = escape(endtime)
+        self.elements = escape(elements)
+        self.elements = [x.strip() for x in elements.split(',')]
+        self.sampling_period = escape(sampling_period)
+        self.type = escape(type)
+        self.format = escape(format)
+
+
+    @classmethod
+    def fetch(self, factory):
+        """Get requested data.
+
+        Parameters
+        ----------
+        factory : EdgeFactory
 
         Returns
         -------
-        WebServiceQuery
-            parsed query object.
+        data
+            string of data and metadata.
         """
-        pass
+        self.factory = factory
+        # Default to observatory data for current UTC day in IAGA2002 format
+        today = datetime.utcnow().strftime("%Y-%m-%d")
+        data = self.factory.get_timeseries(
+                observatory=self.id or 'BOU',
+                channels=self.elements or ('X','Y','Z','F'),
+                starttime=UTCDateTime(self.starttime or today + 'T00:00:00Z'),
+                endtime=UTCDateTime(self.endtime or today + 'T24:00:00Z'),
+                type=self.type or 'variation',
+                interval=self.sampling_period or 'minute')
+        # TODO: Add option for json and create json writer
+        data = IAGA2002Writer.format(data, self.elements or ('X', 'Y', 'Z', 'F'))
+        return data
+
+
 
 
 if __name__ == '__main__':