Bring your time history.
$1 per member.
Miru gives you time tracking, invoicing, and team management for $1 per user per month. Open source and self-hostable. Here's how to preview, import and check your time history.
Three reasons to stop paying Harvest prices
$9 to $11/seat vs $1/member
A 20-person team on Harvest: $2,160/year billed annually, $2,640 paid monthly. The same team on Miru: $240/year. That's not a rounding error. That's a junior developer's annual tool budget.
Open source, not a black box
Miru's open-source core is MIT-licensed and available on GitHub. Self-host it. Audit it. Fork it. Harvest is a closed product you rent. When they change the API or raise prices, you have zero recourse.
A real CLI
Harvest has no CLI. If you're a developer, you're switching to a browser tab every time you log hours. Miru has a full CLI — time, invoices, expenses, reports. All from your terminal.
Five steps to a checked import.
Export your time entries from Harvest
Log into Harvest. Go to Reports > Detailed Time. Set the date range to cover all history you want to keep. Click Export CSV. Save the file. Keep the original export. See Harvest's export instructions.
If you track expenses, save a separate expense export for your records. This import handles time entries only; it does not import expense, invoice or payment records.
Create your workspace and add your team
Go to app.miru.so/signup. Create your organization. $1 per member per month. No sales call. No 47-field form. Add the people whose time you are importing before the preview. Match their Harvest names, or choose an existing teammate in the import screen when names differ. Mapping does not create a member.
Preview and import in your browser
Sign in as a workspace owner or admin and open Settings → Import Harvest. Choose your Detailed Time CSV (up to 20 MB) and click Preview import. The preview does not create clients, projects or time entries.
Review row issues, warnings and teammate matches. Fix the export or map unmatched names, then preview again. When the result is correct, click Import time entries. The completed receipt shows imported, skipped and failed rows and remains available after reload.
Prefer the terminal?
$ curl -fsSL https://miru.so/install.sh | sh $ miru login --email you@example.com $ miru import --file harvest-export.csv --format harvest --dry-run
Resolve unmatched people and row errors, then repeat the preview until it is correct.
To create the entries, run the same command without --dry-run.
Keep any --map arguments you used in the successful preview.
$ miru import --file harvest-export.csv --format harvest Need help? Ask about migration before sending your team's export.
Check the imported history
Check the receipt for failed or skipped rows. In Miru, compare hours by person, project and date range with your Harvest export. Check a few notes and billing statuses. Review project-member rates and create a draft invoice from imported unbilled time before sending it. Hours are rounded to whole minutes; historical rate changes are not preserved per entry. Keep your original CSV and resolve any differences before switching the team over.
Switch when the checks pass
Start tracking new time in Miru once your team has verified the import. Keep access to any expense, invoice or payment records you still need. Cancel Harvest only after those records and your time history are accounted for.
Questions you're probably asking
Will I lose my time entry data?
How long does the migration actually take?
Can I run both tools side by side?
What about my Harvest integrations?
Do you support Harvest's project structure?
Preview your first import.
Start with a preview. Verify your history. Then move your team to $1 per member per month.
One plan. No tiers. See pricing · All migration guides