diff --git a/pelicanconf.py b/pelicanconf.py
index 0df3bf1..9e6583c 100644
--- a/pelicanconf.py
+++ b/pelicanconf.py
@@ -95,7 +95,7 @@
 # Pelican Plugins
 # The provided location. If the buildbot does not have a new plugin then look into requirements.txt
 PLUGIN_PATHS = ['./theme/plugins']
-PLUGINS = ['asfgenid', 'asfdata', 'pelican-gfm', 'asfreader', 'sitemap']
+PLUGINS = ['asfgenid', 'asfdata', 'pelican-gfm', 'asfreader', 'asfcheck', 'sitemap']
 
 TYPOGRAPHY = True
 TYPOGRAPHY_IGNORE_TAGS = ['pre', 'code', 'style', 'script']
@@ -121,6 +121,11 @@
     'debug': False
 }
 
+ASF_CHECK = {
+    'pages': 10,
+    'debug': True
+}
+
 # Configure the asfgenid plugin
 ASF_GENID = {
     'metadata': True,
diff --git a/theme/plugins/asfcheck.py b/theme/plugins/asfcheck.py
new file mode 100644
index 0000000..ff61995
--- /dev/null
+++ b/theme/plugins/asfcheck.py
@@ -0,0 +1,78 @@
+#!/usr/bin/python -B
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+#
+# asfcheck.py -- Pelican plugin that checks page count.
+#
+
+import os.path
+import sys
+import random
+import json
+import traceback
+import operator
+import pprint
+
+import requests
+import yaml
+import ezt
+
+import xml.dom.minidom
+
+import pelican.plugins.signals
+import pelican.utils
+
+
+ASF_CHECK = {
+    'pages': 0,
+    'debug': False,
+}
+
+
+# create metadata according to instructions.
+def check_page_data(pel_ob):
+    print('-----\nasfcheck')
+
+    asf_check = pel_ob.settings.get('ASF_CHECK')
+
+    if not asf_check:
+        print('This Pelican installation is not using ASF_CHECK')
+        return
+
+    for key in asf_check:
+        print(f'config: [{key}] = {asf_check[key]}')
+
+    debug = asf_check['debug']
+    pages = asf_check['pages']
+    pp = pprint.PrettyPrinter(indent=2)
+    pp.pprint(pel_ob)
+
+
+def tb_finalized(pel_ob):
+    """ Print any exception, before Pelican chews it into nothingness."""
+    try:
+        check_page_data(pel_ob)
+    except:
+        print('-----', file=sys.stderr)
+        traceback.print_exc()
+        raise
+
+
+def register():
+    # Hook the "initialized" signal, to load our custom data.
+    pelican.plugins.signals.finalized.connect(tb_finalized)
