2026-11-10
You can vibe-code a Harvest replacement in a weekend. Your Harvest history stays behind.
Harvest's 2026 pricing has led to a particular kind of answer. A bill goes up about tenfold. Somebody looks at what they actually use and decides to build it. The building part holds up. With an AI coding tool, a timer, a project list and a weekly timesheet take a weekend, and sometimes an afternoon. What the build stories skip is the years of entries already sitting in Harvest. That's where the rates you billed, the corrections you made and the record of what's been invoiced live. A new tool doesn't bring them along by itself.
Three answers to a tenfold bill
The bills are public. Kyle Kingsbury wrote on Nov. 8 that Harvest "raised my price from $13.32 to $133.98 per month." A Substack post from Aug. 29, by someone who had been a Harvest customer for "10 years," put the jump at "$96 this month to $939 next month, a new annual cost of $11,268." Then came the answers.
- Readers under Kingsbury's post offered ways out. One said that with fewer than three clients a month, "doing things ‘by hand’ (a spreadsheet) is still feasible." Another wrote, "For my small consulting agency, I use Ledger." A third wrote, "You are just one prompt away to build your own."
- On r/HarvestApp on Nov. 9, a developer with "20+ years of software engineering experience" built their own tool after "the 10x price jack." Over "the past week or two" it gained approvals, quotes and expenses. The post is careful on one point: "no, it's not vibe-coded. AI agents were definitely a big part of building it."
- iFeeltech wrote on Feb. 5: "A few hours later, we had a working Mac app that handles everything we use daily." Its post compares a "Traditional Approach" with a "Vibecoding Approach." Where the traditional column says "Migrate data," the vibecoding column says "Start fresh with what matters."
Neither the Reddit post nor the replies quoted above say what happened to the entries already in Harvest. iFeeltech mentions them once, in that table cell. Starting fresh is a fair choice for someone with a couple of clients and nothing in dispute. It stops being a fair choice when a client asks about last March's invoice, or a rate turns out to be wrong, or your accountant wants the year's billed hours. The answer is in Harvest, in an account you're about to cancel.
What one Harvest time entry carries
Harvest's API documentation lists what each time entry holds. A tool built for next week's work needs a date, a project, some hours and a note. These are the fields that tie an entry to a bill:
- The rate. Each entry has its own billable_rate: "The billable rate for the time entry." Rates change over the years, and an entry from 2023 carries the 2023 rate. A tool that keeps one current rate per project reprices every old hour at today's rate.
- Whether it was invoiced. is_billed is "Whether or not the time entry has been marked as invoiced." Once an entry is invoiced, the invoice field "will include the associated invoice’s id and number." Without those, every old hour looks unbilled.
- The hours the client saw. Harvest keeps both hours and rounded_hours, and the docs say rounded_hours is "used in summary reports and invoices." If you round, copying hours gives you totals that don't match the invoices you sent.
- Approval. approval_status records whether the time was unsubmitted, submitted or approved, and is_locked says "Whether or not the time entry has been locked."
- Corrections. Harvest entries can be negative. In one real account we imported, 15 negative entries came to about −52 hours and $3,317 of billable value. An importer that skips anything under a minute drops them, and the client's total goes up by the amount of the correction. The negative-hours post has the details.
All of this is in Harvest today. The question for a weekend rebuild is whether it has anywhere to put it. A schema written around next week's timesheet has no place for an invoice number or an approved week unless someone adds one.
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 check a fresh start can't run
History that moved can be checked. Add up what arrived by client, project, person and year, and compare it with Harvest's own totals. The money should match to the cent. If a row is off, the entries behind it tell you what didn't come across: a correction that was dropped, a rate that was flattened, or hours rounded on one side and not the other. Will my Harvest history reconcile to the cent? walks through one account that came in 26 rows off, and why.
A fresh start has nothing to compare, so it never fails this check. That isn't the same as passing it. And Harvest's copy doesn't wait. How long Harvest keeps a canceled account, and which reports stop working once the plan lapses, is covered in its own post.
What the Winnows importer brings, and what stays in Harvest
The importer reads Harvest with a personal access token, and read access is enough. It brings over clients, projects, tasks, people and project assignments. Bill rates are rebuilt from the entries for each person on each project over time, so an hour from last year keeps last year's rate. Negative entries keep their sign. Harvest's invoiced flag and invoice number come across, so hours you already billed arrive marked as invoiced. Anyone archived in Harvest stays archived. Entries are stored in whole minutes, and where that would change the money, the entry keeps Harvest's amount.
The last phase is the reconciliation report. It compares hours and billable amounts with Harvest by client, project, member and year, with money to the cent. Each row either matches or is itemized down to the entry, with Harvest's figure beside ours. The import and the report run on the free plan, before anything is billed. Re-running the import syncs what changed and never duplicates anything, so you can keep tracking in Harvest while you switch. The switchover month post covers running both.
Some of it stays behind with us too. Invoices stay in Harvest, because Winnows doesn't issue invoices. Expenses, estimates and uploaded receipts don't come across. Approval history doesn't either: imported weeks arrive open. Save Harvest's invoice and payments reports as files before you cancel. The import guide lists everything that moves and everything that doesn't.
If you build your own anyway
A tool you wrote can be a good place for next week's hours. Before you cancel Harvest, make sure the years before it are somewhere you can check:
- Pull every entry, and check that the file has its rate, rounded hours, invoiced flag, invoice number and approval status. The API has all of them. How to export everything from Harvest covers the files and the order to export them in.
- Give your tool a place to keep those fields, even if no screen shows them.
- Keep the negative entries. Sort the export by hours and read the bottom of the list.
- Add it all up by client, project, person and year, and compare the totals with Harvest's reports while you can still run them.
- Keep the invoices as files. They're the record of what each client was sent.
If those totals match, the weekend tool is a fresh start with the history intact. If they don't, the rows that are off are the work that's left.
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.