This workflow follows the Google Sheets → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "3",
"name": "Clockify to Syncro",
"nodes": [
{
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
280,
350
],
"parameters": {
"path": "82b654d7-aeb2-4cc1-97a8-0ebd1a729202",
"options": {},
"httpMethod": "POST",
"responseData": "allEntries",
"responseMode": "lastNode"
},
"typeVersion": 1
},
{
"name": "Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
1830,
350
],
"parameters": {
"range": "A:B",
"options": {
"valueInputMode": "USER_ENTERED"
},
"sheetId": "xxx",
"operation": "append"
},
"credentials": {
"googleApi": "<your credential>"
},
"typeVersion": 1
},
{
"name": "ForGoogle",
"type": "n8n-nodes-base.set",
"position": [
1650,
350
],
"parameters": {
"values": {
"string": [
{
"name": "Syncro",
"value": "={{$json[\"id\"]}}"
},
{
"name": "Clockify",
"value": "={{$node[\"Webhook\"].json[\"body\"][\"id\"]}}"
}
]
},
"options": {},
"keepOnlySet": true
},
"typeVersion": 1
},
{
"name": "ForSyncro",
"type": "n8n-nodes-base.set",
"position": [
730,
350
],
"parameters": {
"values": {
"string": [
{
"name": "id",
"value": "={{ $json[\"body\"][\"project\"][\"name\"].match(/\\[(\\d+)]/)[1] }}"
}
]
},
"options": {},
"keepOnlySet": true
},
"typeVersion": 1
},
{
"name": "FindMatch",
"type": "n8n-nodes-base.googleSheets",
"position": [
1130,
350
],
"parameters": {
"range": "A:B",
"options": {
"valueRenderMode": "UNFORMATTED_VALUE",
"returnAllMatches": true
},
"sheetId": "xxx",
"operation": "lookup",
"lookupValue": "={{$node[\"Webhook\"].json[\"body\"][\"id\"]}}",
"lookupColumn": "=Clockify"
},
"credentials": {
"googleApi": "<your credential>"
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "IF",
"type": "n8n-nodes-base.if",
"position": [
1300,
350
],
"parameters": {
"conditions": {
"string": [],
"boolean": [
{
"value1": "={{!!Object.keys($node[\"FindMatch\"].data).length}}",
"value2": true
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": false
},
{
"name": "NewSyncroTimer",
"type": "n8n-nodes-base.httpRequest",
"position": [
1490,
350
],
"parameters": {
"url": "={{$node[\"EnvVariables\"].json[\"syncro_baseurl\"]}}/api/v1/tickets/{{$node[\"ForSyncro\"].json[\"id\"]}}/timer_entry",
"options": {},
"requestMethod": "POST",
"authentication": "headerAuth",
"bodyParametersUi": {
"parameter": [
{
"name": "start_at",
"value": "={{$node[\"Webhook\"].json[\"body\"][\"timeInterval\"][\"start\"]}}"
},
{
"name": "end_at",
"value": "={{$node[\"Webhook\"].json[\"body\"][\"timeInterval\"][\"end\"]}}"
},
{
"name": "notes",
"value": "={{$node[\"Webhook\"].json[\"body\"][\"description\"]}}"
},
{
"name": "user_id",
"value": "={{$node[\"MatchTechnician\"].json[\"id\"]}}"
}
]
}
},
"credentials": {
"httpHeaderAuth": "<your credential>"
},
"typeVersion": 1
},
{
"name": "UpdateSyncroTimer",
"type": "n8n-nodes-base.httpRequest",
"position": [
1490,
580
],
"parameters": {
"url": "={{$node[\"EnvVariables\"].json[\"syncro_baseurl\"]}}/api/v1/tickets/{{$node[\"ForSyncro\"].json[\"id\"]}}/update_timer_entry",
"options": {
"followRedirect": true
},
"requestMethod": "PUT",
"authentication": "headerAuth",
"bodyParametersUi": {
"parameter": [
{
"name": "timer_entry_id",
"value": "={{$node[\"IF\"].json[\"Syncro\"]}}"
},
{
"name": "start_time",
"value": "={{$node[\"Webhook\"].json[\"body\"][\"timeInterval\"][\"start\"]}}"
},
{
"name": "end_time",
"value": "={{$node[\"Webhook\"].json[\"body\"][\"timeInterval\"][\"end\"]}}"
},
{
"name": "notes",
"value": "={{$node[\"Webhook\"].json[\"body\"][\"description\"]}}"
},
{
"name": "user_id",
"value": "={{$node[\"MatchTechnician\"].json[\"id\"]}}"
}
]
}
},
"credentials": {
"httpHeaderAuth": "<your credential>"
},
"typeVersion": 1
},
{
"name": "EnvVariables",
"type": "n8n-nodes-base.set",
"position": [
580,
350
],
"parameters": {
"values": {
"string": [
{
"name": "syncro_baseurl",
"value": "https://subdomain.syncromsp.com"
}
]
},
"options": {}
},
"typeVersion": 1
},
{
"name": "SetTechnicians",
"type": "n8n-nodes-base.set",
"position": [
870,
350
],
"parameters": {
"values": {
"string": [
{
"name": "Tech 1",
"value": "1234"
},
{
"name": "Tech 2",
"value": "5678"
}
]
},
"options": {},
"keepOnlySet": true
},
"typeVersion": 1
},
{
"name": "MatchTechnician",
"type": "n8n-nodes-base.function",
"position": [
1000,
350
],
"parameters": {
"functionCode": "\nconst results = [];\n\nconst user = $node[\"Webhook\"].json[\"body\"][\"user\"];\n\nconst persons = items[0].json\n\nfor (key of Object.keys(persons)) {\n if (key === user.name) {\n results.push({ json: { id: persons[key], name: key } })\n }\n}\n\nreturn results;"
},
"typeVersion": 1
},
{
"name": "IF1",
"type": "n8n-nodes-base.if",
"position": [
420,
350
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{$json[\"body\"][\"project\"][\"name\"]}}",
"value2": "Ticket",
"operation": "contains"
}
]
}
},
"typeVersion": 1
},
{
"name": "NoOp",
"type": "n8n-nodes-base.noOp",
"position": [
480,
520
],
"parameters": {},
"typeVersion": 1
}
],
"active": true,
"settings": {},
"connections": {
"IF": {
"main": [
[
{
"node": "UpdateSyncroTimer",
"type": "main",
"index": 0
}
],
[
{
"node": "NewSyncroTimer",
"type": "main",
"index": 0
}
]
]
},
"IF1": {
"main": [
[
{
"node": "EnvVariables",
"type": "main",
"index": 0
}
],
[
{
"node": "NoOp",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "IF1",
"type": "main",
"index": 0
}
]
]
},
"FindMatch": {
"main": [
[
{
"node": "IF",
"type": "main",
"index": 0
}
]
]
},
"ForGoogle": {
"main": [
[
{
"node": "Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"ForSyncro": {
"main": [
[
{
"node": "SetTechnicians",
"type": "main",
"index": 0
}
]
]
},
"EnvVariables": {
"main": [
[
{
"node": "ForSyncro",
"type": "main",
"index": 0
}
]
]
},
"NewSyncroTimer": {
"main": [
[
{
"node": "ForGoogle",
"type": "main",
"index": 0
}
]
]
},
"SetTechnicians": {
"main": [
[
{
"node": "MatchTechnician",
"type": "main",
"index": 0
}
]
]
},
"MatchTechnician": {
"main": [
[
{
"node": "FindMatch",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googleApihttpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
Effortlessly synchronise time tracking entries from Clockify to Syncro, ensuring your project billing and client records stay up to date without manual data entry. This workflow suits freelancers, agencies, or IT support teams managing billable hours across tools, saving hours weekly on administrative tasks. It begins with a webhook trigger that captures Clockify data, processes it via Google Sheets for matching and formatting, then uses HTTP requests to create or update timers directly in Syncro.
Use this workflow when you need real-time or scheduled syncing of time logs between Clockify and Syncro to maintain accurate invoicing and reporting. Avoid it for high-volume data transfers exceeding thousands of entries daily, as it may require optimisation for scale. Common variations include adding filters for specific projects in the Google Sheets lookup or integrating email notifications for sync failures.
About this workflow
Clockify to Syncro. Uses googleSheets, httpRequest, noOp. Webhook trigger; 13 nodes.
Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
BP_check. Uses googleSheets, @n-octo-n/n8n-nodes-json-database, httpRequest, itemLists. Webhook trigger; 99 nodes.
This workflow is designed for software teams, project managers, and developers who manage work across Azure DevOps and GitHub. It helps organizations that use Azure DevOps for work item tracking but r
Receive request via webhook with customer question Analyze sentiment and detect urgency using JavaScript Send urgent alerts to Slack for critical cases Search knowledge base and fetch conversation his
Dialpad to Syncro. Uses httpRequest, googleSheets, noOp. Webhook trigger; 22 nodes.
This comprehensive n8n workflow automates the entire travel business call management process, from initial customer inquiries to trip bookings and marketing outreach. The system handles incoming calls