diff --git a/homeassistant/components/recorder/models.py b/homeassistant/components/recorder/models.py
index 7a655c294347e8f89d3c7baa281b67e6793145d5..d1be17b83d50082161db0c094fdee5fb2d4e4608 100644
--- a/homeassistant/components/recorder/models.py
+++ b/homeassistant/components/recorder/models.py
@@ -131,6 +131,9 @@ class States(Base):   # type: ignore
                 _process_timestamp(self.last_changed),
                 _process_timestamp(self.last_updated),
                 context=context,
+                # Temp, because database can still store invalid entity IDs
+                # Remove with 1.0 or in 2020.
+                temp_invalid_id_bypass=True
             )
         except ValueError:
             # When json.loads fails
diff --git a/homeassistant/core.py b/homeassistant/core.py
index 02b474e3cd25fdd98fa4e333c0df422e0ddfa1a8..aea37f74898725b6652ecb1bfacaa083dd22b677 100644
--- a/homeassistant/core.py
+++ b/homeassistant/core.py
@@ -663,11 +663,14 @@ class State:
                  attributes: Optional[Dict] = None,
                  last_changed: Optional[datetime.datetime] = None,
                  last_updated: Optional[datetime.datetime] = None,
-                 context: Optional[Context] = None) -> None:
+                 context: Optional[Context] = None,
+                 # Temp, because database can still store invalid entity IDs
+                 # Remove with 1.0 or in 2020.
+                 temp_invalid_id_bypass: Optional[bool] = False) -> None:
         """Initialize a new state."""
         state = str(state)
 
-        if not valid_entity_id(entity_id):
+        if not valid_entity_id(entity_id) and not temp_invalid_id_bypass:
             raise InvalidEntityFormatError((
                 "Invalid entity id encountered: {}. "
                 "Format should be <domain>.<object_id>").format(entity_id))
diff --git a/tests/components/recorder/test_models.py b/tests/components/recorder/test_models.py
index 3d1beb3a642bdda75c40dca9fc8c7ecd05937cd2..b56a7632df33a45fc7505e645f2528c57d46dffc 100644
--- a/tests/components/recorder/test_models.py
+++ b/tests/components/recorder/test_models.py
@@ -142,3 +142,12 @@ class TestRecorderRuns(unittest.TestCase):
 
         assert sorted(run.entity_ids()) == ['sensor.humidity', 'sensor.lux']
         assert run.entity_ids(in_run2) == ['sensor.humidity']
+
+
+def test_states_from_native_invalid_entity_id():
+    """Test loading a state from an invalid entity ID."""
+    event = States()
+    event.entity_id = "test.invalid__id"
+    event.attributes = "{}"
+    state = event.to_native()
+    assert state.entity_id == 'test.invalid__id'