A consultant logged 40 approved hours last month. The hours sit in a Zoho timesheet, and her bill rate sits in a finance spreadsheet. Half of that work has already gone out on an invoice. Now you are switching to Juntrax, so someone has to prove that each of those hours is billed once, at the right rate, to the right project.
Moving from spreadsheets or Zoho to Juntrax without losing data comes down to that proof. The records need to arrive, and so do the links between them. This guide walks you through seven steps, a worked reconciliation, and the tests that tell you the move is safe.
The Short Answer
To move from spreadsheets or Zoho to Juntrax without losing data, carry each record across with its relationships intact and test those relationships before go-live. In practice, that means seven steps:
- Decide what moves live, what opens as a balance, and what gets archived.
- Build a record inventory with one owner per record type.
- Clean the data that would break the project-to-invoice trail.
- Load records into Juntrax in dependency order.
- Pilot one difficult project from start to finish.
- Reconcile with tests that have clear pass conditions.
- Cut over on a set date, with the old sources locked read-only.
The rest of this guide explains each step and shows what a passing reconciliation looks like.
What “Without Losing Data” Means for a Services Firm
For a project-based firm, data is lost when a link breaks, even if every row arrives. An employee and a project can both exist in the new system. Yet if the assignment between them is missing, or the rate on the work date is wrong, your project margin stops being trustworthy.
It helps to picture the chain your records form. A client issues a PO. The PO funds a project. People are assigned to the project with a pay rate and a bill rate. Their approved hours create cost and billable value. Invoices draw down the PO, and payments close the receivables. Each link in that chain is a place where a migration can quietly drop money.
Most firms also do not need every historical row in the live system. Sort your data into four groups instead:
- Live operational data: Active people, clients, vendors, open projects, current assignments, and rates in force today.
- Opening balances: Approved but unbilled hours, open invoices, unpaid amounts, and remaining PO value as of the cutover date.
- Reference history: Closed projects or past timesheets you still report on, which you load only if the new system needs them for a live calculation.
- Archive: Everything you must be able to produce but will not operate on, kept read-only with an audit trail.
Before you export a single file, agree on what must still be true after the move. A useful checklist has five lines. Every active person and project is present. Approved unbilled hours are identifiable. Rates are tied to the dates they applied. Open invoices and PO balances match your accounting records. Historical files remain retrievable.
Spreadsheets vs Zoho: How Your Starting Point Changes the Move
The destination is the same either way, but the risk sits in different places. The table below starts from the Juntrax record you are building and shows what each source path needs you to check.
| Juntrax destination | If you are moving from spreadsheets | If you are moving from Zoho |
| Entities, departments, and people | Find the one authoritative employee file and settle IDs, entities, and status | Export Zoho People records and check which fields your team filled in |
| Clients, vendors, and projects | Resolve duplicate client names and inconsistent project codes | Inventory Zoho Projects records and how each links to Zoho People and Zoho Books |
| Team assignments and rates | Rebuild rate history from increment files and rate cards | Confirm which app held pay and bill rates, since that is often a separate sheet |
| Timesheets | Separate approved hours from drafts that were never signed off | Export time logs and check whether approval status came through |
| POs, invoices, and expenses | Reconcile against your ledger, since sheets drift from the books | Reconcile Zoho Books transactions against the project records |
| Documents | Collect files from shared drives and inboxes | Export attachments app by app |
If You Are Moving From Spreadsheets
Spreadsheets hold values without enforcing relationships. A timesheet row can name a project that no longer exists, and a rate cell can be overwritten with no record of the old value. As a result, the hardest part of a spreadsheet move is working out what your data says before you decide where it goes. For the people side of this work, including service dates and payroll history, our HRIS migration guide covers the details. This guide focuses on the project, time, and billing side.
If You Are Moving From Zoho
Zoho apps can share data, and Zoho documents several integrations between People, Projects, and Books. Even so, each app keeps its own records, and the sync rules have limits that matter during a move. According to Zoho’s own help documentation:
- When Zoho People imports from Zoho Projects, an admin pulls every project in the portal, while a non-admin pulls only the projects they belong to.
- Deleting a project or task in Zoho Projects does not remove it from Zoho People.
- Task lists and subtasks from Zoho Projects are not imported into Zoho People.
- In Zoho Projects, the approval status filter on time logs is available only on the Premium and Enterprise plans.
- If a Projects and Books integration is disabled after syncing, the synced projects and their time logs stay in Zoho Books as native records.
In practice, the same project can exist in two or three apps with slightly different histories. So your first job is deciding which app owns each record. Zoho Projects can export tasks and time logs to XLS or CSV, which gives you workable source files once that decision is made. If you are still weighing the switch itself, our Juntrax vs Zoho Projects and Zoho People comparison covers the buying decision.
7 Steps to Move Your Data Into Juntrax
1. Decide What Moves, What Opens as a Balance, and What Gets Archived
Start with one question for every dataset: does anything Juntrax calculates depend on this? If yes, it moves. If a client, auditor, or regulator could ask for it but nothing depends on it, archive it. If neither applies, retire it with a documented sign-off.
Most services firms land in a similar place. Open projects move with their full detail. Closed projects move as summaries, or not at all. Approved unbilled hours move as an opening position, because they are future revenue. Older timesheets usually go to the archive.
2. Build a Record Inventory With One Owner per Record
Next, list every source before you map anything. That includes the obvious files and the quiet ones, such as a project manager’s personal rate tracker or a finance workbook of PO balances.
A simple inventory has these columns:
| Column | What to record |
| Source | The app, file, or folder |
| Record type | Employee, client, project, rate, timesheet, PO, invoice, expense |
| Owner | The one person who decides when sources disagree |
| Record count | So you can check totals after the load |
| Unique ID | The field that identifies each record without relying on names |
| Depends on | The records that must exist first |
| History rule | Move live, open as balance, or archive |
| Validation owner | Who signs off that the loaded data is right |
The owner column matters most. When the project file says a consultant started on 3 March and the PO file says 1 March, somebody needs the authority to pick one and log why.
3. Clean the Data That Breaks the Project-to-Invoice Trail
Clean at the source, then export again. If you only fix the exported file, the next export brings the error back. The problems below cause the most damage in a services migration, so check each one before the first trial load.
| Problem | What goes wrong | How to check |
| Duplicate people or clients | Hours land on the wrong identity | Match on stable IDs, never on display names alone |
| Similar project names across entities | Costs attach to the wrong project | Confirm entity, client, and project code together |
| Rates with no start date or currency | Hours get valued at the wrong rate | Rebuild each rate as a dated record in one currency |
| Draft and approved time mixed | Unapproved hours get billed | Keep approval status as a field and filter on it |
| Paid and unpaid invoices mixed | Receivables are overstated | Tie every invoice status to your accounting records |
| Missing credit notes and adjustments | Balances refuse to tie out | Include them in the opening balance check |
Rates deserve extra care. If a consultant’s bill rate changed partway through a project, work logged before the change must stay at the old rate. Our glossary entry on billing rate vs cost rate covers the difference between the two numbers you will be carrying.
4. Load Records Into Juntrax in Dependency Order
Juntrax is project-centric. Projects sit under a client, and costs, hours, and invoices all attach to a project. That structure sets the load order, because each record needs its parent to exist first.
- Entities and structure: Legal entities, departments, holiday calendars, and entity bank details used on invoices.
- People: Employee records, roles, and reporting lines.
- Clients and vendors: Keep the two lists separate, because projects are created under clients, while vendors appear on expenses.
- Items and services: The line items you bill and buy.
- Projects: Each with its client, managers, planned hours, and received POs.
- Team assignments: Project roles, billable status, pay rate, and bill rate for each person, including any location-specific bill rates.
- Tasks: Task lists, estimates, and milestones.
- Timesheets and costs: Approved hours, vendor expenses, and employee reimbursements, each tagged to its project.
- Invoices and receivables: Open invoices and amounts still due.
One detail from the product is worth planning for. In Juntrax, each timesheet line is a unique combination of project and task for a given day. Duplicate lines in a source sheet therefore need merging before you load them. Whether Juntrax’s team handles the load or you do, confirm the file format for each record type first. Juntrax quotes data migration separately and up front, based on the volume and format of your data, as its pricing page explains.
5. Pilot One Difficult Project From Start to Finish
Choose a pilot that will expose problems. The ideal project has at least two people, one rate change, some approved and some unapproved time, a vendor expense, a PO, and an invoice that is partly paid. An easy project will pass every test and teach you nothing.
Load only that project and its dependencies, then run these checks in order:
- People, client, entity, project, and team assignments are all present.
- Planned hours and logged hours match the source.
- Each hour is valued at the rate that applied on its work date.
- Approved billable time matches the source, and draft time is excluded.
- PO value, invoiced value, unpaid amount, and project cost all agree.
- Every mismatch has an owner and a written resolution.
6. Reconcile With Tests That Have Pass Conditions
Reviewing data until it looks right leaves errors in place. Use checks with written pass conditions instead, so each one can be signed off.
| Check | Method | Pass condition |
| Active records | Count people, clients, and open projects in source and Juntrax | Exact match, with any difference explained by name |
| Team assignments | Compare people per project | Every assignment present, with its billable status |
| Rate history | Spot-check ten people whose rates changed | Each hour valued at the rate in force on its date |
| Approved unbilled hours | Sum by project in both systems | Exact match per project, not only in total |
| Open receivables | Sum unpaid invoices | Matches your accounting records, not the spreadsheet |
| PO balances | PO value minus invoiced value, per PO | Matches the signed PO and the invoice register |
| Project cost | Payroll cost plus expenses plus reimbursements, per project | Explained variance only |
| Documents | Count files not linked to a record | Zero, or an approved list |
Run every test twice: once after the trial load, and again after the first live billing cycle. A clean load can still be broken by configuration, and the second run catches that.
7. Cut Over Without Creating Two Versions of the Truth
Pick a cutover date and freeze changes in the old sources from that point. Then capture anything that changed between your trial extract and the final one, and load it as a final pass.
After go-live, lock the spreadsheets and Zoho apps as read-only rather than deleting them. Keep them available through at least one full billing cycle. Run your first timesheet approval and invoice cycle in Juntrax while checking the results against the old records. Agree in advance what would make you pause, such as an invoice total that disagrees with the source, and who makes that call. For the HR and payroll side of cutover, our HRIS implementation plan sets out a phased rollout with exit criteria.
A Worked Example: Reconciling One Project Before Cutover
Here is what step six looks like on a single project. The figures are illustrative, but the checks are the ones to run.
The project has a PO worth ₹5,00,000. Two consultants have worked on it:
| Consultant | Approved hours | Rate applied | Billable value |
| Consultant A, before the rate change | 80 | ₹2,000 per hour | ₹1,60,000 |
| Consultant A, after the rate change | 40 | ₹2,400 per hour | ₹96,000 |
| Consultant B | 60 | ₹1,500 per hour | ₹90,000 |
| Total approved billable value | 180 | ₹3,46,000 |
Invoices raised so far total ₹2,00,000, and the client has paid ₹1,20,000. Consultant B also has 10 hours in draft that were never approved.
After loading, Juntrax should show:
- Approved unbilled value: ₹1,46,000, which is ₹3,46,000 minus ₹2,00,000 invoiced.
- Open receivable: ₹80,000, which is ₹2,00,000 invoiced minus ₹1,20,000 paid.
- Remaining PO balance: ₹3,00,000, which is ₹5,00,000 minus ₹2,00,000 invoiced.
- Draft hours: Visible as unapproved and excluded from billing.
Now suppose the migration carried only Consultant A’s current rate. All 120 of her hours would be valued at ₹2,400, giving ₹2,88,000 instead of ₹2,56,000. The project would look ₹32,000 more valuable than it is, and nothing in the load would flag it. Only a dated rate check catches it. That gap is also a common source of revenue leakage in reverse, where the numbers look healthier than the contract allows.
Where Juntrax Fits Once Your Data Is In
Once your data is in, the value of the move shows up in how the records work together. Juntrax runs HRMS, PSA, and Cash-Flow on one platform built for professional services firms of roughly 25 to 150 people. It works alongside your accounting system, whether that is Tally, QuickBooks, Xero, or SAP, rather than replacing your ledger.
For a firm coming from spreadsheets or separate apps, a few features change day-to-day work the most:
- Projects hold the commercial picture: Each project sits under a client with its planned hours and received POs. The project summary shows unallocated hours, which are planned hours minus the hours already assigned to tasks.
- Rates live on the team: Project managers set a pay rate and a bill rate for each team member, including different bill rates by work location. Custom roles then control who can see financials.
- Costs attach to the project: Timesheets are filled against a project and task, so payroll cost per project comes from logged hours and each person’s hourly rate. Vendor expenses and employee reimbursements can be tagged to the same project.
- The financial dashboard reconciles itself: The project dashboard shows total PO value, amount invoiced, pending and overdue invoices, remaining billing, and net P&L. It also shows bill, pay, and estimated margin for each team member.
- Multi-entity setups stay in one account: Each entity can carry its own departments, holiday calendars, and bank details for invoicing.
The move itself is supported. Onboarding and implementation support are included in every plan, and firms with 25 or more users get a live onboarding session with an implementation specialist. According to the pricing page, most firms go live within two to four weeks, while multi-entity or multi-currency setups usually take four to six. Data preparation in your old sources sits outside that clock, so start the inventory early.
Source Engineering Services followed this path. The firm ran HR, timesheets, and invoicing on separate spreadsheets across the United States, the Netherlands, and India. It then moved onto Juntrax in phases, starting with HRMS and then timesheets, and invoices are now generated from approved timesheets. You can read how that played out in the Source Engineering case study.
Walk through your project data in Juntrax with our team
Mistakes That Lose Data During a Move
A few errors cause most of the damage, and each has a simple fix.
- Migrating current rates instead of dated rates: This silently re-prices past work, as the worked example shows. Carry each rate with the dates it applied.
- Letting two apps own the same record: If Zoho People and Zoho Projects both hold a project, choose one as the source before export.
- Loading timesheets before assignments: Hours need a project, a task, and a team member to land on. Follow the dependency order.
- Treating approval status as optional: Without it, draft hours can reach an invoice. Keep the status field in every time export.
- Cleaning the export instead of the source: The error returns with the next extract. Fix it where it lives.
- Deleting old sources on go-live day: Lock them read-only instead. Go-live week is when you are most likely to need them.
Making the Move Without Losing Data
Moving from spreadsheets or Zoho to Juntrax without losing data is mostly careful preparation. Decide what moves, give every record an owner, clean at the source, load in order, and test one hard project before you trust the rest. After that, the reconciliation tests tell you whether the move worked, and the answer comes from numbers you can sign.
The firms that do this well also keep one question in view, the one from the start of this guide: can you prove each approved hour is billed once, at the right rate, to the right project? If your pilot answers yes, you are ready to cut over. When cost comes up in that decision, you can compare Juntrax plans on the pricing page.
Compare HRMS, PSA, and Integrated plans per user
Frequently Asked Questions
Can We Move From Zoho to Juntrax Without Losing Historical Data?
Yes, if you decide record by record what moves live, what opens as a balance, and what goes to a read-only archive. The risk sits in the links between records, so test team assignments, dated rates, and invoice balances after loading. Juntrax scopes and quotes data migration up front based on the volume and format of your data.
Do We Need to Import Every Old Timesheet?
Usually not. Import timesheets for open projects and any approved hours that are not yet billed, because those drive live billing. Closed projects can move as summaries or stay in an archive you can still search.
What Should We Reconcile Before the First Invoice in Juntrax?
Check approved unbilled hours per project, the rate applied to each hour, PO balances, prior invoices, open receivables, and client billing details. Compare receivables and PO balances against your accounting records rather than your old spreadsheets.
Can We Keep Our Existing Accounting System?
Yes. Juntrax works alongside accounting systems such as Tally, QuickBooks, Xero, and SAP. It runs projects, time, invoicing, and receivables, while your accountant keeps working in the ledger they already use.
How Long Does a Move to Juntrax Take?
Juntrax’s pricing page says most firms go live within two to four weeks, and firms with complex multi-entity or multi-currency setups usually take four to six. The time you spend inventorying and cleaning your old data comes first and depends on its condition.
Should Our Team or the Vendor Run the Migration?
Most firms split the work. The vendor can handle the technical load. Your team should own the business decisions, such as which source wins when records disagree and who signs off each test. Those calls need context that only your firm has.
