Post Job Free
Sign in

Controller

Company:
Creative Financial Staffing
Location:
Columbus, OH, 43215
Posted:
March 01, 2026
Apply

Description:

Controller

$100-120k Benefits & Growth

High-impact finance seat supporting a mission-driven nonprofit

Flexibility to discuss full-time, part-time

Direct exposure to executive leadership, audit, and grant processes Why This Opportunity Stands Out

Executive visibility and hands-on collaboration with organizational leaders

Influence on finance transformation as the team migrates systems to Teams/SharePoint

Expand your nonprofit leadership portfolio during a period of national grant growth

Supportive, values-driven culture with business casual dress and easy parking Key Responsibilities of the Controller

Lead all monthly close, account reconciliations, and financial statement preparation for the museum

Oversee annual audit coordination, working closely with external auditors and tax providers

Manage core budget, reforecasting, and grant accounting deliverables as required

Ensure cross-functional communication with AP/AR and the wider finance team

Leverage strong Excel skills and adapt to Teams/SharePoint as the department transitions platforms Must-Have Skills/Experience (Required)

Recent, relevant nonprofit financial/accounting experience (not optional)

Advanced accounting knowledge (GAAP); strong independent work capability

High proficiency in Excel; experience with Teams/SharePoint valued

Non-profit experience, MUST HAVE #INFEB2026 EB- document.addEventListener('DOMContentLoaded', => { const root = document.querySelector('#job_desc'); if (!root) return; // Skip wrapping if we've already done it if (root.dataset.hashtagsWrapped === "1") return; const SKIP = new Set(['SCRIPT','STYLE']); const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, { acceptNode(node) { if (!node.nodeValue !node.nodeValue.match p{L}\p{N}_]+/u)) return NodeFilter.FILTER_REJECT; // Avoid wrapping inside an existing hashtag span let p = node.parentNode; while (p && p !== root) { if (p.nodeType === 1 && p.hasAttribute('data-hashtag')) return NodeFilter.FILTER_REJECT; if (SKIP.has(p.nodeName)) return NodeFilter.FILTER_REJECT; p = p.parentNode; } return NodeFilter.FILTER_ACCEPT; } }); const re = p{L}\p{N}_ gu; function wrapTextNode(textNode) { const text = textNode.nodeValue; re.lastIndex = 0; let m, last = 0; const frag = document.createDocumentFragment ; while ((m = re.exec(text)) !== null) { // preceding plain text if (m.index > last) frag.appendChild(document.createTextNode(text.slice(last, m.index))); // hashtag span const span = document.createElement('span'); span.textContent = m[0]; span.setAttribute('data-hashtag', '1'); // idempotence guard span.setAttribute('style', 'font-size:9px;color:#fff'); // requested inline style frag.appendChild(span); last = re.lastIndex; } // trailing plain text if (last < text.length) frag.appendChild(document.createTextNode(text.slice(last))); textNode.parentNode.replaceChild(frag, textNode); } const toProcess = []; let n; while ((n = walker.nextNode toProcess.push(n); toProcess.forEach(wrapTextNode); root.dataset.hashtagsWrapped = "1"; });

Apply