{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "a8a6738c-9269-427d-821c-9793db821d88",
      "name": "Generate Ad Copy and CTAs",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1180,
        3040
      ],
      "parameters": {
        "text": "=Generate a catchy 2-sentence ad copy and 3 strong CTAs for the following product.\n\nProduct Name: {{ $json['Product Name'] }}\nFeatures: {{ $json['Product Features'] }}",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.9
    },
    {
      "id": "bc9d40c0-758a-490b-9c29-67c901c681c7",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1120,
        3260
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "0b3e78c5-a59f-4eaa-8f10-c5110b64d6e6",
      "name": "Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        1760,
        2940
      ],
      "parameters": {
        "text": "=Ad copy: \n{{ $json.output.ad_copy }}\n\nCTAs: \n{{ $json.output.ctas }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C08TTV0CC3E",
          "cachedResultName": "all-nathing"
        },
        "otherOptions": {
          "includeLinkToWorkflow": false
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "28bc17c8-1d47-4769-bd2b-38eadf33ad5f",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1360,
        3260
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"ad_copy\": \"Stay refreshed and eco-friendly with the EcoSmart Bottle\u2014your self-cleaning hydration companion that keeps drinks ice-cold for a full 24 hours! Join the movement towards a healthier planet with every sip!\",\n  \"ctas\":\n    \"Get Yours Now and Sip Sustainability!\"\n}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "9ee0cf4b-fa21-46bb-b64f-834da2762fdb",
      "name": "Airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1760,
        3240
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appjaqV0O7FkXT2qj",
          "cachedResultUrl": "https://airtable.com/appjaqV0O7FkXT2qj",
          "cachedResultName": "Table no.1"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblTAvRqVFOo5AVDF",
          "cachedResultUrl": "https://airtable.com/appjaqV0O7FkXT2qj/tblTAvRqVFOo5AVDF",
          "cachedResultName": "Table 1"
        },
        "columns": {
          "value": {
            "CATs": "={{ $json.output.ctas }}",
            "Ad copy": "={{ $json.output.ad_copy }}",
            "Product Name": "={{ $('Product Info Input').item.json['Product Name'] }}",
            "Product Features": "={{ $('Product Info Input').item.json['Product Features'] }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "Product Name",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Product Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product Features",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Product Features",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Ad copy",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Ad copy",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "CATs",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "CATs",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update"
      },
      "typeVersion": 2.1
    },
    {
      "id": "2c548ce7-c10b-47dd-b07d-4f2cc8f48881",
      "name": "Product Info Input",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        960,
        3040
      ],
      "parameters": {
        "options": {},
        "formTitle": "Product Info",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Product Name"
            },
            {
              "fieldLabel": "Product Features"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "3fb03bf6-7a54-4aad-afe5-4d4ebee70cda",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -740,
        3280
      ],
      "parameters": {
        "color": 4,
        "width": 1289,
        "height": 2078,
        "content": "## \u270d\ufe0f AI Copywriter Agent \u2013 From Product Info to Ad Copy + CTAs\n\nInstantly generate ad copy and calls-to-action using GPT based on product details. Ideal for:\n\u2705 Marketers \u2014 generate engaging ad content in seconds\n\u2705 Founders \u2014 test multiple copy angles fast\n\u2705 Designers \u2014 fill mockups with real copy\n\n---\n\n### \u2699\ufe0f What's Used\n\n**n8n Nodes:**\nForm Submission \u2192 OpenAI (GPT via Tools Agent) \u2192 Slack OR Airtable\n\n**External Tools:**\n\n* OpenAI (Chat Model)\n* Slack (Send Message)\n* Airtable (Create Record)\n\n---\n\n### \ud83d\udd11 Setup \u2013 Credentials Needed\n\n* **OpenAI API Key** \u2192 Add under OpenAI node credentials\n* **Slack OAuth** \u2192 Connect Slack workspace in n8n\n* **Airtable Token** \u2192 Add Airtable API key and base/table info\n\n---\n\n### \ud83d\ude80 Workflow Steps\n\n1. **User submits product info** via form\n2. **GPT generates content** using a custom prompt\n\n   * Output: 2-sentence ad copy + 3 call-to-actions\n3. **Structured parser** extracts clean fields\n4. **Send output to Slack** or **log in Airtable**\n\n   * Choose one or both for distribution/storage\n\n---\n\n### \ud83d\udce4 Slack Output Format\n\n```\n*Ad Copy for EcoSmart Bottle*  \nStay refreshed with the EcoSmart Bottle\u2014self-cleaning tech and 24-hour cold retention keep your drink perfect anytime.\n\n*CTAs:*  \n- Buy Now  \n- Stay Cool All Day  \n- Get Yours Today\n```\n\n---\n\n### \ud83d\udca1 Pro Tips\n\n* Use GPT prompt variations to test different tones (funny, urgent, luxury)\n* Add \"Batch Mode\" with `SplitInBatches` node to process multiple products at once\n* Route output to Slack first for **team review**, then log approved copies in Airtable\n* Use outputs for:\n\n  * Landing pages\n  * Ads (Meta, Google, etc.)\n  * Product cards and banners\n\n---\n\n### \ud83d\udee0\ufe0f Customize It\n\n* Add scoring logic for ad variants\n* Connect to Trello, Notion, or your CMS\n* Store prompt + outputs for future reference\n\n---\n\nThis workflow gives your marketing team a **real-time copy assistant**\u2014just submit a product and watch the ad copy write itself. No writer's block. No delay. Pure automation magic.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "938469cb-f289-4796-9e36-cb7a393edc23",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -740,
        2940
      ],
      "parameters": {
        "color": 4,
        "width": 1300,
        "height": 320,
        "content": "=======================================\n            WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n    Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n   - YouTube: https://www.youtube.com/@YaronBeen/videos\n   - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ce22eac5-dc26-41ec-bc63-2dbc648335aa",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        900,
        2540
      ],
      "parameters": {
        "width": 620,
        "height": 880,
        "content": "## \ud83e\udde0 Step 1: Generate Ad Copy & CTAs with AI\n\nThis section transforms raw product info into compelling marketing content using GPT-powered intelligence.\n\n### \ud83e\udd16 **AI-Powered Copywriting Agent**\n\nThe **Tools Agent** receives structured product input and uses a connected chat model to generate a punchy two-line ad and three strong calls-to-action. Perfect for landing pages, ads, or product cards.\n\n### \ud83d\udd17 **Generate with OpenAI Chat Model + Structured Output Parser**\n\nThe generation is handled by the **OpenAI Chat Model**, guided by a custom prompt tailored to highlight the product\u2019s name and features.\nThe **Structured Output Parser** ensures the response is clean, labeled, and ready for downstream use (Slack, Airtable, etc.).\n\n> \ud83d\udccc This step removes the guesswork from copywriting \u2014 one form input delivers high-converting messaging at scale.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c8efbf29-0a40-4096-9db8-92ce16ded9c0",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1560,
        2020
      ],
      "parameters": {
        "color": 6,
        "width": 620,
        "height": 1400,
        "content": "## \ud83d\udce4 Step 2: Share & Store Results\n\nThis step delivers the AI-generated content where it's needed\u2014either to your team on Slack or into your structured Airtable database.\n\n### \ud83d\udce8 **Option A: Notify via Slack**\n\nThe **Slack Node** posts the generated ad copy and CTAs directly to a designated Slack channel. This gives your marketing team immediate access to fresh, AI-crafted content.\n\n**Message Format:**\n\n```\n*Ad Copy for {{ $json[\"product_name\"] }}*  \n{{ $json[\"ad_copy\"] }}\n\n*CTAs:*  \n- {{ $json[\"cta1\"] }}  \n- {{ $json[\"cta2\"] }}  \n- {{ $json[\"cta3\"] }}\n```\n\n> \ud83d\udcac Ideal for fast-paced teams needing instant feedback and collaboration.\n\n### \ud83d\udcca **Option B: Log to Airtable**\n\nThe **Airtable Node** creates a new record for each product, storing the name, features, ad copy, and CTAs. This builds a searchable history of AI-generated marketing content.\n\n**Logged Fields:**\n\n* Product Name\n* Features\n* Ad Copy\n* CTA 1\n* CTA 2\n* CTA 3\n\n> \ud83d\udccc Great for long-term tracking, performance analysis, or sharing across systems.\n\nLet me know if you'd like to add approval steps, testing variations, or metrics tracking!\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Ad Copy and CTAs",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Product Info Input": {
      "main": [
        [
          {
            "node": "Generate Ad Copy and CTAs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Generate Ad Copy and CTAs",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Generate Ad Copy and CTAs": {
      "main": [
        [
          {
            "node": "Airtable",
            "type": "main",
            "index": 0
          },
          {
            "node": "Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}