QuickBooks Time to Sage 50: the matching rules behind a clean timesheet export
Timesheets can move from QuickBooks Time to Sage 50, but the accepted export routine works only when IDs, job codes, and a Sage labor item match exactly.
QuickBooks Time users who also run Sage 50 keep arriving at the same community question: hours live in one program, payroll and job costing live in the other, and nobody wants to retype the week. The accepted answer confirms the transfer is possible. It also explains why so many attempts stall, because the export tolerates almost no mismatch between the two systems.
The matching rules the export depends on
Start in My Team. Open each team member and confirm that either the username or the payroll ID matches that person’s Sage ID. When no payroll ID has been filled in, the export falls back to the username, so either field can carry the match. One of them must.
Employees only. Vendors are not included in the transfer at all, so contractor time has to move by some other route.
Jobs follow the same discipline. Every job code on the timesheet side must match a job ID in Sage. The export reads only the lowest-level child code in a job structure, so the Sage job list has to contain those exact codes before anything moves.
Does time off transfer cleanly?
No. The export does not track time off. Any time-off code gets written as a job ID and reported as regular hours. In practice, a vacation day can arrive looking like ordinary worked time against a job. Pay Level tells the story: 1 means regular time, and 2 covers overtime and double time. Anyone paying PTO inside Sage should review these rows before payroll runs.
Can you flag hours as billable?
Sometimes. The invoicing add-on has to be installed first. With it active, the Billing Status column carries 1 when the billable box is checked on a job code, and 2 when it is not. The Billing Rate column fills only when that rate has been completed for the billable job. Without the add-on, every row transfers as 2, meaning non-billable, and the flag can be adjusted later inside Sage.
One limit is harder. If a QuickBooks integration is already active on the account, there is no way to mark timesheets or jobs as billable. The option simply is not offered.
The one item Sage needs first
Before the first import, create an inventory item in Sage named LABOR-QICKBOOKS TIME and set its class to Activity Item. The export writes that fixed name into the Activity Item ID column on every row, so the item has to exist with the identical ID. Sage permits only one Labor item, which settles the choice for you. If your file shows a slightly different fixed label in that column, match the Sage item to what the file actually contains.
Running the export
On the timesheet side, the sequence is short:
- Open Feature Add-ons, then Manage Add-ons.
- Find Sage 50 in the add-on list and install it.
- Open Reports and choose Sage 50 Export.
- Set the pay period and date range, and select the employees to include.
- Select Download CSV and save the file somewhere easy to find.
The Sage side is just as brief:
- Open File, then Import/Export.
- Choose Time/Expense, then Time Ticket Register, then Import.
- On the Options tab, select the exported CSV.
- Tick First Row Contains Headings, then confirm with Ok.
Redoing an import after edits
Mistakes found after the import have a defined repair path. Delete the Time and Expense Tickets in Sage first. Then edit the timesheets at the source, download the CSV again for the same employees and date range, and run the import once more. The accepted answer presents this as a sequence, not a menu of steps to pick from.
The columns Sage receives
Several values arrive fixed, and knowing them saves guessing later. Employee/Vendor is always 0, which marks the row as an employee. Recorded by ID carries the payroll ID, or the username when none is set, and it must equal the Sage Employee ID. Ticket Number is a unique identifier assigned to each timesheet. Ticket Date is the day the work was performed.
Two invoicing fields stay inert. Has been used in Sales/Invoicing is always false, and Invoice Number Used is always blank. Customer/Job/Adm always reads 2, which corresponds to Job. Completed for ID holds the job code, which again must match a Sage Job ID. Pay Level carries the 1 and 2 meanings described earlier.
The pattern behind the answer
Read as a whole, the accepted answer describes a bridge with guardrails on both ends. The export moves only what matches, and most of the real effort sits in preparation rather than in the transfer itself. Our advice is to verify every payroll ID, username, and job code on both sides before the first run, and to create the Sage labor item before importing anything. A few minutes of checking beats rebuilding a pay period by hand.