Tutorial

Connect Clockify or Toggl to Zuuna

Tracked hours from Clockify or Toggl Track land on the right card automatically: set up the webhook, put card keys in the description, done.

Last updated:

If your team tracks time in Clockify or Toggl Track, nobody should have to book it into Zuuna a second time. One webhook per event is enough: every tracked entry lands on the right card automatically — corrections and deletions included. The connection belongs to the Business Pro plan; you do not need a Developer plan for it.

What you need

  • The Business Pro plan or higher — see pricing. The import hangs on time tracking, not on API access.
  • The developer.manageIntegrations permission to set up the connection.
  • A Clockify workspace or a Toggl Track account.

1. Create the integration and get the webhook URL

In Zuuna, open Developers → Integrations and create a connection for Clockify or Toggl. You get a dedicated webhook URL for exactly this connection, plus a field for the signing secret Zuuna uses to verify every delivery. Where that secret comes from is what separates the two providers: Clockify shows it when you create the webhook, Toggl returns it when you create the subscription.

2. Set it up in Clockify

In Clockify, add the webhook under Workspace settings → Webhooks and paste in the URL from Zuuna. Clockify works with one webhook per event — so for deletions you add a second one, with ?event=deleted appended to the URL. When you create the webhook, Clockify shows a signing secret; copy it back into the integration in Zuuna.

3. Set it up in Toggl

Toggl has no webhook screen: you create a subscription through Toggl's Webhooks API, for the time_entry model. Toggl returns the secret on creation — store it in Zuuna. Right after that, Toggl sends a validation ping, which Zuuna answers automatically; there is nothing for you to do. Created, updated and deleted entries then all arrive on that one subscription, and a timer that is still running is ignored until it is stopped.

4. How an entry finds its card

Put the card key — say PROJ-123 — into the description of the time entry. Zuuna reads it out and books the time onto exactly that card. This survives reorganisation: if the card has since moved to another group, or the prefix was renamed, the old key still resolves to the same card. And if there is no key in the description at all, the entry is skipped — never guessed, never booked to the wrong card.

5. How an entry finds its person

Attribution works by email address: if it matches a member of your workspace, the time is booked to that person — so make sure your team uses the same addresses at the provider as in Zuuna (see invite your team and set roles). Clockify sends the address along, so this just works. Toggl sends no email address. Toggl entries therefore arrive unattributed: the time sits on the card, but on no person — and is missing from every figure that counts by person. That is not a configuration mistake but a limit of Toggl's webhooks. Plan for it before a report surprises you.

6. Pause or disconnect

Both happen on the same screen where you created the connection: pausing keeps the URL, the secret and everything already booked, and simply lets nothing new in; disconnecting removes the connection. Both work on any plan. And if your plan no longer includes time tracking, the import stops on its own immediately — Zuuna refuses the deliveries with a clear error, and the provider stops retrying.

Troubleshooting

  • Toggl hours show up on no person. This is expected behaviour, not a misconfiguration: Toggl sends no email address, so the entries stay unattributed. The time sits on the card but is missing from per-person figures.
  • An entry never arrives. Most likely the card key is missing from the description — such entries are deliberately skipped rather than booked to the wrong place.
  • Deletions from Clockify have no effect. Deletions are a separate, second webhook in Clockify — with ?event=deleted on the URL.
  • A running Toggl timer does not appear. By design: an entry is only imported once the timer is stopped.
  • The import stopped from one day to the next. Check the plan: without time tracking in the plan, deliveries are refused immediately. The connection stays in place; after an upgrade Zuuna accepts deliveries again immediately. Check at the provider that the webhook is still active after the rejected deliveries.

Next steps

FAQ

What happens when there is no card key in the description?

The entry is skipped — not attached to some random card. Once the key is in place and the provider sends the entry again (after an edit, for example), it lands correctly.

Are entries double-counted when the provider sends again?

No. Every entry carries the provider's ID; a re-send updates the existing entry in place instead of creating a second one. Deletions arrive cleanly the same way.

Why don't my Toggl hours show up on the person?

Toggl's webhooks send no email address, and attribution works by email. Toggl entries therefore arrive without a person: the time sits on the card but is missing from per-person figures. Clockify does not have this problem.

Does Harvest or a custom script work too?

Yes — through the normalised time endpoint (POST /api/v1/time/entries) you can send time from any tool, including an email for attribution. It does require an API token, and API access belongs to the Developer plan.

Which plan do I need?

Business Pro or higher. The connection hangs on time tracking — a Developer plan is not required, though it includes it as well.

Rebuild this step in your own workspace.

The guide takes a few minutes — it sticks when it is your own board underneath. 14 days of full access, no credit card.