diff --git a/bilby/core/sampler/__init__.py b/bilby/core/sampler/__init__.py
index 7ec87be2335142070891dd3276b4c64dbbec5b3e..2e5fa1404f45bc2218a5276e7cb9a52449c07c69 100644
--- a/bilby/core/sampler/__init__.py
+++ b/bilby/core/sampler/__init__.py
@@ -4,7 +4,7 @@ import datetime
 from collections import OrderedDict
 
 import bilby
-from ..utils import command_line_args, logger
+from ..utils import command_line_args, logger, loaded_modules_dict
 from ..prior import PriorDict, DeltaFunction
 
 from .base_sampler import Sampler, SamplingMarginalisedParameterError
@@ -141,6 +141,7 @@ def run_sampler(likelihood, priors=None, label='label', outdir='outdir',
     if meta_data is None:
         meta_data = dict()
     meta_data['likelihood'] = likelihood.meta_data
+    meta_data["loaded_modules"] = loaded_modules_dict()
 
     if command_line_args.bilby_zero_likelihood_mode:
         from bilby.core.likelihood import ZeroLikelihood
diff --git a/bilby/core/utils.py b/bilby/core/utils.py
index 0fb1aa4afe39a5289ecb702fa8cd56b25fc17c77..03380552db7c64e6c9395021be6dbc73038bd891 100644
--- a/bilby/core/utils.py
+++ b/bilby/core/utils.py
@@ -4,6 +4,7 @@ from distutils.spawn import find_executable
 import logging
 import os
 import shutil
+import sys
 from math import fmod
 import argparse
 import inspect
@@ -1269,6 +1270,15 @@ def get_function_path(func):
         return func
 
 
+def loaded_modules_dict():
+    module_names = sys.modules.keys()
+    vdict = {}
+    for key in module_names:
+        if "." not in key:
+            vdict[key] = str(getattr(sys.modules[key], "__version__", "N/A"))
+    return vdict
+
+
 class IllegalDurationAndSamplingFrequencyException(Exception):
     pass