2026-10-26
Matching your Harvest project totals is a good start. Here's where imports still drift
On October 21, the developer of Feestead posted a free checker in r/HarvestApp for people moving off Harvest. You give it a Harvest time export and an export from the tool you moved to, and you get "a table per client and project: entry counts, total hours, billable hours and invoiced hours on both sides, with every mismatch flagged." It runs in your browser, and the files are never uploaded. The post is plain about its scope: "It compares totals per project, not individual entries, so it won't tell you which specific entry is missing. It will tell you where to look."
That's a fair description, and it's a check worth running. But a project row that matches is a sum that matches, and a sum can come out right while what's inside it moved. This post covers four places that happens in a Harvest import: whose hours they are, what they were worth, corrections below zero, and rounding. For each one, it says which Harvest number to check against.
What a project check compares
The checker's page asks for an "All company time CSV with Date, Client, Project, Task, Hours, Billable?, Invoiced?, First Name and Last Name." It also says "Task and person columns are not needed for project totals." And: "Client and project names are grouped without case or extra spaces; dates and people are not compared individually." Feestead's own Harvest import, the Reddit post says, "runs this same check automatically."
Billable? and Invoiced? are yes-or-no flags. They let the checker split hours into billable and invoiced. None of the columns it reads is an amount of money. So a matching row means this project has the same number of entries and the same hours, billable and invoiced included, on both sides, added up across every person and every year. Here's what can change inside that total.
1. Whose hours they are
A project total adds everyone's hours together. If an entry arrives on the wrong person, the project total doesn't move. That can happen when an importer matches people by name and two of them share one, or when someone who left has no account on the other side and their history lands on whoever ran the import.
The person matters wherever a rate is set per person, wherever a contractor is paid from their hours, and on any report of who worked on what. To check it, build a pivot over both exports from First Name and Last Name: a row per person, a column per year. Harvest's own time reports come in four groupings, by client, project, task and team, and the team report is the one that gives each person's name.
2. What the hours were worth
Billable hours that match aren't billable dollars that match. In Harvest, the rate sits on each entry. The API docs give every time entry a billable_rate: "The billable rate for the time entry." Rates change over an account's life: a raise, a new contract, a client kept on an old rate. An import that brings every hour across and then prices them all at one rate per person or project, today's, matches every hour on the checker and still moves the money.
Harvest gives you the number to check against. Every row of its time reports carries a billable amount, which the API docs describe as "The totaled billable amount for the billable hours above." Run the report by client and by team, total the same groups in the new tool, and compare the amounts to the cent. If the new tool can't give you an amount for the same group, you can't check the money, and that's worth knowing before you cancel.
3. Corrections below zero
Harvest accounts can carry corrections: a minus-two-hour entry that cancels a mistake in a week that was already locked. One account we imported had 15 of them, −52 hours in total, all on one project in late August. At the client's rate, that was $3,317. The negative-hours post covers why importers drop them.
On a project total, that one shows. Drop the corrections and that project comes out 52 hours over. It shows because the corrections were the only thing wrong in that project. Errors in opposite directions cancel. A dropped correction pushes a project's total up. A missing entry pulls it down. One of each, the same size, in the same project, and the row matches.
To check, sort Harvest's detailed export by Hours and look at the bottom. Count the negative entries and add them up. Then find the same count and the same sum in the new tool. If you can't find them there, ask the vendor where they went.
4. Rounding, and which Harvest total you mean
Harvest keeps two figures for every entry. The API docs list hours, and next to it rounded_hours: "Number of (decimal time) hours tracked in this time entry used in summary reports and invoices." Then: "This value is rounded according to the Time Rounding setting in your Preferences." The time report docs say the same of their totals: "If Time Rounding is turned on, the hours will be rounded according to your settings."
So with Time Rounding on, Harvest has two right answers for the same project: the hours on the entries, and the rounded hours in its summary reports and on its invoices. A report row's billable amount is for "the billable hours above," and those are rounded too. Know which one you're comparing against before you read a mismatch. A project that's off by a few minutes may be rounding rather than a missing entry, and a project-level flag looks the same either way.
The new tool has its own precision, too. Winnows keeps whole minutes, so an entry of 0.33 hours, which is 19.8 minutes, becomes 20. That same account had 32,000 entries, and 18 of them rounded that way, at most 30 seconds each, net 0.4 minutes across the account. That's small in hours. Recompute each of those entries' amounts from the rounded minutes, though, and the money can move by cents, which a check to the cent will flag. Winnows keeps Harvest's own amount for those entries instead, so the money still matches.
Import your Harvest account and read the reconciliation
Free for 2 people and 1 active project; $9 per active member per month after that, no usage fees on anything. The import runs on the free plan.
The checks, in order
All of these need only Harvest's own exports and reports, the new tool's export and a pivot table, whichever tool you're moving to.
- Entries and hours by client and project. That's the check Feestead's page runs.
- Hours by person, by year. A person whose hours moved won't show up any other way.
- Billable amount, to the cent, by client and by person, against Harvest's time report for the same dates.
- Negative entries: how many there are, and their sum, on both sides.
- Rounding: whether Time Rounding is on in Harvest, and which hours each side is giving you.
Feestead's checker takes files "Up to 15 MB and 100,000 entries per file." A bigger account goes in a year at a time. That's worth doing anyway: a project that ran for five years can be over in one year, under in another and match in total.
What the Winnows report checks
The Winnows importer runs these as one report at the end of the import. There's no CSV to export and no file-size limit. It recomputes hours and billable amounts from what Winnows now holds and compares them with Harvest's by client, by project, by member and by year. Money is compared to the cent, in integers. Every row either matches or is itemized down to the entry, with Harvest's figure beside ours.
The four places above are handled on the way in. Every record, people included, is matched on its Harvest id, not its name, and anyone archived in Harvest stays archived. Rates are reconstructed per person per project over time from the entries, not just today's rate. Negative entries arrive with their sign. Notes-only entries are skipped and counted. Entries that round are counted, and they keep Harvest's own amount.
In that 32,000-entry account, the report came back with 26 rows off, and none of them was a missing entry. Will my Harvest history reconcile to the cent? goes through the three causes. If you're still tracking in Harvest while you move, run the import again before you cancel: it syncs what changed and never duplicates. The switchover month post covers running both.
Import your Harvest account and read the reconciliation
Free for 2 people and 1 active project; $9 per active member per month after that, no usage fees on anything. The import runs on the free plan.