Top Down CPM works across North America, with expertise in implementation, optimization, and close management. We're Planful-dedicated, finance-first, and built to deliver measurable value at every engagement.
Get in touch with us.
Whether you're looking to maximize your Planful investment or build your career with us, we're here to help. Share what's on your mind—we'll take it from there.
Exploring a Planful partnership or a career with us? Tell us what you're looking for and we'll be in touch within 24 hours.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
(function () {
var CLEARSITE_SLUG = 'top-down-cpm';
var CLEARSITE_KEY = 'cs_live_a3bc43526370d754b9b70b00c1d16a8d';
var CS_ENDPOINT = 'https://getclearsite.com/api/v1/sites/' + CLEARSITE_SLUG + '/forms/contact';
function getUTM() {
var params = new URLSearchParams(window.location.search);
var utm = {};
if (params.get('utm_source')) utm.utm_source = params.get('utm_source');
if (params.get('utm_medium')) utm.utm_medium = params.get('utm_medium');
if (params.get('utm_campaign')) utm.utm_campaign = params.get('utm_campaign');
return utm;
}
function getVal(form, label) {
var hyphenated = label.replace(/\s+/g, '-');
var el = form.querySelector('[name="' + label + '"]') ||
form.querySelector('[name="' + hyphenated + '"]');
return el ? el.value.trim() : '';
}
function getValStartsWith(form, prefix) {
var el = form.querySelector('[name^="' + prefix + '"]');
return el ? el.value.trim() : '';
}
function handleSubmit(e) {
var form = e.target;
var firstName = getVal(form, 'First name');
var lastName = getVal(form, 'Last name');
var company = getVal(form, 'Company name');
var role = getVal(form, 'Your role');
var level = getValStartsWith(form, 'Job');
var extra = getValStartsWith(form, 'Anything');
var messageParts = [];
if (company) messageParts.push('Company: ' + company);
if (role) messageParts.push('Role: ' + role);
if (level) messageParts.push('Job Level: ' + level);
if (extra) messageParts.push(extra);
var data = Object.assign({
name: (firstName + ' ' + lastName).trim(),
email: getVal(form, 'Email address'),
phone: getVal(form, 'Phone'),
subject: getValStartsWith(form, 'What'),
message: messageParts.join('\n') || '(no message)',
}, getUTM());
// Fire and forget — let Webflow handle its own submission normally
fetch(CS_ENDPOINT, {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-API-Key': CLEARSITE_KEY },
body: JSON.stringify(data),
}).catch(function (err) {
console.error('[ClearSite]', err);
});
}
function init() {
document.querySelectorAll('.w-form form').forEach(function (form) {
form.addEventListener('submit', handleSubmit);
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();