Salesforce CDC → signed webhooks

Every Salesforce change, delivered as a signed webhook.

SFHooks streams Change Data Capture events and pushes them to your endpoints - HMAC-signed, retried until they land, and observable to the millisecond. No polling. No glue code.

14-day free trial · $0 today, card required · cancel anytime

Salesforce CDC stream SFHooks Your endpoint
record changescaptured over Pub/Subsigned & retried200 OK · ~48ms
Why SFHooks

Webhook infrastructure you don't have to babysit

The hard parts of event delivery - reliability, trust, and visibility - handled for you, so a missed Salesforce change never becomes a 2am incident.

Delivered, not dropped

At-least-once delivery with jittered retries up to 31 attempts. When an endpoint is down, events wait in a dead-letter queue - replay them in one click once it's back.

Signed, so you can trust it

Every payload is HMAC-SHA256 signed. Verify it in four lines, reject anything that doesn't match, and rotate signing secrets with zero dropped deliveries.

Observable to the millisecond

Live success rate, p95 latency, and per-webhook health. Every event keeps its full delivery history - payload, attempts, and response codes - for fast debugging.

Trust, verified

Confirm every delivery in four lines

SFHooks sends a timestamp and an X-SFHooks-Signature header with each request. Recompute the HMAC over the raw body and compare in constant time - that's the whole integration.

  • No SDK required - standard HMAC-SHA256 in any language.
  • Stale-timestamp rejection guards against replays.
  • Multiple signatures during rotation - swap secrets anytime.

See a real payload and compute the signature live in the playground →

verify.js
import crypto from "node:crypto"

