Accounts Payable Administrator
Westerville, OH
Full-Time Onsite
Salary: $55,000 - $60,000 About the Role: Are you an organized, detail-loving professional with a passion for numbers and service? Join a growing, family-oriented company as an Accounts Payable Administrator and bring your AP expertise to a team that values accuracy, accountability, and customer care. We offer a comprehensive benefits package including Medical, Dental, Vision, and Profit Sharing, Generous PTO and paid holidays, and a close-knit, collaborative team environment.Responsibilities of the Accounts Payable Administrator:
Process 10-50 invoices per day as part of full-cycle accounts payable
Manage vendor relationships and coordinate timely ACH payments
Prepare weekly check runs and reconcile transactions to the General Ledger
Monitor and report on daily cash flow
Handle incoming phone calls and emails from vendors and customers
Enter service call details into the dispatch system to support technician scheduling Preferred Qualifications of the Accounts Payable Administrator:
High School diploma or equivalent required
Proficiency in QuickBooks Desktop strongly preferred
Solid Excel skills, including pivot tables and VLOOKUPs
Excellent communication and multitasking abilities
Must be a non-smoker 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"; });