diff --git a/bin/import-points b/bin/import-points
new file mode 100755
index 0000000000000000000000000000000000000000..17055911b7a7e5f2d95f4ca0c481a67b98b3d62e
--- /dev/null
+++ b/bin/import-points
@@ -0,0 +1,53 @@
+#!/usr/bin/env python3
+
+import argparse
+import sys
+
+from mo.csv import FileFormat
+import mo.db as db
+from mo.imports import create_import, ImportType
+import mo.users
+import mo.util
+from mo.util import die
+
+parser = argparse.ArgumentParser(description='Importuje body za úlohu (bez --import vypíše šablonu).')
+parser.add_argument('--round', '-r', type=str, required=True, metavar='YY-C-S[p]', help='kód kola')
+parser.add_argument('--task', '-t', type=str, required=True, metavar='ID', help='kód úlohy')
+parser.add_argument('--user', '-u', type=str, required=True, metavar='EMAIL', help='uživatel, ktery provádí import')
+parser.add_argument('--import', '-i', dest='import_file', type=str, metavar='NAME', help='importuje data ze souboru (TSV)')
+parser.add_argument('--add-del', default=False, action='store_true', help='povolí zakládat/rušit řešení')
+
+args = parser.parse_args()
+mo.util.init_standalone()
+
+sess = db.get_session()
+
+round_code = mo.util.RoundCode.parse(args.round)
+if round_code is None:
+    die("Chybná syntaxe kódu kola")
+round = mo.util.get_round_by_code(round_code)
+if round is None:
+    die("Kolo s tímto kódem neexistuje!")
+
+task = sess.query(db.Task).filter_by(round=round, code=args.task).one_or_none()
+if task is None:
+    die("Úloha s tímto kódem neexistuje")
+
+user = mo.users.user_by_email(args.user)
+if user is None:
+    die(f"Uživatel {args.user} neexistuje")
+
+imp = create_import(
+    user,
+    type=ImportType.points,
+    fmt=FileFormat.tsv,
+    round=round,
+    task=task,
+    allow_add_del=args.add_del,
+)
+
+if args.import_file:
+    if not imp.run(args.import_file):
+        sys.exit(1)
+else:
+    sys.stdout.write(imp.get_template())