Back to n8n Workflows

Slack Sentiment Analysis

Mike Taylor Mike Taylor

Test your internal Slack communications for professionalism by simulating them being leaked to clients and measuring AI persona reactions. Get real-time sentiment analysis of how your team's private conversations would impact client relationships.

Slack Sentiment Analysis n8n workflow diagram

Click to expand

Summarize in
OR

Overview

This workflow revolutionizes internal communication quality control by automatically monitoring your team's Slack conversations and testing them against external client perspectives. It fetches recent messages from designated channels, then simulates a scenario where these private communications have been "leaked" to your clients. AI personas representing your actual customer base evaluate how these internal discussions would affect their willingness to continue doing business with you, providing critical insights into communication professionalism and potential reputation risks.

🎯 Pro Tips & Secret Sauce

The magic lies in the reverse reputation testing with simulated client leak scenarios:

  1. Realistic Leak Simulation - Presents your actual Slack messages to AI personas in a realistic "data leak" context, triggering authentic emotional responses rather than sanitized feedback about communication quality
  2. Client-Perspective AI Personas - Uses Rally's business audience personas that mirror your actual client base, ensuring reactions reflect real-world stakeholder concerns rather than generic sentiment analysis
  3. Business Impact Scoring - Measures sentiment through business relationship impact (increase spend, decrease spend, cancel contracts) rather than abstract positive/negative ratings, providing actionable insights
  4. Automated Professionalism Auditing - Continuously monitors team communications for potential reputation risks before they become actual problems, creating a feedback loop for communication improvement
  5. Contextual Sentiment Analysis - AI personas provide specific reasoning for their reactions, identifying exactly which messages or behaviors concern clients, enabling targeted communication coaching

This creates a powerful early warning system that helps teams understand how their internal culture and communication style translates to external client perceptions, preventing reputation damage through proactive communication quality control.

πŸ“ Step-by-Step Instructions

  1. Schedule Trigger - Workflow runs automatically on a configured schedule to regularly audit recent team communications
  2. Fetch Channel History - Retrieves recent messages from designated Slack channels, capturing team discussions, shared links, and casual conversations
  3. Aggregate Messages - Combines all channel messages, user information, timestamps, and attachments into a comprehensive conversation dataset
  4. Rally Leak Simulation - Sends aggregated messages to Rally's AI personas with a prompt simulating these private communications being "leaked" to clients, asking how this affects their business relationship willingness
  5. Extract Individual Responses - Splits Rally's response array to process each AI persona's individual reaction and business impact assessment
  6. Calculate Sentiment Distribution - Custom code processes all responses, counts votes for each sentiment category (increase spend, neutral, decrease spend, cancel), and calculates percentage distributions
  7. Generate Alert Report - Formats results into a Slack alert showing sentiment breakdown, summary insights, and specific client concerns for immediate team visibility
  8. Post Results to Alert Channel - Delivers comprehensive sentiment analysis directly to a designated alerts channel, enabling quick team response to communication quality issues

πŸ“‹ Requirements

Required Integrations

  • Slack API - Access to read channel history and post messages to alert channels
  • Rally API - AI persona testing service with business audience access and voting mode capabilities
  • Schedule Trigger - Automated execution for regular communication auditing

Required Credentials

  • Slack OAuth2 credentials with channels:history and chat:write scopes for target channels
  • Rally API Bearer token with business audience persona access (default: re4263785a0d14e)
  • Admin access to configure monitored channels and alert destinations

Setup Prerequisites

  • Slack workspace with identified channels for monitoring (general, team discussions, etc.)
  • Dedicated Slack alerts channel for receiving sentiment analysis reports
  • Rally account with business client audience personas configured
  • Team awareness and consent for internal communication monitoring and analysis

πŸš€ n8n Workflow Template

