2026-10-05
Export Clockify to JSON on the Free plan: 30 API requests an hour, and what that means for getting your history out
Clockify has no button that exports your workspace as JSON. JSON comes out of the API. On the Free plan the API has a budget: 30 requests an hour, shared by the whole workspace. That is enough to get your history out, but only if you plan the requests first. This post covers what Clockify's pages say about the limit, the arithmetic that follows from it, and how to check that the file you end up with is complete. The check matters most. An export you can't reconcile against the source is a file you have to take on trust.
What the Free plan gives you
Clockify's help page on the Free plan lists three things that matter here.
- Report exports: "CSV and Excel report exports are available only on paid plans (PDF exports remain available on the Free plan)".
- Report range: "On the Free Plan, generating reports is limited to a maximum date range of 31 days per report."
- The API: "30 API requests per hour and up to 3 active webhooks per workspace."
The same page says workspace owners "can use the Export data option in Workspace settings to export all time entries for the current year as a CSV". That is a CSV, and the page describes it as covering the current year. If you want JSON, or earlier years, you are using the API.
Clockify's page on API limits words the budget this way: "Newly created workspaces on the Free plan are restricted to 30 API requests per hour for the entire workspace." Paid workspaces keep "the standard limit of 50 requests per second". The budget belongs to the workspace, so every script, integration and teammate with an API key draws on the same 30.
That is one request every two minutes on Free. A paid workspace gets 180,000 requests in the same hour.
The two ways JSON comes out
The first is the time entries endpoint. Clockify's own example is https://api.clockify.me/api/v1/workspaces/{WorkspaceID}/user/{UserID}/time-entries. It returns JSON, one person at a time, in pages.
The second is the Reports API. Clockify's help page on exporting via the API says: "The key-value parameter for export type is exportType. Available values include JSON, CSV, XLSX, and PDF." Its example for a summary report sets exportType to JSON. The same page says "Export to CSV/Excel is a paid feature available in Basic plan or higher". It doesn't say whether the 31-day report range on Free also applies to a report requested through the API. Test that with one request before you build on it.
Page size decides how long it takes
Clockify's help page on pagination says the API returns 50 results a page by default, and that page-size can go to a "maximum 5000 for base endpoints, 1000 for report endpoints". The example URL on that page uses page-size=200.
Take one person with 12,000 time entries.
- At the default of 50 a page: 240 requests. At 30 an hour, that is eight hours.
- At 200 a page, the size in Clockify's example: 60 requests, or two hours.
- At 5,000 a page: three requests.
The data is the same and so is the limit. One parameter is the difference between an afternoon's wait and none. A script written against a paid workspace, where the limit is 50 a second, never had a reason to set it.
The entries endpoint is per person, so every member costs at least one request, including the ones with no entries. The Free plan allows "5 active users (including the Owner and active members)". Members you deactivated still have history, so list every user in the workspace, not only the active ones.
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.
Spend the budget in this order
- Turn off anything else that calls the API for the hour. The 30 requests are for the whole workspace.
- Pull the reference lists first: users, clients, projects, tags. Set page-size on each so a list comes back in one request, not several.
- Then time entries, one person at a time, with page-size=5000. Keep requesting pages until one comes back with fewer than 5,000 entries.
- Save every response to disk as it arrives. If you run out of budget halfway through, you resume from the files. You do not start again.
- Count your requests yourself. The Clockify pages cited here don't say what a Free workspace gets back once it passes 30, or when the hour resets. If a request fails, stop and wait. Don't retry in a loop, because retries may count too.
Don't spend requests on testing page sizes against live data. One request with a small date range will show you the shape of the JSON. After that, every request should be one you keep.
Check the file before you trust it
A JSON file that parses is not proof that it is complete. Pagination that stops a page early leaves you with a valid file that is short by a few hundred entries.
The Free plan still gives you something to check against. PDF report exports remain available, 31 days at a time. Pick three months: your first, your busiest, your most recent. Run the report for each, write down the total hours, and add up the same month from your JSON. If the three match to the minute, the pagination worked. If one doesn't, you know which month to pull again.
We wrote up the same idea for Harvest in Will my Harvest history reconcile to the cent? The principle carries over to any tool: the source's own totals are the only thing an export can be checked against, so get them while you still have access to the source.
A tool that already does this
There is an open-source script, ptandler/clockify-export, built around this limit. Its README says it uses the time entries API, not the reports API, to get past the 31-day report range on Free, and it budgets for "30 API requests/hour/workspace on Free plan" at "Each page of 200 entries = 1 request". It writes CSV, one file per month, not JSON. We haven't run it and can't vouch for it. It is still worth reading before you write your own, because its author has already hit the limit you are about to hit.
What to ask of any tool
An API on the free tier and an API you can get your history out of are different things. The second depends on the rate limit and the page size, and you only find those out by reading the limits page. For comparison, Harvest's API documentation puts its general limit at "100 requests per 15 seconds". We covered what Clockify's other Free-plan changes mean for your data in the Clockify exit test, and the five questions to ask any vendor in the exit test.
Winnows puts its answer in writing: full-fidelity CSV export of every entry and every entity, at all times, on every plan; a read-only API on every plan; and 90 days of export access after you cancel. The wording is on the exit guarantee page.
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.