diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 087d0de67da5b0faebcea69187293ed4ce75fc57..6b5dbc4f7d68c27870081fcfbcf3089e31f6053e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,5 +1,5 @@
 repos:
--   repo: https://github.com/ambv/black
-    rev: stable
+  - repo: https://github.com/ambv/black
+    rev: 20.8b1
     hooks:
-    - id: black
+      - id: black
diff --git a/geomagio/algorithm/AdjustedAlgorithm.py b/geomagio/algorithm/AdjustedAlgorithm.py
index 0c1bbf2f646283c76dc20d40f79cbd31f2625c7d..601bad2444246efeee5b0f81f4551f245e3a9406 100644
--- a/geomagio/algorithm/AdjustedAlgorithm.py
+++ b/geomagio/algorithm/AdjustedAlgorithm.py
@@ -27,7 +27,9 @@ class AdjustedAlgorithm(Algorithm):
         inchannels = inchannels or ["H", "E", "Z", "F"]
         outchannels = outchannels or ["X", "Y", "Z", "F"]
         Algorithm.__init__(
-            self, inchannels=inchannels, outchannels=outchannels,
+            self,
+            inchannels=inchannels,
+            outchannels=outchannels,
         )
         # state variables
         self.matrix = matrix
diff --git a/geomagio/api/secure/SessionMiddleware.py b/geomagio/api/secure/SessionMiddleware.py
index d4ef2090bcb841ade90cbff3adeabc8d104a5fa5..c757c8b33439d88e550577c44e32ab88fa8c273f 100644
--- a/geomagio/api/secure/SessionMiddleware.py
+++ b/geomagio/api/secure/SessionMiddleware.py
@@ -110,7 +110,10 @@ class SessionMiddleware:
         await self.save_session_callback(session_id, data)
 
     def set_cookie(
-        self, message: Message, value: str, max_age: int = None,
+        self,
+        message: Message,
+        value: str,
+        max_age: int = None,
     ):
         headers = MutableHeaders(scope=message)
         headers.append("Cache-Control")
diff --git a/geomagio/api/secure/login.py b/geomagio/api/secure/login.py
index 334264d286b265d669d4f5e2869103e687b707cf..c3407d9317c5f6d4fad6f6a0f62c0b2b23d1df40 100644
--- a/geomagio/api/secure/login.py
+++ b/geomagio/api/secure/login.py
@@ -67,7 +67,9 @@ async def current_user(request: Request) -> Optional[User]:
     return None
 
 
-def require_user(allowed_groups: List[str] = None,) -> Callable[[Request, User], User]:
+def require_user(
+    allowed_groups: List[str] = None,
+) -> Callable[[Request, User], User]:
     """Create function to verifies user in allowed_groups
 
     Usage example:
diff --git a/geomagio/api/secure/metadata.py b/geomagio/api/secure/metadata.py
index 5e4f084622ff72c54eadfdb95e82838bf788e3cc..fb0dfc4cfeed3981e07d37f501062975c5055420 100644
--- a/geomagio/api/secure/metadata.py
+++ b/geomagio/api/secure/metadata.py
@@ -31,7 +31,9 @@ router = APIRouter()
 
 @router.post("/metadata", response_model=Metadata)
 async def create_metadata(
-    request: Request, metadata: Metadata, user: User = Depends(require_user()),
+    request: Request,
+    metadata: Metadata,
+    user: User = Depends(require_user()),
 ):
     metadata = await metadata_table.create_metadata(metadata)
     return Response(metadata, status_code=201, media_type="application/json")
diff --git a/geomagio/api/ws/Element.py b/geomagio/api/ws/Element.py
index eff80cca91d247ee2cd5f3cc664c5ab648ca54f7..952feae9024d7fb3f42d00e5a5fa01166018773d 100644
--- a/geomagio/api/ws/Element.py
+++ b/geomagio/api/ws/Element.py
@@ -24,7 +24,10 @@ ELEMENTS = [
     Element(id="SQ", name="Solar Quiet", units="nT"),
     Element(id="SV", name="Solar Variation", units="nT"),
     Element(
-        id="UK1", abbreviation="T-Electric", name="Electronics Temperature", units="°C",
+        id="UK1",
+        abbreviation="T-Electric",
+        name="Electronics Temperature",
+        units="°C",
     ),
     Element(
         id="UK2",
diff --git a/geomagio/edge/EdgeFactory.py b/geomagio/edge/EdgeFactory.py
index 83c278a6e24ae73ab8ad37c7e8d0667ee6e4ee65..a22514650586aaaad0da69ac12cd0365e0f1d405 100644
--- a/geomagio/edge/EdgeFactory.py
+++ b/geomagio/edge/EdgeFactory.py
@@ -544,7 +544,14 @@ class EdgeFactory(TimeseriesFactory):
         TimeseriesUtility.pad_timeseries(timeseries, starttime, endtime)
 
     def _put_channel(
-        self, timeseries, observatory, channel, type, interval, starttime, endtime,
+        self,
+        timeseries,
+        observatory,
+        channel,
+        type,
+        interval,
+        starttime,
+        endtime,
     ):
         """Put a channel worth of data
 
