Bookkeeper Client in the property management industry is seeking a Bookkeeper to assist with day-to-day accounting support including payables, receivables, banking activity, and reconciliations across multiple entities. Salary is $50-$65k, DOE
ABOUT OUR CLIENT
Community-focused organization with a mission-driven culture
Supportive, team-oriented accounting environment
Operates across multiple locations and property portfolios
Values accuracy, consistency, and dependable accounting support
Offers stable hours and an opportunity to build long-term accounting experience as the Bookkeeper RESPONSIBILITIES OF THE BOOKKEEPER
The Bookkeeper will process accounts payable and vendor invoices
The Bookkeeper will record customer and tenant receipts and assist with statements
Prepare bank deposits and support routine bank reconciliations
Maintain organized accounting records and documentation
Assist the accounting team with month-end tasks and special projects as needed PREFERRED QUALIFICATIONS FOR THE BOOKKEEPER
Bookkeeping or accounting experience required
Experience with property management or accounting software is a plus
Strong attention to detail and accuracy required
Comfortable working with spreadsheets and basic accounting systems Salary is $50-$65k, DOE 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"; });