Claude-code-plugins-plus-skills fondo-webhooks-events

install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/fondo-pack/skills/fondo-webhooks-events" ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-skills-fondo-webhooks-events && rm -rf "$T"
manifest: plugins/saas-packs/fondo-pack/skills/fondo-webhooks-events/SKILL.md
source content

Fondo Webhooks & Events

Overview

Fondo itself does not send webhooks. Instead, build event-driven workflows using webhooks from the same providers Fondo connects to: Stripe (revenue), Gusto (payroll), Plaid (bank transactions), and Mercury (banking).

Provider Webhooks

ProviderKey EventsUse Case
Stripe
charge.succeeded
,
invoice.paid
Revenue tracking, MRR alerts
Gusto
payroll.processed
,
employee.created
Payroll cost alerts, headcount
Plaid
transactions.sync
,
item.error
Expense monitoring
Mercury
transaction.created
Real-time spend tracking

Instructions

Stripe Revenue Webhook

import Stripe from 'stripe';
const stripe = new Stripe(process.env.STRIPE_API_KEY!);

app.post('/webhooks/stripe', express.raw({ type: '*/*' }), (req, res) => {
  const sig = req.headers['stripe-signature'] as string;
  const event = stripe.webhooks.constructEvent(
    req.body, sig, process.env.STRIPE_WEBHOOK_SECRET!
  );

  switch (event.type) {
    case 'charge.succeeded':
      const amount = (event.data.object as Stripe.Charge).amount / 100;
      console.log(`Revenue: $${amount}`);
      // Update internal dashboard
      break;
    case 'invoice.paid':
      // MRR tracking
      break;
  }
  res.sendStatus(200);
});

Gusto Payroll Webhook

// Gusto sends webhooks when payroll is processed
app.post('/webhooks/gusto', express.json(), async (req, res) => {
  const { event_type, data } = req.body;

  if (event_type === 'payroll.processed') {
    const totalPayroll = data.totals.gross_pay;
    console.log(`Payroll processed: $${totalPayroll}`);
    // Alert if significantly different from budget
    if (totalPayroll > monthlyPayrollBudget * 1.1) {
      await sendAlert(`Payroll exceeded budget by ${((totalPayroll / monthlyPayrollBudget - 1) * 100).toFixed(0)}%`);
    }
  }
  res.sendStatus(200);
});

Resources

Next Steps

For performance optimization, see

fondo-performance-tuning
.