{
  "active": false,
  "connections": {
    "Aggregate": {
      "main": [
        [
          {
            "index": 0,
            "node": "Ask Rally",
            "type": "main"
          }
        ]
      ]
    },
    "Ask Rally": {
      "main": [
        [
          {
            "index": 0,
            "node": "Split Out",
            "type": "main"
          }
        ]
      ]
    },
    "Code": {
      "main": [
        [
          {
            "index": 0,
            "node": "Send a message",
            "type": "main"
          }
        ]
      ]
    },
    "Get the history of a channel": {
      "main": [
        [
          {
            "index": 0,
            "node": "Aggregate",
            "type": "main"
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "index": 0,
            "node": "Get the history of a channel",
            "type": "main"
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "index": 0,
            "node": "Code",
            "type": "main"
          }
        ]
      ]
    }
  },
  "id": "ZJRnyVdGuJUAf7jf",
  "meta": {
    "instanceId": "7aa2e96d57ff40383569724f8ecb13d674a87bf09d39aa5d8fa5ba31f7a8407a",
    "templateCredsSetupCompleted": true
  },
  "name": "Slack Sentiment Analysis",
  "nodes": [
    {
      "id": "899f2483-34f4-4235-8796-41d8e6319a6c",
      "name": "Schedule Trigger",
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "position": [
        0,
        0
      ],
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2
    },
    {
      "credentials": {
        "slackApi": {
          "id": "mdyXheNkRnlUpFhh",
          "name": "Slack account"
        }
      },
      "id": "bb2fbf3e-62c1-4258-acdd-ff3b36770319",
      "name": "Get the history of a channel",
      "parameters": {
        "channelId": {
          "__rl": true,
          "cachedResultName": "general",
          "mode": "list",
          "value": "C0178LNN16X"
        },
        "filters": {},
        "operation": "history",
        "resource": "channel"
      },
      "position": [
        240,
        0
      ],
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.3,
      "webhookId": "a5b89fa5-cca3-4aa1-b3b7-6840547f5466"
    },
    {
      "credentials": {
        "httpBearerAuth": {
          "id": "HeUQ9K9oUtQ5TyHr",
          "name": "Bearer Auth account"
        }
      },
      "id": "88352e64-6eeb-4d19-b8db-f67731535dee",
      "name": "Ask Rally",
      "parameters": {
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "smart",
              "value": "false"
            },
            {
              "name": "provider",
              "value": "google"
            },
            {
              "name": "query",
              "value": "={{ [\"Your marketing agency\u0027s private slacks just got leaked! Here they are:\"].concat($json.text)  }}\n\nYour company did not have any sensitive information in the leak, but seeing how your agency operates internally may have changed your opinion on them. After reading the leaked Slack history from your marketing agency, how has your willingness to continue doing business with them changed? Give specific examples of what you liked or didn\u0027t like.\nA)  I\u2019m now actively looking to increase spend with them \nB) I\u2019m more open expanding spend, and would consider proposals I might have dismissed, \nC) No real change\u2014I still hold the same interest (or lack thereof) as before, \nD)  I\u2019m now more skeptical or cautious about continuing with them, \nE) I\u2019ve become firmly opposed to spending any more resources and have our legal team reviewing the cancelation policy"
            },
            {
              "name": "audience_id",
              "value": "re4263785a0d14e"
            },
            {
              "name": "voting_mode",
              "value": "true"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "accept",
              "value": "application/json"
            }
          ]
        },
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "url": "https://api.askrally.com/api/v1/chat"
      },
      "position": [
        700,
        0
      ],
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2
    },
    {
      "id": "e2efed89-9ec9-4df8-8779-5119707624e8",
      "name": "Aggregate",
      "parameters": {
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "text"
            },
            {
              "fieldToAggregate": "user"
            },
            {
              "fieldToAggregate": "ts"
            },
            {
              "fieldToAggregate": "attachments[0].image_url"
            }
          ]
        },
        "options": {}
      },
      "position": [
        460,
        0
      ],
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1
    },
    {
      "id": "ae9df479-2d76-40a7-96ec-cf5013ce6783",
      "name": "Split Out",
      "parameters": {
        "fieldToSplitOut": "responses",
        "options": {}
      },
      "position": [
        20,
        300
      ],
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1
    },
    {
      "id": "c95b4e7a-f727-4ec6-a927-50409842de15",
      "name": "Code",
      "parameters": {
        "jsCode": "let optionCounts = {};\nlet total = 0;\n\nconst optionDescs = {\n  \"a\": \"I\u2019m now actively looking to increase spend with them\",\n  \"b\": \"I\u2019m more open expanding spend, and would consider proposals I might have dismissed\",\n  \"c\": \"No real change\u2014I still hold the same interest (or lack thereof) as before\",\n  \"d\": \"I\u2019m now more skeptical or cautious about continuing with them\",\n  \"e\": \"I\u2019ve become firmly opposed to spending any more resources and have our legal team reviewing the cancelation policy\"\n};\n\nconst optionSentiment = {\n  \"a\": \"positive\",\n  \"b\": \"positive\",\n  \"c\": \"neutral\",\n  \"d\": \"negative\",\n  \"e\": \"negative\"\n};\n\n// Count responses\nfor (const item of $input.all()) {\n  try {\n    const responseData = JSON.parse(item.json.response);\n    const option = responseData.option?.toLowerCase();\n    if (option) {\n      total++;\n      optionCounts[option] = (optionCounts[option] || 0) + 1;\n    }\n  } catch (error) {\n    console.log(`Error parsing response for item ${item.json.persona_id}:`, error.message);\n  }\n}\n\n// Build results\nconst results = Object.entries(optionCounts).map(([option, count]) =\u003e {\n  const percentage = total \u003e 0 ? (count / total * 100).toFixed(1) : \"0.0\";\n  return {\n    option,\n    description: optionDescs[option] || \"\",\n    votes: count,\n    percentage,\n    sentiment: optionSentiment[option] || \"unknown\"\n  };\n}).sort((a, b) =\u003e b.votes - a.votes);\n\n// Format Slack message\nconst message = results.map(r =\u003e\n  `- *Option ${r.option.toUpperCase()}*: ${r.description} (_${r.votes} votes, ${r.percentage}%_)`\n).join(\u0027\\n\u0027);\n\n// Get the summary from Ask Rally node\nconst summary = $(\u0027Ask Rally\u0027).first().json.summary;\n\n// Return one single item with both fields\nreturn [{\n  json: {\n    text: message,\n    summary: summary\n  }\n}];\n"
      },
      "position": [
        300,
        300
      ],
      "type": "n8n-nodes-base.code",
      "typeVersion": 2
    },
    {
      "credentials": {
        "slackApi": {
          "id": "mdyXheNkRnlUpFhh",
          "name": "Slack account"
        }
      },
      "id": "17b6abc0-1f47-4f6f-ab8d-abb66b316d00",
      "name": "Send a message",
      "parameters": {
        "channelId": {
          "__rl": true,
          "cachedResultName": "4-rally-alerts",
          "mode": "list",
          "value": "C092GGSLHFB"
        },
        "otherOptions": {},
        "select": "channel",
        "text": "=\ud83d\udea8*Sentiment Analysis*\ud83d\udea8\n`#general` channel\n---\n{{ $json.summary }}\n{{ $json.text }}"
      },
      "position": [
        560,
        300
      ],
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.3,
      "webhookId": "2ab406ba-5e2a-436d-89b8-1b46cc6593a9"
    }
  ],
  "pinData": {
    "Get the history of a channel": [
      {
        "json": {
          "blocks": [
            {
              "block_id": "b76MW",
              "elements": [
                {
                  "elements": [
                    {
                      "text": "anyone doing n8n slack integrations? the rate limit is 1 per minute for conversation history. any workarounds?",
                      "type": "text"
                    }
                  ],
                  "type": "rich_text_section"
                }
              ],
              "type": "rich_text"
            }
          ],
          "client_msg_id": "37cab360-842b-45e5-84a4-2f27cfc2a4df",
          "team": "T0178EL5G2W",
          "text": "anyone doing n8n slack integrations? the rate limit is 1 per minute for conversation history. any workarounds?",
          "ts": "1751972889.661469",
          "type": "message",
          "user": "U01773MS3FF"
        }
      },
      {
        "json": {
          "blocks": [
            {
              "block_id": "gIoxw",
              "elements": [
                {
                  "elements": [
                    {
                      "text": "https://archive.nubela.co/blog/goodbye-proxycurl/",
                      "type": "link",
                      "url": "https://archive.nubela.co/blog/goodbye-proxycurl/"
                    },
                    {
                      "text": " dang",
                      "type": "text"
                    }
                  ],
                  "type": "rich_text_section"
                }
              ],
              "type": "rich_text"
            }
          ],
          "client_msg_id": "E68A4A0E-08D4-406F-B338-A70390AD1846",
          "is_locked": false,
          "latest_reply": "1751972831.888429",
          "reply_count": 3,
          "reply_users": [
            "U01KJFB4WMP",
            "U01HYQCBV3J",
            "U01773MS3FF"
          ],
          "reply_users_count": 3,
          "subscribed": false,
          "team": "T0178EL5G2W",
          "text": "\u003chttps://archive.nubela.co/blog/goodbye-proxycurl/|https://archive.nubela.co/blog/goodbye-proxycurl/\u003e dang",
          "thread_ts": "1751936682.108009",
          "ts": "1751936682.108009",
          "type": "message",
          "user": "U01HYQCBV3J"
        }
      },
      {
        "json": {
          "blocks": [
            {
              "block_id": "DsFhd",
              "elements": [
                {
                  "elements": [
                    {
                      "text": "Claude code vibeees",
                      "type": "text"
                    }
                  ],
                  "type": "rich_text_section"
                }
              ],
              "type": "rich_text"
            }
          ],
          "client_msg_id": "75a956ed-7e0c-4233-8bec-f76b14a3350b",
          "team": "T0178EL5G2W",
          "text": "Claude code vibeees",
          "ts": "1751894864.441869",
          "type": "message",
          "user": "U01EFJEGVTK"
        }
      },
      {
        "json": {
          "client_msg_id": "881b961d-10a9-49cb-93cf-8effe6753084",
          "display_as_bot": false,
          "files": [
            {
              "created": 1751894457,
              "display_as_bot": false,
              "editable": false,
              "external_type": "",
              "file_access": "visible",
              "filetype": "png",
              "has_rich_preview": false,
              "id": "F094G8CCXJP",
              "is_external": false,
              "is_public": true,
              "is_starred": false,
              "media_display_type": "unknown",
              "mimetype": "image/png",
              "mode": "hosted",
              "name": "image.png",
              "original_h": 1412,
              "original_w": 1870,
              "permalink": "https://growth-engineers.slack.com/files/U091W7PNCUB/F094G8CCXJP/image.png",
              "permalink_public": "https://slack-files.com/T0178EL5G2W-F094G8CCXJP-c9c561d623",
              "pretty_type": "PNG",
              "public_url_shared": false,
              "size": 281392,
              "skipped_shares": true,
              "thumb_1024": "https://files.slack.com/files-tmb/T0178EL5G2W-F094G8CCXJP-a1de59ba1e/image_1024.png",
              "thumb_1024_h": 773,
              "thumb_1024_w": 1024,
              "thumb_160": "https://files.slack.com/files-tmb/T0178EL5G2W-F094G8CCXJP-a1de59ba1e/image_160.png",
              "thumb_360": "https://files.slack.com/files-tmb/T0178EL5G2W-F094G8CCXJP-a1de59ba1e/image_360.png",
              "thumb_360_h": 272,
              "thumb_360_w": 360,
              "thumb_480": "https://files.slack.com/files-tmb/T0178EL5G2W-F094G8CCXJP-a1de59ba1e/image_480.png",
              "thumb_480_h": 362,
              "thumb_480_w": 480,
              "thumb_64": "https://files.slack.com/files-tmb/T0178EL5G2W-F094G8CCXJP-a1de59ba1e/image_64.png",
              "thumb_720": "https://files.slack.com/files-tmb/T0178EL5G2W-F094G8CCXJP-a1de59ba1e/image_720.png",
              "thumb_720_h": 544,
              "thumb_720_w": 720,
              "thumb_80": "https://files.slack.com/files-tmb/T0178EL5G2W-F094G8CCXJP-a1de59ba1e/image_80.png",
              "thumb_800": "https://files.slack.com/files-tmb/T0178EL5G2W-F094G8CCXJP-a1de59ba1e/image_800.png",
              "thumb_800_h": 604,
              "thumb_800_w": 800,
              "thumb_960": "https://files.slack.com/files-tmb/T0178EL5G2W-F094G8CCXJP-a1de59ba1e/image_960.png",
              "thumb_960_h": 725,
              "thumb_960_w": 960,
              "thumb_tiny": "AwAkADDS59qD7Yo/H9aOv/66AAdOcUflijFGKAEftimjNP5ozTAWijNFIAooozQAUUZpM5NABmjNFFABmjNFFABmjNFFAH//2Q==",
              "timestamp": 1751894457,
              "title": "image.png",
              "url_private": "https://files.slack.com/files-pri/T0178EL5G2W-F094G8CCXJP/image.png",
              "url_private_download": "https://files.slack.com/files-pri/T0178EL5G2W-F094G8CCXJP/download/image.png",
              "user": "U01773MS3FF",
              "user_team": "T0178EL5G2W",
              "username": ""
            }
          ],
          "text": "",
          "ts": "1751894459.692029",
          "type": "message",
          "upload": false,
          "user": "U01773MS3FF"
        }
      },
      {
        "json": {
          "blocks": [
            {
              "block_id": "j+3ex",
              "elements": [
                {
                  "elements": [
                    {
                      "text": "This stuff runs native in the browser with WebLLM and GPU acceleration after downloading the ",
                      "type": "text"
                    },
                    {
                      "style": {
                        "code": true
                      },
                      "text": ".tensor",
                      "type": "text"
                    },
                    {
                      "text": " files, that are cached in IndexDB",
                      "type": "text"
                    }
                  ],
                  "type": "rich_text_section"
                }
              ],
              "type": "rich_text"
            }
          ],
          "client_msg_id": "c9c9a97a-e671-4daa-98d8-fb86bacde4c2",
          "edited": {
            "ts": "1751887203.000000",
            "user": "U01EFJEGVTK"
          },
          "team": "T0178EL5G2W",
          "text": "This stuff runs native in the browser with WebLLM and GPU acceleration after downloading the `.tensor` files, that are cached in IndexDB",
          "ts": "1751887174.303869",
          "type": "message",
          "user": "U01EFJEGVTK"
        }
      },
      {
        "json": {
          "blocks": [
            {
              "block_id": "rueEj",
              "elements": [
                {
                  "elements": [
                    {
                      "text": "And has a thinking model too lol",
                      "type": "text"
                    }
                  ],
                  "type": "rich_text_section"
                }
              ],
              "type": "rich_text"
            }
          ],
          "client_msg_id": "dbd8f34c-12e6-4aad-b29a-86a74442f5a2",
          "team": "T0178EL5G2W",
          "text": "And has a thinking model too lol",
          "ts": "1751886962.432719",
          "type": "message",
          "user": "U01EFJEGVTK"
        }
      },
      {
        "json": {
          "blocks": [
            {
              "block_id": "TQuP9",
              "elements": [
                {
                  "elements": [
                    {
                      "text": "Crazy that phi-4 is now multi-modal: ",
                      "type": "text"
                    },
                    {
                      "type": "link",
                      "url": "https://huggingface.co/microsoft/Phi-4-multimodal-instruct"
                    }
                  ],
                  "type": "rich_text_section"
                }
              ],
              "type": "rich_text"
            }
          ],
          "client_msg_id": "933681df-276f-4e0f-ae36-08f90410d3b5",
          "reactions": [
            {
              "count": 1,
              "name": "rocket",
              "users": [
                "U0178B75UEB"
              ]
            }
          ],
          "team": "T0178EL5G2W",
          "text": "Crazy that phi-4 is now multi-modal: \u003chttps://huggingface.co/microsoft/Phi-4-multimodal-instruct\u003e",
          "ts": "1751886956.212969",
          "type": "message",
          "user": "U01EFJEGVTK"
        }
      },
      {
        "json": {
          "blocks": [
            {
              "block_id": "BGo2s",
              "elements": [
                {
                  "elements": [
                    {
                      "text": "Just incase it\u0027s useful/relevant to anyone, I just used this Slack scraper to get users from a workspace I\u0027m a member (but not admin) of.\n\n",
                      "type": "text"
                    },
                    {
                      "type": "link",
                      "url": "https://github.com/rusq/slackdump"
                    },
                    {
                      "text": "\n\nWorks as advertised.",
                      "type": "text"
                    }
                  ],
                  "type": "rich_text_section"
                }
              ],
              "type": "rich_text"
            }
          ],
          "client_msg_id": "2813893a-103c-4dda-a2f8-8a6652e7d4a1",
          "is_locked": false,
          "latest_reply": "1751883557.021799",
          "reactions": [
            {
              "count": 1,
              "name": "raised_hands",
              "users": [
                "U01EFJEGVTK"
              ]
            },
            {
              "count": 1,
              "name": "white_check_mark",
              "users": [
                "U01EFJEGVTK"
              ]
            },
            {
              "count": 1,
              "name": "heart",
              "users": [
                "U0178B75UEB"
              ]
            }
          ],
          "reply_count": 1,
          "reply_users": [
            "U0178B75UEB"
          ],
          "reply_users_count": 1,
          "subscribed": false,
          "team": "T0178EL5G2W",
          "text": "Just incase it\u0027s useful/relevant to anyone, I just used this Slack scraper to get users from a workspace I\u0027m a member (but not admin) of.\n\n\u003chttps://github.com/rusq/slackdump\u003e\n\nWorks as advertised.",
          "thread_ts": "1751876695.676809",
          "ts": "1751876695.676809",
          "type": "message",
          "user": "U01KJFB4WMP"
        }
      },
      {
        "json": {
          "attachments": [
            {
              "fallback": "The Cloudflare Blog: Introducing Pay per crawl- enabling content owners to charge AI crawlers for access",
              "fields": [
                {
                  "short": true,
                  "title": "Written by",
                  "value": "Will Allen"
                },
                {
                  "short": true,
                  "title": "Filed under",
                  "value": "Pay per crawl,AI Bots,Bots,AI,Bot Management"
                }
              ],
              "from_url": "https://blog.cloudflare.com/introducing-pay-per-crawl/",
              "id": 1,
              "image_bytes": 88166,
              "image_height": 628,
              "image_url": "https://cf-assets.www.cloudflare.com/zkvhlag99gkb/Sis6B6hN1eqpcn99ydA8g/595841749d6ddf0825a7ec1b68161dd9/Introducing_Pay_per_crawl-_enabling_content_owners_to_charge_AI_crawlers_for_access-OG.png",
              "image_width": 1200,
              "original_url": "https://blog.cloudflare.com/introducing-pay-per-crawl/",
              "service_icon": "https://blog.cloudflare.com/images/favicon-32x32.png",
              "service_name": "The Cloudflare Blog",
              "text": "Pay per crawl is a new feature to allow content creators to charge AI crawlers for access to their content.",
              "title": "Introducing Pay per crawl- enabling content owners to charge AI crawlers for access",
              "title_link": "https://blog.cloudflare.com/introducing-pay-per-crawl/",
              "ts": 1751364000
            }
          ],
          "blocks": [
            {
              "block_id": "7VSjW",
              "elements": [
                {
                  "elements": [
                    {
                      "text": "https://blog.cloudflare.com/introducing-pay-per-crawl/",
                      "type": "link",
                      "url": "https://blog.cloudflare.com/introducing-pay-per-crawl/"
                    },
                    {
                      "text": "\n\nCloudflare\u0027s solution for content creators - pay per crawl",
                      "type": "text"
                    }
                  ],
                  "type": "rich_text_section"
                }
              ],
              "type": "rich_text"
            }
          ],
          "client_msg_id": "e3ecfa0b-949c-46fa-bdf5-5bb404cefcaf",
          "reactions": [
            {
              "count": 1,
              "name": "eyes",
              "users": [
                "U01KJFB4WMP"
              ]
            }
          ],
          "team": "T0178EL5G2W",
          "text": "\u003chttps://blog.cloudflare.com/introducing-pay-per-crawl/|https://blog.cloudflare.com/introducing-pay-per-crawl/\u003e\n\nCloudflare\u0027s solution for content creators - pay per crawl",
          "ts": "1751825550.320399",
          "type": "message",
          "user": "U0178B75UEB"
        }
      },
      {
        "json": {
          "blocks": [
            {
              "block_id": "7zkvg",
              "elements": [
                {
                  "elements": [
                    {
                      "text": "Would have been my dream job like two years ago lol",
                      "type": "text"
                    }
                  ],
                  "type": "rich_text_section"
                }
              ],
              "type": "rich_text"
            }
          ],
          "client_msg_id": "57fb3fce-c6c9-4c18-bc65-81d7fe288239",
          "team": "T0178EL5G2W",
          "text": "Would have been my dream job like two years ago lol",
          "ts": "1751787976.266159",
          "type": "message",
          "user": "U01773MS3FF"
        }
      },
      {
        "json": {
          "attachments": [
            {
              "fallback": "X (formerly Twitter): Nikita Bier (@nikitabier) on X",
              "from_url": "https://x.com/nikitabier/status/1941655319198958039?t=Bzglv126TRpUL_aQ3-ImZA\u0026s=19",
              "id": 1,
              "original_url": "https://x.com/nikitabier/status/1941655319198958039?t=Bzglv126TRpUL_aQ3-ImZA\u0026amp;s=19",
              "service_icon": "http://abs.twimg.com/favicons/twitter.3.ico",
              "service_name": "X (formerly Twitter)",
              "text": "I am looking for a talented growth engineer.\n\nYou will work directly with me on analyzing the effectiveness of product experiments and monitoring the health of the X userbase.\n\nYou must have deep experience writing queries on large data sets, eliminating noise from bots and a",
              "thumb_height": 200,
              "thumb_url": "https://pbs.twimg.com/profile_images/1755448801957945344/Fh2HNw5Y_200x200.jpg",
              "thumb_width": 200,
              "title": "Nikita Bier (@nikitabier) on X",
              "title_link": "https://x.com/nikitabier/status/1941655319198958039?t=Bzglv126TRpUL_aQ3-ImZA\u0026s=19"
            }
          ],
          "blocks": [
            {
              "block_id": "7NKwi",
              "elements": [
                {
                  "elements": [
                    {
                      "text": "https://x.com/nikitabier/status/1941655319198958039?t=Bzglv126TRpUL_aQ3-ImZA\u0026s=19",
                      "type": "link",
                      "url": "https://x.com/nikitabier/status/1941655319198958039?t=Bzglv126TRpUL_aQ3-ImZA\u0026s=19"
                    }
                  ],
                  "type": "rich_text_section"
                }
              ],
              "type": "rich_text"
            }
          ],
          "client_msg_id": "09a6479e-4434-4f38-a3ac-cb4ec0f4ad67",
          "team": "T0178EL5G2W",
          "text": "\u003chttps://x.com/nikitabier/status/1941655319198958039?t=Bzglv126TRpUL_aQ3-ImZA\u0026amp;s=19|https://x.com/nikitabier/status/1941655319198958039?t=Bzglv126TRpUL_aQ3-ImZA\u0026amp;s=19\u003e",
          "ts": "1751787960.436749",
          "type": "message",
          "user": "U01773MS3FF"
        }
      },
      {
        "json": {
          "attachments": [
            {
              "fallback": "I \"built\" 11 apps to manage my team.\u00a0",
              "from_url": "https://wesentlich.substack.com/p/100-hours-of-prompting-11-apps-and?trk=feed-detail_comments-list_comment-text",
              "id": 1,
              "image_bytes": 10418,
              "image_height": 600,
              "image_url": "https://substackcdn.com/image/fetch/$s_!88Nb!,w_1200,h_600,c_fill,f_jpg,q_auto:good,fl_progressive:steep,g_auto/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F450d13fb-681c-436e-8eed-d276b48b955a_1024x1024.png",
              "image_width": 1024,
              "original_url": "https://wesentlich.substack.com/p/100-hours-of-prompting-11-apps-and?trk=feed-detail_comments-list_comment-text",
              "service_icon": "https://substackcdn.com/image/fetch/%24s_!rQOh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c1366b7-bdce-4cb5-b7c5-e3b3c2f92f56%2Fapple-touch-icon-57x57.png",
              "service_name": "wesentlich.substack.com",
              "text": "Why am I exploring this",
              "title": "I \"built\" 11 apps to manage my team.\u00a0",
              "title_link": "https://wesentlich.substack.com/p/100-hours-of-prompting-11-apps-and?trk=feed-detail_comments-list_comment-text"
            }
          ],
          "blocks": [
            {
              "block_id": "9b5s0",
              "elements": [
                {
                  "elements": [
                    {
                      "text": "Very interesting on Buy vs Build for internal tools\n\n",
                      "type": "text"
                    },
                    {
                      "text": "https://wesentlich.substack.com/p/100-hours-of-prompting-11-apps-and?trk=feed-detail_comments-list_comment-text",
                      "type": "link",
                      "url": "https://wesentlich.substack.com/p/100-hours-of-prompting-11-apps-and?trk=feed-detail_comments-list_comment-text"
                    }
                  ],
                  "type": "rich_text_section"
                }
              ],
              "type": "rich_text"
            }
          ],
          "client_msg_id": "473D46F5-1C4F-4DAD-B6B8-CDF8315A5404",
          "is_locked": false,
          "latest_reply": "1751742991.070279",
          "reactions": [
            {
              "count": 1,
              "name": "eyes",
              "users": [
                "U01EER14Z0W"
              ]
            }
          ],
          "reply_count": 1,
          "reply_users": [
            "U01EER14Z0W"
          ],
          "reply_users_count": 1,
          "subscribed": false,
          "team": "T0178EL5G2W",
          "text": "Very interesting on Buy vs Build for internal tools\n\n\u003chttps://wesentlich.substack.com/p/100-hours-of-prompting-11-apps-and?trk=feed-detail_comments-list_comment-text|https://wesentlich.substack.com/p/100-hours-of-prompting-11-apps-and?trk=feed-detail_comments-list_comment-text\u003e",
          "thread_ts": "1751737500.967529",
          "ts": "1751737500.967529",
          "type": "message",
          "user": "U0189EHPER3"
        }
      },
      {
        "json": {
          "blocks": [
            {
              "block_id": "mx0Yd",
              "elements": [
                {
                  "elements": [
                    {
                      "text": "figured out this uses an endpoint at litellm that has all the up to date prices for everything: ",
                      "type": "text"
                    },
                    {
                      "type": "link",
                      "url": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
                    }
                  ],
                  "type": "rich_text_section"
                }
              ],
              "type": "rich_text"
            }
          ],
          "client_msg_id": "55a8535b-a0b8-4320-9327-cf46a11248d0",
          "reactions": [
            {
              "count": 3,
              "name": "+1",
              "users": [
                "U0178B75UEB",
                "U01EFJEGVTK",
                "U020S2C0FPG"
              ]
            }
          ],
          "team": "T0178EL5G2W",
          "text": "figured out this uses an endpoint at litellm that has all the up to date prices for everything: \u003chttps://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json\u003e",
          "ts": "1751675375.629209",
          "type": "message",
          "user": "U01773MS3FF"
        }
      },
      {
        "json": {
          "attachments": [
            {
              "fallback": "X (formerly Twitter): George Collier (@george_nqu) on X",
              "from_url": "https://x.com/george_nqu/status/1941249767201439875",
              "id": 1,
              "image_bytes": 182091,
              "image_height": 1536,
              "image_url": "https://pbs.twimg.com/media/GvC0Qy_XUAEGCaZ.jpg:large",
              "image_width": 1078,
              "original_url": "https://x.com/george_nqu/status/1941249767201439875",
              "service_icon": "http://abs.twimg.com/favicons/twitter.3.ico",
              "service_name": "X (formerly Twitter)",
              "text": "@hammer_mt I\u0027m really not kidding by the way. $2500 in the last month, for which I paid $200.",
              "title": "George Collier (@george_nqu) on X",
              "title_link": "https://x.com/george_nqu/status/1941249767201439875"
            }
          ],
          "blocks": [
            {
              "block_id": "lJiBW",
              "elements": [
                {
                  "elements": [
                    {
                      "type": "link",
                      "url": "https://x.com/george_nqu/status/1941249767201439875"
                    }
                  ],
                  "type": "rich_text_section"
                }
              ],
              "type": "rich_text"
            }
          ],
          "client_msg_id": "f9e1158a-f877-4e35-a0b3-ba9d33f2a023",
          "is_locked": false,
          "latest_reply": "1751692735.898129",
          "reply_count": 1,
          "reply_users": [
            "U0178B75UEB"
          ],
          "reply_users_count": 1,
          "subscribed": false,
          "team": "T0178EL5G2W",
          "text": "\u003chttps://x.com/george_nqu/status/1941249767201439875\u003e",
          "thread_ts": "1751671993.540329",
          "ts": "1751671993.540329",
          "type": "message",
          "user": "U01773MS3FF"
        }
      },
      {
        "json": {
          "attachments": [
            {
              "fallback": "Heisenfunctions, Incremental Determinism, and The Future of Programming - k-hole",
              "from_url": "https://kylekukshtel.com/incremental-determinism-heisenfunctions-gpt-future-of-programming",
              "id": 1,
              "image_bytes": 99235,
              "image_height": 610,
              "image_url": "https://cdn.blot.im/blog_bceb40b92fea4cb981fda87bd5169c58/_thumbnails/40d4b978-f31b-4ac7-9ae3-1b25b2c33e02/large.jpg",
              "image_width": 1060,
              "original_url": "https://kylekukshtel.com/incremental-determinism-heisenfunctions-gpt-future-of-programming",
              "service_icon": "https://cdn.blot.im/blog_bceb40b92fea4cb981fda87bd5169c58/_avatars/d5eb2d47-553c-4c16-9529-04e5c8cd95bc.jpg",
              "service_name": "kylekukshtel.com",
              "text": "Exploring what it could mean to program with GPT from the very start",
              "title": "Heisenfunctions, Incremental Determinism, and The Future of Programming - k-hole",
              "title_link": "https://kylekukshtel.com/incremental-determinism-heisenfunctions-gpt-future-of-programming"
            }
          ],
          "blocks": [
            {
              "block_id": "ArUe9",
              "elements": [
                {
                  "elements": [
                    {
                      "text": "reminds me of this: ",
                      "type": "text"
                    },
                    {
                      "type": "link",
                      "url": "https://kylekukshtel.com/incremental-determinism-heisenfunctions-gpt-future-of-programming"
                    }
                  ],
                  "type": "rich_text_section"
                }
              ],
              "type": "rich_text"
            }
          ],
          "client_msg_id": "091d82bc-7d7d-48ca-8516-5f77744d4154",
          "is_locked": false,
          "latest_reply": "1751696150.058139",
          "reply_count": 2,
          "reply_users": [
            "U01EFJEGVTK"
          ],
          "reply_users_count": 1,
          "subscribed": false,
          "team": "T0178EL5G2W",
          "text": "reminds me of this: \u003chttps://kylekukshtel.com/incremental-determinism-heisenfunctions-gpt-future-of-programming\u003e",
          "thread_ts": "1751666222.773789",
          "ts": "1751666222.773789",
          "type": "message",
          "user": "U01773MS3FF"
        }
      }
    ]
  },
  "settings": {
    "executionOrder": "v1"
  },
  "tags": [],
  "versionId": "653079c4-7255-4791-894c-56e7013c9794"
}

About the Author

Mike Taylor

Mike Taylor

Mike Taylor is the CEO & Co-Founder of Rally. He previously co-founded a 50-person growth marketing agency called Ladder, created marketing & AI courses on LinkedIn, Vexpower, and Udemy taken by over 450,000 people, and published a book with O’Reilly on prompt engineering.