diff --git a/.gitignore b/.gitignore
index 3987e01c..439864c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 bin/configlet
 bin/configlet.exe
+bin/canonical_data_syncer
diff --git a/bin/check_test_cases b/bin/check_test_cases
new file mode 100755
index 00000000..2d1cb48d
--- /dev/null
+++ b/bin/check_test_cases
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+die() { echo "$*" >&2; exit 1; }
+
+cd "$(dirname "$0")"/.. || die "cannot cd"
+
+bin/fetch_configlet || die "cannot fetch configlet"
+bin/configlet lint . || die "resolve config.json problems first"
+
+bin/fetch-canonical_data_syncer || die "cannot fetch canonical_data_syncer"
+bin/canonical_data_syncer --check "$@"
diff --git a/bin/fetch-canonical_data_syncer b/bin/fetch-canonical_data_syncer
new file mode 100755
index 00000000..ecb4e1cf
--- /dev/null
+++ b/bin/fetch-canonical_data_syncer
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+set -eo pipefail
+
+readonly LATEST='https://api.github.com/repos/exercism/canonical-data-syncer/releases/latest'
+
+case "$(uname)" in
+    (Darwin*)   OS='mac'     ;;
+    (Linux*)    OS='linux'   ;;
+    (Windows*)  OS='windows' ;;
+    (MINGW*)    OS='windows' ;;
+    (MSYS_NT-*) OS='windows' ;;
+    (*)         OS='linux'   ;;
+esac
+
+case "$OS" in
+    (windows*) EXT='zip' ;;
+    (*)        EXT='tgz' ;;
+esac
+
+case "$(uname -m)" in
+    (*64*)  ARCH='64bit' ;;
+    (*686*) ARCH='32bit' ;;
+    (*386*) ARCH='32bit' ;;
+    (*)     ARCH='64bit' ;;
+esac
+
+if [ -z "${GITHUB_TOKEN}" ]
+then
+    HEADER=''
+else
+    HEADER="authorization: Bearer ${GITHUB_TOKEN}"
+fi
+
+FILENAME="canonical_data_syncer-${OS}-${ARCH}.${EXT}"
+
+get_url () {
+    curl --header "$HEADER" -s "$LATEST" |
+        awk -v filename=$FILENAME '$1 ~ /browser_download_url/ && $2 ~ filename { print $2 }' |
+        tr -d '"'
+}
+
+URL=$(get_url)
+
+case "$EXT" in
+    (*zip)
+        curl --header "$HEADER" -s --location "$URL" -o bin/latest-canonical_data_syncer.zip
+        unzip bin/latest-canonical_data_syncer.zip -d bin/
+        rm bin/latest-canonical_data_syncer.zip
+        ;;
+    (*) curl --header "$HEADER" -s --location "$URL" | tar xz -C bin/ ;;
+esac