Iconfinder 아이콘 메타데이터 내보내기 도구
중급
이것은Document Extraction분야의자동화 워크플로우로, 14개의 노드를 포함합니다.주로 Set, Code, Merge, HttpRequest, ConvertToFile 등의 노드를 사용하며. Iconfinder 아이콘 메타데이터를 미리보기 포함한 HTML과 CSV 파일로 내보내
사전 요구사항
- •대상 API의 인증 정보가 필요할 수 있음
카테고리
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"id": "qdS91sG3hztdG5ph",
"meta": {
"instanceId": "515f57acad147c546d38bf83168a24fa18ff00abe183d8ac2411ef1b487a303c"
},
"name": "Icon Metadata Exporter for Iconfinder",
"tags": [
{
"id": "BQOruVpPYK0Bwfmm",
"name": "published",
"createdAt": "2025-11-01T00:26:11.530Z",
"updatedAt": "2025-11-01T00:26:11.530Z"
}
],
"nodes": [
{
"id": "82b67e73-e06b-4076-bdb7-47a023dd70d6",
"name": "워크플로우 실행 시",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-480,
-140
],
"parameters": {},
"typeVersion": 1
},
{
"id": "55e848a7-d8ba-42dd-abfe-5b70f0a155c1",
"name": "아이콘셋 가져오기",
"type": "n8n-nodes-base.httpRequest",
"position": [
-140,
-40
],
"parameters": {
"url": "=https://api.iconfinder.com/v4/users/{{ $json.user }}/iconsets?count=100&offset=0",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "={{$json.authorization}}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "3e0e3c84-d764-4c0d-9cf0-4519e73cffdc",
"name": "아이콘셋 분할",
"type": "n8n-nodes-base.code",
"position": [
0,
-40
],
"parameters": {
"jsCode": "const iconsets = items[0].json.iconsets || [];\nconst countPerRequest = 100; // Max per request\nlet output = [];\n\niconsets.forEach(iconset => {\n const iconsetName = iconset.name;\n const totalIcons = iconset.icons_count || 0;\n const numRequests = Math.ceil(totalIcons / countPerRequest);\n\n for (let i = 0; i < numRequests; i++) {\n const offset = i * countPerRequest;\n\n output.push({\n json: {\n iconset_id: iconset.iconset_id,\n iconset_name: iconsetName,\n iconset_identifier: iconset.identifier,\n // HTTP Node URL\n url: `https://api.iconfinder.com/v4/iconsets/${iconset.iconset_id}/icons?count=${countPerRequest}&offset=${offset}`,\n offset: offset\n }\n });\n }\n});\n\nreturn output;\n"
},
"typeVersion": 2
},
{
"id": "45f7fcf7-5695-4392-a737-63b1c2992c72",
"name": "아이콘 상세 정보 가져오기",
"type": "n8n-nodes-base.httpRequest",
"position": [
360,
-120
],
"parameters": {
"url": "={{ $json.url }}",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "={{ $json.authorization }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "90f07556-1fbf-47e1-bf90-064055a9b264",
"name": "태그 및 이름 추출",
"type": "n8n-nodes-base.code",
"position": [
520,
-120
],
"parameters": {
"jsCode": "\n\nlet output = [];\n\nitems.forEach(item => {\n const iconset_id = item.json.iconset_id;\n const iconset_name_input = item.json.iconset_name; // Input value, may be empty\n const icons = item.json.icons || [];\n\n icons.forEach(icon => {\n // Check raster sizes\n const rasterSizes = icon.raster_sizes || [];\n // Choose the largest size <= 128, if available\n let bestSize = rasterSizes\n .filter(rs => rs.size <= 128)\n .sort((a, b) => b.size - a.size)[0] // largest <=128\n || rasterSizes[rasterSizes.length - 1]; // fallback: largest available\n\n\n const url = bestSize?.formats?.[0]?.preview_url\n || icon.vector_sizes?.[0]?.formats?.[0]?.download_url\n || \"\";\n\n // Extract filename from URL\n const filename = url.split(\"/\").pop() || \"\";\n\n const nameWithExtRemoved = filename.replace(/-\\d+(\\.\\w+)$/, \"\");\n\n // Replace underscores with spaces → original name\n const originalName = nameWithExtRemoved.replace(/_/g, \" \");\n\n // Determine iconset name from URL ONLY if the input value is empty/missing\n let iconset_name = iconset_name_input || \"\";\n if (!iconset_name && url) {\n const marker = \"/data/icons/\";\n const idx = url.indexOf(marker);\n if (idx !== -1) {\n // Take everything after \"/data/icons/\"\n const after = url.slice(idx + marker.length); \n const firstSegment = (after.split(\"/\")[0] || \"\"); \n // Remove numeric suffix and replace separators with spaces\n const withoutNumber = firstSegment.replace(/-\\d+$/, \"\");\n iconset_name = withoutNumber.replace(/[_-]+/g, \" \").trim();\n }\n }\n\n output.push({\n json: {\n icon_id: icon.icon_id,\n iconset_id,\n iconset_name,\n name: originalName, // now real icon label\n tags: (icon.tags || []).join(\", \"),\n preview_url: url\n }\n });\n });\n});\n\nreturn output;\n"
},
"typeVersion": 2
},
{
"id": "c468a92a-6016-47ef-b75e-aeacf32106bd",
"name": "HTML 생성",
"type": "n8n-nodes-base.code",
"position": [
760,
-180
],
"parameters": {
"jsCode": "if (!items || items.length === 0) return [];\n\nlet totalIcons = items.length;\n\nlet html = `\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<title>Icons: ${totalIcons}</title>\n<style>\nbody {font-family: Arial, Helvetica, sans-serif;\n}\ntable {\n border-collapse: collapse;\n width: 100%;\n}\ntable, th, td {\n border: 1px solid #ccc;\n}\nth, td {\n padding: 5px;\n text-align: left;\n}\n</style>\n</head>\n<body>\n<h1>Icons: ${totalIcons}</h1>\n<table>\n<tr><th>Icon</th><th>Name</th><th>Tags</th><th>Iconset</th></tr>\n`;\n\nitems.forEach(item => {\n const icon = item.json;\n const preview = icon.preview_url || \"\";\n const name = icon.name || \"\";\n const tags = icon.tags || \"\";\n const iconset_name = icon.iconset_name || \"\";\n html += `<tr>\n<td><img src=\"${preview}\" width=\"64\" height=\"64\"></td>\n<td>${name}</td>\n<td>${tags}</td>\n<td>${iconset_name}</td>\n</tr>`;\n});\n\nhtml += `\n</table>\n</body>\n</html>\n`;\n\nconst base64Data = Buffer.from(html, 'utf-8').toString('base64');\n\nreturn [\n {\n json: { message: \"HTML file created\" },\n binary: {\n data: {\n data: base64Data,\n mimeType: 'text/html',\n fileName: 'icons.html'\n }\n }\n }\n];\n"
},
"typeVersion": 2,
"alwaysOutputData": false
},
{
"id": "8b2c3559-f007-4763-931a-8e65dd562363",
"name": "Create CSV",
"type": "n8n-nodes-base.convertToFile",
"position": [
760,
-40
],
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "bd806c51-d27d-4fdd-8a8d-d56a78ff6768",
"name": "병합",
"type": "n8n-nodes-base.merge",
"position": [
200,
-120
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineAll"
},
"typeVersion": 3.2
},
{
"id": "a3d51e37-6aaf-4fe3-88e0-734ebb15c81e",
"name": "인증 설정",
"type": "n8n-nodes-base.set",
"position": [
-320,
-140
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "1cfa6e52-8897-491c-8c58-e3a53fc052c7",
"name": "authorization",
"type": "string",
"value": "Bearer YOUR_TOKEN_HERE"
},
{
"id": "c2e616b7-0ea2-4c2d-9f5e-d9401e9d82e0",
"name": "user",
"type": "string",
"value": "YOUR USER ID"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a5b0bb66-fb25-41a7-b90d-b8547f56ad12",
"name": "사용자 ID 확인",
"type": "n8n-nodes-base.httpRequest",
"position": [
-980,
0
],
"parameters": {
"url": "=https://api.iconfinder.com/v4/icons/ICON-ID",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer YOUR_TOKEN_HERE"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "68824d40-a6fb-4c09-988b-e89d5159480e",
"name": "스티커 메모",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1240,
-300
],
"parameters": {
"color": 4,
"width": 640,
"height": 480,
"content": "## 2. Check User ID\n1) Navigate to any icon owned by the user and copy the **icon id** from the URL: \n `https://www.iconfinder.com/icons/ICON-ID/icon-name`\n\n2) Open the **\"Check User ID\"** node and append **`ICON-ID`** to the URL field like this: \n `https://api.iconfinder.com/v4/icons/ICON-ID`\n\n3) For the Authorization value, use: \n **Bearer YOUR_TOKEN_HERE**\n\n4) Execute the step. You will find the numeric **\"user_id\"** in the output.\n"
},
"typeVersion": 1
},
{
"id": "2e77afe7-8047-4246-a3e0-c86038df4eca",
"name": "스티커 메모1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1920,
-300
],
"parameters": {
"color": 6,
"width": 640,
"height": 480,
"content": "## 1. Register an Application to Obtain an API Key\nYou need to register an application to get an **API Key** here: https://www.iconfinder.com/account/applications \n\nNote: You may need to create a developer account before registering your application."
},
"typeVersion": 1
},
{
"id": "932133cc-5756-4046-a839-e8e6db80cd64",
"name": "스티커 메모2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-560,
-300
],
"parameters": {
"color": 7,
"width": 1600,
"height": 480,
"content": "## 3. Config & Execute\n1) Open the **\"Auth Settings\"** node and set the **`authorization`** value to: **Bearer YOUR_TOKEN_HERE**\n2) Change the **`user`** value to the **user_id** obtained from the previous step.\n3) Execute the workflow.\n\n"
},
"typeVersion": 1
},
{
"id": "1eae398b-7e24-4b13-a3ea-1d1d933d7830",
"name": "스티커 메모3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2600,
-300
],
"parameters": {
"width": 640,
"height": 480,
"content": "## Iconfinder Export\nThis workflow is designed to automatically fetch all icons from an Iconfinder user account, including all associated metadata such as tags, icon names, and the iconset they belong to.\n\nThis workflow exports an HTML file with icon previews and a CSV file containing all icons from the user account. It fundamentally simplifies exporting the icons as a list with their corresponding tags, making it easier to review, catalog, or reuse your icon library."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "0e04a00d-6a29-48fc-9a04-5f52795a094e",
"connections": {
"bd806c51-d27d-4fdd-8a8d-d56a78ff6768": {
"main": [
[
{
"node": "45f7fcf7-5695-4392-a737-63b1c2992c72",
"type": "main",
"index": 0
}
]
]
},
"c468a92a-6016-47ef-b75e-aeacf32106bd": {
"main": [
[]
]
},
"55e848a7-d8ba-42dd-abfe-5b70f0a155c1": {
"main": [
[
{
"node": "3e0e3c84-d764-4c0d-9cf0-4519e73cffdc",
"type": "main",
"index": 0
}
]
]
},
"a3d51e37-6aaf-4fe3-88e0-734ebb15c81e": {
"main": [
[
{
"node": "bd806c51-d27d-4fdd-8a8d-d56a78ff6768",
"type": "main",
"index": 0
},
{
"node": "55e848a7-d8ba-42dd-abfe-5b70f0a155c1",
"type": "main",
"index": 0
}
]
]
},
"3e0e3c84-d764-4c0d-9cf0-4519e73cffdc": {
"main": [
[
{
"node": "bd806c51-d27d-4fdd-8a8d-d56a78ff6768",
"type": "main",
"index": 1
}
]
]
},
"45f7fcf7-5695-4392-a737-63b1c2992c72": {
"main": [
[
{
"node": "90f07556-1fbf-47e1-bf90-064055a9b264",
"type": "main",
"index": 0
}
]
]
},
"90f07556-1fbf-47e1-bf90-064055a9b264": {
"main": [
[
{
"node": "8b2c3559-f007-4763-931a-8e65dd562363",
"type": "main",
"index": 0
},
{
"node": "c468a92a-6016-47ef-b75e-aeacf32106bd",
"type": "main",
"index": 0
}
]
]
},
"82b67e73-e06b-4076-bdb7-47a023dd70d6": {
"main": [
[
{
"node": "a3d51e37-6aaf-4fe3-88e0-734ebb15c81e",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
중급 - 문서 추출
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
AI-Deepseek-R1t 회사 출장 승인 및 경비 승인 요청
Deepseek AI, Gmail, Google Sheets를 통한 회의 출장 승인 자동화
If
Set
Code
+
If
Set
Code
24 노드Cheng Siong Chin
문서 추출
VEXA, OpenAI 및 Mem0를 사용한 회의 인텔리전스 분석 자동화
VEXA, OpenAI 및 Mem0를 사용한 자동화된 회의 대화 인사이트 분석
Set
Code
Merge
+
Set
Code
Merge
26 노드Stephan Koning
문서 추출
Telegram을 사용하여 Mistral OCR를 통해 이미지와 PDF에서 텍스트를 Markdown로 추출
Telegram을 통해 Mistral OCR을 사용하여 이미지와 PDF에서 텍스트를 추출하여 Markdown로
If
Set
Code
+
If
Set
Code
40 노드Rostislav
문서 추출
PDF 템플릿 추출
Google Sheets 추적을 위한 Llama AI 모델
Set
Code
Html
+
Set
Code
Html
24 노드Cristian Baño Belchí
문서 추출
전사 평가기
DeepGram 및 GPT-4o를 사용한 오디오 대화 분석 및 시각화
Set
Code
Html
+
Set
Code
Html
54 노드RealSimple Solutions
인공지능
OpenAI, ElevenLabs 및 Fal.ai를 사용한 비디오, 팟캐스트 및 ASMR용 바이럴 콘텐츠 제작 자동화
OpenAI, ElevenLabs 및 Fal.ai를 사용한 비디오, 팟캐스트 및 ASMR용 바이럴 콘텐츠 제작 자동화
Set
Code
Wait
+
Set
Code
Wait
97 노드Adam Crafts
콘텐츠 제작