// verify BEFORE JSON.parse - sign the exact bytes you got
function verify(rawBody, headers, secret) {
  const ts  = headers["x-sfhooks-timestamp"]
  const sig = headers["x-sfhooks-signature"] // t=…,v1=…

  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${ts}.${rawBody}`)
    .digest("hex")

  // any v1 may match during a secret rotation
  return sig.split(",")
    .filter(p => p.startsWith("v1="))
    .some(p => crypto.timingSafeEqual(
      Buffer.from(p.slice(3)), Buffer.from(expected)))
}
Everything in the box

From first connection to production scale

Connect a Salesforce org, point a webhook at your endpoint, and you're streaming. Reach for the advanced controls when you need them.

Connect any org

OAuth into Salesforce and subscribe to Change Data Capture - tokens encrypted at rest, refreshed automatically.

Field & payload filtersScale

Deliver only what matters - by changed field, or by value with eq/gt/lt operators and AND/OR logic.

Custom headersPro

Attach auth tokens or tenant ids to every delivery. Reserved signing headers stay protected.

Health & auto-pause

Endpoints escalate healthy → degraded → failing → paused so one bad receiver can't drown your queue.

Roles & accessScale

Invite your team with owner, admin, member, and read-only roles. Read-only means read-only.

Replay from the DLQScale

Inspect terminally-failed events and re-deliver one - or all - once your endpoint recovers.

Under the hood

Security and reliability, in the open

We're a young product, so you won't see a wall of logos here. You'll see the mechanism instead - every claim below is documented, and testable from your first trial delivery.

Signed & replay-proof

Every delivery carries a timestamp and an HMAC-SHA256 signature over the exact bytes. Recompute, compare in constant time, reject anything stale.

Zero-downtime rotation

Rotate signing secrets with an overlap window - old and new sign side by side until you finish cutting over. Nothing drops.

Retries that persist

At-least-once delivery with jittered backoff, up to 31 attempts per event. A flaky endpoint gets time to recover, not a dropped payload.

Dead-letter queue

Events that exhaust every retry wait in the DLQ. Replay one - or all of them - once your endpoint is healthy again.

Health with auto-pause

Webhooks move through explicit health states instead of failing silently - owners and admins are emailed before an endpoint is paused.

Locked down by default

OAuth tokens and secrets are encrypted at rest, data is org-scoped, and an egress guard blocks deliveries to private networks.

Mission control

The whole pipeline, on one screen

Throughput, latency, and delivery health at a glance - then drill into any event's payload and attempts.

dashboard.sfhooks.com
Success rate
99.4%
p95 latency
48 ms
Deliveries · 24h
18,204
Recent deliverieslive
14:02:55.214Accountupdated200 OK41 ms
14:02:54.881Invoice__ccreated200 OK52 ms
14:02:54.503Opportunityupdatedretry 2
Build vs buy

The honest build-vs-buy math

The Pub/Sub API is excellent - SFHooks is built on it. The question is whether the subscription lifecycle, retry infrastructure, and observability around it is code your team wants to own.

Build it yourself
Generic iPaaS
SFHooks
Time to first event
Weeks - gRPC, auth, replay-id persistence
Days of setup and task mapping
Minutes - OAuth in, point at your endpoint
Delivery guarantee
Whatever you build
Task-based, varies by plan
At-least-once, up to 31 jittered retries
Signed payloads
You implement signing
Rare - often plain POSTs
HMAC-SHA256 on every delivery
When your endpoint dies
You build the dead-letter queue
Failed tasks, manual re-runs
DLQ with one-click replay
Per-event observability
You build the dashboards
Task logs
Payload, attempts & latency per event
Ongoing maintenance
Yours - API versions, reconnects, scale
Transforms locked to the vendor
Ours - you keep one HTTPS endpoint

Category-level comparison - not claims about any specific vendor. Want the long version? Every option for getting webhooks out of Salesforce, compared · the full build-vs-buy checklist · vs Outbound Messages.

Pricing

Try any plan free for 14 days

Every plan includes signed delivery, automatic retries, and the full dashboard. Card required to start - you won't be charged until day 15, and you can cancel in one click.

Starter
$49 / mo

Get production webhooks off the ground.

  • 100K events / month≈ 3,300 record changes a day
  • 5 webhooks · 1 connection
  • HMAC signing & retries
  • 7-day log retention
Start 14-day trial

$0 today · then $49/mo unless you cancel

Most popular
Pro
$149 / mo

For teams shipping real integrations.

  • 500K events / month≈ 16,600 record changes a day
  • 25 webhooks · 2 connections
  • Team access & custom headers
  • Health alerts · 30-day retention
Start 14-day trial

$0 today · then $149/mo unless you cancel

Scale
$399 / mo

High-volume orgs that can't be capped.

  • 2.5M events / month≈ 83,000 record changes a day
  • Unlimited webhooks & seats
  • RBAC · DLQ replay · payload filters
  • 90-day retention
Start 14-day trial

$0 today · then $399/mo unless you cancel

Questions about billing, trials, or limits? Read the FAQ

Questions

The fine print, up front

Straight answers on billing, trials, and how delivery behaves when things break.

Do I need a credit card to start?

Yes. Starting the 14-day trial opens a Stripe checkout that collects a card, but nothing is charged until the trial ends. Cancel any time from the dashboard and you'll never be billed.

What happens when the trial ends?

Your subscription starts on the plan you picked. Upgrade or downgrade with prorated billing, or cancel in-app at any point - no email required.

Do I have to install anything in Salesforce?

No managed package and no Apex. You OAuth into your org and SFHooks subscribes to Change Data Capture over the Pub/Sub API. You need a Salesforce edition with API access, and CDC enabled for the objects you care about - the dashboard shows which objects are ready.

Why not build this on the Pub/Sub API myself?

You can - you'll own the gRPC subscription lifecycle, replay-id persistence, reconnect and backoff logic, HMAC signing, retry queues, dead-lettering, and the monitoring dashboards on top. SFHooks is that infrastructure, maintained for you. Your side of the integration is one HTTPS endpoint and four lines of verification code.

How is this different from Zapier or MuleSoft?

Those are general-purpose integration platforms: task-based pricing, transformations in their UI, and rarely signed raw payloads. SFHooks does one thing - CDC events delivered to your code as signed webhooks in near real time - with delivery guarantees and per-event observability.

What happens when my endpoint goes down?

Deliveries retry with jittered backoff, up to 31 attempts per event. Events that exhaust retries wait in a dead-letter queue for replay. Meanwhile the endpoint escalates healthy → degraded → failing → paused, with email to owners and admins along the way, so one dead receiver can't flood your queue.

How do I know a webhook really came from SFHooks?

Every request carries X-SFHooks-Timestamp and an HMAC-SHA256 X-SFHooks-Signature computed over the exact bytes. Verify in constant time and reject stale timestamps. Secret rotation runs both secrets in an overlap window, so nothing drops mid-rotation.

How is my Salesforce data protected?

OAuth tokens and signing secrets are encrypted at rest, and everything is scoped to your organization. Outbound deliveries pass an egress guard that blocks private and internal addresses. Event data older than your plan's retention window is pruned automatically.

What counts as an event, and what if I go over?

Each Salesforce change delivered to a webhook is one event. Limits are soft, fair-use allowances - the dashboard warns you as you approach them, and nothing is cut off mid-month without warning.

Can I switch plans later?

Yes. Upgrades and downgrades are prorated and take effect immediately, from the dashboard - you'll see the exact charge or credit before you confirm.

Enterprise

Need more than Scale?

Talk to us about higher event volumes, multiple Salesforce orgs, SSO/SAML, custom retention windows, SLAs, and dedicated support - we'll tailor a plan to your throughput.

Talk to sales Or email [email protected]

Ship your first signed webhook today

Connect Salesforce, point a webhook at your endpoint, and watch the first delivery land. Most teams are live in under ten minutes.