diff --git a/pre_commit_hooks/check_added_large_files.py b/pre_commit_hooks/check_added_large_files.py
new file mode 100644
index 0000000..999e9c1
--- /dev/null
+++ b/pre_commit_hooks/check_added_large_files.py
@@ -0,0 +1,49 @@
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
+import argparse
+import math
+import os
+import sys
+
+from plumbum import local
+
+
+def find_large_added_files(filenames, maxkb):
+    # Find all added files that are also in the list of files pre-commit tells
+    # us about
+    filenames = set(local['git'](
+        'diff', '--staged', '--name-only', '--diff-filter', 'A',
+    ).splitlines()) & set(filenames)
+
+    retv = 0
+    for filename in filenames:
+        kb = int(math.ceil(os.stat(filename).st_size / 1024))
+        if kb > maxkb:
+            print('{0} ({1} KB) exceeds {2} KB.'.format(filename, kb, maxkb))
+            retv = 1
+
+    return retv
+
+
+def main(argv=None):
+    argv = argv if argv is not None else sys.argv[1:]
+
+    parser = argparse.ArgumentParser()
+    parser.add_argument(
+        'filenames', nargs='*',
+        help='Filenames pre-commit believes are changed.'
+    )
+    parser.add_argument(
+        '--maxkb', type=int, default=500,
+        help='Maxmimum allowable KB for added files',
+    )
+
+    args = parser.parse_args(argv)
+    return find_large_added_files(args.filenames, args.maxkb)
+
+
+if __name__ == '__main__':
+    exit(main())