diff --git a/geomagio/pcdcp/PCDCPFactory.py b/geomagio/pcdcp/PCDCPFactory.py
index 5941528de90c42395fd4c348fbe20bd041e647de..f7633d2c0ebf525805f6e18887b095426a9e07b5 100644
--- a/geomagio/pcdcp/PCDCPFactory.py
+++ b/geomagio/pcdcp/PCDCPFactory.py
@@ -36,7 +36,9 @@ class PCDCPFactory(TimeseriesFactory):
     """
 
     def __init__(
-        self, temperatures=False, **kwargs,
+        self,
+        temperatures=False,
+        **kwargs,
     ):
         TimeseriesFactory.__init__(self, **kwargs)
         self.temperatures = temperatures
diff --git a/geomagio/processing/magproc.py b/geomagio/processing/magproc.py
index 1522e311e20dcfa9f31847fa9bed4542919f282d..14f2fc744950131ffdf61717fc55a18fe4ac87b2 100644
--- a/geomagio/processing/magproc.py
+++ b/geomagio/processing/magproc.py
@@ -69,7 +69,10 @@ def prepfiles(
 
 
 def write_cal_file(
-    starttime: UTCDateTime, endtime: UTCDateTime, observatory: str, template: str,
+    starttime: UTCDateTime,
+    endtime: UTCDateTime,
+    observatory: str,
+    template: str,
 ):
     print(
         f"Loading calibration data for {observatory} [{starttime}, {endtime}]",
diff --git a/geomagio/residual/SpreadsheetAbsolutesFactory.py b/geomagio/residual/SpreadsheetAbsolutesFactory.py
index 481216773627d0d8b94efe63818754d4d33f789d..d53b772bd0cf6b67006c8d43884e5da9d03a6e60 100644
--- a/geomagio/residual/SpreadsheetAbsolutesFactory.py
+++ b/geomagio/residual/SpreadsheetAbsolutesFactory.py
@@ -288,7 +288,8 @@ class SpreadsheetAbsolutesFactory(object):
         return Reading(
             absolutes=absolutes,
             azimuth=Angle.from_dms(
-                degrees=int(mark_azimuth / 100.0), minutes=mark_azimuth % 100,
+                degrees=int(mark_azimuth / 100.0),
+                minutes=mark_azimuth % 100,
             ),
             hemisphere=metadata["hemisphere"],
             measurements=measurements,
diff --git a/setup.py b/setup.py
index b923235ecb0fe6ff2797a6876680058d49160f2a..29212231e0bda9dc9e4064d9a6bbde16dcf1ca39 100644
--- a/setup.py
+++ b/setup.py
@@ -19,7 +19,9 @@ setuptools.setup(
     },
     python_requires=">=3.6, <4",
     scripts=["bin/geomag.py", "bin/geomag_webservice.py", "bin/make_cal.py"],
-    setup_requires=["setuptools-pipfile",],
+    setup_requires=[
+        "setuptools-pipfile",
+    ],
     use_pipfile=True,
     entry_points={
         "console_scripts": ["magproc-prepfiles=geomagio.processing.magproc:main"],