Post Job Free
Sign in

Controller

Company:
Creative Financial Staffing
Location:
Worthington, OH, 43085
Posted:
November 15, 2025
Apply

Description:

Controller

Columbus, OH$110k - $140k About the Role:

Our Client, a mission-driven non-profit organization, is seeking a strategic and detail-oriented Controller to lead its financial operations. This role is critical to ensuring fiscal responsibility, transparency, and compliance across all financial activities. The ideal candidate will bring a strong background in non-profit accounting and a passion for supporting impactful work. Key Responsibilities:

Oversee all accounting operations including general ledger, accounts payable/receivable, payroll, and grants management.

Prepare monthly, quarterly, and annual financial statements and reports.

Ensure compliance with GAAP, IRS regulations, and funder requirements.

Manage annual audit process and liaise with external auditors.

Develop and monitor internal controls and financial policies.

Support budgeting, forecasting, and financial planning efforts.

Provide financial insights and recommendations to executive leadership and the board.

Supervise and mentor accounting staff. Qualifications:

Bachelor's degree in Accounting, Finance, or related field (CPA preferred).

5+ years of progressive accounting experience, with at least 2 years in a non-profit setting.

Strong understanding of fund accounting and grant compliance.

Excellent analytical, organizational, and communication skills.

Commitment to the mission and values of the non-profit sector. What Our Client Offers:

A collaborative and mission-focused work environment.

Competitive salary and benefits package.

Opportunities for professional development and growth.

A chance to make a meaningful impact in the community. #ZRCFS 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