careers at top down cpm

Build a career that ships value.

Join a team of finance practitioners and Planful experts doing the most impactful work of their careers — transforming how organizations plan, report, and close while building long-term client partnerships.
See Open Positions
See Open Positions
Join the top down cpm team
A team built on trust, expertise, and impact.
Join a team where finance experts solve complex FP&A challenges together—and build lasting partnerships along the way.
Five people standing in front of a purple screen with the Planful logo, dressed in business attire, smiling at the camera.
The Planful Experts
We're a high-trust team of finance experts delivering real outcomes.
Distributed across North America with senior consultants coast-to-coast.
Typography quote on a pink and orange gradient background stating, 'You always have time for the things you put first.'
2018
Founded by Experts in 2018
Top Down CPM was founded in 2018 as a cooperative of Planful experts dedicated to the successful and rapid enablement of Planful customers. We understand the investment required in both time and capital to deliver effective continuous planning. We are here to minimize the risk and ensure our customer's success.
Meet our Customers
Man in a checked blazer and glasses speaking on stage with a large screen behind him displaying the Planful logo.
Open Roles
Don't see a job that fits your skills?
Feel free to reach out to our team with your resume.
Contact our team
Contact our team
(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(); } })();