CTO

Webhook Chains That Replace a Full Integration Team

15 min integration setupProductivity & Security4 min read

Key Takeaway

AI-orchestrated webhook chains connect Stripe, GitLab, Pennylane, Notion, and Google Sheets β€” replacing custom integrations with 15-minute setups that require zero code.

The Problem

PyratzLabs uses Stripe for payments. Pennylane for accounting. Notion for documentation. Google Sheets for reporting. Trello for project management. Telegram for communication. GitLab for code.

None of these talk to each other natively.

The traditional solution: build custom integrations. Write API connectors. Handle auth, retries, error states, schema mapping. Per integration: 2-5 days of developer time. We needed about 12 integrations. That's 24-60 days of dev time. On a team that's already shipping product.

We tried Zapier first. It worked for simple two-step automations. But our flows aren't two steps. They're five. They need conditional logic. They need an agent to interpret context and make routing decisions. Zapier's linear model breaks on branching workflows.

The real cost isn't the subscription β€” it's the fragility. Every integration is a point of failure. Every API change breaks something. Every new tool means another connector to build and maintain. At some point, you're running a middleware company, not a startup.

The Solution

The agent sits in the middle. Webhooks fire, the agent receives them, applies logic, and chains actions across services. Not hardcoded integrations β€” intelligent routing with fallbacks.

The middleware layer uses n8n for webhook reception and the agent for decision-making. Simple flows stay in n8n. Complex flows route through Alfrawd.

The Process

Chain 1: Stripe β†’ Warren β†’ Sheet β†’ Notion

yamlShow code
# n8n workflow: payment_received
trigger:
  type: webhook
  path: /stripe/payment

nodes:
  - parse_event:
      type: code
      code: |
        const { customer, amount, currency } = $input.body.data.object;
        return { customer, amount: amount/100, currency };

  - notify_warren:
      type: telegram
      message: "πŸ’° Payment received: €{{amount}} from {{customer}}"
      chat_id: "{{WARREN_CHAT_ID}}"

  - update_sheet:
      type: google_sheets
      action: append_row
      spreadsheet: "Revenue Tracker"
      values: ["{{$now}}", "{{customer}}", "{{amount}}", "{{currency}}"]

  - create_notion_row:
      type: notion
      action: create_page
      database: "Payments"
      properties:
        Date: "{{$now}}"
        Customer: "{{customer}}"
        Amount: "{{amount}}"
        Status: "Received"

Chain 2: GitLab β†’ Classify β†’ Trello β†’ Telegram

yamlShow code
# When a GitLab issue is created
trigger:
  type: webhook
  path: /gitlab/issue

nodes:
  - classify:
      type: agent  # Routes to Alfrawd for classification
      prompt: |
        Classify this issue: "{{title}}"
        Labels: {{labels}}
        Description: {{description}}

        Return: priority (P0-P3), assignee, trello_list

  - create_trello_card:
      type: trello
      action: create_card
      list: "{{classify.trello_list}}"
      name: "[{{classify.priority}}] {{title}}"

  - notify_team:
      type: telegram
      message: "πŸ†• Issue: {{title}}\nπŸ“‹ Priority: {{classify.priority}}\nπŸ‘€ Assigned: {{classify.assignee}}"

Chain 3: Pennylane β†’ Notion + Sheet + Bilal

yamlShow code
# Invoice received in Pennylane
trigger:
  type: webhook
  path: /pennylane/invoice

nodes:
  - extract:
      type: code
      code: |
        const { supplier, amount, due_date, category } = $input.body;
        return { supplier, amount, due_date, category };

  - notion_entry:
      type: notion
      database: "Invoices"
      properties:
        Supplier: "{{supplier}}"
        Amount: "{{amount}}"
        Due: "{{due_date}}"
        Category: "{{category}}"

  - sheet_row:
      type: google_sheets
      spreadsheet: "Expense Tracker"
      values: ["{{$now}}", "{{supplier}}", "{{amount}}", "{{category}}"]

  - notify_bilal:
      type: telegram
      message: "🧾 Invoice: {{supplier}} β€” €{{amount}} due {{due_date}}"

Custom integrations for services the agent can't reach directly go through webhook middleware β€” the agent calls n8n, n8n calls the service, response flows back.

The Results

MetricBefore (Custom Code)After (Webhook Chains)
Integration setup time2-5 days per integration15-30 min
Active integrations4 (limited by dev time)12
Lines of integration code~3,000~200 (YAML configs)
Monthly maintenance time4-6 hours<30 min
Failed integration recoveryHours (debug + fix)Minutes (agent retries)
CostDeveloper salary allocationn8n self-hosted (free)

The 15-minute setup time isn't a typo. When the webhook infrastructure exists and the agent knows the destination APIs, adding a new chain is just defining the trigger and the sequence. The agent handles auth, error handling, and retries.

Try It Yourself

  1. Self-host n8n (or use Make/Zapier) as your webhook reception layer
  2. Configure service webhooks to point to your n8n instance
  3. For simple chains: keep it in n8n. For intelligent routing: pass to your agent
  4. Start with one chain (e.g., Stripe β†’ notification). Expand from there

The principle: don't build integrations. Chain webhooks. Let the agent be the brain in the middle.


An integration team is three engineers maintaining API connectors. A webhook chain is a YAML file and an agent. Pick your cost structure.

WebhooksIntegrationsn8nStripeAutomation

Want results like these?

Start free with your own AI team. No credit card required.

Webhook Chains That Replace a Full Integration Team β€” Mr.Chief