ACCOUNTS PAYABLE CLERK
Columbus Onsite $21/hr Client in the commercial construction space is seeking an Accounts Payable Clerk to assist with invoice processing and vendor coordination ABOUT OUR CLIENT
Well-established project-driven organization providing solutions to commercial customers
Known for long-term partnerships, reliability, and responsive service
Operates with lean internal teams that wear multiple hats
Tech-forward environment that embraces smarter workflows and efficient tools
Opportunity to work directly with leaders and gain hands-on training in modern financial systems RESPONSIBILITIES OF THE ACCOUNTS PAYABLE CLERK:
The Accounts Payable Clerk will process 60-70 invoices per month and ensure all are entered accurately
The Accounts Payable Clerk will attach lien waivers and submit payments to maintain compliance with general contractors
Communicate with vendors and project managers to resolve billing questions
Reconcile approximately company credit cards each month
Provide light office support PREFERRED QUALIFICATIONS FOR THE ACCOUNTS PAYABLE CLERK
1-2 years of accounts payable experience required
Experience with Sage is a plus, not a must
Construction industry background is a plus, not a must
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"; });