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"; });