Posthawk
Product

Workflows
for anything

A visual builder for the "run this on a schedule / on a webhook / when something happens" workflows you'd otherwise write a cron job, a Zapier zap, or a bash script for. HTTP calls, routers, waits, notifications, sends — on one canvas, with real-time testing and variable passing between every step.

Live simulation

Click Test and watch your workflow actually run

Waits wait. HTTP calls fire. Each step's output feeds the next. The canvas lights up exactly as a real run would experience it.

Welcome Flow
Running…
triggerEvery 15 min
Running
Cron · 0/15 * * * *
httpHTTP · probe status API
GET api.example.com/health
routerRouter
if {{probe.uptime}} < 99.5
waitWait 3 seconds
Dedupe burst of alerts
notifyNotify on-call
Severity: warning · to oncall@acme.com
endRun complete
Waits for next cron tick
Step library

Eight building blocks,
infinite workflows

Triggers

Start on a schedule (cron + timezone), a webhook from any system, or one of the built-in contact events. Your flow fires when reality matches.

Wait

Pause anywhere from seconds to 30 days. BullMQ parks the job and wakes it up on time — no cron you have to maintain.

Router

Route on any variable — HTTP response bodies, workspace stats, webhook payloads, anything earlier steps emit. One predicate, many paths.

HTTP request

Call any external API. Store the response body, pull out specific fields as named variables, and reference them anywhere downstream.

Send email

Static body or a template. Fire immediately or schedule for a future time — natural-language ("tomorrow at 2pm") parsed by AI.

Notify team

Email one or many teammates. Severity bands (info / warning / critical) — perfect for ops alerts, daily digests, or failure escalations.

Workspace stats

Load your own platform metrics (send volume, delivery rate, error counts, …) into variables. Build health checks and SLA monitors.

Tags + properties

Update contact records when a flow is scoped to a contact. Silently skipped for scheduled / API-driven flows that don't need them.

Use cases

Built for whatever
you run

Ops monitors, webhook handlers, internal tooling, contact journeys — the same primitives cover all of them.

Every 15 min

Ops alerts

Every 15 min: fetch uptime stats → router branches on status → Slack-email the on-call if deliverability drops.

Weekdays 8am

Daily digests

Weekdays at 8am: pull yesterday's numbers from your DB via HTTP → compose a summary → email the team.

Webhook

Webhook handlers

Stripe / GitHub / custom system POSTs → parse payload → route on the event type → fire the right side-effect.

Contact event

Contact journeys

Contact added / tag applied → personalized email, wait a day, check if they converted, branch accordingly.

Schedule

Data syncs

Schedule → call your source API → transform the response → push each record to a destination API. No Zapier middleman.

Webhook

Internal tooling

Webhook from an internal form → validate → route on approvals needed → notify the right person with the right context.

How it works

Build it, test it,
ship it

01

Pick a trigger

On a schedule, a webhook call, or a contact event — whatever kicks the work off for your use case.

02

Drag in steps

HTTP calls, routers, waits, notifications, sends. Every step's outputs become merge-tag variables for later steps to use.

03

Test it real

Click Test — a real run fires with real timing. 10-minute waits actually wait 10 minutes; the canvas animates as each step executes.

04

Watch it run

Run history shows every run, which step each one is parked on right now, when it'll resume, and every output along the way.

One canvas, many branches

The Router step can split into as many branches as you need. First match wins; default catches the rest. No confusing "else trees".

Real-time test runs

Test runs actually fire — BullMQ pauses on wait steps exactly like production. The canvas animates step-by-step so you see the real timing.

Any API, any data

HTTP steps hit any endpoint, extract specific fields as named variables, and feed them into downstream routers, sends, or notifications.

Step-level error handling

Fail-soft on flaky third-party APIs. Each HTTP / email / webhook step can continue, exit, or fail on error — configurable per step.

Merge tags everywhere

Any step's output is a variable. Reference `{{http.response.status}}` in a router, or `{{stats.delivery_rate_today}}` in a notification subject.

Self-documenting flows

Notes live on every step. A new teammate opens the flow and sees exactly why each branch exists, right on the canvas.

n8nNative n8n integration

Already building on n8n? We ship an official node.

n8n-nodes-posthawk is a community node package on npm — one action node and one trigger. Install it in any n8n instance, paste your Posthawk API key, and every Posthawk primitive slots into your n8n workflows as a first-class step.

Action node5 resources · 20+ ops
  • Email · send, send batch, get status
  • Scheduled · list, get, cancel, reschedule
  • Contact · list, get, create, update, delete
  • Suppression · list, add, remove
  • Webhook · list, create, update, delete, test
Trigger node8 event types
  • Send · accepted by SES
  • Delivery · delivered to recipient
  • Bounce · hard / soft
  • Complaint · marked as spam
  • Open / Click · engagement
  • Reject / Delay · SES-side failures
npm install n8n-nodes-posthawknpm packageVisit n8n.io

Your workflows, built once, running for real.

Replace the cron jobs, the shell scripts, the half-broken Zaps — with one canvas you can actually test.

Cookie Preferences

We use analytics cookies to understand how you use our site and improve your experience. Privacy Policy