diff --git a/lib/modules/datasource/custom/index.ts b/lib/modules/datasource/custom/index.ts
index f9ca969710b2ba0f9a089032cd05f0e46c62206d..d230e14179119238b9bb0c2c8a0e974bbf6cbe1c 100644
--- a/lib/modules/datasource/custom/index.ts
+++ b/lib/modules/datasource/custom/index.ts
@@ -43,6 +43,8 @@ export class CustomDatasource extends Datasource {
       return null;
     }
 
+    logger.trace({ data }, `Custom manager fetcher '${format}' returned data.`);
+
     for (const transformTemplate of transformTemplates) {
       const expression = jsonata(transformTemplate);
       data = await expression.evaluate(data);
diff --git a/lib/modules/datasource/custom/readme.md b/lib/modules/datasource/custom/readme.md
index b3915695c0262de4978507130609c23bfd1828ac..7660d511963239ad8724a7c3491584cb35261a1b 100644
--- a/lib/modules/datasource/custom/readme.md
+++ b/lib/modules/datasource/custom/readme.md
@@ -81,6 +81,22 @@ All available options:
 }
 ```
 
+### Debugging
+
+Renovate writes tracing log entries before transformation starts and after if Renovate finds an unexpected data format.
+To surface this data you can use `logLevelRemap` to surface this data on the App or run Renovate in dryRun mode and log level set to `trace` locally.
+
+```json
+{
+  "logLevelRemap": [
+    {
+      "matchMessage": "/^Custom manager fetcher/",
+      "newLogLevel": "info"
+    }
+  ]
+}
+```
+
 ### Formats
 
 #### JSON