Post Job Free
Sign in

Controller

Company:
Creative Financial Staffing
Location:
Columbus, OH, 43215
Posted:
February 17, 2026
Apply

Description:

a { text-decoration: none; color: #464feb; } tr th, tr td { border: 1px solid #e6e6e6; } tr th { background-color: #f5f5f5; } Controller Columbus, OH - Full-Time Fully Onsite

Salary: $80,000-$100,000 An established, privately held company is seeking a Controller to support both their business interests and their family office. This is an opportunity for someone who enjoys hands-on accounting, wants to see the direct impact of their work, and values a healthy work-life balance (40 hours/week maximum). This person will receive broad exposure to both business accounting and family financial management. This role is fully onsite in Columbus, Ohio.

Key Responsibilities of the Controller:

Oversee general ledger management and all core accounting functions

Lead month-end close and reconcile all balance sheet accounts

Prepare and analyze annual financial statements for ownership

Supervise accounts payable, accounts receivable, and billing processes

Conduct project analysis and variance reporting

Collaborate with an external CPA firm on annual tax filings

Assist with development of annual operating and capital budgets

Support family financial and wealth-related activities, including:

Portfolio reporting

Year-end tax preparation

Charitable contribution coordination

Additional family financial tasks as needed Qualifications of the Controller:

Bachelor's degree in Accounting, Finance, or related field required

Several years of experience as a Controller, senior-level accounting professional, or well-rounded Bookkeeper

Interest in hands-on day-to-day accounting work

Experience within financial services is a strong plus

Proficiency with QuickBooks Desktop is required #INFEB2026

#LI-LC1

#LI-Onsite

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