Senior Construction Accountant (QuickBooks Online, Job Costing, Catch-Up Work)

Please login or register as jobseeker to apply for this job.

TYPE OF WORK

Full Time

SALARY

$10 - $15/hr USD

HOURS PER WEEK

40

DATE UPDATED

Oct 3, 2026

JOB OVERVIEW

We're a US commercial landscape and irrigation contractor working in multiple states. We need a senior accountant who can take full ownership of our accounting with minimal supervision: bring our books current, keep them accurate, and build better financial systems as we grow. This is not an entry-level bookkeeping role.

Your first priority: our books are more than two years behind. You'll lead the catch-up: categorize and reconcile past bank and card activity, clean up AP and AR, fix job costing, and get everything ready for our CPA.

Ongoing responsibilities:
- Day-to-day bookkeeping, plus monthly bank and credit card reconciliations
- Accounts payable: entering vendor bills and scheduling payments
- Invoicing, progress billing, retainage tracking and collections follow-up
- Job costing by project, and reports that show job profitability
- Running payroll for seasonal crews (layoffs and rehires), including certified/prevailing-wage payroll on public jobs
- Working with our QuickBooks Payroll Elite team to keep payroll and payroll taxes compliant in every state we work in
- Multi-state sales and use tax
- Monthly financial statements, and year-end work with our CPA
- Advising on and setting up better processes, controls and reporting

Requirements:
- A degree in accounting or a related field
- 10+ years of hands-on accounting experience (10-20 years preferred), with construction or contractor clients (job costing, progress billing, retainage). E-commerce- or retail-only backgrounds will not be considered.
- At least one large catch-up/cleanup project
- Able to work independently, take ownership, and manage the accounting function without being micromanaged
- Strong QuickBooks Online skills (experience with QBO Advanced is a plus)
- Comfortable with Excel, Google Sheets/Drive, Outlook/Microsoft 365, Adobe Acrobat and bank portals; ---------- and AI tools (ChatGPT, Claude, Grok) are a plus
- At least 2-4 hours of overlap daily with US Mountain Time
- Clear written English and reliable internet

To apply, start with the word "RETAINAGE" and answer:
1. How many years have you worked as an accountant/bookkeeper, and how many of those were with construction or contractor clients? Name the types of contractors.
2. Describe the largest catch-up project you've done: how far behind were the books, and how did you approach it?
3. Tell us about a time job costs in QuickBooks didn't match what actually happened on a project. What was wrong, and how did you fix it?
4. Walk us through how you set up job costing for a contractor client in QuickBooks Online (projects, items, classes, or whatever you used), and why you set it up that way.
5. Have you run certified or prevailing-wage payroll? Which states?
6. What hours (in Philippine time) can you work, and are you looking for full-time or part-time?
7. What is your expected hourly rate in USD?

VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0010
Controller Execution Time ( Jobseekers / Job )  0.0153
Total Execution Time  0.0192
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,500,216 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Senior-Construction-Accountant-QuickBooks-Online-Job-Costing-Catch-Up-Work-1742842
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0079 seconds)  (Hide)
0.0012   SELECT *
                                
FROM exrates
                                WHERE rate_name 
= 'USD-PHP' 
0.0004   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1742842
 LIMIT 1 
0.0004   SELECT *
FROM `employers`
WHERE `employer_id` = 830317
 LIMIT 1 
0.0004   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `misc` ON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1742842
AND `misc`.`id` IS NULL 
0.0005   SELECT e.business_name, e.logo, e.website, e.rebill_date, e.date_added member_date, hits, DATEDIFF('2026-10-04',ej.date_added) duration_days, DATEDIFF('2026-10-04',e.rebill_date) duration_rebill, ej.*, e.deactivate FROM employers e, employer_jobs ej WHERE e.employer_id = ej.employer_id AND
                                   ((
e.user_level >= '500' AND ej.date_added <= e.rebill_date)
                                   OR 
e.employer_id = '' OR (ej.date_approved <> '2000-01-01' and DATEDIFF('2026-10-04',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != 1 AND ej.deleted = 0 AND job_id = '1742842' 
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1742842 
0.0018   UPDATE employer_jobs SET hit_counts = '***Oct-03-2026=1665***Oct-04-2026=1' WHERE job_id= '1742842'  
0.0007   UPDATE employer_jobs SET monthly_hits = '***Oct-2026=1665' WHERE job_id= '1742842'  
0.0003   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id = '' AND job_id = '1742842' AND status LIKE 'sent%' ORDER BY id DESC  
0.0004   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1742842 
0.0004   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '830317'
AND `date_added` >= '2022-06-08' 
0.0004   select * from teasers 
0.0004   SELECT * FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)