diff --git a/geomagio/api/db/MetadataDatabaseFactory.py b/geomagio/api/db/MetadataDatabaseFactory.py
index 83cdde6cffbbbe399b2ba583e17f6b6d83b43929..8782ea4bb679687a95a2d47363301f7014d32ac0 100644
--- a/geomagio/api/db/MetadataDatabaseFactory.py
+++ b/geomagio/api/db/MetadataDatabaseFactory.py
@@ -43,7 +43,6 @@ class MetadataDatabaseFactory(object):
             channel,
             location,
             data_valid,
-            metadata_valid,
             status,
         ) = params.datetime_dict().values()
         if id:
@@ -78,8 +77,6 @@ class MetadataDatabaseFactory(object):
             query = query.where(table.c.created_time < created_before)
         if data_valid is not None:
             query = query.where(table.c.data_valid == data_valid)
-        if metadata_valid is not None:
-            query = query.where(table.c.metadata_valid == metadata_valid)
         if status is not None:
             query = query.where(table.c.status.in_(status))
         rows = await self.database.fetch_all(query)
diff --git a/geomagio/api/db/metadata_table.py b/geomagio/api/db/metadata_table.py
index e55e66878b063583136afaa8a2de152c3a37e859..6b5716db50b2e96b9102f0c16f61a021884e6bee 100644
--- a/geomagio/api/db/metadata_table.py
+++ b/geomagio/api/db/metadata_table.py
@@ -38,8 +38,6 @@ metadata = Table(
     Column("priority", Integer, default=1),
     # whether data is valid (primarily for flags)
     Column("data_valid", Boolean, default=True, index=True),
-    # whether metadata is valid (based on review)
-    Column("metadata_valid", Boolean, default=True, index=True),
     # deletion status indicator
     Column("status", String(length=255), nullable=True),
     # metadata json blob
@@ -62,7 +60,6 @@ metadata = Table(
         "starttime",
         "endtime",
         # valid
-        "metadata_valid",
         "data_valid",
         "status",
     ),
diff --git a/geomagio/api/secure/metadata.py b/geomagio/api/secure/metadata.py
index ac8113acf98b353f8ef306ae727349527c209665..e5acb0849bc3f08cb00b3e6a8ed092adcfd4b6bd 100644
--- a/geomagio/api/secure/metadata.py
+++ b/geomagio/api/secure/metadata.py
@@ -40,7 +40,6 @@ def get_metadata_query(
     channel: str = None,
     location: str = None,
     data_valid: bool = None,
-    metadata_valid: bool = True,
     status: List[str] = Query(None),
 ) -> MetadataQuery:
     return MetadataQuery(
@@ -54,7 +53,6 @@ def get_metadata_query(
         channel=channel,
         location=location,
         data_valid=data_valid,
-        metadata_valid=metadata_valid,
         status=status,
     )
 
diff --git a/geomagio/api/ws/metadata.py b/geomagio/api/ws/metadata.py
index fb5627a0578702cdd2e763a4fe09e586ae1a51b9..1775569a434dda86c04a731494ea0060db1980d0 100644
--- a/geomagio/api/ws/metadata.py
+++ b/geomagio/api/ws/metadata.py
@@ -24,7 +24,6 @@ async def get_metadata(
     channel: str = None,
     location: str = None,
     data_valid: bool = None,
-    metadata_valid: bool = True,
     status: List[str] = Query(None),
 ):
     query = MetadataQuery(
@@ -36,7 +35,6 @@ async def get_metadata(
         channel=channel,
         location=location,
         data_valid=data_valid,
-        metadata_valid=metadata_valid,
         status=status,
     )
     metas = await MetadataDatabaseFactory(database=database).get_metadata(
diff --git a/geomagio/metadata/Metadata.md b/geomagio/metadata/Metadata.md
index 12ff699040f55813bdaea8a5498964176aadc0fa..558d7a5dc1aaded4a5a75f099857cb29a1b5b483 100644
--- a/geomagio/metadata/Metadata.md
+++ b/geomagio/metadata/Metadata.md
@@ -22,8 +22,6 @@
   * **reviewed**: after a record is reviewed by an approved user
   * **deleted**: archive a record that is invalid or incomplete
 
-* **metadata_valid**: Whether record is valid and should be used in processing
-
 * **review_comment**: Comments from reviewer about why record is valid/invalid
 
 # Details:
diff --git a/geomagio/metadata/Metadata.py b/geomagio/metadata/Metadata.py
index 84f52c5e59477604f9a982a92d0c2cb00494b166..7c073317776baef7d8a08280aaeeaaa5989936f3 100644
--- a/geomagio/metadata/Metadata.py
+++ b/geomagio/metadata/Metadata.py
@@ -70,8 +70,6 @@ class Metadata(BaseModel):
     priority: int = 1
     # whether data is valid (primarily for flags)
     data_valid: bool = True
-    # whether metadata is valid (based on review)
-    metadata_valid: bool = True
     # metadata json blob
     metadata: Dict = None
     # general comment
diff --git a/geomagio/metadata/MetadataQuery.py b/geomagio/metadata/MetadataQuery.py
index f776f34cb2bd075345980273f66dedb5dbb41c6e..2b873795e05dbc2ce70255e854d34f7886f468e8 100644
--- a/geomagio/metadata/MetadataQuery.py
+++ b/geomagio/metadata/MetadataQuery.py
@@ -20,7 +20,6 @@ class MetadataQuery(BaseModel):
     channel: str = None
     location: str = None
     data_valid: Optional[bool] = None
-    metadata_valid: Optional[bool] = None
     status: Optional[List[str]] = None
 
     def datetime_dict(self, **kwargs):
diff --git a/geomagio/metadata/main.py b/geomagio/metadata/main.py
index c5546573e17d4e8d020a866ab038be14c326e75a..cf1cd9adca76d198c839739beae0d80bae37d836 100644
--- a/geomagio/metadata/main.py
+++ b/geomagio/metadata/main.py
@@ -80,7 +80,6 @@ def create(
     id: int = None,
     input_file: str = None,
     location: str = None,
-    metadata_valid: bool = True,
     network: str = None,
     starttime: str = None,
     station: str = None,
@@ -102,7 +101,6 @@ def create(
             id=id,
             location=location,
             metadata=input_metadata,
-            metadata_valid=metadata_valid,
             network=network,
             starttime=UTCDateTime(starttime) if starttime else None,
             station=station,
@@ -129,7 +127,6 @@ def get(
     getone: bool = False,
     id: Optional[int] = None,
     location: Optional[str] = None,
-    metadata_valid: Optional[bool] = None,
     network: Optional[str] = None,
     status: Optional[List[str]] = typer.Argument(None),
     starttime: Optional[str] = None,
@@ -145,7 +142,6 @@ def get(
         endtime=UTCDateTime(endtime) if endtime else None,
         id=id,
         location=location,
-        metadata_valid=metadata_valid,
         network=network,
         starttime=UTCDateTime(starttime) if starttime else None,
         station=station,
diff --git a/geomagio/processing/affine_matrix.py b/geomagio/processing/affine_matrix.py
index a3e8000d6ccd737cc08d847a5230ddd24a644041..51c8746a5f43c75485ddb0d64570dc6893518766 100644
--- a/geomagio/processing/affine_matrix.py
+++ b/geomagio/processing/affine_matrix.py
@@ -49,7 +49,6 @@ def generate_matrix(
                 endtime=readings_endtime,
                 category=MetadataCategory.READING,
                 data_valid=True,
-                metadata_valid=True,
             )
         )
         readings = [Reading(**m.metadata) for m in metadata]
diff --git a/migrations/versions/4324b87e0b3c_drop_metadata_valid_column.py b/migrations/versions/4324b87e0b3c_drop_metadata_valid_column.py
new file mode 100644
index 0000000000000000000000000000000000000000..4bf200c01657d8352aa574f9ef8d52ea9434c4ee
--- /dev/null
+++ b/migrations/versions/4324b87e0b3c_drop_metadata_valid_column.py
@@ -0,0 +1,85 @@
+"""drop metadata_valid column
+
+Revision ID: 4324b87e0b3c
+Revises: 2280fe551e60
+Create Date: 2021-07-14 15:48:32.154022
+
+"""
+from alembic import op
+import sqlalchemy as sa
+from sqlalchemy.dialects import mysql
+
+# revision identifiers, used by Alembic.
+revision = "4324b87e0b3c"
+down_revision = "2280fe551e60"
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    # ### commands auto generated by Alembic - please adjust! ###
+    op.drop_index("ix_metadata_metadata_valid", table_name="metadata")
+    op.drop_index("index_station_metadata", table_name="metadata")
+    op.create_index(
+        "index_station_metadata",
+        "metadata",
+        [
+            "network",
+            "station",
+            "channel",
+            "location",
+            "category",
+            "starttime",
+            "endtime",
+            "data_valid",
+            "status",
+        ],
+        unique=False,
+    )
+    op.drop_column("metadata", "metadata_valid")
+    op.drop_column("metadata_history", "metadata_valid")
+    # ### end Alembic commands ###
+
+
+def downgrade():
+    # ### commands auto generated by Alembic - please adjust! ###
+    op.add_column(
+        "metadata_history",
+        sa.Column(
+            "metadata_valid",
+            mysql.TINYINT(display_width=1),
+            autoincrement=False,
+            nullable=True,
+        ),
+    )
+    op.add_column(
+        "metadata",
+        sa.Column(
+            "metadata_valid",
+            mysql.TINYINT(display_width=1),
+            autoincrement=False,
+            nullable=True,
+        ),
+    )
+    op.drop_index("index_station_metadata", table_name="metadata")
+    op.create_index(
+        "index_station_metadata",
+        "metadata",
+        [
+            "network",
+            "station",
+            "channel",
+            "location",
+            "category",
+            "starttime",
+            "endtime",
+            "metadata_valid",
+            "data_valid",
+            "status",
+        ],
+        unique=False,
+    )
+    op.create_index(
+        "ix_metadata_metadata_valid", "metadata", ["metadata_valid"], unique=False
+    )
+    # ### end Alembic commands ###
diff --git a/test_metadata.py b/test_metadata.py
index 1a78b1bcfc571d683a27243342301bd0d8bb3558..2a975f896f4469d831bf33588eac9539d0f97dda 100644
--- a/test_metadata.py
+++ b/test_metadata.py
@@ -142,7 +142,6 @@ for reading in readings:
             endtime=reading.time,
             station=reading.metadata["station"],
             metadata=reading_dict,
-            metadata_valid=reading.valid,
         )
     )