{
  "workflow": {
    "id": 6640,
    "name": "Organize & analyze creative assets with ScrapeGraphAI and Google Sheets dashboard",
    "views": 356,
    "recentViews": 0,
    "totalViews": 356,
    "createdAt": "2025-07-29T13:59:59.572Z",
    "description": "# Creative Asset Manager with ScrapeGraphAI Analysis and Brand Compliance\n\n## 🎯 Target Audience\n- Creative directors and design managers\n- Marketing teams managing brand assets\n- Digital asset management (DAM) administrators\n- Brand managers ensuring compliance\n- Content creators and designers\n- Marketing operations teams\n- Creative agencies managing client assets\n- Brand compliance officers\n\n## 🚀 Problem Statement\nManaging creative assets manually is inefficient and error-prone, often leading to inconsistent branding, poor organization, and compliance issues. This template solves the challenge of automatically analyzing, organizing, and ensuring brand compliance for creative assets using AI-powered analysis and automated workflows.\n\n## 🔧 How it Works\n\nThis workflow automatically processes uploaded creative assets using ScrapeGraphAI for intelligent analysis, generates comprehensive tags, checks brand compliance, organizes files systematically, and maintains a centralized dashboard for creative teams.\n\n### Key Components\n\n1. **Asset Upload Trigger** - Webhook endpoint that activates when new creative assets are uploaded\n2. **ScrapeGraphAI Asset Analyzer** - Uses AI to extract detailed information from visual assets\n3. **Tag Generator** - Creates comprehensive, searchable tags based on asset analysis\n4. **Brand Compliance Checker** - Evaluates assets against brand guidelines and standards\n5. **Asset Organizer** - Creates organized folder structures and standardized naming\n6. **Creative Team Dashboard** - Updates Google Sheets with organized asset information\n\n## 📊 Google Sheets Column Specifications\n\nThe template creates the following columns in your Google Sheets:\n\n| Column | Data Type | Description | Example |\n|--------|-----------|-------------|---------|\n| **asset_id** | String | Unique asset identifier | \"asset_1703123456789_abc123def\" |\n| **name** | String | Standardized filename | \"image-social-media-2024-01-15T10-30-00.jpg\" |\n| **path** | String | Storage location path | \"/creative-assets/2024/01/image/social-media\" |\n| **asset_type** | String | Type of creative asset | \"image\" |\n| **dimensions** | String | Asset dimensions | \"1920x1080\" |\n| **file_format** | String | File format | \"jpg\" |\n| **primary_colors** | Array | Extracted color palette | [\"#FF6B35\", \"#004E89\"] |\n| **content_description** | String | AI-generated content description | \"Modern office workspace with laptop\" |\n| **text_content** | String | Any text visible in asset | \"Welcome to our workspace\" |\n| **style_elements** | Array | Detected style characteristics | [\"modern\", \"minimalist\"] |\n| **generated_tags** | Array | Comprehensive tag list | [\"high-resolution\", \"brand-logo\", \"social-media\"] |\n| **usage_context** | String | Suggested usage context | \"social-media\" |\n| **brand_elements** | Array | Detected brand elements | [\"logo\", \"typography\"] |\n| **compliance_score** | Number | Brand compliance score (0-100) | 85 |\n| **compliance_status** | String | Approval status | \"approved-with-warnings\" |\n| **compliance_issues** | Array | List of compliance problems | [\"Non-brand colors detected\"] |\n| **upload_date** | DateTime | Asset upload timestamp | \"2024-01-15T10:30:00Z\" |\n| **searchable_keywords** | String | Search-optimized keywords | \"image social-media modern brand-logo\" |\n\n## 🛠️ Setup Instructions\n\n**Estimated setup time: 25-30 minutes**\n\n### Prerequisites\n- n8n instance with community nodes enabled\n- ScrapeGraphAI API account and credentials\n- Google Sheets account with API access\n- File upload system or DAM integration\n- Brand guidelines document (for compliance configuration)\n\n### Step-by-Step Configuration\n\n#### 1. Install Community Nodes\n```bash\n# Install required community nodes\nnpm install n8n-nodes-scrapegraphai\n```\n\n#### 2. Configure ScrapeGraphAI Credentials\n- Navigate to Credentials in your n8n instance\n- Add new ScrapeGraphAI API credentials\n- Enter your API key from ScrapeGraphAI dashboard\n- Test the connection to ensure it's working\n\n#### 3. Set up Google Sheets Connection\n- Add Google Sheets OAuth2 credentials\n- Grant necessary permissions for spreadsheet access\n- Create a new spreadsheet for creative asset management\n- Configure the sheet name (default: \"Creative Assets Dashboard\")\n\n#### 4. Configure Webhook Trigger\n- Set up the webhook endpoint for asset uploads\n- Configure the webhook URL in your file upload system\n- Ensure `asset_url` parameter is passed in webhook payload\n- Test webhook connectivity\n\n#### 5. Customize Brand Guidelines\n- Update the Brand Compliance Checker node with your brand colors\n- Configure approved file formats and size limits\n- Set required brand elements and fonts\n- Define resolution standards and quality requirements\n\n#### 6. Configure Asset Organization\n- Customize folder structure preferences\n- Set up naming conventions for different asset types\n- Configure metadata extraction preferences\n- Set up search optimization parameters\n\n#### 7. Test and Validate\n- Upload a test asset to trigger the workflow\n- Verify all analysis steps complete successfully\n- Check Google Sheets for proper data formatting\n- Validate brand compliance scoring\n\n## 🔄 Workflow Customization Options\n\n### Modify Analysis Parameters\n- Adjust ScrapeGraphAI prompts for specific asset types\n- Customize tag generation algorithms\n- Modify color analysis sensitivity\n- Add industry-specific analysis criteria\n\n### Extend Brand Compliance\n- Add more sophisticated brand guideline checks\n- Implement automated correction suggestions\n- Include legal compliance verification\n- Add accessibility compliance checks\n\n### Customize Organization Structure\n- Modify folder hierarchy based on team preferences\n- Implement custom naming conventions\n- Add version control and asset history\n- Configure backup and archiving rules\n\n### Output Customization\n- Add integration with DAM systems\n- Implement asset approval workflows\n- Create automated reporting and analytics\n- Add team collaboration features\n\n## 📈 Use Cases\n\n- **Brand Asset Management**: Automatically organize and tag brand assets\n- **Compliance Monitoring**: Ensure all assets meet brand guidelines\n- **Creative Team Collaboration**: Centralized asset management and sharing\n- **Marketing Campaign Management**: Organize assets by campaign and context\n- **Asset Discovery**: AI-powered search and recommendation system\n- **Quality Control**: Automated quality and compliance checks\n\n## 🚨 Important Notes\n\n- Respect ScrapeGraphAI API rate limits and terms of service\n- Implement appropriate delays between requests to avoid rate limiting\n- Regularly review and update brand guidelines in the compliance checker\n- Monitor API usage to manage costs effectively\n- Keep your credentials secure and rotate them regularly\n- Consider data privacy and copyright compliance for creative assets\n- Ensure proper backup and version control for important assets\n\n## 🔧 Troubleshooting\n\n**Common Issues:**\n- ScrapeGraphAI connection errors: Verify API key and account status\n- Webhook trigger failures: Check webhook URL and payload format\n- Google Sheets permission errors: Check OAuth2 scope and permissions\n- Asset analysis errors: Review the ScrapeGraphAI prompt configuration\n- Brand compliance false positives: Adjust guideline parameters\n- File organization issues: Check folder permissions and naming conventions\n\n**Support Resources:**\n- ScrapeGraphAI documentation and API reference\n- n8n community forums for workflow assistance\n- Google Sheets API documentation for advanced configurations\n- Digital asset management best practices\n- Brand compliance and governance guidelines\n",
    "workflow": {
      "id": "VhEwspDqzu7ssFVE",
      "meta": {
        "instanceId": "f4b0efaa33080e7774e0d9285c40c7abcd2c6f7cf1a8b901fa7106170dd4cda3",
        "templateCredsSetupCompleted": true
      },
      "name": "My workflow 2",
      "tags": [
        {
          "id": "DxXGubfBzRKh6L8T",
          "name": "Revenue Optimization",
          "createdAt": "2025-07-25T16:24:30.370Z",
          "updatedAt": "2025-07-25T16:24:30.370Z"
        },
        {
          "id": "IxkcJ2IpYIxivoHV",
          "name": "Content Strategy",
          "createdAt": "2025-07-25T12:57:37.677Z",
          "updatedAt": "2025-07-25T12:57:37.677Z"
        },
        {
          "id": "PAKIJ2Mm9EvRcR3u",
          "name": "Trend Monitoring",
          "createdAt": "2025-07-25T12:57:37.670Z",
          "updatedAt": "2025-07-25T12:57:37.670Z"
        },
        {
          "id": "YtfXmaZk44MYedPO",
          "name": "Dynamic Pricing",
          "createdAt": "2025-07-25T16:24:30.369Z",
          "updatedAt": "2025-07-25T16:24:30.369Z"
        },
        {
          "id": "wJ30mjhtrposO8Qt",
          "name": "Simple RAG",
          "createdAt": "2025-07-28T12:55:14.424Z",
          "updatedAt": "2025-07-28T12:55:14.424Z"
        }
      ],
      "nodes": [
        {
          "id": "9fb6f606-17ca-4f31-8990-dd91d7bd54d2",
          "name": "Asset Upload Trigger",
          "type": "n8n-nodes-base.webhook",
          "position": [
            656,
            96
          ],
          "webhookId": "e77564cc-4a07-4e5d-a3ad-c16dae3d7fd2",
          "parameters": {
            "path": "/asset-upload",
            "options": {}
          },
          "typeVersion": 2
        },
        {
          "id": "bc568554-0784-443e-b8ee-04d51f759e61",
          "name": "ScrapeGraphAI Asset Analyzer",
          "type": "n8n-nodes-scrapegraphai.scrapegraphAi",
          "position": [
            1056,
            96
          ],
          "parameters": {
            "userPrompt": "Analyze this creative asset and extract the following information in JSON format: { \"asset_type\": \"image/video/document/audio\", \"primary_colors\": [\"#FF0000\", \"#00FF00\"], \"content_description\": \"Brief description of visual content\", \"text_content\": \"Any text visible in the asset\", \"style_elements\": [\"modern\", \"minimalist\", \"colorful\"], \"suggested_tags\": [\"marketing\", \"social-media\", \"campaign\"], \"dimensions\": \"1920x1080\", \"file_format\": \"jpg/png/mp4/pdf\", \"brand_elements\": [\"logo\", \"typography\", \"brand-colors\"], \"usage_context\": \"social-media/print/web/presentation\" }",
            "websiteUrl": "={{ $json.asset_url }}"
          },
          "typeVersion": 1
        },
        {
          "id": "f7da27a9-91e0-479e-88a4-b0315c80683e",
          "name": "Tag Generator",
          "type": "n8n-nodes-base.code",
          "position": [
            1456,
            96
          ],
          "parameters": {
            "jsCode": "// Get the analyzed asset data\nconst assetData = $input.all()[0].json.result;\n\n// Enhanced tag generation based on analysis\nfunction generateTags(data) {\n  const tags = new Set();\n  \n  // Add basic type tags\n  if (data.asset_type) {\n    tags.add(data.asset_type);\n    tags.add(`${data.asset_type}-content`);\n  }\n  \n  // Add color-based tags\n  if (data.primary_colors && data.primary_colors.length > 0) {\n    data.primary_colors.forEach(color => {\n      const colorName = getColorName(color);\n      if (colorName) tags.add(colorName);\n    });\n  }\n  \n  // Add style tags\n  if (data.style_elements) {\n    data.style_elements.forEach(style => tags.add(style));\n  }\n  \n  // Add suggested tags\n  if (data.suggested_tags) {\n    data.suggested_tags.forEach(tag => tags.add(tag));\n  }\n  \n  // Add usage context tags\n  if (data.usage_context) {\n    tags.add(data.usage_context);\n    tags.add(`${data.usage_context}-ready`);\n  }\n  \n  // Add brand element tags\n  if (data.brand_elements) {\n    data.brand_elements.forEach(element => tags.add(`brand-${element}`));\n  }\n  \n  // Add dimension-based tags\n  if (data.dimensions) {\n    const [width, height] = data.dimensions.split('x').map(Number);\n    if (width > height) tags.add('landscape');\n    else if (height > width) tags.add('portrait');\n    else tags.add('square');\n    \n    // Add size categories\n    if (width >= 1920) tags.add('high-resolution');\n    if (width <= 800) tags.add('web-optimized');\n  }\n  \n  return Array.from(tags);\n}\n\n// Simple color name mapping\nfunction getColorName(hex) {\n  const colorMap = {\n    '#FF0000': 'red', '#00FF00': 'green', '#0000FF': 'blue',\n    '#FFFF00': 'yellow', '#FF00FF': 'magenta', '#00FFFF': 'cyan',\n    '#000000': 'black', '#FFFFFF': 'white', '#808080': 'gray'\n  };\n  return colorMap[hex.toUpperCase()];\n}\n\nconst generatedTags = generateTags(assetData);\n\nreturn [{\n  json: {\n    ...assetData,\n    generated_tags: generatedTags,\n    tag_count: generatedTags.length,\n    processed_at: new Date().toISOString()\n  }\n}];"
          },
          "typeVersion": 2
        },
        {
          "id": "57ed5ecc-ebd2-430e-a736-133cad217a21",
          "name": "Brand Compliance Checker",
          "type": "n8n-nodes-base.code",
          "position": [
            1856,
            96
          ],
          "parameters": {
            "jsCode": "// Brand compliance checker\nconst assetData = $input.all()[0].json;\n\n// Define brand guidelines (customize these for your brand)\nconst brandGuidelines = {\n  approvedColors: ['#FF6B35', '#004E89', '#1A659E', '#FFFFFF', '#000000'],\n  forbiddenColors: ['#FF0000', '#00FF00'], // Bright red and green\n  requiredElements: ['brand-logo'],\n  approvedFonts: ['Arial', 'Helvetica', 'Roboto'],\n  maxFileSize: 10485760, // 10MB in bytes\n  approvedFormats: ['jpg', 'png', 'svg', 'pdf', 'mp4'],\n  minResolution: { width: 800, height: 600 }\n};\n\nfunction checkBrandCompliance(data, guidelines) {\n  const compliance = {\n    score: 100,\n    issues: [],\n    warnings: [],\n    passed: true,\n    details: {}\n  };\n  \n  // Check colors\n  if (data.primary_colors) {\n    const nonCompliantColors = data.primary_colors.filter(\n      color => !guidelines.approvedColors.includes(color.toUpperCase())\n    );\n    \n    if (nonCompliantColors.length > 0) {\n      compliance.issues.push(`Non-brand colors detected: ${nonCompliantColors.join(', ')}`);\n      compliance.score -= 20;\n    }\n    \n    // Check for forbidden colors\n    const forbiddenFound = data.primary_colors.filter(\n      color => guidelines.forbiddenColors.includes(color.toUpperCase())\n    );\n    \n    if (forbiddenFound.length > 0) {\n      compliance.issues.push(`Forbidden colors used: ${forbiddenFound.join(', ')}`);\n      compliance.score -= 30;\n    }\n  }\n  \n  // Check brand elements\n  if (data.brand_elements) {\n    const missingElements = guidelines.requiredElements.filter(\n      element => !data.brand_elements.includes(element)\n    );\n    \n    if (missingElements.length > 0) {\n      compliance.warnings.push(`Missing brand elements: ${missingElements.join(', ')}`);\n      compliance.score -= 10;\n    }\n  } else {\n    compliance.issues.push('No brand elements detected');\n    compliance.score -= 25;\n  }\n  \n  // Check file format\n  if (data.file_format && !guidelines.approvedFormats.includes(data.file_format.toLowerCase())) {\n    compliance.issues.push(`Unsupported file format: ${data.file_format}`);\n    compliance.score -= 15;\n  }\n  \n  // Check dimensions\n  if (data.dimensions) {\n    const [width, height] = data.dimensions.split('x').map(Number);\n    if (width < guidelines.minResolution.width || height < guidelines.minResolution.height) {\n      compliance.warnings.push(`Resolution below recommended minimum (${guidelines.minResolution.width}x${guidelines.minResolution.height})`);\n      compliance.score -= 5;\n    }\n  }\n  \n  // Determine overall compliance status\n  if (compliance.score >= 90) {\n    compliance.status = 'approved';\n  } else if (compliance.score >= 70) {\n    compliance.status = 'approved-with-warnings';\n  } else {\n    compliance.status = 'rejected';\n    compliance.passed = false;\n  }\n  \n  return compliance;\n}\n\nconst complianceResult = checkBrandCompliance(assetData, brandGuidelines);\n\nreturn [{\n  json: {\n    ...assetData,\n    brand_compliance: complianceResult,\n    compliance_checked_at: new Date().toISOString()\n  }\n}];"
          },
          "typeVersion": 2
        },
        {
          "id": "59b86ee2-3b44-41f0-bbc0-00cdafc5cfb6",
          "name": "Asset Organizer",
          "type": "n8n-nodes-base.code",
          "position": [
            2336,
            96
          ],
          "parameters": {
            "jsCode": "// Asset organizer - creates folder structure and metadata\nconst assetData = $input.all()[0].json;\n\nfunction organizeAsset(data) {\n  const organization = {\n    folder_structure: [],\n    metadata: {},\n    file_naming: '',\n    storage_location: ''\n  };\n  \n  // Create folder structure based on asset properties\n  const basePath = '/creative-assets';\n  \n  // Year/Month organization\n  const now = new Date();\n  const year = now.getFullYear();\n  const month = String(now.getMonth() + 1).padStart(2, '0');\n  \n  organization.folder_structure.push(basePath);\n  organization.folder_structure.push(`${basePath}/${year}`);\n  organization.folder_structure.push(`${basePath}/${year}/${month}`);\n  \n  // Asset type folder\n  if (data.asset_type) {\n    organization.folder_structure.push(`${basePath}/${year}/${month}/${data.asset_type}`);\n  }\n  \n  // Usage context subfolder\n  if (data.usage_context) {\n    const contextPath = `${basePath}/${year}/${month}/${data.asset_type}/${data.usage_context}`;\n    organization.folder_structure.push(contextPath);\n    organization.storage_location = contextPath;\n  }\n  \n  // Generate standardized filename\n  const timestamp = now.toISOString().replace(/[:.]/g, '-').slice(0, 19);\n  const assetType = data.asset_type || 'asset';\n  const context = data.usage_context || 'general';\n  const extension = data.file_format || 'unknown';\n  \n  organization.file_naming = `${assetType}-${context}-${timestamp}.${extension}`;\n  \n  // Create comprehensive metadata\n  organization.metadata = {\n    original_filename: data.original_filename || 'unknown',\n    upload_date: now.toISOString(),\n    asset_type: data.asset_type,\n    dimensions: data.dimensions,\n    file_format: data.file_format,\n    primary_colors: data.primary_colors,\n    tags: data.generated_tags,\n    brand_compliance: data.brand_compliance,\n    usage_context: data.usage_context,\n    style_elements: data.style_elements,\n    content_description: data.content_description,\n    text_content: data.text_content,\n    searchable_keywords: [\n      ...data.generated_tags || [],\n      ...data.style_elements || [],\n      data.asset_type,\n      data.usage_context\n    ].filter(Boolean).join(' ').toLowerCase()\n  };\n  \n  return organization;\n}\n\nconst organizationResult = organizeAsset(assetData);\n\nreturn [{\n  json: {\n    ...assetData,\n    organization: organizationResult,\n    organized_at: new Date().toISOString(),\n    // Create final asset record\n    asset_record: {\n      id: `asset_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n      name: organizationResult.file_naming,\n      path: organizationResult.storage_location,\n      metadata: organizationResult.metadata,\n      status: assetData.brand_compliance?.status || 'pending',\n      created_at: new Date().toISOString()\n    }\n  }\n}];"
          },
          "typeVersion": 2
        },
        {
          "id": "1a4d79a6-f515-476b-9e63-fcc7a9776ab1",
          "name": "Creative Team Dashboard",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            2784,
            96
          ],
          "parameters": {
            "options": {},
            "operation": "appendOrUpdate",
            "sheetName": "Creative Assets Dashboard",
            "documentId": "YOUR_GOOGLE_SHEET_ID"
          },
          "typeVersion": 4
        },
        {
          "id": "da437d8a-12eb-4cb1-9f6a-f3d781c5fff0",
          "name": "Sticky Note 1",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            448,
            -304
          ],
          "parameters": {
            "color": 5,
            "width": 450,
            "height": 688,
            "content": "# Step 1: Asset Upload Trigger 📤\n\nWebhook trigger that activates when new creative assets are uploaded.\n\n## Configuration\n- Set up webhook endpoint for file uploads\n- Ensure asset_url is passed in the request\n- Can be triggered by file upload systems, DAM tools, or manual uploads"
          },
          "typeVersion": 1
        },
        {
          "id": "e1e55f60-37c0-4488-b406-72e025fe32fb",
          "name": "Sticky Note 2",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            896,
            -304
          ],
          "parameters": {
            "color": 5,
            "width": 450,
            "height": 688,
            "content": "# Step 2: ScrapeGraphAI Asset Analyzer 🤖\n\nUses AI to analyze the creative asset and extract detailed information.\n\n## Analysis Includes\n- Asset type identification\n- Color palette extraction\n- Content description\n- Style element detection\n- Brand element recognition\n- Usage context suggestions"
          },
          "typeVersion": 1
        },
        {
          "id": "fd9f4d3b-37eb-4154-a175-2cd71c8a7f63",
          "name": "Sticky Note 3",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1344,
            -304
          ],
          "parameters": {
            "color": 5,
            "width": 402,
            "height": 688,
            "content": "# Step 3: Tag Generator 🏷️\n\nGenerates comprehensive tags based on asset analysis.\n\n## Tag Categories\n- Asset type tags\n- Color-based tags\n- Style and aesthetic tags\n- Usage context tags\n- Brand element tags\n- Technical specification tags"
          },
          "typeVersion": 1
        },
        {
          "id": "8af1489e-36f9-4f5f-8876-f5bc07990302",
          "name": "Sticky Note 4",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1744,
            -304
          ],
          "parameters": {
            "color": 5,
            "width": 450,
            "height": 688,
            "content": "# Step 4: Brand Compliance Checker ✅\n\nEvaluates asset compliance with brand guidelines.\n\n## Compliance Checks\n- Approved color usage\n- Required brand elements\n- File format compliance\n- Resolution standards\n- Overall compliance scoring\n- Approval status assignment"
          },
          "typeVersion": 1
        },
        {
          "id": "1d519b5b-dc56-4cae-a6d1-b6116d031f4c",
          "name": "Sticky Note 5",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2192,
            -304
          ],
          "parameters": {
            "color": 5,
            "width": 450,
            "height": 688,
            "content": "# Step 5: Asset Organizer 📁\n\nCreates organized folder structure and standardized naming.\n\n## Organization Features\n- Date-based folder structure\n- Asset type categorization\n- Usage context grouping\n- Standardized file naming\n- Comprehensive metadata creation\n- Search optimization"
          },
          "typeVersion": 1
        },
        {
          "id": "64f0c6d5-7f75-484c-a14d-f8d27a8631d2",
          "name": "Sticky Note 6",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2640,
            -304
          ],
          "parameters": {
            "color": 5,
            "width": 450,
            "height": 688,
            "content": "# Step 6: Creative Team Dashboard 📊\n\nUpdates the team dashboard with organized asset information.\n\n## Dashboard Features\n- Asset inventory tracking\n- Compliance status monitoring\n- Tag and metadata overview\n- Search and filter capabilities\n- Team collaboration tools\n- Asset usage analytics"
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "5a2013e1-cebc-4907-9b39-bb70538e4482",
      "connections": {
        "Tag Generator": {
          "main": [
            [
              {
                "node": "Brand Compliance Checker",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Asset Organizer": {
          "main": [
            [
              {
                "node": "Creative Team Dashboard",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Asset Upload Trigger": {
          "main": [
            [
              {
                "node": "ScrapeGraphAI Asset Analyzer",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Brand Compliance Checker": {
          "main": [
            [
              {
                "node": "Asset Organizer",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "ScrapeGraphAI Asset Analyzer": {
          "main": [
            [
              {
                "node": "Tag Generator",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 29,
    "workflowInfo": {
      "nodeCount": 12,
      "nodeTypes": {
        "n8n-nodes-base.code": {
          "count": 3
        },
        "n8n-nodes-base.webhook": {
          "count": 1
        },
        "n8n-nodes-base.stickyNote": {
          "count": 6
        },
        "n8n-nodes-base.googleSheets": {
          "count": 1
        },
        "n8n-nodes-scrapegraphai.scrapegraphAi": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "vinci-king-01",
      "username": "vinci-king-01",
      "bio": "",
      "verified": true,
      "links": [
        "https://www.linkedin.com/in/marco-vinciguerra-7ba365242/"
      ],
      "avatar": "https://gravatar.com/avatar/d939eeef03a5fcb5df08bee8196f12ccb248c38209487414e419032004f0c014?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 18,
        "icon": "file:googleSheets.svg",
        "name": "n8n-nodes-base.googleSheets",
        "codex": {
          "data": {
            "alias": [
              "CSV",
              "Sheet",
              "Spreadsheet",
              "GS"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/",
                  "icon": "❤️",
                  "label": "Love at first sight: Ricardo’s n8n journey"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/",
                  "icon": "🧾",
                  "label": "Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/",
                  "icon": "🎫",
                  "label": "Supercharging your conference registration process with n8n"
                },
                {
                  "url": "https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/",
                  "icon": "⏲",
                  "label": "Creating triggers for n8n workflows using polling"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/",
                  "icon": "📈",
                  "label": "Migrating Community Metrics to Orbit using n8n"
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/your-business-doesnt-need-you-to-operate/",
                  "icon": " 🖥️",
                  "label": "Hey founders! Your business doesn't need you to operate"
                },
                {
                  "url": "https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/",
                  "icon": "🍔",
                  "label": "How Honest Burgers Use Automation to Save $100k per year"
                },
                {
                  "url": "https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/",
                  "icon": "💻",
                  "label": "How a digital strategist uses n8n for online marketing"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/",
                  "icon": "🙌",
                  "label": "Sending Automated Congratulations with Google Sheets, Twilio, and n8n "
                },
                {
                  "url": "https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/",
                  "icon": "📈",
                  "label": "How a Membership Development Manager automates his work and investments"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"
                }
              ]
            },
            "categories": [
              "Data & Storage",
              "Productivity"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"input\",\"output\"]",
        "defaults": {
          "name": "Google Sheets"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="
        },
        "displayName": "Google Sheets",
        "typeVersion": 5,
        "nodeCategories": [
          {
            "id": 3,
            "name": "Data & Storage"
          },
          {
            "id": 4,
            "name": "Productivity"
          }
        ]
      },
      {
        "id": 47,
        "icon": "file:webhook.svg",
        "name": "n8n-nodes-base.webhook",
        "codex": {
          "data": {
            "alias": [
              "HTTP",
              "API",
              "Build",
              "WH"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/",
                  "icon": "✍️",
                  "label": "Learn how to automatically cross-post your content with n8n"
                },
                {
                  "url": "https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/",
                  "icon": "🛳",
                  "label": "Running n8n on ships: An interview with Maranics"
                },
                {
                  "url": "https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/",
                  "icon": "🔗",
                  "label": "How to build a low-code, self-hosted URL shortener in 3 steps"
                },
                {
                  "url": "https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/",
                  "icon": " 🪢",
                  "label": "What are APIs and how to use them with no code"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/",
                  "icon": "💻",
                  "label": "How a digital strategist uses n8n for online marketing"
                },
                {
                  "url": "https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/",
                  "icon": "📹",
                  "label": "The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/",
                  "icon": "👏",
                  "label": "How to automatically give kudos to contributors with GitHub, Slack, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/",
                  "label": "How to automate every step of an incident response workflow"
                },
                {
                  "url": "https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/",
                  "icon": "🧰",
                  "label": "Learn to Build Powerful API Endpoints Using Webhooks"
                },
                {
                  "url": "https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/",
                  "icon": "🦄",
                  "label": "Learn how to use webhooks with Mattermost slash commands"
                },
                {
                  "url": "https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/",
                  "icon": "🛵",
                  "label": "How Goomer automated their operations with over 200 n8n workflows"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"trigger\"]",
        "defaults": {
          "name": "Webhook"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"
        },
        "displayName": "Webhook",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 565,
        "icon": "fa:sticky-note",
        "name": "n8n-nodes-base.stickyNote",
        "codex": {
          "data": {
            "alias": [
              "Comments",
              "Notes",
              "Sticky"
            ],
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Sticky Note",
          "color": "#FFD233"
        },
        "iconData": {
          "icon": "sticky-note",
          "type": "icon"
        },
        "displayName": "Sticky Note",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 834,
        "icon": "file:code.svg",
        "name": "n8n-nodes-base.code",
        "codex": {
          "data": {
            "alias": [
              "cpde",
              "Javascript",
              "JS",
              "Python",
              "Script",
              "Custom Code",
              "Function"
            ],
            "details": "The Code node allows you to execute JavaScript in your workflow.",
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers",
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Code"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="
        },
        "displayName": "Code",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 36,
        "name": "File Management"
      },
      {
        "id": 49,
        "name": "AI Summarization"
      }
    ],
    "image": []
  }
}