Help · Moving data
Moving from Harvest: verify before you cut over
An import that finishes is not an import that is correct. This is the pass that catches the difference: a list of things to compare between Harvest and owntime, where to look, and what counts as correct. Do it before you stop using Harvest, not after.
What moves, and what does not
Read this first, because half of migration pain is a mismatch of expectations.
- Moves: time entries, and the clients and projects they belong to. Rates come along only if you give them, because Harvest does not export rates.
- Does not move: old invoices, payment history, expense receipts, and any cleanup of duplicate names. Keep your Harvest PDFs as the record for anything already billed.
- Re-created by hand: recurring retainer templates. They are reminders in owntime, not history, so you set each one up once. See recurring retainers.
Before you start
Export from Harvest under Reports, Detailed Time, over the range you want (two or three years is usually plenty), as CSV. Write a small rate card while you are there: one line per project with its hourly rate. Harvest will not hand you rates, so this is the only manual input the import needs from you.
The checks
Import first (drag the CSV onto the app window, or send it to a migration hand at migrate@owntime.click). Then run these five comparisons. The dry run previews everything before it writes, so you can also use it to check two of them before committing.
| Check | Where | Pass condition |
|---|---|---|
| Total hours | Harvest: Reports, Detailed Time total. owntime: Reports, set the same range. | Within half an hour, or the difference is fully explained by quarter-hour rounding. |
| Row count | The dry run preview: rows parsed / skipped. | Skipped rows are zero, or each skip reason names a row you expected to skip. |
| Per-client totals | owntime: Reports, by client. | Each client’s hours match Harvest. If one is off, it is usually a name variant split into two clients. |
| Rates | owntime: Clients & Projects, the rate column. | Every active project has its real rate, not zero. This is what turns history into billable amounts. |
| Unbilled work | owntime: Entries, filtered to unbilled. | The list is what you expect to bill next, and nothing already invoiced in Harvest appears in it. |
If a number is wrong, do not fix it inside owntime by hand yet. Fix the CSV and re-import: exact duplicates are skipped, so re-running is safe, and the source stays the thing you can trust.
Cut over
- Set a freeze date. Track in owntime from that morning. Anything you entered in Harvest after the export has to be entered once, by hand, in owntime.
- Re-add your retainers in Invoices, Recurring invoices. A fixed amount retainer takes a description and a cadence. A retainer that bills the month’s tracked hours takes the tracked-time option, and the one click draft fills itself from that client’s unbilled work.
- Keep Harvest read-only for a month. Do not delete the account. You will want to open an old invoice PDF, and a cancellation you cannot undo is the one migration mistake with no upside.
- Check the first real invoice against Harvest’s last one. Same client, same work. If the total differs, the rate or the rounding is the place to look.
AN HONEST LIMIT
Invoices and payments do not move. If your tax or client records need the full billing history in one place, keep Harvest (or its PDFs) as the archive for everything issued before your freeze date. owntime starts your billing record from the day you switch, and says so rather than pretending otherwise.
If a check fails
The dry run names each skipped row and why, which is usually enough. Name variants are the most common surprise: three spellings of one client stay three clients, because guessing which to merge would be worse than leaving them. After import you can move entries to the right project and archive the duplicates.
Next: importing time entries · recurring retainers · the migration guide