diff --git a/tsa/howto/puppet.mdwn b/tsa/howto/puppet.mdwn
index 387e8ba6f2c477b15bbb43c438987163a33e9fd0..9d29e94d251242682a73742cc10182581390a2f1 100644
--- a/tsa/howto/puppet.mdwn
+++ b/tsa/howto/puppet.mdwn
@@ -22,10 +22,16 @@ The currently known values are: `kvm`, `physical`, and `xenu`.
 
 ## Other ways of extracting a host list
 
- * Using the PuppetDB API:
+ * Using the [PuppetDB API][]:
 
         curl -s -G http://localhost:8080/pdb/query/v4/facts  | jq -r ".[].certname"
 
+   The [fact API][] is quite extensive and allows for very complex
+   queries. For example, this shows all hosts with the `apache2` fact
+   set to `true`:
+
+        curl -s -G http://localhost:8080/pdb/query/v4/facts --data-urlencode 'query=["and", ["=", "name", "apache2"], ["=", "value", true]]' | jq -r ".[].certname"
+
  * Using [Cumin][], see below
 
 [Cumin]: https://doc.wikimedia.org/cumin/master/introduction.html
@@ -38,6 +44,9 @@ The currently known values are: `kvm`, `physical`, and `xenu`.
     the mkdir is so that I can run the same command in many terminal
     windows and each host gets only one once
 
+ [PuppetDB API]: https://puppet.com/docs/puppetdb/4.3/api/index.html
+ [fact API]: https://puppet.com/docs/puppetdb/4.3/api/query/v4/facts.html
+
 Batch jobs on all hosts
 =======================