{
  "name": "AI Book Advisor: Reviews & Recommendations (Monetization Ready)",
  "nodes": [
    {
      "parameters": {
        "content": "## 1. Input & Config\nSet up your API keys here. You can also add your **Amazon Affiliate Tag** to monetize the recommendations sent via email.",
        "height": 300,
        "width": 480,
        "color": 7
      },
      "id": "db48b675-4ba6-4add-afca-0dd63e4ed63d",
      "name": "Sticky Note Input",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -2240,
        -192
      ]
    },
    {
      "parameters": {
        "content": "## 2. Data Enrichment\nFetches metadata (Cover, ISBN) from Google Books and searches for real-world reviews using Google Custom Search.",
        "height": 300,
        "width": 1000,
        "color": 7
      },
      "id": "a9c81cfd-3ea2-4676-b9f0-786d3e88cf25",
      "name": "Sticky Note Enrichment",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -1664,
        -192
      ]
    },
    {
      "parameters": {
        "content": "## 3. AI Analysis\n**GPT-4o** analyzes the reviews to generate a summary and suggests 3 related books in a structured JSON format.",
        "height": 460,
        "width": 600,
        "color": 7
      },
      "id": "0d241a1f-e8ad-4752-a528-663387634538",
      "name": "Sticky Note AI",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -576,
        -192
      ]
    },
    {
      "parameters": {
        "content": "## 4. Delivery & Database\nGenerates a rich HTML email with affiliate links, sends it to the user, and logs the request to Google Sheets.",
        "height": 460,
        "width": 750,
        "color": 7
      },
      "id": "b22cf7c7-08f1-42c0-ba32-9830a1930f8b",
      "name": "Sticky Note Delivery",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        112,
        -192
      ]
    },
    {
      "parameters": {
        "formTitle": "\ud83d\udcda Book Reading Advisor",
        "formDescription": "Enter a book title. AI will research it and send you a summary with recommendations.",
        "formFields": {
          "values": [
            {
              "fieldLabel": "\u66f8\u540d (Book Title)",
              "requiredField": true
            },
            {
              "fieldLabel": "\u8457\u8005\u540d (Author Name - Optional)"
            },
            {
              "fieldLabel": "\u30e1\u30fc\u30eb\u9001\u4fe1\u5148 (Email Address)",
              "fieldType": "email",
              "requiredField": true
            }
          ]
        },
        "options": {
          "buttonLabel": "Start Research"
        }
      },
      "id": "149dd9ea-ce51-4c6b-b0b1-ddec4516b76f",
      "name": "Book Input Form",
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.3,
      "position": [
        -2176,
        -96
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "googleBooksApiUrl",
              "value": "https://www.googleapis.com/books/v1/volumes",
              "type": "string"
            },
            {
              "id": "id-2",
              "name": "googleCustomSearchApiUrl",
              "value": "https://www.googleapis.com/customsearch/v1",
              "type": "string"
            },
            {
              "id": "id-3",
              "name": "googleCustomSearchApiKey",
              "value": "<__PLACEHOLDER_VALUE__Google_Custom_Search_API_Key__>",
              "type": "string"
            },
            {
              "id": "id-4",
              "name": "googleCustomSearchEngineId",
              "value": "<__PLACEHOLDER_VALUE__Search_Engine_ID__>",
              "type": "string"
            },
            {
              "id": "id-5",
              "name": "userEmail",
              "value": "={{ $json['\u30e1\u30fc\u30eb\u9001\u4fe1\u5148 (Email Address)'] }}",
              "type": "string"
            },
            {
              "id": "id-6",
              "name": "sheetId",
              "value": "<__PLACEHOLDER_VALUE__Google_Sheet_ID__>",
              "type": "string"
            },
            {
              "id": "id-7",
              "name": "amazonAffiliateTag",
              "value": "<__PLACEHOLDER_VALUE__Amazon_Associate_Tag__>",
              "type": "string"
            }
          ]
        },
        "includeOtherFields": true,
        "options": {}
      },
      "id": "f952e1d0-2b8e-4983-abc6-d1b4f2ac5d99",
      "name": "Workflow Configuration",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -1952,
        -96
      ]
    },
    {
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.googleBooksApiUrl }}?q=intitle:{{ encodeURIComponent($json.bookTitle) }}{{ $json.authorName ? '+inauthor:' + encodeURIComponent($json.authorName) : '' }}&maxResults=1&langRestrict=ja",
        "options": {
          "response": {
            "response": {
              "responseFormat": "json"
            }
          }
        }
      },
      "id": "a95844a8-84b1-4343-8461-6f4ab4e69c78",
      "name": "Search Book on Google Books API",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        -1600,
        -96
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "id": "id-1",
              "leftValue": "={{ $json.totalItems }}",
              "rightValue": "0",
              "operator": {
                "type": "number",
                "operation": "gt"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "2e0644a7-52ed-41c5-ae5b-85c998fdf009",
      "name": "Check if Book Found",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        -1376,
        -96
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "bookTitle",
              "value": "={{ $json.items[0].volumeInfo.title }}",
              "type": "string"
            },
            {
              "id": "id-2",
              "name": "bookAuthors",
              "value": "={{ $json.items[0].volumeInfo.authors ? $json.items[0].volumeInfo.authors.join(', ') : 'Unknown' }}",
              "type": "string"
            },
            {
              "id": "id-3",
              "name": "bookDescription",
              "value": "={{ $json.items[0].volumeInfo.description || 'No description available' }}",
              "type": "string"
            },
            {
              "id": "id-4",
              "name": "bookIsbn",
              "value": "={{ $json.items[0].volumeInfo.industryIdentifiers ? $json.items[0].volumeInfo.industryIdentifiers.find(id => id.type === 'ISBN_13')?.identifier || $json.items[0].volumeInfo.industryIdentifiers[0]?.identifier : 'N/A' }}",
              "type": "string"
            },
            {
              "id": "id-5",
              "name": "bookCoverImage",
              "value": "={{ $json.items[0].volumeInfo.imageLinks?.thumbnail || '' }}",
              "type": "string"
            },
            {
              "id": "id-6",
              "name": "bookPublisher",
              "value": "={{ $json.items[0].volumeInfo.publisher || 'Unknown' }}",
              "type": "string"
            },
            {
              "id": "id-7",
              "name": "bookPublishedDate",
              "value": "={{ $json.items[0].volumeInfo.publishedDate || 'Unknown' }}",
              "type": "string"
            }
          ]
        },
        "includeOtherFields": true,
        "options": {}
      },
      "id": "08a7b76f-27d5-4617-8bd1-5932d99661bf",
      "name": "Extract Book Details",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -1136,
        -96
      ]
    },
    {
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.googleCustomSearchApiUrl }}?key={{ $('Workflow Configuration').first().json.googleCustomSearchApiKey }}&cx={{ $('Workflow Configuration').first().json.googleCustomSearchEngineId }}&q={{ encodeURIComponent($json.bookTitle + ' \u66f8\u8a55 \u611f\u60f3') }}&num=5",
        "options": {
          "response": {
            "response": {
              "responseFormat": "json"
            }
          }
        }
      },
      "id": "9000298d-79ef-4c71-b33c-bef2909c2c62",
      "name": "Search Book Reviews on Google",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        -912,
        -96
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "reviewSnippets",
              "value": "={{ $json.items ? $json.items.map(item => item.snippet).join('\\n\\n') : 'No reviews found' }}",
              "type": "string"
            }
          ]
        },
        "includeOtherFields": true,
        "options": {}
      },
      "id": "1718e01c-419e-4555-bfe9-59b8a9a2a2dd",
      "name": "Prepare AI Input",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -720,
        -96
      ]
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=\u66f8\u7c4d\u60c5\u5831:\n\u66f8\u540d: {{ $json.bookTitle }}\n\u8457\u8005: {{ $json.bookAuthors }}\n\n\u3042\u3089\u3059\u3058:\n{{ $json.bookDescription }}\n\nWeb\u4e0a\u306e\u30ec\u30d3\u30e5\u30fc:\n{{ $json.reviewSnippets }}",
        "hasOutputParser": true,
        "options": {
          "systemMessage": "\u3042\u306a\u305f\u306f\u30d7\u30ed\u306e\u30d6\u30c3\u30af\u30fb\u30ad\u30e5\u30ec\u30fc\u30bf\u30fc\u3067\u3059\u3002\u8aad\u8005\u306e\u9078\u66f8\u3092\u652f\u63f4\u3057\u3001\u8aad\u66f8\u4f53\u9a13\u3092\u6df1\u3081\u308b\u305f\u3081\u306e\u63a8\u85a6\u3092\u884c\u3044\u307e\u3059\u3002\n\n\u3042\u306a\u305f\u306e\u30bf\u30b9\u30af:\n1. \u63d0\u4f9b\u3055\u308c\u305f\u66f8\u7c4d\u60c5\u5831\u3068\u30ec\u30d3\u30e5\u30fc\u3092\u5206\u6790\u3057\u3001\u3053\u306e\u672c\u306e\u9b45\u529b\u3092150\u6587\u5b57\u4ee5\u5185\u3067\u89e3\u8aac\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n2. \u3053\u306e\u672c\u306b\u95a2\u5fc3\u304c\u3042\u308b\u4eba\u304c\u3001\u3055\u3089\u306b\u7406\u89e3\u3092\u6df1\u3081\u308b\u305f\u3081\u306b\u8aad\u3080\u3079\u304d\u300c\u95a2\u9023\u66f8\u7c4d\u300d\u30923\u518a\u6319\u3052\u3066\u304f\u3060\u3055\u3044\u3002\n\n\u51fa\u529b\u306f\u5fc5\u305aJSON\u5f62\u5f0f\u3067\u884c\u3063\u3066\u304f\u3060\u3055\u3044\u3002"
        }
      },
      "id": "25927407-e447-4987-be8c-eb3feb91c712",
      "name": "Book Curator AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3,
      "position": [
        -496,
        -96
      ]
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o"
        },
        "options": {}
      },
      "id": "a4990d33-ad4e-4b4a-9dd6-7d8988f09a75",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        -512,
        144
      ],
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// Build HTML Email with Book Cover, AI Recommendations, and Purchase Links\n\nconst items = $input.all();\nconst results = [];\n\n// Get Affiliate Tag from Config\nconst configItem = $('Workflow Configuration').first();\nconst affiliateTag = configItem ? configItem.json.amazonAffiliateTag : '';\n\nfor (const item of items) {\n  const aiData = item.json;\n  const bookDetails = $('Extract Book Details').first().json;\n  \n  const bookTitle = bookDetails.bookTitle || 'Unknown Title';\n  const bookAuthor = bookDetails.bookAuthors || 'Unknown Author';\n  const bookCover = bookDetails.bookCoverImage || '';\n  const isbn = bookDetails.bookIsbn;\n\n  // Data from AI (Structured)\n  const aiComment = aiData.review_summary || 'No review available.';\n  const relatedBooks = aiData.related_books || [];\n\n  // Generate Main Book Links (with Affiliate Tag Support)\n  let mainAmazonLink = isbn && isbn !== 'N/A' \n    ? `https://www.amazon.co.jp/s?k=${isbn}` \n    : `https://www.amazon.co.jp/s?k=${encodeURIComponent(bookTitle + ' ' + bookAuthor)}`;\n  \n  if (affiliateTag && affiliateTag !== '<__PLACEHOLDER_VALUE__Amazon_Associate_Tag__>') {\n      mainAmazonLink += `&tag=${affiliateTag}`;\n  }\n    \n  const mainRakutenLink = isbn && isbn !== 'N/A'\n    ? `https://books.rakuten.co.jp/search?sitem=${isbn}`\n    : `https://books.rakuten.co.jp/search?sitem=${encodeURIComponent(bookTitle + ' ' + bookAuthor)}`;\n\n  // Helper to generate related book rows\n  let relatedBooksHtml = '';\n  relatedBooks.forEach(book => {\n    let rAmazon = `https://www.amazon.co.jp/s?k=${encodeURIComponent(book.title + ' ' + book.author)}`;\n    if (affiliateTag && affiliateTag !== '<__PLACEHOLDER_VALUE__Amazon_Associate_Tag__>') {\n      rAmazon += `&tag=${affiliateTag}`;\n    }\n\n    relatedBooksHtml += `\n      <div style=\"margin-bottom: 15px; padding-bottom: 15px; border-bottom: 1px dashed #ccc;\">\n        <p style=\"margin: 0; font-weight: bold;\">\u300e${book.title}\u300f</p>\n        <p style=\"margin: 0; font-size: 0.9em; color: #666;\">${book.author}</p>\n        <p style=\"margin: 5px 0;\">${book.reason}</p>\n        <a href=\"${rAmazon}\" style=\"font-size: 0.8em; color: #4CAF50; text-decoration: none;\">Amazon\u3067\u63a2\u3059 &rarr;</a>\n      </div>\n    `;\n  });\n\n  // Build rich HTML email\n  const htmlContent = `\n<!DOCTYPE html>\n<html lang=\"ja\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>\u8aad\u66f8\u30a2\u30c9\u30d0\u30a4\u30b6\u30fc</title>\n  <style>\n    body { font-family: sans-serif; line-height: 1.6; color: #333; max-width: 600px; margin: 0 auto; padding: 20px; background-color: #f9f9f9; }\n    .container { background-color: #ffffff; border-radius: 10px; padding: 30px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); }\n    .header { text-align: center; border-bottom: 3px solid #4CAF50; padding-bottom: 20px; margin-bottom: 30px; }\n    .book-cover { text-align: center; margin: 20px 0; }\n    .book-cover img { max-width: 150px; border-radius: 5px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); }\n    .section { margin: 25px 0; padding: 15px; background-color: #f4f4f4; border-left: 4px solid #4CAF50; }\n    .button { display: inline-block; padding: 10px 20px; margin: 5px; background-color: #FF9900; color: white; text-decoration: none; border-radius: 5px; font-weight: bold; }\n  </style>\n</head>\n<body>\n  <div class=\"container\">\n    <div class=\"header\"><h1>\ud83d\udcda \u8aad\u66f8\u30a2\u30c9\u30d0\u30a4\u30b6\u30fc</h1></div>\n    ${bookCover ? `<div class=\"book-cover\"><img src=\"${bookCover}\"></div>` : ''}\n    <h2>${bookTitle}</h2>\n    <p>\u8457\u8005: ${bookAuthor}</p>\n    <div class=\"section\"><h4>\ud83e\udd16 AI\u30ad\u30e5\u30ec\u30fc\u30bf\u30fc\u306e\u89e3\u8aac</h4><p>${aiComment}</p></div>\n    <div class=\"section\"><h4>\ud83d\udd17 \u304a\u3059\u3059\u3081\u95a2\u9023\u66f8\u7c4d</h4>${relatedBooksHtml}</div>\n    <div style=\"text-align: center;\">\n      <a href=\"${mainAmazonLink}\" class=\"button\">Amazon\u3067\u8cfc\u5165</a>\n    </div>\n  </div>\n</body>\n</html>\n  `;\n  \n  results.push({\n    json: {\n      htmlEmail: htmlContent,\n      emailSubject: `\ud83d\udcda \u66f8\u7c4d\u30ec\u30dd\u30fc\u30c8: ${bookTitle}`\n    }\n  });\n}\n\nreturn results;"
      },
      "id": "c1539010-d774-48d0-9603-e92a5bd6612a",
      "name": "Build HTML Email",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        176,
        -96
      ]
    },
    {
      "parameters": {
        "sendTo": "={{ $('Workflow Configuration').first().json.userEmail }}",
        "subject": "={{ $json.emailSubject }}",
        "message": "={{ $json.htmlEmail }}",
        "options": {}
      },
      "id": "abf0cb68-6d2f-4b45-9b22-d8b2d541dd42",
      "name": "Send Email Notification",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [
        384,
        -96
      ],
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.sheetId }}"
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "History"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "date": "={{ $now.format('yyyy-MM-dd HH:mm') }}",
            "book_title": "={{ $('Extract Book Details').first().json.bookTitle }}",
            "author": "={{ $('Extract Book Details').first().json.bookAuthors }}",
            "ai_comment": "={{ $('Book Curator AI Agent').first().json.review_summary }}",
            "user_email": "={{ $('Workflow Configuration').first().json.userEmail }}"
          }
        },
        "options": {}
      },
      "id": "ad521204-49aa-4cfc-8009-22500f5d8d77",
      "name": "Log to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        608,
        -96
      ],
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "sendTo": "={{ $('Workflow Configuration').first().json.userEmail }}",
        "subject": "\ud83d\udcda \u8aad\u66f8\u30a2\u30c9\u30d0\u30a4\u30b6\u30fc: \u66f8\u7c4d\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f",
        "emailType": "text",
        "message": "=\u7533\u3057\u8a33\u3054\u3056\u3044\u307e\u305b\u3093\u3002\n\n\u5165\u529b\u3055\u308c\u305f\u66f8\u540d\u300c{{ $('Workflow Configuration').first().json.bookTitle }}\u300d\u306b\u8a72\u5f53\u3059\u308b\u66f8\u7c4d\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\n\n\u4ee5\u4e0b\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\uff1a\n- \u66f8\u540d\u306e\u30b9\u30da\u30eb\u304c\u6b63\u3057\u3044\u304b\n- \u6b63\u5f0f\u306a\u66f8\u540d\u3067\u691c\u7d22\u3057\u3066\u3044\u308b\u304b\n- \u8457\u8005\u540d\u3092\u8ffd\u52a0\u3057\u3066\u307f\u308b\n\n\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002",
        "options": {}
      },
      "id": "3457e3dd-98c3-4880-ac5a-70a09b205b8e",
      "name": "Send Not Found Email",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [
        -1136,
        176
      ],
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsonSchemaExample": "{\n  \"review_summary\": \"This book is a masterpiece of...\",\n  \"related_books\": [\n    {\n      \"title\": \"Related Book 1\",\n      \"author\": \"Author A\",\n      \"reason\": \"Similar themes of...\"\n    },\n    {\n      \"title\": \"Related Book 2\",\n      \"author\": \"Author B\",\n      \"reason\": \"Explores the concept of...\"\n    }\n  ]\n}"
      },
      "id": "86c0c80a-2ad4-47c8-931f-a4c83491b043",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.3,
      "position": [
        -336,
        144
      ]
    },
    {
      "parameters": {
        "content": "# AI Book Advisor: Reviews & Recommendations\n\n## Overview\n**AI Book Curator with Monetization Support.** \ud83d\udcda\ud83d\udcb0\nTakes a book request, researches reviews, and sends an AI-curated summary with recommendations. Now includes **Amazon Affiliate Tag** support for monetization.\n\n## How it works\n1. **Input:** Form accepts Title & Email.\n2. **Enrich:** Fetches metadata (Google Books) & reviews (Google Search).\n3. **Analyze:** AI Agent summarizes appeal and suggests 3 related books.\n4. **Deliver:** Sends an HTML email with **Affiliate Links** and logs history to Sheets.\n\n## Setup Steps\n1. **Sheets:** Create columns: `date`, `book_title`, `author`, `ai_comment`, `user_email`.\n2. **Config:** Open **\"Sticky Note Input\"** section. Enter API Keys and optional `amazonAffiliateTag`.\n\n## Requirements\n- OpenAI & Google Custom Search API\n- Gmail & Google Sheets",
        "height": 550,
        "width": 500
      },
      "id": "09c4911c-c4d1-4106-bb0e-d5d40294034d",
      "name": "Sticky Note Main",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -2800,
        -192
      ]
    }
  ],
  "connections": {
    "Book Input Form": {
      "main": [
        [
          {
            "node": "Workflow Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Workflow Configuration": {
      "main": [
        [
          {
            "node": "Search Book on Google Books API",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search Book on Google Books API": {
      "main": [
        [
          {
            "node": "Check if Book Found",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if Book Found": {
      "main": [
        [
          {
            "node": "Extract Book Details",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Not Found Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Book Details": {
      "main": [
        [
          {
            "node": "Search Book Reviews on Google",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search Book Reviews on Google": {
      "main": [
        [
          {
            "node": "Prepare AI Input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare AI Input": {
      "main": [
        [
          {
            "node": "Book Curator AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Book Curator AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Book Curator AI Agent": {
      "main": [
        [
          {
            "node": "Build HTML Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build HTML Email": {
      "main": [
        [
          {
            "node": "Send Email Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Email Notification": {
      "main": [
        [
          {
            "node": "Log to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Book Curator AI Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "df03b6d9-aad5-4885-9760-0e12d5c2100c",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "Ys1mX5cL0i3lwaJB",
  "tags": []
}