VaporTEK Vapor Recovery Solutions

Proud to be Powered by Vontier. Sharing a united vision that is driven by innovation. Find out more

VaporTEK Vapor Recovery

Veeder-Root’s new portfolio of vapor-collection solutions, VaporTEK, sets a new standard of performance and reliability in vapor recovery equipment. This portfolio is the most flexible Stage II vapor-collection solution on the market, with configurations available to meet compliance all across the country. And our best-in-class piston technology ensures the reliability you need and the durability to last. The solution’s compact size is ideal for retrofits, and a new dispenser installs and operates in a whisper.

Key features:

  • Most flexible vapor-collection portfolio on the market
  • Best-in-class piston technology (2X smaller than current integrated piston)
  • Exceptional reliability and durability
  • Quiet operation and easy to install 

Key benefits:

  • Most flexible vapor collection portfolio. Configurable to specific country A/L thresholds
  • Best-in-class piston technology. Exceptional reliability and durability, quiet operation, and designed to operate in adverse environmental conditions
  • Compact size. Ideal for retrofit and new dispenser applications. Compatible with occasional liquid contact
  • Upgradeable. Future-proof to accommodate for changing regulations
  • TUV performance certificates. IECEX, ATEX and PCEC safety approvals

VaporTEK Pump Specifications

  • Flame Arrestors (Type Ex IIA) integrated into the inlet and outlet ports
  • Multiple mounting orientations for easy installation
  • Synchronous brushless DC motor
  • 50/60 HZ frequency
  • 230V single phase
  • 1.2 Amps at maximum rpm
  • 2950 rpm maximum motor speed
  • 95 liters per minute maximum flow rate capacity
  • 59 decibels noise level
  • IECEX, ATEX, and PCEC safety approval

VaporTEK Controller Specifications

  • 230V input power
  • Two AC line voltage dispenser hook signal connections
  • RJ12 connection to VaporTEK Interface

VaporTEK Interface Specifications

  • 24VDC input power
  • 0-24V hook signal input for both sides of the dispenser
  • Liquid pulse signal input for both sides of the dispenser
  • Diesel suppression capability
  • Multiplex capability for multi-product dispensers or suction pumps
  • USB port for PC connection
  • RJ-12 connection to VaporTEK Controller
  • Diagnostic LEDs for troubleshooting
  • VaporTEK Datasheet (576047-180 Rev B)
  • VaporTEK Installation Training Presentation -
  • VaporTEK Operations Manual -

TUV Performance Certificates

  • VaporTEK Basic with AVRN - A/L 13.1
  • VaporTEK Plus with AVRN - 85-13.2 GER
  • VaporTEK Plus with Elaflex - 85.2.172 GER
  • VaporTEK Enhanced with AVRN - 85-13.3 GER
  • VaporTEK Ultra with AVRN - 85-13.4 GER


Safety Certificates

  • VaporTEK IECEx SIR 11.0067X Iss 0
  • VaporTEK Sira 11ATEX1144X Iss 0


Request a Quote


<script>

// CONFIG: map UTM parameter names -> input selectors
const fieldMap = {
utm_source: 'input[name="1097612_221968pi_1097612_221968"]',
utm_medium: 'input[name="1097612_221965pi_1097612_221965"]',
utm_campaign: 'input[name="1097612_221959pi_1097612_221959"]',
utm_content: 'input[name="1097612_221962pi_1097612_221962"]'
};

// CONFIG: whether to save values read from the URL into sessionStorage
const saveUrlToSession = true;

function safeSessionGet(key) {
try {
return sessionStorage.getItem(key);
} catch (e) {
return null;
}
}

function safeSessionSet(key, value) {
if (!saveUrlToSession) return;
try {
sessionStorage.setItem(key, value);
} catch (e) {
// ignore storage write failures
}
}

function getUrlParam(paramName) {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get(paramName); // returns null if not present
}

function setFieldValue(el, value) {
if (!el) return;
el.value = value;
// trigger input/change events for libraries that listen for them
el.dispatchEvent(new Event('input', { bubbles: true }));
el.dispatchEvent(new Event('change', { bubbles: true }));
}

function populateKey(paramName, selector) {
const el = document.querySelector(selector);

// 1) Try sessionStorage first
const sessVal = safeSessionGet(paramName);
if (sessVal !== null && sessVal !== '') {
setFieldValue(el, sessVal);
return;
}

// 2) Fallback to URL param
const urlVal = getUrlParam(paramName);
if (urlVal !== null && urlVal !== '') {
setFieldValue(el, urlVal);
safeSessionSet(paramName, urlVal); // store for future pages if enabled
}
}

function populateHiddenFields() {
Object.keys(fieldMap).forEach(paramName => {
populateKey(paramName, fieldMap[paramName]);
});
}

if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', populateHiddenFields);
} else {
populateHiddenFields();
}

