diff --git a/snap.py b/snap.py
new file mode 100644
index 0000000000000000000000000000000000000000..58d0fd57b2cae8b8f29a144a86cf5474d87f249b
--- /dev/null
+++ b/snap.py
@@ -0,0 +1,54 @@
+from zeroconf import ServiceBrowser, Zeroconf
+import snapcast.control
+import asyncio
+import ipaddress
+# import netifaces
+
+
+class Scanner:
+
+    services = []
+
+    def remove_service(self, zeroconf, type, name):
+        print("Service %s removed" % (name,))
+
+    def add_service(self, zeroconf, type, name):
+        info = zeroconf.get_service_info(type, name)
+        self.services.append(info)
+
+
+def get_snapcast_server():
+    '''Scan for services then find snapcast server.'''
+    zeroconf = Zeroconf()
+    listener = Scanner()
+    ServiceBrowser(zeroconf, "_snapcast._tcp.local.", listener)
+
+    while listener.services == []:
+        pass
+
+    # Snapcast library only supports asynchronous so need to wrap in async loop
+    loop = asyncio.get_event_loop()
+    server_ip_bytes = listener.services[0].address
+    server_ip = str(ipaddress.ip_address(server_ip_bytes))
+    # Snapserver.__init__ does not work in snapcast==2.0.8
+    # Use create_server instead as recommended in:
+    # https://github.com/happyleavesaoc/python-snapcast/issues/12
+    # https://github.com/happyleavesaoc/python-snapcast/issues/19
+    create_server_coroutine = snapcast.control.create_server(
+        loop, server_ip, reconnect=True)
+    server = loop.run_until_complete(create_server_coroutine)
+    loop.close()
+
+    return server
+
+
+def get_mac_addresses():
+    pass
+
+
+def get_snapcast_client(server):
+    '''scan through list of clients to find correct one'''
+    for client in server.clients:
+        print(client.name)
+        print(client.identifier)
+    # TODO Scroll through list of clients and find right one