diff --git a/integrationExamples/mass/index.html b/integrationExamples/mass/index.html
new file mode 100644
index 00000000000..80fe4cfb934
--- /dev/null
+++ b/integrationExamples/mass/index.html
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Note: for this example to work, you need access to a bid simulation tool from your MASS enabled Exchange partner.
+
+
+
+
+
+
diff --git a/modules/mass.js b/modules/mass.js
new file mode 100644
index 00000000000..14fe556a466
--- /dev/null
+++ b/modules/mass.js
@@ -0,0 +1,129 @@
+/**
+ * This module adds MASS support to Prebid.js.
+ */
+
+import { config } from '../src/config.js';
+import { getHook } from '../src/hook.js';
+import find from 'core-js-pure/features/array/find.js';
+
+export let listenerAdded = false;
+export let massEnabled = false;
+
+const defaultCfg = {
+ dealIdPattern: /^MASS/i
+};
+let cfg;
+
+const massBids = {};
+
+init();
+config.getConfig('mass', config => init(config.mass));
+
+/**
+ * Module init.
+ */
+export function init(customCfg) {
+ cfg = Object.assign({}, defaultCfg, customCfg);
+
+ if (cfg.enabled === false) {
+ if (massEnabled) {
+ massEnabled = false;
+ getHook('addBidResponse').getHooks({hook: addBidResponseHook}).remove();
+ }
+ } else {
+ if (!massEnabled) {
+ getHook('addBidResponse').before(addBidResponseHook);
+ massEnabled = true;
+ }
+ }
+}
+
+/**
+ * Before hook for 'addBidResponse'.
+ */
+export function addBidResponseHook(next, adUnitCode, bid) {
+ if (!isMassBid(bid) || !cfg.renderUrl) {
+ return next(adUnitCode, bid);
+ }
+
+ const bidRequest = find(this.bidderRequest.bids, bidRequest =>
+ bidRequest.bidId === bid.requestId
+ );
+
+ massBids[bid.requestId] = {
+ bidRequest,
+ bid,
+ adm: bid.ad
+ };
+
+ bid.ad = '