diff --git a/airflow/providers/sftp/sensors/sftp.py b/airflow/providers/sftp/sensors/sftp.py
index d005141f6e5db..904321e9b80c0 100644
--- a/airflow/providers/sftp/sensors/sftp.py
+++ b/airflow/providers/sftp/sensors/sftp.py
@@ -16,12 +16,14 @@
 # specific language governing permissions and limitations
 # under the License.
 """This module contains SFTP sensor."""
+from datetime import datetime
 from typing import TYPE_CHECKING, Optional, Sequence
 
 from paramiko.sftp import SFTP_NO_SUCH_FILE
 
 from airflow.providers.sftp.hooks.sftp import SFTPHook
 from airflow.sensors.base import BaseSensorOperator
+from airflow.utils.timezone import convert_to_utc
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
@@ -33,15 +35,27 @@ class SFTPSensor(BaseSensorOperator):
 
     :param path: Remote file or directory path
     :param sftp_conn_id: The connection to run the sensor against
+    :param newer_than: DateTime for which the file or file path should be newer than, comparison is inclusive
     """
 
-    template_fields: Sequence[str] = ('path',)
+    template_fields: Sequence[str] = (
+        'path',
+        'newer_than',
+    )
 
-    def __init__(self, *, path: str, sftp_conn_id: str = 'sftp_default', **kwargs) -> None:
+    def __init__(
+        self,
+        *,
+        path: str,
+        newer_than: Optional[datetime] = None,
+        sftp_conn_id: str = 'sftp_default',
+        **kwargs,
+    ) -> None:
         super().__init__(**kwargs)
         self.path = path
         self.hook: Optional[SFTPHook] = None
         self.sftp_conn_id = sftp_conn_id
+        self.newer_than: Optional[datetime] = newer_than
 
     def poke(self, context: 'Context') -> bool:
         self.hook = SFTPHook(self.sftp_conn_id)
@@ -54,4 +68,9 @@ def poke(self, context: 'Context') -> bool:
                 raise e
             return False
         self.hook.close_conn()
-        return True
+        if self.newer_than:
+            _mod_time = convert_to_utc(datetime.strptime(mod_time, '%Y%m%d%H%M%S'))
+            _newer_than = convert_to_utc(self.newer_than)
+            return _newer_than <= _mod_time
+        else:
+            return True
diff --git a/tests/providers/sftp/sensors/test_sftp.py b/tests/providers/sftp/sensors/test_sftp.py
index 5bccfa9be1197..f7c26495bffe6 100644
--- a/tests/providers/sftp/sensors/test_sftp.py
+++ b/tests/providers/sftp/sensors/test_sftp.py
@@ -17,10 +17,12 @@
 # under the License.
 
 import unittest
+from datetime import datetime
 from unittest.mock import patch
 
 import pytest
 from paramiko.sftp import SFTP_FAILURE, SFTP_NO_SUCH_FILE
+from pendulum import datetime as pendulum_datetime, timezone
 
 from airflow.providers.sftp.sensors.sftp import SFTPSensor
 
@@ -56,3 +58,42 @@ def test_sftp_failure(self, sftp_hook_mock):
     def test_hook_not_created_during_init(self):
         sftp_sensor = SFTPSensor(task_id='unit_test', path='/path/to/file/1970-01-01.txt')
         assert sftp_sensor.hook is None
+
+    @patch('airflow.providers.sftp.sensors.sftp.SFTPHook')
+    def test_file_new_enough(self, sftp_hook_mock):
+        sftp_hook_mock.return_value.get_mod_time.return_value = '19700101000000'
+        tz = timezone("America/Toronto")
+        sftp_sensor = SFTPSensor(
+            task_id='unit_test',
+            path='/path/to/file/1970-01-01.txt',
+            newer_than=tz.convert(datetime(1960, 1, 2)),
+        )
+        context = {'ds': '1970-01-00'}
+        output = sftp_sensor.poke(context)
+        sftp_hook_mock.return_value.get_mod_time.assert_called_once_with('/path/to/file/1970-01-01.txt')
+        assert output
+
+    @patch('airflow.providers.sftp.sensors.sftp.SFTPHook')
+    def test_file_not_new_enough(self, sftp_hook_mock):
+        sftp_hook_mock.return_value.get_mod_time.return_value = '19700101000000'
+        tz = timezone("Europe/Paris")
+        sftp_sensor = SFTPSensor(
+            task_id='unit_test',
+            path='/path/to/file/1970-01-01.txt',
+            newer_than=tz.convert(pendulum_datetime(2020, 1, 2)),
+        )
+        context = {'ds': '1970-01-00'}
+        output = sftp_sensor.poke(context)
+        sftp_hook_mock.return_value.get_mod_time.assert_called_once_with('/path/to/file/1970-01-01.txt')
+        assert not output
+
+    @patch('airflow.providers.sftp.sensors.sftp.SFTPHook')
+    def test_naive_datetime(self, sftp_hook_mock):
+        sftp_hook_mock.return_value.get_mod_time.return_value = '19700101000000'
+        sftp_sensor = SFTPSensor(
+            task_id='unit_test', path='/path/to/file/1970-01-01.txt', newer_than=datetime(2020, 1, 2)
+        )
+        context = {'ds': '1970-01-00'}
+        output = sftp_sensor.poke(context)
+        sftp_hook_mock.return_value.get_mod_time.assert_called_once_with('/path/to/file/1970-01-01.txt')
+        assert not output
