Workflow: HTTP GoogleSheets Sync

Workflow Details

Download Workflow
{
    "id": "3",
    "name": "Clockify to Syncro",
    "nodes": [
        {
            "name": "Webhook",
            "type": "n8n-nodes-base.webhook",
            "position": [
                280,
                350
            ],
            "webhookId": "82b654d7-aeb2-4cc1-97a8-0ebd1a729202",
            "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": "Google"
            },
            "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": "Google"
            },
            "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": "Syncro"
            },
            "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": "Syncro"
            },
            "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
                    }
                ]
            ]
        }
    }
}
Back to Workflows

Related Workflows

Splitout Code Create Webhook
View
HTTP Manual Automation Webhook
View
Trello Googlecloudnaturallanguage Automate Triggered
View
Splitout Code Automation Triggered
View
🐋DeepSeek V3 Chat & R1 Reasoning Quick Start
View
Splitout Limit Create Webhook
View
Suspicious_login_detection
View
Extractfromfile Form Export Webhook
View
Executeworkflow Hackernews Create Triggered
View
Telegram Filter Export Triggered
View