// Optional: allow manual calls from other scripts
window.populateHiddenFields = populateHiddenFields;

(function () {
// CONFIG
const fieldMap = {
utm_source: 'input[name="1097612_221968pi_1097612_221968"]',
utm_medium: 'input[name="1097612_221965pi_1097612_221965"]',
utm_campaign: 'input[name="1097612_221959pi_1097612_221959"]',
utm_content: 'input[name="1097612_221962pi_1097612_221962"]'
};
const saveUrlToSession = true;

// Safe session helpers
function safeSessionGet(key) {
try { return sessionStorage.getItem(key); } catch (e) { return null; }
}
function safeSessionSet(key, value) {
if (!saveUrlToSession) return;
try { sessionStorage.setItem(key, value); } catch (e) {}
}

// URL helper
function getUrlParam(paramName) {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get(paramName);
}

// DOM helper
function setFieldValue(el, value) {
if (!el) return;
el.value = value;
el.dispatchEvent(new Event('input', { bubbles: true }));
el.dispatchEvent(new Event('change', { bubbles: true }));
}

// Core: check session first, then URL
function populateKey(paramName, selector) {
const el = document.querySelector(selector);
const sessVal = safeSessionGet(paramName);
if (sessVal !== null && sessVal !== '') {
setFieldValue(el, sessVal);
return;
}
const urlVal = getUrlParam(paramName);
if (urlVal !== null && urlVal !== '') {
setFieldValue(el, urlVal);
safeSessionSet(paramName, urlVal);
}
}

// Populate all configured fields
function populateHiddenFields() {
Object.keys(fieldMap).forEach(paramName => {
populateKey(paramName, fieldMap[paramName]);
});
}

// Init
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', populateHiddenFields);
} else {
populateHiddenFields();
}
window.populateHiddenFields = populateHiddenFields;
})();
</script>

<script>
document.addEventListener('DOMContentLoaded', function() {
// Function to get URL parameters
function getUrlParam(paramName) {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get(paramName);
}

// Get the utm_source value
const utmSource = getUrlParam('utm_source');
const utmMedium = getUrlParam('utm_medium'); // Also get others
const utmCampaign = getUrlParam('utm_campaign');
const utmContent = getUrlParam('utm_content');

// --- Method 1: Direct Assignment (if form fields exist) ---
// Find your form fields by name/ID and set their value
const sourceField = document.querySelector('input[name="1097612_221968pi_1097612_221968"]'); // Adjust selector
if (sourceField && utmSource) {
sourceField.value = utmSource;
}
const mediumField = document.querySelector('input[name="1097612_221965pi_1097612_221965"]'); // Adjust selector
if (mediumField && utmMedium) {
mediumField.value = utmMedium;
}
const campaignField = document.querySelector('input[name="1097612_221959pi_1097612_221959"]'); // Adjust selector
if (campaignField && utmCampaign) {
campaignField.value = utmCampaign;
}
const contentField = document.querySelector('input[name="1097612_221962pi_1097612_221962"]'); // Adjust selector
if (contentField && utmContent) {
contentField.value = utmContent;
}
// Repeat for medium, campaign, etc.

// --- Method 2: Store in Session Storage (Recommended for multi-page) ---
// This keeps data across page views before form submission
if (utmSource) {
sessionStorage.setItem('utm_source', utmSource);
}
if (utmMedium) {
sessionStorage.setItem('utm_medium', utmMedium);
}
if (utmCampaign) {
sessionStorage.setItem('utm_campaign', utmCampaign);
}
if (utmContent) {
sessionStorage.setItem('utm_content', utmContent);
}
});

// Function to populate form on any page load (using session storage)
function populateHiddenFields() {
const utm_source = sessionStorage.getItem('utm_source');
const utm_medium = sessionStorage.getItem('utm_medium');
const utm_campaign = sessionStorage.getItem('utm_campaign');
const utm_content = sessionStorage.getItem('utm_content');

const sourceInput = document.querySelector('input[name="1097612_221968pi_1097612_221968"]');
if (sourceInput && utm_source) {
sourceInput.value = utm_source;
}
const mediumInput = document.querySelector('input[name="1097612_221965pi_1097612_221965"]');
if (mediumInput && utm_medium) {
mediumInput.value = utm_medium;
}
const campaignInput = document.querySelector('input[name="1097612_221959pi_1097612_221959"]');
if (campaignInput && utm_campaign) {
campaignInput.value = utm_campaign;
}
const contentInput = document.querySelector('input[name="1097612_221962pi_1097612_221962"]');
if (contentInput && utm_content) {
contentInput.value = utm_content;
}
}

// Run this when the form loads on the *final* page (e.g., the form page itself)
// Call populateHiddenFields(); when your form element is ready or on DOMContentLoaded again.
</script>