diff --git a/docs/_static/css/main.css b/docs/_static/css/main.css
index d4c66caa..5f562856 100644
--- a/docs/_static/css/main.css
+++ b/docs/_static/css/main.css
@@ -1 +1,2 @@
:root{--blue: #005dab;--primary-blue: #063b67;--secondary-blue: #074e8a;--text-blue: #063b67;--light-blue: #EEF8FF;--light-blue-clear: #F8FCFF;--aqua: #51B3DB;--primary-orange: #FF7101;--hover-orange: #FF8201;--light-orange: #f2a557;--grey: #F5F6F8;--grey-border: #D9E7F3;--light-grey-sidebar: #E5EAF0;--message-success: #4bb52d;--message-success-bg: #E3F6CF;--message-success-text: #0D3D00;--message-danger: #D10000;--message-danger-bg: #FAE5E8;--message-danger-text: #6A0000;--message-warning: #DC7500;--message-warning-bg: #FFF1ED;--message-warning-text: #9C3900;--message-info: #074E8A;--message-info-bg: #E7F2F8;--message-info-text: #063b67;--cc-btn-primary-bg: var(--primary-blue);--cc-btn-secondary-text: var(--primary-blue)}.rst-content section ul{line-height:auto}code,pre,pre span,span.pre,.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:"Ubuntu Mono",monospace}ul.simple li code,code.docutils.literal.notranslate{border:none;width:max-content;font-size:13px;padding:10px;margin:10px 0;border-radius:8px;background:#292d3e}ul.simple li code.literal,code.docutils.literal.notranslate.literal{color:var(--aqua)}code.docutils.literal.notranslate{background:#efefef;padding:2px 6px}code.docutils.literal.notranslate.literal{color:var(--blue)}.rst-content div.notranslate{border:none}.rst-content div.notranslate .highlight{font-family:"Ubuntu Mono",monospace;font-size:16px;padding:10px;line-height:24px;margin:10px 0;border-radius:8px;background-color:#292d3e;color:#d9e7f3}.rst-content div.notranslate .highlight .c1{color:var(--message-warning)}.rst-content div.notranslate .highlight .mi,.rst-content div.notranslate .highlight .o,.rst-content div.notranslate .highlight .mf{color:#e4e4e4}.rst-content div.notranslate .highlight .s,.rst-content div.notranslate .highlight .n,.rst-content div.notranslate .highlight .nb,.rst-content div.notranslate .highlight .na,.rst-content div.notranslate .highlight .s1{color:var(--aqua)}.rst-content div.notranslate .highlight .s1{color:var(--light-orange)}.rst-content div.notranslate .highlight .k,.rst-content div.notranslate .highlight .nv,.rst-content div.notranslate .highlight .m,.rst-content div.notranslate .highlight .vg,.rst-content div.notranslate .highlight .p{color:#d9e7f3}.rst-content div.highlight pre{font-size:14px}.btn,.btn-neutral{background:#fff;background-color:#fff !important;border:1px solid var(--primary-orange);font-weight:600;font-size:12px;max-width:110px;padding:0 15px;color:var(--primary-orange) !important}.btn .fa,.btn-neutral .fa{display:none}.btn:visited,.btn-neutral:visited{color:var(--primary-orange) !important}.btn:hover,.btn-neutral:hover{opacity:1}.btn:active{padding:0 15px}.rst-content .btn:focus{outline:0px solid}.btn-orange{background-color:var(--primary-orange) !important;color:#fff !important}.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning{padding:25px 20px 12px 20px;margin:20px 0;border-radius:4px}.rst-content .note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .warning .admonition-title{background:rgba(0,0,0,0);font-size:16px;padding:0;padding-left:12px;margin-bottom:6px}.rst-content .note p,.rst-content .note a,.rst-content .note li,.rst-content .attention p,.rst-content .attention a,.rst-content .attention li,.rst-content .caution p,.rst-content .caution a,.rst-content .caution li,.rst-content .danger p,.rst-content .danger a,.rst-content .danger li,.rst-content .error p,.rst-content .error a,.rst-content .error li,.rst-content .hint p,.rst-content .hint a,.rst-content .hint li,.rst-content .important p,.rst-content .important a,.rst-content .important li,.rst-content .tip p,.rst-content .tip a,.rst-content .tip li,.rst-content .warning p,.rst-content .warning a,.rst-content .warning li{font-size:13px}.rst-content .note ul,.rst-content .note ol,.rst-content .attention ul,.rst-content .attention ol,.rst-content .caution ul,.rst-content .caution ol,.rst-content .danger ul,.rst-content .danger ol,.rst-content .error ul,.rst-content .error ol,.rst-content .hint ul,.rst-content .hint ol,.rst-content .important ul,.rst-content .important ol,.rst-content .tip ul,.rst-content .tip ol,.rst-content .warning ul,.rst-content .warning ol{margin-bottom:6px}.rst-content .note ul li,.rst-content .note ol li,.rst-content .attention ul li,.rst-content .attention ol li,.rst-content .caution ul li,.rst-content .caution ol li,.rst-content .danger ul li,.rst-content .danger ol li,.rst-content .error ul li,.rst-content .error ol li,.rst-content .hint ul li,.rst-content .hint ol li,.rst-content .important ul li,.rst-content .important ol li,.rst-content .tip ul li,.rst-content .tip ol li,.rst-content .warning ul li,.rst-content .warning ol li{line-height:1.6}.rst-content .note ul li p,.rst-content .note ol li p,.rst-content .attention ul li p,.rst-content .attention ol li p,.rst-content .caution ul li p,.rst-content .caution ol li p,.rst-content .danger ul li p,.rst-content .danger ol li p,.rst-content .error ul li p,.rst-content .error ol li p,.rst-content .hint ul li p,.rst-content .hint ol li p,.rst-content .important ul li p,.rst-content .important ol li p,.rst-content .tip ul li p,.rst-content .tip ol li p,.rst-content .warning ul li p,.rst-content .warning ol li p{line-height:inherit}.rst-content .note{background:var(--message-info-bg)}.rst-content .note p{color:var(--message-info-text)}.rst-content .note .admonition-title{color:var(--message-info-text)}.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .important{background:var(--message-warning-bg)}.rst-content .attention p,.rst-content .caution p,.rst-content .warning p,.rst-content .important p{color:var(--message-warning-text)}.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .warning .admonition-title,.rst-content .important .admonition-title{color:var(--message-warning-text)}.rst-content .danger,.rst-content .error{background:var(--message-danger-bg)}.rst-content .danger p,.rst-content .error p{color:var(--message-danger-text)}.rst-content .danger .admonition-title,.rst-content .error .admonition-title{color:var(--message-danger-text)}.rst-content .hint,.rst-content .tip{background:var(--message-success-bg)}.rst-content .hint p,.rst-content .tip p{color:var(--message-success-text)}.rst-content .hint .admonition-title,.rst-content .tip .admonition-title{color:var(--message-success-text)}h1,h2,h3,h4,span{font-family:"Montserrat",sans-serif}span,p,div{color:#404040}@media(max-width: 768px){p{font-size:17px;line-height:26px}}.rst-content table.docutils thead th p,.rst-content table.docutils thead th a,.rst-content table.docutils thead td p,.rst-content table.docutils thead td a,.rst-content table.field-list thead th p,.rst-content table.field-list thead th a,.rst-content table.field-list thead td p,.rst-content table.field-list thead td a,.wy-table thead th p,.wy-table thead th a,.wy-table thead td p,.wy-table thead td a{font-size:inherit;font-weight:inherit;line-height:inherit}a{text-decoration:none}a:hover:not(.logo-title){opacity:.7}a:visited{color:var(--primary-blue)}a.ahref-blue{text-decoration:underline;color:var(--primary-blue)}a.ahref-orange{text-decoration:underline;color:var(--primary-orange)}h1{font-size:40px;line-height:inherit;margin:40px 0}h2{font-size:32px;line-height:1.2em;margin-top:40px}@media(max-width: 768px){h2{font-size:22px}}section{scroll-margin-top:120px}.wy-side-nav-search a:visited{color:#fff !important}.wy-grid-for-nav{display:grid;grid-template-columns:300px 900px 300px;justify-content:center;position:relative;margin-top:80px}@media(max-width: 1442px){.wy-grid-for-nav{display:grid;grid-template-columns:300px 700px 200px;justify-content:center}}@media(max-width: 1200px){.wy-grid-for-nav{grid-template-columns:300px auto}}@media(max-width: 1024px){.wy-grid-for-nav{display:block}}.wy-nav-content-wrap{background:#fcfcfc}@media(max-width: 1024px){.wy-nav-content-wrap{margin-left:0}}@media(max-width: 1024px){.wy-nav-content-wrap.shift{left:0}}@media(max-width: 768px){.wy-nav-content-wrap.shift{position:inherit;top:inherit}}.wy-nav-top{background:rgba(0,0,0,0);color:var(--primary-blue)}.wy-nav-top i{font-size:20px}.wy-nav-top .menu-hamburger{position:relative;width:20px;height:20px;top:0;left:0;transition-duration:.5s}.wy-nav-top .menu-hamburger .icon{transition-duration:.5s;position:absolute;height:100%;width:100%;top:0;left:0}.wy-nav-top .menu-hamburger .icon:before{transition-duration:.5s;position:absolute;width:20px;height:2px;background-color:var(--primary-blue);content:"";top:0px;left:0}.wy-nav-top .menu-hamburger .icon:after{transition-duration:.5s;position:absolute;width:20px;height:2px;background-color:var(--primary-blue);content:"";top:10px;left:0}@media(max-width: 1024px){.wy-nav-top{display:block;position:fixed;top:72px;left:10px;z-index:100}}@media(max-width: 1024px)and (max-width: 420px){.wy-nav-top{top:102px}}.wy-nav-content-wrap.shift .wy-nav-top .menu-hamburger .icon{transition-duration:.5s}.wy-nav-content-wrap.shift .wy-nav-top .menu-hamburger .icon:before{transform:rotateZ(135deg) scaleX(1.05) translate(4px, -4.5px)}.wy-nav-content-wrap.shift .wy-nav-top .menu-hamburger .icon:after{transform:rotateZ(-135deg) scaleX(1.05) translate(2px, 2.9px)}.wy-nav-content{max-width:1200px;padding:20px;height:auto}.wy-nav-content-wrap{margin-left:0}.wy-side-scroll{height:auto}@media(max-width: 1024px){.wy-side-scroll{width:auto}}.wy-side-nav-search{top:0;width:1500px;height:72px;margin-left:auto;margin-right:auto;margin-bottom:0;background-color:rgba(0,0,0,0);padding:0;display:grid;grid-template-columns:300px 1fr 300px;justify-content:center;align-items:center}.wy-side-nav-search .search-bar-container{width:300px}@media(max-width: 768px){.wy-side-nav-search .search-bar-container{width:200px}}@media(max-width: 420px){.wy-side-nav-search .search-bar-container{width:90%;grid-area:2/span 2;justify-self:center}}.wy-side-nav-search a.icon{display:flex}@media(max-width: 1442px){.wy-side-nav-search{display:grid;grid-template-columns:300px 1fr 300px;justify-content:center}}@media(max-width: 1024px){.wy-side-nav-search{width:100%}}@media(max-width: 1200px){.wy-side-nav-search{grid-template-columns:300px 1fr 300px;justify-content:flex-start}}@media(max-width: 768px){.wy-side-nav-search{grid-template-columns:200px 1fr 100px}}@media(max-width: 420px){.wy-side-nav-search{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;height:90px}}.wy-menu-vertical{height:calc(100vh - 60px);overflow-y:scroll;position:fixed;top:122px;padding-bottom:60px;padding-top:5px;background-color:#fff}@media(max-width: 420px){.wy-menu-vertical{top:140px}}.wy-nav-side{position:sticky;top:0;background:inherit;z-index:10}@media(max-width: 1024px){.wy-nav-side{width:300px;left:-300px}}@media(max-width: 1024px){.wy-nav-side .wy-menu-vertical{left:-300px;width:300px;transition:.2s ease-in-out}}@media(max-width: 768px){.wy-nav-side.shift{width:300px;left:-300px}}@media(max-width: 1024px){.wy-nav-side.shift .wy-menu-vertical{transition:.2s ease-in-out;left:0}}.wy-menu-vertical p.caption{color:var(--primary-blue);padding:0 20px}.wy-menu-vertical a{color:var(--text-blue)}.wy-menu-vertical li.current>a{color:var(--primary-orange);scroll-margin-top:10px}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l2.current>a{background:#f5f5f5}.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l3.current>a{background:#ebebeb}.wy-menu-vertical li.toctree-l2.current li.toctree-l3,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#e6e6e6}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#dcdcdc}.wy-menu::-webkit-scrollbar{width:10px;background-color:var(--grey-border)}.wy-menu::-webkit-scrollbar-thumb{background-color:var(--primary-blue);border-radius:5px;background-clip:content-box}.wy-menu li.toctree-l1.current>a{border-bottom:0;border-top:0}.wy-menu li.current,.wy-menu li.toctree-l2,.wy-menu li.toctree-l2 a,.wy-menu li.toctree-l2.current,.wy-menu li.toctree-l2.current li.toctree-l3,.wy-menu li.toctree-l3.current li.toctree-l4,.wy-menu li.toctree-l3.current li.toctree-l4>a,.wy-menu li.toctree-l2.current li.toctree-l3>a{background:inherit}.wy-menu li.current>a,.wy-menu li.toctree-l2.current a,.wy-menu li.toctree-l3.current li.toctree-l4.current>a,.wy-menu li.toctree-l2.current li.toctree-l3.current>a{background:#fff}.wy-menu li.current>a,.wy-menu li.on a{background:#fff}.wy-menu li.current>a button.toctree-expand,.wy-menu li.on a button.toctree-expand,.wy-menu li>a button.toctree-expand,.wy-menu li.on a button.toctree-expand{display:none}.wy-menu a{font-size:13px}@media(max-width: 768px){.wy-menu a{font-size:15px}}.wy-menu li.toctree-l2 li.toctree-l3 a:hover,.wy-menu .toctree-l3 a:hover,.wy-menu li.current a:hover,.wy-menu a:hover{color:var(--blue);background-color:#fff}.wy-menu li.current>a{color:var(--blue)}.wy-menu li.toctree-l2,.wy-menu li.toctree-l3,.wy-menu li.toctree-l4,.wy-menu li.toctree-l5{margin-left:22px;border-left:1px solid #c1d2e1}.wy-menu li.current>a,.wy-menu li.on a,.wy-menu li.toctree-l2.current li.toctree-l3>a,.wy-menu li.toctree-l2.current>a,.wy-menu li.toctree-l2>a,.wy-menu li.toctree-l3.current li.toctree-l4>a{border-right:none;padding:10px}.wy-menu li.current>a,.wy-menu li.on a{padding-left:20px}.aside-tile{display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;width:100%;height:max-content;padding:10px}.aside-tile__container{border-radius:5px;border:1px solid var(--grey-border);position:fixed;top:150px;background-color:#fff;width:250px;height:max-content;padding:20px 20px 10px 20px}@media(max-width: 1442px){.aside-tile__container{width:179px}}.aside-tile__feedback{top:350px}.aside-tile__content{display:flex;flex-direction:column;align-items:center;text-align:center}.aside-tile__content img{max-width:47px}.aside-tile h4{line-height:30px;margin-bottom:10px}@media(max-width: 1200px){.aside-tile{display:none}}.aside-tile .aside-tile__feedback-list{font-size:12px;color:var(--blue);text-align:left;margin-bottom:5px}.aside-tile .aside-tile__feedback-list li{line-height:25px}.aside-tile .aside-tile__feedback-list li i{margin-right:5px;color:var(--message-success)}body>header{background-color:var(--primary-blue);position:fixed;left:0;right:0;z-index:10}.wy-side-nav-search img{background-color:rgba(0,0,0,0);position:relative;top:0;margin:0;height:auto;width:150px;border-radius:0;padding:0}@media(max-width: 768px){.wy-side-nav-search img{width:130px}}.wy-side-nav-search input[type=text],.wy-body-for-nav input:not([type=checkbox]):not([type=radio]):not([type=submit]){border:none;box-shadow:none}.logo-title{display:flex;justify-content:center;align-items:center}.logo-title:hover{color:#fff}@media(max-width: 420px){.logo-title{grid-area:1/span 1}}.wy-side-nav-search>a{display:flex;margin-bottom:0;font-size:15px;justify-self:flex-start}.wy-side-nav-search>a:hover{background:rgba(0,0,0,0)}.wy-side-nav-search>a.wy-side-nav__login{justify-self:flex-end;position:relative;right:23px;padding:0 15px;max-width:100px;font-size:12px}@media(max-width: 420px){.wy-side-nav-search>a.wy-side-nav__login{grid-area:1/span 1}}.wy-side-nav-search__menu-items{display:flex;column-gap:10px;justify-content:flex-end;align-items:center;height:100%;padding-right:20px}.wy-side-nav-search__menu-items a{font-size:13px}.wy-side-nav-search__menu-items a.wy-side-nav-search__menu-item{color:#fff;height:97%;display:flex;align-items:center;padding:0 10px}.wy-side-nav-search__menu-items a.wy-side-nav-search__menu-item:hover{border-bottom:2px solid var(--primary-orange)}.wy-side-nav-search__menu-items a.wy-side-nav-search__menu-item.current{border-bottom:2px solid var(--primary-orange)}@media(max-width: 768px){.wy-side-nav-search__menu-items a.wy-side-nav-search__menu-item{display:none}}.edit{text-align:center}.copyright p{font-size:11px}.article-meta{display:inline-block;position:relative;top:30px;font-size:11px;font-weight:600;opacity:.35}.article-meta--updated{opacity:.5}.article-meta--updated::after{content:"•";padding-left:5px}@media(max-width: 420px){.article-meta{font-size:12px}}.wy-breadcrumbs{max-width:1500px;padding:0 21px;margin:auto}.wy-breadcrumbs li{padding-top:initial}@media(max-width: 1024px){.wy-breadcrumbs{padding:0 20px 0 60px;overflow:auto;white-space:nowrap}}@media(max-width: 420px){.wy-breadcrumbs{padding:0 20px 0 65px}}.wy-breadcrumbs,.wy-breadcrumbs li a,.wy-breadcrumbs-aside a{font-size:11px}@media(max-width: 768px){.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}.wy-breadcrumbs li a:visited{color:var(--light-orange)}li.wy-breadcrumbs-aside a{padding:10px}.header{height:50px;line-height:50px;width:100%;position:fixed;top:72px;border-bottom:1px solid var(--grey-border);z-index:20;background-color:#fff}@media(max-width: 420px){.header{top:90px}}.DocSearch-Button{background-color:#fff;border-radius:9999px}.DocSearch-Button:hover{background-color:#fff}.main-content a{color:var(--secondary-blue);text-decoration:underline}.main-content a:visited{opacity:.8;color:var(--secondary-blue) !important}#rtd-search-form input.main-search-bar__input{position:relative;top:10px;padding:0 15px 0 30px}@media(max-width: 420px){#rtd-search-form input.main-search-bar__input{top:0}}#rtd-search-form .search-icon{position:relative;width:13px;top:-18px;left:-132px}@media(max-width: 768px){#rtd-search-form .search-icon{left:-83px}}@media(max-width: 420px){#rtd-search-form .search-icon{top:-27px;left:-149px}}.rst-content{max-width:900px;padding:0 50px}@media(max-width: 768px){.rst-content{padding:0}}.rst-content p:not(.admonition-title)+ul{margin-top:-14px}
+.rst-content details{margin:0 0 24px}.rst-content details summary{cursor:pointer}
\ No newline at end of file
diff --git a/docs/_static/scss/components/defaults/_code.scss b/docs/_static/scss/components/defaults/_code.scss
index b0fabb04..1de4a279 100644
--- a/docs/_static/scss/components/defaults/_code.scss
+++ b/docs/_static/scss/components/defaults/_code.scss
@@ -84,3 +84,11 @@ code.docutils.literal.notranslate {
.rst-content div.highlight pre {
font-size: 14px;
}
+
+.rst-content details {
+ margin: 0 0 24px;
+
+ summary {
+ cursor: pointer;
+ }
+}
diff --git a/docs/hypernode-platform/botstopper/pre-policy-examples-for-botstopper.md b/docs/hypernode-platform/botstopper/pre-policy-examples-for-botstopper.md
new file mode 100644
index 00000000..7c08f22c
--- /dev/null
+++ b/docs/hypernode-platform/botstopper/pre-policy-examples-for-botstopper.md
@@ -0,0 +1,964 @@
+---
+myst:
+ html_meta:
+ description: Ready-to-use Botstopper pre-policy examples for Hypernode, to allow
+ trusted bots, monitoring tools, and integrations before the standard rules run.
+ title: Pre-Policy Examples for Botstopper | Hypernode
+---
+
+# Pre-Policy Examples for Botstopper
+
+This page contains ready-to-use pre-policy rules for Botstopper. Pre-policy rules run before most of the standard Hypernode deny and challenge rules. Use them to allow trusted traffic, such as monitoring tools, SEO tools, and integrations, or to block very specific traffic early.
+
+For an explanation of how Botstopper works and how policies are evaluated, see [How to Use Botstopper on Hypernode](./how-to-use-botstopper.md).
+
+## How to Add a Pre-Policy
+
+Pre-policy rules go in `/data/web/botstopper/pre.policy.yml`. This file contains a YAML list of policy rules.
+
+1. Open the file as the `app` user:
+
+ ```bash
+ sensible-editor /data/web/botstopper/pre.policy.yml
+ ```
+
+1. Copy the rule you want to use from the examples below and add it to the list. If the file only contains `[]`, replace it with the rule.
+
+1. Save the file and restart Botstopper:
+
+ ```bash
+ hypernode-servicectl restart techaro-botstopper@default
+ ```
+
+1. Test the result to confirm the rule behaves as expected.
+
+When you combine multiple rules, make sure the file stays a single valid YAML list. Each rule starts with `- name:`.
+
+```{warning}
+Pre-policy rules run before the standard Hypernode rules. A broad `DENY` rule in `pre.policy.yml` can block good crawlers or integrations that the standard policy would otherwise allow. Keep your rules as specific as possible and always test them before using them in production.
+```
+
+## Examples
+
+The examples below come from the [Botstopper policy snippets repository](https://github.com/TimVNL/hypernode-botstopper-policies). Each rule is a list item that you can copy into `pre.policy.yml`.
+
+### Search Engines and SEO Tools
+
+The standard Hypernode policy already allows known search engine crawlers when they are verified by IP ranges or reverse DNS. Use these rules when you want to make sure a crawler or SEO tool is never challenged.
+
+#### Google crawlers
+
+Allows requests with common Google crawler user agents, such as `Googlebot`, `AdsBot-Google`, `Storebot-Google`, `Google-InspectionTool`, and `Google-Site-Verification`.
+
+```{note}
+This rule only checks the user agent, which can be spoofed. Bots that pretend to be Googlebot are also allowed. The standard policy already allows Google crawlers that are verified by IP range or reverse DNS, so only use this rule if you notice that a Google service is being challenged.
+```
+
+```yaml
+- name: allow-all-google-temp
+ action: ALLOW
+ expression:
+ all:
+ - userAgent.matches("(?i:(googlebot|adsbot-google|mediapartners-google|apis-google|googleother|feedfetcher-google|storebot-google|google-inspectiontool|google-extended|Google-Apps-Script|Google-Site-Verification))")
+```
+
+#### Ahrefs
+
+Allows `AhrefsBot` and `AhrefsSiteAudit` from the [IP ranges published by Ahrefs](https://ahrefs.com/robot).
+
+
+Show the full rule (81 IP addresses)
+
+```yaml
+- name: allow-ahrefs-bots
+ action: ALLOW
+ expression:
+ all:
+ - userAgent.matches("(?i:(ahrefsbot|ahrefssiteaudit))")
+ remote_addresses:
+ - 5.39.1.224/27
+ - 5.39.109.160/27
+ - 15.235.27.0/24
+ - 15.235.96.0/24
+ - 15.235.98.0/24
+ - 37.59.204.128/27
+ - 51.68.247.192/27
+ - 51.75.236.128/27
+ - 51.81.103.240/28
+ - 51.81.104.32/28
+ - 51.81.105.16/28
+ - 51.81.110.16/28
+ - 51.81.110.48/28
+ - 51.81.110.80/28
+ - 51.81.111.0/28
+ - 51.81.111.64/28
+ - 51.81.111.112/28
+ - 51.81.111.128/28
+ - 51.81.163.16/28
+ - 51.81.163.48/28
+ - 51.81.163.64/28
+ - 51.81.164.144/28
+ - 51.81.164.192/28
+ - 51.81.165.80/28
+ - 51.81.165.208/28
+ - 51.81.169.112/28
+ - 51.81.169.192/28
+ - 51.81.170.0/28
+ - 51.89.38.128/28
+ - 51.89.39.48/28
+ - 51.89.59.32/28
+ - 51.89.69.32/28
+ - 51.89.69.96/28
+ - 51.89.71.80/28
+ - 51.89.71.144/28
+ - 51.89.72.0/28
+ - 51.89.74.192/28
+ - 51.89.83.48/28
+ - 51.89.129.0/24
+ - 51.161.37.0/24
+ - 51.161.65.0/24
+ - 51.195.183.0/24
+ - 51.195.215.0/24
+ - 51.195.244.0/24
+ - 51.222.95.0/24
+ - 51.222.168.0/24
+ - 51.222.253.0/26
+ - 54.36.148.0/23
+ - 54.37.118.64/27
+ - 54.38.147.0/24
+ - 54.39.0.0/24
+ - 54.39.6.0/24
+ - 54.39.89.0/24
+ - 54.39.136.0/24
+ - 54.39.203.0/24
+ - 54.39.210.0/24
+ - 92.222.104.192/27
+ - 92.222.108.96/27
+ - 94.23.188.192/27
+ - 142.44.220.0/24
+ - 142.44.225.0/24
+ - 142.44.228.0/24
+ - 142.44.233.0/24
+ - 148.113.128.0/24
+ - 148.113.130.0/24
+ - 167.114.139.0/24
+ - 168.100.149.0/24
+ - 176.31.139.0/27
+ - 198.244.168.0/24
+ - 198.244.183.0/24
+ - 198.244.186.193/32
+ - 198.244.186.194/31
+ - 198.244.186.196/30
+ - 198.244.186.200/31
+ - 198.244.186.202/32
+ - 198.244.226.0/24
+ - 198.244.240.0/24
+ - 198.244.242.0/24
+ - 202.8.40.0/22
+ - 202.94.84.110/31
+ - 202.94.84.112/31
+```
+
+
+
+#### Semrush Site Audit
+
+Allows the Semrush `SiteAuditBot` from the [IP range published by Semrush](https://www.semrush.com/kb/681-site-audit-troubleshooting#allowlist-bot).
+
+```yaml
+- name: allow-SiteAuditBot
+ action: ALLOW
+ user_agent_regex: SiteAuditBot
+ remote_addresses:
+ - 85.208.98.128/25
+```
+
+### AI Retrieval Bots
+
+#### AI retrieval and citation bots
+
+Allows known AI retrieval and citation bots, so answer engines and assistant-triggered fetchers can access your shop. This rule allows `PerplexityBot`, `Perplexity-User`, `OAI-SearchBot`, `ChatGPT-User`, and `ClaudeBot`.
+
+```{note}
+This rule runs before the configured AI policy, so these bots are allowed regardless of your `botstopper_ai_policy` setting. The rule only checks the user agent, which can be spoofed.
+```
+
+```yaml
+- name: allow-retrieval-citation-bots
+ action: ALLOW
+ expression:
+ all:
+ - userAgent.matches("(?i:(PerplexityBot|Perplexity-User|OAI-SearchBot|ChatGPT-User|ClaudeBot))")
+```
+
+### Uptime Monitoring
+
+Uptime monitoring tools request your shop at short intervals. If Botstopper challenges these requests, the monitoring tool reports your shop as down.
+
+#### HetrixTools
+
+Allows HetrixTools uptime monitoring from the [IP addresses published by HetrixTools](https://docs.hetrixtools.com/uptime-monitoring-ip-addresses/).
+
+
+Show the full rule (103 IP addresses)
+
+```yaml
+- name: allow-hetrixtools-uptime
+ action: ALLOW
+ user_agent_regex: HetrixTools
+ remote_addresses:
+ - 52.207.41.187/32
+ - 96.126.106.201/32
+ - 52.23.120.125/32
+ - 138.197.17.201/32
+ - 66.165.247.154/32
+ - 149.28.50.248/32
+ - 172.241.23.225/32
+ - 209.222.107.178/32
+ - 67.213.120.27/32
+ - 94.154.159.133/32
+ - 66.206.13.170/32
+ - 79.127.243.80/32
+ - 23.239.7.4/32
+ - 52.52.33.209/32
+ - 149.28.212.239/32
+ - 159.89.159.134/32
+ - 66.165.225.34/32
+ - 23.106.180.172/32
+ - 69.67.149.243/32
+ - 77.247.126.141/32
+ - 104.194.8.169/32
+ - 172.235.62.113/32
+ - 66.42.97.101/32
+ - 95.179.139.97/32
+ - 51.15.61.222/32
+ - 188.166.79.172/32
+ - 37.48.96.90/32
+ - 194.126.173.238/32
+ - 51.158.156.63/32
+ - 194.49.53.65/32
+ - 217.195.155.50/32
+ - 52.56.73.124/32
+ - 139.162.228.62/32
+ - 95.179.193.59/32
+ - 178.62.11.90/32
+ - 51.195.149.151/32
+ - 23.106.61.94/32
+ - 185.174.110.102/32
+ - 103.50.32.15/32
+ - 94.72.181.90/32
+ - 185.38.148.144/32
+ - 51.89.144.57/32
+ - 52.59.92.96/32
+ - 78.46.88.58/32
+ - 94.16.112.18/32
+ - 51.195.46.219/32
+ - 178.162.208.86/32
+ - 192.248.181.140/32
+ - 91.239.130.97/32
+ - 66.206.25.250/32
+ - 164.92.161.215/32
+ - 172.105.249.219/32
+ - 152.53.124.134/32
+ - 51.89.47.4/32
+ - 52.221.91.160/32
+ - 139.162.22.205/32
+ - 128.199.187.77/32
+ - 45.76.150.238/32
+ - 51.79.156.91/32
+ - 23.106.120.205/32
+ - 107.155.75.66/32
+ - 210.16.67.82/32
+ - 51.79.212.229/32
+ - 104.237.139.48/32
+ - 45.32.204.172/32
+ - 23.227.169.50/32
+ - 172.241.24.83/32
+ - 2.56.188.250/32
+ - 207.188.6.20/32
+ - 121.127.40.34/32
+ - 52.65.182.14/32
+ - 45.76.120.140/32
+ - 139.99.169.250/32
+ - 172.105.168.58/32
+ - 103.101.130.73/32
+ - 203.96.179.194/32
+ - 91.242.215.225/32
+ - 139.99.233.44/32
+ - 52.67.204.189/32
+ - 104.41.61.219/32
+ - 103.88.233.41/32
+ - 216.238.100.86/32
+ - 189.1.173.35/32
+ - 45.158.39.210/32
+ - 52.199.17.123/32
+ - 45.76.202.144/32
+ - 172.104.99.63/32
+ - 23.106.230.203/32
+ - 43.230.163.178/32
+ - 199.254.199.6/32
+ - 35.154.5.38/32
+ - 148.113.2.135/32
+ - 172.105.37.103/32
+ - 181.41.142.138/32
+ - 65.20.70.55/32
+ - 181.41.142.170/32
+ - 148.113.25.248/32
+ - 146.59.0.13/32
+ - 70.34.249.133/32
+ - 84.17.55.195/32
+ - 151.115.123.218/32
+ - 51.38.143.147/32
+ - 70.34.248.245/32
+```
+
+
+
+#### Oh Dear
+
+Allows Oh Dear monitoring from the [IP addresses published by Oh Dear](https://ohdear.app/docs/faq/what-ips-does-oh-dear-monitor-from).
+
+
+Show the full rule (74 IP addresses)
+
+```yaml
+- name: allow-ohdear.app
+ action: ALLOW
+ user_agent_regex: OhDear
+ remote_addresses:
+ - 45.32.146.84/32
+ - 2001:19f0:6801:5f3:5400:1ff:fe38:3572/128
+ - 139.59.61.47/32
+ - 2400:6180:100:d0::12:e001/128
+ - 45.76.59.200/32
+ - 2001:19f0:6401:f5a:5400:1ff:fe57:57e9/128
+ - 45.32.189.194/32
+ - 2001:19f0:5801:1e90:5400:1ff:fecb:f1f2/128
+ - 45.76.46.251/32
+ - 2001:19f0:6801:15d7:5400:1ff:fef9:8e1d/128
+ - 165.22.95.234/32
+ - 2a03:b0c0:3:e0::220:2001/128
+ - 95.179.211.184/32
+ - 2a05:f480:1c00:7dd:5400:2ff:fe68:af7/128
+ - 167.71.54.244/32
+ - 2a03:b0c0:3:e0::2a8:6001/128
+ - 45.76.236.54/32
+ - 2001:19f0:6401:19d5:5400:2ff:feb3:6d28/128
+ - 167.172.97.55/32
+ - 2a03:b0c0:3:e0::386:1/128
+ - 164.90.176.102/32
+ - 2a03:b0c0:3:f0::173:0/128
+ - 199.247.9.185/32
+ - 2a05:f480:1c00:c80:5400:2ff:feda:ca89/128
+ - 217.69.10.40/32
+ - 2001:19f0:6801:9d3:5400:2ff:feda:fb6e/128
+ - 159.203.38.39/32
+ - 2604:a880:cad:d0::7aa:6001/128
+ - 198.13.48.175/32
+ - 2001:19f0:7002:3d5:5400:2ff:fedb:8dc0/128
+ - 46.101.122.201/32
+ - 2a03:b0c0:3:d0::10b8:8001/128
+ - 158.247.212.166/32
+ - 2401:c080:1c02:b4:5400:3ff:fe1a:56a2/128
+ - 45.32.107.252/32
+ - 2001:19f0:4400:737b:5400:3ff:fe1a:5634/128
+ - 165.227.31.113/32
+ - 2604:a880:2:d0::15d9:c001/128
+ - 45.63.54.118/32
+ - 2001:19f0:6001:5ef0:5400:3ff:fe1a:5666/128
+ - 178.62.45.205/32
+ - 2a03:b0c0:1:d0::81:e001/128
+ - 134.209.122.208/32
+ - 2604:a880:400:d0::1a7d:4001/128
+ - 13.245.37.23/32
+ - 54.94.4.151/32
+ - 45.32.147.8/32
+ - 2a05:f480:1c00:5f0:5400:3ff:fe50:e0c5/128
+ - 134.209.243.63/32
+ - 2a03:b0c0:3:d0::4f5:f001/128
+ - 138.68.138.12/32
+ - 138.68.138.180/32
+ - 104.236.192.248/32
+ - 165.22.36.80/32
+ - 159.203.60.48/32
+ - 216.128.128.104/32
+ - 2001:19f0:6401:3a:5400:5ff:fe8b:5e4b/128
+ - 70.34.203.58/32
+ - 2a05:f480:2000:295b:5400:5ff:fe85:e8c9/128
+ - 217.19.225.103/32
+ - 176.62.160.106/32
+ - 23.88.67.24/32
+ - 2a01:4f8:272:426a::2/128
+ - 167.71.40.86/32
+ - 2a03:b0c0:3:d0::e8d:1001/128
+ - 167.71.57.77/32
+ - 2a03:b0c0:3:f0:0:1:8224:4000/128
+ - 137.184.22.216/32
+ - 2604:a880:400:d0::1ce6:d001/128
+ - 159.65.3.76/32
+ - 2400:6180:0:d0::157d:f001/128
+ - 142.93.110.196/32
+ - 68.183.121.207/32
+ - 167.99.69.81/32
+```
+
+
+
+#### Pingdom
+
+Allows Pingdom monitoring checks from the [probe server IP addresses published by SolarWinds](https://documentation.solarwinds.com/en/success_center/pingdom/content/topics/pingdom-probe-servers-ip-addresses.htm).
+
+
+Show the full rule (149 IP addresses)
+
+```yaml
+- name: allow-pingdom
+ action: ALLOW
+ expression:
+ all:
+ - userAgent.matches("(?i:Pingdom)")
+ remote_addresses:
+ - 3.10.222.182/32
+ - 3.11.131.95/32
+ - 3.66.99.59/32
+ - 3.120.200.34/32
+ - 3.121.108.101/32
+ - 3.125.198.20/32
+ - 3.127.78.190/32
+ - 3.219.128.11/32
+ - 3.234.196.132/32
+ - 13.41.140.26/32
+ - 13.41.156.80/32
+ - 13.48.152.99/32
+ - 13.49.128.195/32
+ - 13.232.220.164/32
+ - 13.238.73.96/32
+ - 13.238.127.47/32
+ - 15.157.158.165/32
+ - 15.157.248.148/32
+ - 18.133.153.87/32
+ - 18.159.29.185/32
+ - 18.169.231.220/32
+ - 18.176.175.170/32
+ - 18.228.82.35/32
+ - 18.230.158.101/32
+ - 23.22.2.46/32
+ - 23.83.129.219/32
+ - 23.92.127.2/32
+ - 23.106.37.99/32
+ - 23.111.152.74/32
+ - 23.111.159.174/32
+ - 35.75.240.83/32
+ - 35.76.210.156/32
+ - 35.79.242.196/32
+ - 35.85.117.184/32
+ - 43.225.198.122/32
+ - 43.229.84.12/32
+ - 44.194.39.17/32
+ - 44.226.213.159/32
+ - 44.240.34.6/32
+ - 46.20.45.18/32
+ - 46.246.122.10/32
+ - 50.16.153.186/32
+ - 51.20.199.140/32
+ - 51.21.185.148/32
+ - 52.0.204.16/32
+ - 52.5.245.15/32
+ - 52.13.171.123/32
+ - 52.21.31.140/32
+ - 52.24.42.103/32
+ - 52.34.250.64/32
+ - 52.37.65.41/32
+ - 52.48.244.35/32
+ - 52.52.34.158/32
+ - 52.52.95.213/32
+ - 52.52.118.192/32
+ - 52.57.132.90/32
+ - 52.59.46.112/32
+ - 52.59.147.246/32
+ - 52.60.62.239/32
+ - 52.60.154.13/32
+ - 52.62.12.49/32
+ - 52.63.142.2/32
+ - 52.63.164.147/32
+ - 52.63.167.55/32
+ - 52.65.247.85/32
+ - 52.67.148.55/32
+ - 52.73.209.122/32
+ - 52.89.43.70/32
+ - 52.194.115.181/32
+ - 52.197.31.124/32
+ - 52.197.224.235/32
+ - 52.198.25.184/32
+ - 52.201.3.199/32
+ - 52.209.34.226/32
+ - 52.209.186.226/32
+ - 52.210.232.124/32
+ - 54.65.106.94/32
+ - 54.68.48.199/32
+ - 54.70.202.58/32
+ - 54.79.157.219/32
+ - 54.79.202.123/32
+ - 54.94.28.109/32
+ - 54.94.182.182/32
+ - 54.94.206.111/32
+ - 54.94.238.198/32
+ - 54.153.170.200/32
+ - 64.237.49.203/32
+ - 64.237.55.3/32
+ - 66.165.229.130/32
+ - 66.165.233.234/32
+ - 72.46.130.18/32
+ - 72.46.131.10/32
+ - 75.101.131.114/32
+ - 76.164.234.106/32
+ - 76.164.234.130/32
+ - 82.103.136.16/32
+ - 82.103.139.165/32
+ - 82.103.145.126/32
+ - 85.195.116.134/32
+ - 89.163.146.247/32
+ - 89.163.242.206/32
+ - 94.75.211.73/32
+ - 94.75.211.74/32
+ - 94.247.174.83/32
+ - 103.47.211.210/32
+ - 108.181.70.3/32
+ - 141.125.89.147/32
+ - 148.72.170.233/32
+ - 148.72.171.17/32
+ - 151.106.52.134/32
+ - 158.175.95.9/32
+ - 162.218.67.34/32
+ - 162.253.128.178/32
+ - 167.17.67.101/32
+ - 168.1.203.46/32
+ - 169.44.155.138/32
+ - 169.51.2.18/32
+ - 169.54.70.214/32
+ - 169.63.150.216/32
+ - 172.241.112.86/32
+ - 173.248.147.18/32
+ - 174.34.156.130/32
+ - 175.45.132.20/32
+ - 176.34.7.155/32
+ - 177.47.99.26/32
+ - 177.71.158.135/32
+ - 178.162.206.244/32
+ - 179.50.12.212/32
+ - 184.75.210.90/32
+ - 184.75.210.226/32
+ - 184.75.214.66/32
+ - 184.75.214.98/32
+ - 185.39.146.214/32
+ - 185.39.146.215/32
+ - 185.70.76.23/32
+ - 185.93.3.65/32
+ - 185.136.156.82/32
+ - 185.152.65.167/32
+ - 185.180.12.65/32
+ - 185.246.208.82/32
+ - 190.120.230.7/32
+ - 196.240.207.18/32
+ - 196.244.191.18/32
+ - 196.245.151.42/32
+ - 199.87.228.66/32
+ - 200.58.101.248/32
+ - 207.244.80.239/32
+ - 209.58.139.193/32
+ - 209.58.139.194/32
+```
+
+
+
+#### UptimeRobot
+
+Allows UptimeRobot monitoring from the [IP addresses published by UptimeRobot](https://uptimerobot.com/help/locations/).
+
+
+Show the full rule (103 IP addresses)
+
+```yaml
+- name: allow-uptimerobot-monitoring
+ action: ALLOW
+ user_agent_regex: UptimeRobot
+ remote_addresses:
+ - 3.12.251.153/32
+ - 3.20.63.178/32
+ - 3.77.67.4/32
+ - 3.79.134.69/32
+ - 3.105.133.239/32
+ - 3.105.190.221/32
+ - 3.133.226.214/32
+ - 3.149.57.90/32
+ - 3.212.128.62/32
+ - 5.161.61.238/32
+ - 5.161.73.160/32
+ - 5.161.75.7/32
+ - 5.161.113.195/32
+ - 5.161.117.52/32
+ - 5.161.177.47/32
+ - 5.161.194.92/32
+ - 5.161.215.244/32
+ - 5.223.43.32/32
+ - 5.223.53.147/32
+ - 5.223.57.22/32
+ - 18.116.205.62/32
+ - 18.180.208.214/32
+ - 18.192.166.72/32
+ - 18.193.252.127/32
+ - 24.144.78.39/32
+ - 24.144.78.185/32
+ - 34.198.201.66/32
+ - 45.55.123.175/32
+ - 45.55.127.146/32
+ - 49.13.24.81/32
+ - 49.13.130.29/32
+ - 49.13.134.145/32
+ - 49.13.164.148/32
+ - 49.13.167.123/32
+ - 52.15.147.27/32
+ - 52.22.236.30/32
+ - 52.28.162.93/32
+ - 52.59.43.236/32
+ - 52.87.72.16/32
+ - 54.64.67.106/32
+ - 54.79.28.129/32
+ - 54.87.112.51/32
+ - 54.167.223.174/32
+ - 54.249.170.27/32
+ - 63.178.84.147/32
+ - 64.225.81.248/32
+ - 64.225.82.147/32
+ - 78.46.190.63/32
+ - 78.46.215.1/32
+ - 78.47.98.55/32
+ - 78.47.173.76/32
+ - 88.99.80.227/32
+ - 91.99.101.207/32
+ - 128.140.41.193/32
+ - 128.140.106.114/32
+ - 129.212.132.140/32
+ - 134.199.240.137/32
+ - 138.197.53.117/32
+ - 138.197.53.138/32
+ - 138.197.54.143/32
+ - 138.197.54.247/32
+ - 138.197.63.92/32
+ - 139.59.50.44/32
+ - 142.132.180.39/32
+ - 143.198.249.237/32
+ - 143.198.250.89/32
+ - 143.244.196.21/32
+ - 143.244.196.211/32
+ - 143.244.221.177/32
+ - 144.126.251.21/32
+ - 146.190.9.187/32
+ - 152.42.149.135/32
+ - 157.90.155.240/32
+ - 157.90.156.63/32
+ - 159.69.158.189/32
+ - 159.223.243.219/32
+ - 161.35.247.201/32
+ - 167.99.18.52/32
+ - 167.235.143.113/32
+ - 168.119.53.160/32
+ - 168.119.96.239/32
+ - 168.119.123.75/32
+ - 170.64.250.64/32
+ - 170.64.250.132/32
+ - 170.64.250.235/32
+ - 178.156.181.172/32
+ - 178.156.184.20/32
+ - 178.156.185.127/32
+ - 178.156.185.231/32
+ - 178.156.187.238/32
+ - 178.156.189.113/32
+ - 178.156.189.249/32
+ - 188.166.201.79/32
+ - 206.189.241.133/32
+ - 209.38.49.1/32
+ - 209.38.49.206/32
+ - 209.38.49.226/32
+ - 209.38.51.43/32
+ - 209.38.53.7/32
+ - 209.38.124.252/32
+ - 216.144.248.27/32
+ - 216.144.248.28/32
+ - 216.144.248.29/32
+```
+
+
+
+#### Uptime Kuma
+
+Allows [Uptime Kuma](https://github.com/louislam/uptime-kuma/wiki), a self-hosted monitoring tool. Because Uptime Kuma runs on your own server, there is no fixed IP range. If you know the IP address of your Uptime Kuma server, add it under `remote_addresses` to make the rule more specific.
+
+```yaml
+- name: allow-uptime-kuma
+ action: ALLOW
+ user_agent_regex: Uptime-Kuma
+```
+
+### Cookie Consent Scanners
+
+Cookie consent tools scan your shop to detect which cookies it sets. If Botstopper challenges the scanner, the cookie overview of your consent banner can become incomplete.
+
+#### Cookiebot
+
+Allows the Cookiebot scanner from the [IP addresses published by Cookiebot](https://support.cookiebot.com/hc/en-us/articles/360003824153-Whitelisting-the-Cookiebot-scanner).
+
+
+Show the full rule (11 IP addresses)
+
+```yaml
+- name: allow-cookiebot-scanner
+ action: ALLOW
+ user_agent_regex: Cookiebot
+ remote_addresses:
+ - 20.223.9.138/32
+ - 34.107.102.47/32
+ - 34.141.10.24/32
+ - 34.159.86.126/32
+ - 34.159.168.195/32
+ - 34.159.247.222/32
+ - 35.198.78.207/32
+ - 35.198.137.6/32
+ - 35.198.160.49/32
+ - 35.246.143.2/32
+ - 35.246.191.14/32
+```
+
+
+
+#### CookieYes
+
+Allows the [CookieYes scanner](https://www.cookieyes.com/documentation/cookieyesbot/), `CookieYesbot`.
+
+```yaml
+- name: allow-CookieYesbot-scanner
+ action: ALLOW
+ user_agent_regex: CookieYesbot
+```
+
+### WordPress Tools
+
+#### BlogVault
+
+Allows the BlogVault WordPress backup service from the [IP addresses published by BlogVault](https://app.blogvault.net/api/bv_bots).
+
+
+Show the full rule (69 IP addresses)
+
+```yaml
+- name: allow-blogvault
+ action: ALLOW
+ remote_addresses:
+ - 46.101.79.34/32
+ - 139.180.180.168/32
+ - 136.244.79.211/32
+ - 217.69.12.130/32
+ - 66.42.61.105/32
+ - 95.179.211.0/32
+ - 49.13.85.158/32
+ - 78.46.201.135/32
+ - 188.245.49.234/32
+ - 188.245.80.240/32
+ - 116.202.106.0/32
+ - 5.161.106.94/32
+ - 5.161.201.188/32
+ - 5.161.52.234/32
+ - 5.161.177.123/32
+ - 5.161.250.15/32
+ - 157.230.220.204/32
+ - 82.196.2.12/32
+ - 188.245.58.208/32
+ - 49.12.219.178/32
+ - 138.201.158.24/32
+ - 91.107.202.135/32
+ - 167.235.254.214/32
+ - 5.161.44.164/32
+ - 178.156.128.204/32
+ - 5.161.69.178/32
+ - 5.161.216.238/32
+ - 5.161.226.151/32
+ - 5.161.53.170/32
+ - 178.156.134.136/32
+ - 5.161.217.158/32
+ - 5.161.202.241/32
+ - 5.161.250.122/32
+ - 188.245.87.173/32
+ - 116.202.110.255/32
+ - 49.13.10.198/32
+ - 5.75.228.162/32
+ - 88.99.13.2/32
+ - 137.184.135.216/32
+ - 143.198.117.131/32
+ - 146.185.155.135/32
+ - 5.161.252.168/32
+ - 178.156.146.200/32
+ - 5.161.114.127/32
+ - 5.161.96.135/32
+ - 178.156.136.36/32
+ - 188.245.90.252/32
+ - 188.245.48.218/32
+ - 188.245.61.191/32
+ - 49.12.66.195/32
+ - 49.13.22.245/32
+ - 188.226.179.196/32
+ - 188.226.158.111/32
+ - 161.35.15.229/32
+ - 68.183.107.157/32
+ - 49.13.61.43/32
+ - 49.13.217.108/32
+ - 138.199.152.110/32
+ - 188.245.53.189/32
+ - 104.248.114.9/32
+ - 192.81.221.63/32
+ - 45.63.10.187/32
+ - 45.76.137.73/32
+ - 159.223.99.132/32
+ - 198.211.127.63/32
+ - 37.139.10.11/32
+ - 82.196.10.5/32
+ - 139.59.75.155/32
+ - 165.227.156.122/32
+```
+
+
+
+#### InfiniteWP
+
+Allows [InfiniteWP](https://infinitewp.com), a dashboard to manage multiple WordPress sites.
+
+```yaml
+- name: allow-infinitewp
+ action: ALLOW
+ user_agent_regex: InfiniteWP
+```
+
+#### WP Rocket
+
+Allows the WP Rocket SaaS service from the [IP ranges published by WP Rocket](https://docs.wp-rocket.me/article/1628-which-ip-do-i-need-to-allow-for-wp-rocket).
+
+
+Show the full rule (29 IP addresses)
+
+```yaml
+- name: allow-wprocket
+ action: ALLOW
+ user_agent_regex: WP-Rocket-SaaS
+ remote_addresses:
+ - 172.64.0.0/13
+ - 103.22.200.0/22
+ - 104.16.0.0/13
+ - 5.249.224.0/24
+ - 173.245.48.0/20
+ - 46.30.214.0/24
+ - 197.234.240.0/22
+ - 46.30.210.0/24
+ - 103.31.4.0/22
+ - 131.0.72.0/22
+ - 185.10.8.0/22
+ - 103.21.244.0/22
+ - 198.41.128.0/17
+ - 46.30.211.0/24
+ - 162.158.0.0/15
+ - 188.114.96.0/20
+ - 141.101.64.0/18
+ - 46.30.212.0/24
+ - 190.93.240.0/20
+ - 104.24.0.0/14
+ - 108.162.192.0/18
+ - 2405:8100::/32
+ - 2a02:2350:4:200::/55
+ - 2c0f:f248::/32
+ - 2a06:98c0::/29
+ - 2606:4700::/32
+ - 2803:f800::/32
+ - 2400:cb00::/32
+ - 2405:b500::/32
+```
+
+
+
+### Other Integrations
+
+#### Sendcloud
+
+Allows the Sendcloud shipping platform from the [IP addresses published by Sendcloud](https://cdn.sendcloud.com/global-media/public-ips.txt).
+
+
+Show the full rule (15 IP addresses)
+
+```yaml
+- name: allow-sendcloud
+ action: ALLOW
+ user_agent_regex: (?i)sendcloud
+ remote_addresses:
+ - 3.120.127.184/32
+ - 3.121.38.108/32
+ - 3.122.58.116/32
+ - 35.158.146.12/32
+ - 52.57.76.59/32
+ - 52.29.84.45/32
+ - 52.29.82.100/32
+ - 52.58.233.101/32
+ - 52.58.235.98/32
+ - 18.198.117.128/32
+ - 18.158.18.128/32
+ - 3.124.13.189/32
+ - 3.72.184.234/32
+ - 3.70.35.13/32
+ - 18.195.37.52/32
+```
+
+
+
+#### SleakBot
+
+Allows `SleakBot`, the crawler of the [Sleak](https://sleak.chat) AI chat assistant.
+
+```yaml
+- name: allow-sleakbot
+ action: ALLOW
+ user_agent_regex: SleakBot
+```
+
+### Country-Based Rules
+
+These rules use the `X-Country-Code` header, which contains the country of the visitor's IP address.
+
+#### Allow visitors from the Benelux
+
+Allows all traffic from the Netherlands, Belgium, and Luxembourg without a challenge.
+
+```{warning}
+This rule allows all traffic from these countries before any other check, including bad bots and scrapers that run from Dutch, Belgian, or Luxembourg IP addresses.
+```
+
+```yaml
+- name: allow-benelux-without-challenge
+ action: ALLOW
+ expression:
+ all:
+ - '"X-Country-Code" in headers'
+ - 'headers["X-Country-Code"] in ["NL", "BE", "LU"]'
+```
+
+#### Block visitors from outside the EU, UK, and US
+
+Blocks all requests from countries outside the EU/EEA, Switzerland, the United Kingdom and its Crown Dependencies, and the United States. Visitors from other countries receive an HTTP `403` response.
+
+```{warning}
+This rule runs before the standard Hypernode allow rules. It also blocks crawlers, payment providers, and integrations that connect from other countries. Add trusted services to the WAF allowlist, or add `ALLOW` rules above this rule in `pre.policy.yml`.
+```
+
+```yaml
+- name: deny-non-eu-uk-us
+ action: DENY
+ expression:
+ all:
+ - '"X-Country-Code" in headers'
+ - '!(headers["X-Country-Code"] in ["AT", "BE", "BG", "HR", "CY", "CZ", "DK", "EE", "FI", "FR", "DE", "GR", "HU", "IE", "IT", "LV", "LT", "LU", "MT", "NL", "PL", "PT", "RO", "SK", "SI", "ES", "SE", "IS", "LI", "NO", "CH", "GB", "GG", "JE", "IM", "US"])'
+```