{"meta":{"instanceId":"workflow-3653027a","versionId":"1.0.0","createdAt":"2025-09-29T07:07:52.913515","updatedAt":"2025-09-29T07:07:52.913642","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"name":"Import Productboard Notes, Companies and Features into Snowflake","nodes":[{"id":"adcb71e4-880b-4c19-acbb-0708ae4af95f","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[5620,1440],"parameters":{"color":5,"width":442.66083354762577,"height":155.09952210536395,"content":"## Preview Slack Message\n:productboard: Weekly Update in :snowflake_logo: Completed\n27 new insights added in the last 7 days.\n88 insights remain unprocessed.\nYou can view the updated :metabase: dashboard below:\n<link metabase>\n"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"8a590e59-cbcd-43f3-a0de-7c1391661fcf","name":"Manual mapping feature","type":"n8n-nodes-base.set","position":[4380,-180],"parameters":{"fields":{"values":[{"name":"feature_id","stringValue":"={{ $json.id }}"},{"name":"feature_name","stringValue":"={{ $json.name }}"},{"name":"feature_status","stringValue":"={{ $json.status.name }}"},{"name":"feature_start_date","stringValue":"={{ $json.timeframe.startDate }}"},{"name":"feature_end_date","stringValue":"={{ $json.timeframe.endDate }}"},{"name":"feature_owner","stringValue":"={{ $json.owner.email }}"},{"name":"feature_created_at","stringValue":"={{ $json.createdAt }}"}]},"include":"none","options":{}},"typeVersion":3.2,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"ca339c8f-71c0-432f-88ef-595b9bc24b98","name":"get productboard companies","type":"n8n-nodes-base.httpRequest","position":[4060,220],"parameters":{"url":"{{ $env.API_BASE_URL }}","options":{"pagination":{"pagination":{"nextURL":"{{ $env.BASE_URL }}","paginationMode":"responseContainsNextURL","requestInterval":2000,"completeExpression":"={{ $response.body[\"links\"][\"next\"] === null }}","paginationCompleteWhen":"other"}}},"sendHeaders":true,"authentication":"{{ $credentials.genericCredentialType }}","genericAuthType":"httpHeaderAuth","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"},{"name":"X-Version","value":"1"}]}},"credentials":{"httpHeaderAuth":{"id":"Z0ptr85smbBZBIYx","name":"Productboard"}},"typeVersion":4.1,"alwaysOutputData":true,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"ba15244b-4311-4045-8087-47f05bea427e","name":"Manual mapping companies","type":"n8n-nodes-base.set","position":[4760,220],"parameters":{"fields":{"values":[{"name":"company_id","stringValue":"={{ $json.id }}"},{"name":"company_name","stringValue":"={{ $json.name }}"},{"name":"company_domain","stringValue":"={{ $json.domain }}"}]},"include":"none","options":{}},"typeVersion":3.2,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"d7c491cf-6545-40e1-9ee5-429e4f6b8cb4","name":"get productboard notes","type":"n8n-nodes-base.httpRequest","position":[4500,640],"parameters":{"url":"{{ $env.BASE_URL }}","options":{"pagination":{"pagination":{"parameters":{"parameters":[{"name":"pageCursor","value":"={{ $response.body.pageCursor }}"}]},"requestInterval":2000,"completeExpression":"={{ $response.body.pageCursor === null }}","paginationCompleteWhen":"other"}}},"sendHeaders":true,"authentication":"{{ $credentials.genericCredentialType }}","genericAuthType":"httpHeaderAuth","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"},{"name":"X-Version","value":"1"}]}},"credentials":{"httpHeaderAuth":{"id":"Z0ptr85smbBZBIYx","name":"Productboard"}},"typeVersion":4.1,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"beeb2cfc-c017-4691-b92f-ee10b943b08d","name":"Manual mapping notes","type":"n8n-nodes-base.set","position":[5200,640],"parameters":{"fields":{"values":[{"name":"note_id","stringValue":"={{ $json.id }}"},{"name":"note_title","stringValue":"={{ $json.title }}"},{"name":"note_state","stringValue":"={{ $json.state }}"},{"name":"note_company_id","stringValue":"={{ $json.company.id }}"},{"name":"note_source","stringValue":"={{ $json.source.origin }}"},{"name":"note_content","stringValue":"={{ $json.content }}"},{"name":"note_created_at","stringValue":"={{ $json.createdAt }}"},{"name":"note_created_by","stringValue":"={{ $json.createdBy.name }}"},{"name":"note_owner","stringValue":"={{ $json.owner.name }}"},{"name":"note_url","stringValue":"={{ $json.displayUrl }}"}]},"include":"none","options":{}},"typeVersion":3.2,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"770df012-b5a0-49f9-9614-8988c2436c34","name":"Split features","type":"n8n-nodes-base.splitOut","position":[3920,-180],"parameters":{"options":{},"fieldToSplitOut":"data"},"typeVersion":1,"notes":"This splitOut node performs automated tasks as part of the workflow."},{"id":"910e27f0-b910-415e-a171-5c6cfce07dc4","name":"Split companies","type":"n8n-nodes-base.splitOut","position":[4300,220],"parameters":{"options":{},"fieldToSplitOut":"data"},"typeVersion":1,"notes":"This splitOut node performs automated tasks as part of the workflow."},{"id":"f57f3865-8970-4771-aee6-2e656215b13e","name":"Split notes","type":"n8n-nodes-base.splitOut","position":[4740,640],"parameters":{"options":{},"fieldToSplitOut":"data"},"typeVersion":1,"notes":"This splitOut node performs automated tasks as part of the workflow."},{"id":"d3939c15-9523-49c1-93ba-7942d37a0ec0","name":"Split features in notes","type":"n8n-nodes-base.splitOut","position":[5400,900],"parameters":{"include":"selectedOtherFields","options":{},"fieldToSplitOut":"features","fieldsToInclude":"id"},"typeVersion":1,"notes":"This splitOut node performs automated tasks as part of the workflow."},{"id":"bde6dc0c-6104-4b84-8c09-33dbe0cfe69f","name":"Combine Feature ID + Note ID","type":"n8n-nodes-base.set","position":[5640,900],"parameters":{"fields":{"values":[{"name":"note_id","stringValue":"={{ $json.id }}"},{"name":"feature_id","stringValue":"={{ $json.features.id }}"}]},"include":"none","options":{}},"typeVersion":3.2,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"b47db956-ec4f-4342-b973-aa3277e397f2","name":"get productboard features","type":"n8n-nodes-base.httpRequest","position":[3680,-180],"parameters":{"url":"{{ $env.API_BASE_URL }}","options":{"pagination":{"pagination":{"nextURL":"{{ $env.BASE_URL }}","paginationMode":"responseContainsNextURL","requestInterval":3000,"completeExpression":"={{ $response.body[\"links\"][\"next\"] === null }}","paginationCompleteWhen":"other"}}},"sendHeaders":true,"authentication":"{{ $credentials.genericCredentialType }}","genericAuthType":"httpHeaderAuth","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"},{"name":"X-Version","value":"1"}]}},"credentials":{"httpHeaderAuth":{"id":"Z0ptr85smbBZBIYx","name":"Productboard"}},"typeVersion":4.1,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"ef3cd766-3887-4d6b-981b-d8e72a06a655","name":"Update Productboard Notes","type":"n8n-nodes-base.snowflake","position":[5940,660],"parameters":{"table":"PRODUCTBOARD_NOTES","columns":"NOTE_ID,NOTE_TITLE,NOTE_STATE,NOTE_COMPANY_ID,NOTE_SOURCE,NOTE_CONTENT,NOTE_CREATED_BY,NOTE_OWNER,NOTE_CREATED_AT,NOTE_URL"},"credentials":{"snowflake":{"id":"{{ $credentials.snowflake.id }}","name":"Snowflake"}},"typeVersion":1,"notes":"This snowflake node performs automated tasks as part of the workflow."},{"id":"8dc03797-1ac9-47a8-8e4c-e85e9539b091","name":"Empty Table Productboard Notes","type":"n8n-nodes-base.snowflake","position":[4260,640],"parameters":{"query":"TRUNCATE TABLE PRODUCTBOARD_NOTES;","operation":"executeQuery"},"credentials":{"snowflake":{"id":"{{ $credentials.snowflake.id }}","name":"Snowflake"}},"executeOnce":true,"typeVersion":1,"notes":"This snowflake node performs automated tasks as part of the workflow."},{"id":"9d5a6d6f-a672-48b0-baf8-67b608690d28","name":"[CREATE] PRODUCTBOARD_NOTES","type":"n8n-nodes-base.snowflake","position":[3280,1140],"parameters":{"query":"CREATE OR REPLACE TABLE PRODUCTBOARD_NOTES (\n    note_id STRING NOT NULL,\n    note_title STRING,\n    note_state STRING,\n    note_company_id STRING,\n    note_source STRING,\n    note_content STRING,\n    note_created_by STRING,\n    note_owner STRING,\n    note_url STRING,\n    note_created_at TIMESTAMP_NTZ\n);","operation":"executeQuery"},"credentials":{"snowflake":{"id":"{{ $credentials.snowflake.id }}","name":"Snowflake"}},"typeVersion":1,"notes":"This snowflake node performs automated tasks as part of the workflow."},{"id":"ea27f38b-3199-46aa-959f-9c1502898696","name":"[CREATE] PRODUCTBOARD_COMPANIES","type":"n8n-nodes-base.snowflake","position":[3520,1140],"parameters":{"query":"CREATE OR REPLACE TABLE PRODUCTBOARD_COMPANIES (\n    company_id STRING NOT NULL,\n    company_name STRING,\n    company_domain STRING\n);","operation":"executeQuery"},"credentials":{"snowflake":{"id":"{{ $credentials.snowflake.id }}","name":"Snowflake"}},"typeVersion":1,"notes":"This snowflake node performs automated tasks as part of the workflow."},{"id":"7bb94678-d106-4b77-8a96-4c598b057d09","name":"Update Productboard Companies","type":"n8n-nodes-base.snowflake","position":[5280,220],"parameters":{"table":"PRODUCTBOARD_COMPANIES","columns":"COMPANY_ID,COMPANY_NAME,COMPANY_DOMAIN"},"credentials":{"snowflake":{"id":"{{ $credentials.snowflake.id }}","name":"Snowflake"}},"typeVersion":1,"notes":"This snowflake node performs automated tasks as part of the workflow."},{"id":"86128f9b-8b16-4dc0-bdf5-1bab946716e2","name":"Manual mapping companies db","type":"n8n-nodes-base.set","position":[5020,220],"parameters":{"fields":{"values":[{"name":"COMPANY_ID","stringValue":"={{ $json.company_id }}"},{"name":"COMPANY_NAME","stringValue":"={{ $json.company_name }}"},{"name":"COMPANY_DOMAIN","stringValue":"={{ $json.company_domain }}"}]},"include":"none","options":{}},"typeVersion":3.2,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"dd2a3264-4171-43af-9409-ad2e79091bfb","name":"Manual mapping notes db","type":"n8n-nodes-base.set","position":[5720,660],"parameters":{"fields":{"values":[{"name":"NOTE_ID","stringValue":"={{ $json.note_id }}"},{"name":"NOTE_TITLE","stringValue":"={{ $json.note_title }}"},{"name":"NOTE_STATE","stringValue":"={{ $json.note_state }}"},{"name":"NOTE_COMPANY_ID","stringValue":"={{ $json.note_company_id }}"},{"name":"NOTE_CONTENT","stringValue":"={{ $json.note_content }}"},{"name":"NOTE_CREATED_BY","stringValue":"={{ $json.note_created_by }}"},{"name":"NOTE_CREATED_AT","stringValue":"={{ $json.note_created_at }}"},{"name":"NOTE_SOURCE","stringValue":"={{ $json.note_source }}"},{"name":"NOTE_OWNER","stringValue":"={{ $json.note_owner }}"},{"name":"NOTE_URL","stringValue":"={{ $json.note_url }}"}]},"include":"none","options":{}},"typeVersion":3.2,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"d163879a-6020-4ace-b3ea-36c3d7b3675a","name":"Empty Table Productboard Companies","type":"n8n-nodes-base.snowflake","position":[3820,220],"parameters":{"query":"TRUNCATE TABLE PRODUCTBOARD_COMPANIES;","operation":"executeQuery"},"credentials":{"snowflake":{"id":"{{ $credentials.snowflake.id }}","name":"Snowflake"}},"executeOnce":true,"typeVersion":1,"notes":"This snowflake node performs automated tasks as part of the workflow."},{"id":"0dbf1a3c-ae8b-4e7b-afb5-d1363d3d7634","name":"[CREATE] PRODUCTBOARD_NOTES_FEATURES","type":"n8n-nodes-base.snowflake","position":[3760,1140],"parameters":{"query":"CREATE OR REPLACE TABLE PRODUCTBOARD_NOTES_FEATURES (\n    note_id STRING NOT NULL,\n    feature_id STRING\n)","operation":"executeQuery"},"credentials":{"snowflake":{"id":"{{ $credentials.snowflake.id }}","name":"Snowflake"}},"typeVersion":1,"notes":"This snowflake node performs automated tasks as part of the workflow."},{"id":"fa9e8744-c348-481c-a6f9-083689ee8ea9","name":"Manual mapping feature note IDs db","type":"n8n-nodes-base.set","position":[6160,920],"parameters":{"fields":{"values":[{"name":"NOTE_ID","stringValue":"={{ $json.note_id }}"},{"name":"FEATURE_ID","stringValue":"={{ $json.feature_id }}"}]},"include":"none","options":{}},"typeVersion":3.2,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"718f041a-dd02-4331-a704-fd1aa809212b","name":"Update Productboard Note and Feature IDs","type":"n8n-nodes-base.snowflake","position":[6380,920],"parameters":{"table":"PRODUCTBOARD_NOTES_FEATURES","columns":"NOTE_ID,FEATURE_ID"},"credentials":{"snowflake":{"id":"{{ $credentials.snowflake.id }}","name":"Snowflake"}},"typeVersion":1,"notes":"This snowflake node performs automated tasks as part of the workflow."},{"id":"51430e95-1eb9-4c47-a0cf-e05708e6d41b","name":"Empty Table Productboard Note and Feature IDs","type":"n8n-nodes-base.snowflake","position":[4040,640],"parameters":{"query":"TRUNCATE TABLE PRODUCTBOARD_NOTES_FEATURES;","operation":"executeQuery"},"credentials":{"snowflake":{"id":"{{ $credentials.snowflake.id }}","name":"Snowflake"}},"executeOnce":true,"typeVersion":1,"notes":"This snowflake node performs automated tasks as part of the workflow."},{"id":"8c03178f-baf1-4ed8-94d8-91e90ef5cd26","name":"Loop Over Items notes","type":"n8n-nodes-base.splitInBatches","position":[5460,640],"parameters":{"options":{},"batchSize":100},"typeVersion":3,"notes":"This splitInBatches node performs automated tasks as part of the workflow."},{"id":"0c6a787f-48da-479c-b45a-8122b8fada3f","name":"Loop Over Items features notes","type":"n8n-nodes-base.splitInBatches","position":[5900,900],"parameters":{"options":{},"batchSize":100},"typeVersion":3,"notes":"This splitInBatches node performs automated tasks as part of the workflow."},{"id":"1adb9ff0-be18-4ceb-aae0-62186e75668f","name":"[CREATE] PRODUCTBOARD_FEATURES","type":"n8n-nodes-base.snowflake","position":[3040,1140],"parameters":{"query":"CREATE OR REPLACE TABLE PRODUCTBOARD_FEATURES (\n    feature_id STRING NOT NULL,\n    feature_name STRING,\n    feature_status STRING,\n    feature_start_date STRING,\n    feature_end_date STRING,\n    feature_owner STRING,\n    feature_created_at STRING\n);","operation":"executeQuery"},"credentials":{"snowflake":{"id":"{{ $credentials.snowflake.id }}","name":"Snowflake"}},"typeVersion":1,"notes":"This snowflake node performs automated tasks as part of the workflow."},{"id":"0357ba46-4934-4c3f-8f0a-676496a6eee6","name":"Empty Table Productboard Features","type":"n8n-nodes-base.snowflake","position":[3440,-180],"parameters":{"query":"TRUNCATE TABLE PRODUCTBOARD_FEATURES;","operation":"executeQuery"},"credentials":{"snowflake":{"id":"{{ $credentials.snowflake.id }}","name":"Snowflake"}},"executeOnce":true,"typeVersion":1,"notes":"This snowflake node performs automated tasks as part of the workflow."},{"id":"df076304-ce27-4801-8e0f-c268b313ef4e","name":"Loop Over Items features","type":"n8n-nodes-base.splitInBatches","position":[4640,-180],"parameters":{"options":{},"batchSize":100},"typeVersion":3,"notes":"This splitInBatches node performs automated tasks as part of the workflow."},{"id":"40732e40-5ff2-4b1f-b300-b6b734e31637","name":"Manual mapping features db","type":"n8n-nodes-base.set","position":[4900,-160],"parameters":{"fields":{"values":[{"name":"FEATURE_ID","stringValue":"={{ $json.feature_id }}"},{"name":"FEATURE_NAME","stringValue":"={{ $json.feature_name }}"},{"name":"FEATURE_STATUS","stringValue":"={{ $json.feature_status }}"},{"name":"FEATURE_START_DATE","stringValue":"={{ $json.feature_start_date }}"},{"name":"FEATURE_END_DATE","stringValue":"={{ $json.feature_end_date }}"},{"name":"FEATURE_OWNER","stringValue":"={{ $json.feature_owner }}"},{"name":"FEATURE_CREATED_AT","stringValue":"={{ $json.feature_created_at }}"}]},"include":"none","options":{}},"typeVersion":3.2,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"59a838c4-fef0-4902-b6d6-418934ac986f","name":"Update Productboard Features","type":"n8n-nodes-base.snowflake","position":[5140,-160],"parameters":{"table":"PRODUCTBOARD_FEATURES","columns":"FEATURE_ID,FEATURE_NAME,FEATURE_STATUS,FEATURE_START_DATE,FEATURE_END_DATE,FEATURE_OWNER,FEATURE_CREATED_AT"},"credentials":{"snowflake":{"id":"{{ $credentials.snowflake.id }}","name":"Snowflake"}},"typeVersion":1,"notes":"This snowflake node performs automated tasks as part of the workflow."},{"id":"110ebd3a-50ac-4e9f-9297-f64759dfdd18","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[2980,-180],"parameters":{"rule":{"interval":[{"field":"weeks","triggerAtDay":[1],"triggerAtHour":8}]}},"typeVersion":1.1,"notes":"This scheduleTrigger node performs automated tasks as part of the workflow."},{"id":"3eb88f88-8fad-4aaf-b6f9-6f7d87e30018","name":"Slack","type":"n8n-nodes-base.slack","onError":"continueRegularOutput","position":[5900,1220],"parameters":{"text":"=","select":"channel","blocksUi":"={\n  \"blocks\": [\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": \":productboard: Weekly Update in :snowflake_logo: Completed\\n\\n*{{ $json.NOTES_7_DAYS }}* new insights added in the last 7 days.\\n\\n*{{ $json.NOTES_UNPROCESSED }}* insights remain unprocessed.\\n\\nYou can view the updated :metabase: dashboard below:\"\n      }\n    },\n    {\n      \"type\": \"actions\",\n      \"elements\": [\n        {\n          \"type\": \"button\",\n          \"text\": {\n            \"type\": \"plain_text\",\n            \"text\": \"Open Dashboard\",\n            \"emoji\": true\n          },\n          \"url\": \"{{ $env.WEBHOOK_URL }}\"\n        }\n      ]\n    }\n  ]\n}","channelId":{"__rl":true,"mode":"name","value":"#product-notifications"},"messageType":"block","otherOptions":{}},"credentials":{"slackApi":{"id":"SG3oDwwLGpxwoJSO","name":"Gardien Slack bot"}},"executeOnce":true,"retryOnFail":false,"typeVersion":2.1,"notes":"This slack node performs automated tasks as part of the workflow."},{"id":"3a16d947-a218-4ec2-8081-19b676bb51c3","name":"Count Notes Last 7 days and Unprocessed","type":"n8n-nodes-base.snowflake","position":[5660,1220],"parameters":{"query":"SELECT\n    COUNT(DISTINCT CASE \n        WHEN DATEDIFF(DAY, NOTE_CREATED_AT, CURRENT_DATE()) <= 7 THEN note_id \n    END) AS notes_7_days,\n    COUNT(DISTINCT CASE \n        WHEN NOTE_STATE = 'unprocessed' THEN note_id \n    END) AS notes_unprocessed\nFROM PRODUCTBOARD_NOTES;\n","operation":"executeQuery"},"credentials":{"snowflake":{"id":"{{ $credentials.snowflake.id }}","name":"Snowflake"}},"executeOnce":true,"typeVersion":1,"notes":"This snowflake node performs automated tasks as part of the workflow."},{"id":"2bdfb96c-1c38-444d-9507-ab74f3572129","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[2980,1060],"parameters":{"color":5,"width":983.4896175671602,"height":314.88047081122676,"content":"## Setup snowflake tables"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."}],"active":false,"settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"versionId":"","connections":{"get productboard companies":{"main":[[],[],[],[],[],[],[],[],[]]},"get productboard notes":{"main":[[],[],[],[],[],[],[],[],[]]},"get productboard features":{"main":[[],[],[],[],[],[],[],[],[]]},"Slack":{"main":[[]]}},"description":"Automated workflow: Import Productboard Notes, Companies and Features into Snowflake. This workflow integrates 9 different services: stickyNote, httpRequest, scheduleTrigger, splitOut, set. It contains 42 nodes and follows best practices for error handling and security.","notes":"Excellent quality workflow: Import Productboard Notes, Companies and Features into Snowflake. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}