Job Costing & Billing Coordinator (Roofing) — Roofr, QuickBooks, AR

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

TYPE OF WORK

Full Time

SALARY

$4/Hour

HOURS PER WEEK

40

DATE UPDATED

Sep 23, 2026

JOB OVERVIEW

ABOUT THE ROLE

Simply Roofing is a US-based residential and commercial roofing company (Arizona & Texas). We're hiring a Job Costing & Billing Coordinator to own the money side of our jobs: what each job actually cost us, what we billed the customer, and what we've collected.

This is a numbers seat, not a general VA seat. If you are not comfortable auditing an invoice line by line and telling us when a number is wrong, this is not the role for you.

READ THIS FIRST: You must have prior experience with job costing, invoicing, or accounts receivable — ideally in construction, roofing, or another trade. Experience with a construction CRM (Roofr, JobNimbus, AccuLynx, Buildertrend) and QuickBooks is strongly preferred. We are not looking to train someone from scratch on how job costing works.

WHAT YOU'LL OWN

1) JOB COSTING IN ROOFR
- Post true material and labor cost to every job in Roofr — all costing lives in the CRM, not in side spreadsheets
- Make sure no job closes without its full cost picture attached

2) MATERIAL & LABOR INVOICE AUDITING
- Audit supplier invoices (Home Depot, RWC, QXO) against the purchase order, the roof measurements, and the signed proposal
- Audit weekly crew/subcontractor labor invoices against our rate card and measurements
- Catch over-billing: inflated square counts, delivery charges over cap, extra trips, duplicate billing, unexplained line items
- Document discrepancies and escalate them — you flag, the owner d ----------

3) CUSTOMER INVOICING & ACCOUNTS RECEIVABLE
- Invoice completed jobs at the correct stage, built from the signed contract plus approved change orders
- Monitor the shared accounts inbox for customer payments, rep-deposited checks, and CRM payment notifications
- Maintain the AR tracker; run a weekly aging review and follow up on anything 7+ days past due
- Close invoices only once the deposit is independently confirmed against the bank/QuickBooks record

4) WEEKLY COMMISSION SHEETS
- Every Monday, build rep commission sheets from jobs that are completed AND confirmed fully paid
- Submit to the owner for approval before any payout

5) STAGE MANAGEMENT IN ROOFR
- Move every job through the pipeline as it progresses — Sold → Supplementing → Pre-Production → Production → Post Production → Invoiced → Paid & Closed
- A stage that doesn't match reality breaks costing, invoicing, and commissions at once. Keeping the board honest is part of the job.

WHAT WE'RE LOOKING FOR
- Prior job costing, AR, bookkeeping, or invoice auditing experience (construction/roofing preferred)
- Comfortable in QuickBooks and a construction CRM
- Strong spreadsheet skills
- Genuinely detail-oriented — you notice when a number is $400 off and you say something
- Clear written English; you'll email the owner daily and follow up with US customers
- Reliable internet and availability during Arizona morning hours

WHAT WE PROVIDE
- Written SOPs and an audit workbook for every task
- Training on our specific process, rate card, and CRM setup
- Direct access to the owner

HOW TO APPLY

Start your application with the word RECONCILE so we know you read this far. Then answer these three questions:

1. Describe a time you caught a billing or invoice error. What was wrong, how did you find it, and what did you do about it?
2. Which CRM and accounting software have you used, and for how long?
3. A crew invoices you for 32 squares. The measurement report says 27 squares. What do you do?

Applications without the keyword or without answers to all three questions will not be reviewed.

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0010
Controller Execution Time ( Jobseekers / Job )  0.0184
Total Execution Time  0.0201
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,501,560 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Job-Costing-Billing-Coordinator-Roofing-Roofr-QuickBooks-AR-1736803
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0113 seconds)  (Hide)
0.0016   SELECT *
                                
FROM exrates
                                WHERE rate_name 
= 'USD-PHP' 
0.0013   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1736803
 LIMIT 1 
0.0010   SELECT *
FROM `employers`
WHERE `employer_id` = 811617
 LIMIT 1 
0.0008   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `misc` ON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1736803
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 = '1736803' 
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1736803 
0.0015   UPDATE employer_jobs SET hit_counts = '***Sep-23-2026=496***Sep-24-2026=128***Sep-25-2026=41***Sep-26-2026=26***Sep-27-2026=14***Sep-28-2026=24***Sep-29-2026=20***Sep-30-2026=13***Oct-01-2026=3***Oct-02-2026=1***Oct-03-2026=2***Oct-04-2026=1' WHERE job_id= '1736803'  
0.0007   UPDATE employer_jobs SET monthly_hits = '***Sep-2026=760***Oct-2026=7' WHERE job_id= '1736803'  
0.0007   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id = '' AND job_id = '1736803' AND status LIKE 'sent%' ORDER BY id DESC  
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1736803 
0.0020   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '811617'
AND `date_added` >= '2022-06-08' 
0.0003   select * from teasers 
0.0003   SELECT * FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)