Workflow: INSEE Enrichment for Agile CRM
Integrations: agileCrm, code, httpRequest, manualTrigger, merge, noOp, scheduleTrigger, set, stickyNote

{"id": "G0hO05fypS8n8uYu", "meta": {"instanceId": "workflow-7485cf23", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:43.376204", "updatedAt": "2025-09-29T07:07:43.376217", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "INSEE Enrichment for Agile CRM", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "a45b34c1-514e-4221-b363-abf2d4de43c4", "name": "When clicking \u2018Test workflow\u2019", "type": "n8n-nodes-base.manualTrigger", "position": [-3440, -320], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow."}, {"id": "d406941b-80a1-43a3-ba19-2e29570192f2", "name": "Find Company in SIREN database", "type": "n8n-nodes-base.httpRequest", "onError": "continueErrorOutput", "position": [-2660, -220], "parameters": {"url": "{{ $env.BASE_URL }}", "options": {}, "sendHeaders": true, "headerParameters": {"parameters": [{"name": "accept", "value": "application/json"}, {"name": "X-INSEE-Api-Key-Integration", "value": "={{ $('Set Insee API Key').all()[0].json['X-INSEE-Api-Key-Integration']  }}"}]}}, "typeVersion": 4.2, "alwaysOutputData": false, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "6ab3818b-2f09-44e2-874a-87c51478572b", "name": "Request all data from SIREN database", "type": "n8n-nodes-base.httpRequest", "position": [-2420, -240], "parameters": {"url": "{{ $env.BASE_URL }}", "options": {}, "sendHeaders": true, "headerParameters": {"parameters": [{"name": "accept", "value": "application/json"}, {"name": "X-INSEE-Api-Key-Integration", "value": "={{ $('Set Insee API Key').all()[0].json['X-INSEE-Api-Key-Integration']  }}"}]}}, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "89c223fe-289b-4d0f-922a-e9c0ad672b51", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [-3420, -640], "parameters": {"width": 460, "height": 240, "content": "### Enrich CRM data with data from French INSEE OpenDatabase API\nThis workflow takes all company entries from **Agile CRM** and enriches their data using the French [Insee Opendata API]({{ $env.API_BASE_URL }} (Free Access)\n\n__This will update :__ \n1) Official Address of the company headquarters\n2) Add government company id number (SIREN) in a Custom Field"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "0bdc49dd-6f26-447f-a8ba-c2ba615dc7ec", "name": "FilterOut all Company that have the ReadOnly Key set", "type": "n8n-nodes-base.code", "position": [-2880, -220], "parameters": {"jsCode": "// Get input data\nconst input = $input.all();\nconst output = input.filter(item => {\n    const properties = item.json.properties || [];\n    return !properties.some(property => property.name === \"RO\" && property.value === \"1\"); // Remove all ReadOnly entries\n}).map(item => {\n    const companyId = item.json.id;\n    const denominationUniteLegale = item.json.properties[0]?.value || null; \n    return {\n        json: {\n            companyId,\n            denominationUniteLegale\n        }\n    };\n});\n\n// Return the transformed output\nreturn output;\n"}, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow."}, {"id": "0ef184f7-219c-4eb3-bfe0-4e68d2ce0b43", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [-2940, -640], "parameters": {"color": 5, "width": 647, "height": 232, "content": "### \ud83d\udc68\u200d\ud83c\udfa4 Setup\n1. Add your **Agile CRM** credentials\n2. Link each AgileCRM node to the correct **Agile CRM** credentials\n3. Add your **INSEE** API Key to the **\"Set Insee API Key\"** node\n4. Make sure the **Custom Fields** for the **companies** are set as below (Admin Settings):\n   - Label : \"SIREN\", Type : \"Text Field\", Description \"N\u00b0 de SIREN\"\n   - Label : \"RO\", Type : \"Number\", Description \"Locks entry from update\"\n5. Click on **Test Workflow** to make sure everything is working\n6. Configure schedule if needed and don't forget to change status to **Active**"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "78255253-195d-472d-a76c-ab63ceac126b", "name": "Set Insee API Key", "type": "n8n-nodes-base.set", "position": [-3260, -220], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "e993e665-cf31-48b1-8ca8-a4829dc82642", "name": "X-INSEE-Api-Key-Integration", "type": "string", "value": "put-your-insee-api-key-here"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "90b13481-6570-4bfc-b3dc-4b6017c6c8b5", "name": "Schedule Trigger", "type": "n8n-nodes-base.scheduleTrigger", "position": [-3440, -140], "parameters": {"rule": {"interval": [{}]}}, "typeVersion": 1.2, "notes": "This scheduleTrigger node performs automated tasks as part of the workflow."}, {"id": "88c8a6c6-2175-42c3-bfdb-f1d32a5d1c2d", "name": "clean_route", "type": "n8n-nodes-base.noOp", "position": [-2660, -360], "parameters": {}, "typeVersion": 1, "notes": "This noOp node performs automated tasks as part of the workflow."}, {"id": "522d83f6-752e-40b4-a889-334f0a96998b", "name": "Get all Compagnies from Agile CRM", "type": "n8n-nodes-base.agileCrm", "position": [-3080, -220], "parameters": {"options": {}, "resource": "company", "operation": "getAll"}, "credentials": {"agileCrmApi": {"id": "wb0EgiQFLQbiFuy4", "name": "AgileCRM account"}}, "typeVersion": 1, "notes": "This agileCrm node performs automated tasks as part of the workflow."}, {"id": "8ff0632b-6aca-47d8-b611-72dbc8dec09b", "name": "Enrich CRM with INSEE Data", "type": "n8n-nodes-base.agileCrm", "position": [-1960, -340], "parameters": {"resource": "company", "companyId": "={{ $json.companyId }}", "operation": "update", "additionalFields": {"addressOptions": {"addressProperties": [{"address": "={{ $json.etablissement.adresseEtablissement.complementAdresseEtablissement }}\n{{ $json.etablissement.adresseEtablissement.typeVoieEtablissement }} {{ $json.etablissement.adresseEtablissement.libelleVoieEtablissement }}\n{{ $json.etablissement.adresseEtablissement.codePostalEtablissement }}{{ $json.etablissement.adresseEtablissement.libelleCommuneEtablissement }}", "subtype": "office"}]}, "customProperties": {"customProperty": [{"name": "SIREN", "value": "={{ $json.etablissement.siren }}", "subtype": "TEXT"}]}}}, "credentials": {"agileCrmApi": {"id": "wb0EgiQFLQbiFuy4", "name": "AgileCRM account"}}, "typeVersion": 1, "notes": "This agileCrm node performs automated tasks as part of the workflow."}, {"id": "8720be96-8181-4ea7-b114-ce0f5b8e09c1", "name": "Merge data from CRM and SIREN database with enriched for the CRM", "type": "n8n-nodes-base.merge", "position": [-2180, -340], "parameters": {"mode": "combine", "options": {}, "advanced": true, "mergeByFields": {"values": [{"field1": "denominationUniteLegale", "field2": "etablissement.uniteLegale.denominationUniteLegale"}]}}, "typeVersion": 3, "notes": "This merge node performs automated tasks as part of the workflow."}, {"id": "855a39e2-83ef-49d9-b630-ec31aaa96e72", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [-3460, 20], "parameters": {"height": 80, "content": "\ud83d\udc46 You can use any of those two Trigger to start the process."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "b003c1b8-6244-4b72-bbb0-025f563b5d71", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [-2260, -640], "parameters": {"width": 380, "height": 240, "content": "### \ud83d\uddd2\ufe0f Notes : \n1. This workflow is made to write over any entry already present. You can change this for each company by setting the **\"RO\"** Custom Field to **1**, making it read-only for this workflow.\n\n2. If you want to make it readonly after the update from this workflow, then **add a custom property** in the last node **Enrich CRM with INSEE Data** named **\"RO\"**, SubType **\"Number\"** and Value **\"1\"**"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}], "active": false, "pinData": {}, "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "9f328182-d131-4300-a1f4-2cb3dfe91632", "connections": {"d406941b-80a1-43a3-ba19-2e29570192f2": {"main": [[{"node": "error-handler-d406941b-80a1-43a3-ba19-2e29570192f2", "type": "main", "index": 0}], [{"node": "error-handler-d406941b-80a1-43a3-ba19-2e29570192f2-fc225e73", "type": "main", "index": 0}], [{"node": "error-handler-d406941b-80a1-43a3-ba19-2e29570192f2-00b07a97", "type": "main", "index": 0}], [{"node": "error-handler-d406941b-80a1-43a3-ba19-2e29570192f2-8d7e7467", "type": "main", "index": 0}], [{"node": "error-handler-d406941b-80a1-43a3-ba19-2e29570192f2-a9f2a7b7", "type": "main", "index": 0}], [{"node": "error-handler-d406941b-80a1-43a3-ba19-2e29570192f2-ed0cfcec", "type": "main", "index": 0}], [{"node": "error-handler-d406941b-80a1-43a3-ba19-2e29570192f2-54b44496", "type": "main", "index": 0}], [{"node": "error-handler-d406941b-80a1-43a3-ba19-2e29570192f2-9f6e121d", "type": "main", "index": 0}], [{"node": "error-handler-d406941b-80a1-43a3-ba19-2e29570192f2-d9c8df40", "type": "main", "index": 0}]]}, "6ab3818b-2f09-44e2-874a-87c51478572b": {"main": [[{"node": "error-handler-6ab3818b-2f09-44e2-874a-87c51478572b", "type": "main", "index": 0}], [{"node": "error-handler-6ab3818b-2f09-44e2-874a-87c51478572b-411da899", "type": "main", "index": 0}], [{"node": "error-handler-6ab3818b-2f09-44e2-874a-87c51478572b-63863515", "type": "main", "index": 0}], [{"node": "error-handler-6ab3818b-2f09-44e2-874a-87c51478572b-02015ab4", "type": "main", "index": 0}], [{"node": "error-handler-6ab3818b-2f09-44e2-874a-87c51478572b-3eed5f47", "type": "main", "index": 0}], [{"node": "error-handler-6ab3818b-2f09-44e2-874a-87c51478572b-41b7d579", "type": "main", "index": 0}], [{"node": "error-handler-6ab3818b-2f09-44e2-874a-87c51478572b-e305304d", "type": "main", "index": 0}], [{"node": "error-handler-6ab3818b-2f09-44e2-874a-87c51478572b-0576b584", "type": "main", "index": 0}], [{"node": "error-handler-6ab3818b-2f09-44e2-874a-87c51478572b-7e839ad6", "type": "main", "index": 0}]]}}, "description": "Automated workflow: INSEE Enrichment for Agile CRM. This workflow integrates 10 different services: stickyNote, httpRequest, code, scheduleTrigger, merge. It contains 18 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: INSEE Enrichment for Agile CRM. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}