Beton + Webhooks
Send revenue signals anywhere with HTTPS webhooks
Send signals to any tool via webhooks. HMAC-signed JSON payloads, retries with backoff, delivery logs. The escape hatch for everything Beton doesn't natively integrate with.
When the destination doesn't exist as a native integration
Beton has native integrations for the most common revenue destinations — Attio, HubSpot, Apollo, Pipedrive, Zoho — but the long tail of internal tools, custom dashboards, Slack alerting systems, ticketing platforms, and home-grown CRMs is enormous. Webhooks are the answer. Any HTTPS endpoint that can accept a POST body becomes a Beton signal destination, with no integration code on Beton's side.
The webhook destination ships every fired signal as a JSON payload to the URL you configure, with the signal type, confidence score, the relevant person/account references, and the underlying event IDs that triggered it. From your endpoint, you can do whatever your stack does — open a Pipedrive deal, post to a Slack channel, file a ticket in Linear, kick off a workflow in n8n, route to your own internal alerts service.
Common destinations teams build against the webhook
- Slack channels for live signal alerts — a #revenue-signals channel where the AE on duty sees high-confidence signals as they fire, with a link back to the contact or account.
- Internal CRMs and homegrown deal trackers that don't have public APIs Beton supports natively — the team writes a thin handler that maps the Beton payload to their internal schema and applies it.
- n8n, Zapier, or Make workflows for teams already orchestrating cross-tool automation — Beton becomes one more event source in the existing automation graph.
- Customer.io, Braze, or other lifecycle-marketing platforms when the team wants product signals to drive in-app messages or email lifecycle flows in addition to outbound.
- Salesforce via a thin webhook bridge — for teams that haven't yet adopted a native Beton-supported destination but want signals in Salesforce today, a one-page handler running on Vercel or Cloudflare Workers gets it done.
- PagerDuty or Opsgenie for high-severity signals like sudden churn risk on enterprise accounts, where a paging-style alert is the right escalation path.
Payload shape and reliability
Every Beton webhook delivery is signed with an HMAC header derived from a shared secret, so your endpoint can verify the request came from Beton rather than from somewhere else. Retries follow exponential backoff on 5xx responses; 4xx responses are treated as permanent failures and logged for visibility. The signal payload is stable across releases — schema versioning is explicit, so handlers don't break silently when Beton ships a new field.
Multi-destination routing
The same signal can fire to multiple webhook destinations simultaneously, with optional per-destination filtering on signal type or confidence threshold. A high-confidence churn signal might go to both your CRM (full payload) and a Slack channel (one-line summary) and a PagerDuty endpoint (only when the affected account is on the enterprise plan). Beton handles the fan-out; your endpoints handle their own concerns.
When to reach for the webhook vs. wait for native
If the destination you need is on Beton's native integration list, use the native integration — it handles deduplication, retry, and idempotency in ways that custom handlers usually don't. If the destination isn't native, the webhook is the right answer, and most teams have a working signal flow into a custom destination within an hour of pointing the webhook at their endpoint. Native integrations roll out periodically; the webhook is the bridge until the one you need ships.
How It Works
Configure your webhook endpoint
Provide an HTTPS URL plus an HMAC shared secret. Add custom headers for auth, tagging, or routing on your end.
Filter and shape the payload
Choose which signal types to forward and (optionally) transform the payload to match your system's expected shape.
Receive signals in real-time
Your endpoint receives a POST with full signal context every time a matching signal is detected. Failed deliveries retry with exponential backoff (10× / 24h).
What Webhooks sees
{
"signal_type": "product_qualified_lead",
"confidence": 0.92,
"source": "posthog",
"hypothesis_id": "hyp_8g2k",
"account": { "name": "Acme Corp", "domain": "acme.com" },
"events": ["visited_pricing_page", "invited_team_member", "api_key_created"],
"enrichment": { "company_size": "50-200", "industry": "SaaS" },
"detected_at": "2026-04-29T14:31:08Z"
} Features
- Standard HTTP POST with JSON payloads
- HMAC-SHA256 signed (X-Beton-Signature header)
- Configurable custom headers and basic auth
- Signal type filtering
- Payload transformation and field mapping
- Retry logic — exponential backoff, 10 attempts over 24 hours
- Delivery logs visible in the Signals dashboard
Use Cases
- Send signals to Slack channels for team visibility
- Trigger custom scripts, n8n workflows, or serverless functions
- Feed signals into data warehouses or analytics tools
- Build custom integrations with internal tools or homegrown CRMs
Frequently Asked Questions
How are webhook payloads authenticated?
Can I retry failed webhook deliveries?
Can I use webhooks to talk to n8n, Zapier, or Make?
What does the webhook payload contain?
Ready to connect Webhooks?
Start detecting revenue signals and routing them to Webhooks in minutes.
Pairs well with
Webhooks is the destination — pair it with a data source so Beton has signals worth routing in the first place.
Webhooks + Postgres
Forward warehouse-derived signals to any service your team already uses.
Postgres integration →Webhooks + PostHog
Push fired PostHog signals to any HTTPS endpoint your stack speaks.
PostHog integration →Webhooks + Stripe
Combine Webhooks with stripe — Beton routes signals between them automatically.
Stripe integration →