Post Job Free
Sign in

Bookkeeper

Company:
Creative Financial Staffing
Location:
Columbus, OH, 43202
Posted:
February 21, 2026
Apply

Description:

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

$50,000-$60,000 per year

Full-Time Job Description This is a fully onsite role focused on supporting accounting operations across multiple managed properties. The ideal candidate has property management bookkeeping experience and enjoys working in a structured, team-oriented environment. Responsibilities

Perform daily bookkeeping for multiple properties

Manage accounts payable and accounts receivable

Track rent collections, tenant balances, late fees, and credits

Process vendor invoices and payments

Reconcile bank accounts, trust accounts, and property ledgers

Prepare monthly owner statements and distributions

Maintain accurate security deposit and escrow records

Assist with month-end close and financial reporting

Work with property managers to resolve accounting issues

Ensure compliance with trust accounting standards Qualifications

2+ years of bookkeeping or accounting experience in property management

Knowledge of trust accounting and owner/tenant accounting

Experience reconciling multiple bank and trust accounts

AppFolio or similar property management software experience preferred #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