Zapier

zapier.comcontributed by Samuele Ongaro

ALMOST

A weekend of work, and real gaps remain.

Connects apps that do not talk to each other. A trigger in one service starts a chain of steps in others, with filters, delays and branching in between — and the value is the thousands of maintained connectors, not the logic.

Promptfree, for everyone, and the only version there is
Build me the automations I actually run instead of Zapier — and understand the verdict before you start.

**Thousands of connectors, kept working**, is what the subscription buys, and it is not reproducible. But nobody uses thousands. Most people run four or five automations against services they could call directly, and writing those four is less code than the configuration describing them — and it never breaks because somebody else changed a connector. Build that, not a platform.

STACK
- Node 20+ with Fastify
- SQLite through better-sqlite3, WAL mode
- A worker process for the queue
- Server-rendered interface, flows as a list rather than a canvas
- Caddy in front

FIRST, THE SCOPE
- Open your account and list the automations that actually ran last month, and the services each touches. That list is the entire project
- Write one adapter per service you genuinely use — authentication, pagination, rate limits — as a small module with a fixture and a test
- Do not build a connector framework for integrations you have not written. That is how a fortnight becomes a year, and it is the mistake this prompt exists to prevent

THE DATA MODEL
- flows: id, name, version, definition_json, is_active
- flow_versions: id, flow_id, version, definition_json, published_at — a run is pinned to a version, so editing never changes a run in flight
- runs: id, flow_id, flow_version, trigger_payload_json, status, started_at, finished_at, error, dedupe_key
- step_runs: id, run_id, step_id, attempt, status, input_json, output_json, error, ms
- connections: id, service, credentials_encrypted, expires_at, refreshed_at, last_error
- cursors: id, source, value, updated_at
- queue: id, run_id, step_id, run_at, attempts, locked_by, lease_expires_at
- Every step's input and output stored. When a flow does the wrong thing at three in the morning, those payloads are the only thing that answers why

TRIGGERS
- Webhook with a secret and a signature check, answering 200 immediately and queueing
- Schedule with a cron expression and a time zone, with both daylight-saving transitions in the test suite
- Poll a source on an interval with a stored cursor and deduplication by item identifier. A poller that re-emits everything after a restart is the classic disaster in this category, and it is how somebody gets four hundred emails
- Manual, with a payload typed by hand, which is how a flow is tested

STEPS
- HTTP request with full control of method, headers, body, timeout and a declared retry policy
- Branch on a condition, loop over a list with a concurrency limit, delay, and stop with a reason
- Transform with a small expression language over the accumulated run state, or a sandboxed script with a time limit and no ambient network
- Your own service adapters, each declaring its input and output schema

RELIABILITY, WHICH IS WHERE THE REAL WORK IS
- Retries with exponential backoff and jitter, per step, with a maximum
- Retry only what is safe. A non-idempotent action needs an idempotency key, and the step declares whether it has one — sending an email twice is annoying, creating an invoice twice is a phone call
- Deduplication on the trigger, so a webhook delivered twice runs once
- The queue is a table with a lease, so a crashed worker's run is resumed rather than lost
- A permanent failure lands in a dead-letter list with everything needed to replay it, and replay is one button
- Rate limits per service, honouring the API's own headers

THE INTERFACE
- A flow as a vertical list of steps with branches indented beside them. A node-and-wire canvas is more work to build and less readable for the flows people actually run
- The editor shows real sample data from the last run beside every field, so a path is picked rather than typed. That one detail separates a usable tool from a frustrating one
- A run view with every step's input, output, duration and error, expandable
- Runs filterable by status, failures first

SECRETS
- Connections encrypted at rest with a key from the environment, decrypted only in the worker
- OAuth refresh under a lock, so two workers cannot refresh at once and invalidate each other
- Redacted from every stored payload and every log, by key name and value match, including encoded forms

OPERATIONS
- .env: DATABASE_PATH, BASE_URL, ENCRYPTION_KEY, SESSION_SECRET, WEBHOOK_SECRET
- Migrations on boot, each once; step payloads pruned on a stated retention, since they are the bulk of the data
- Nightly backup off the machine, restore script
- Health endpoint reporting queue depth, the oldest unlocked item and any expired lease

WHAT MATTERS MOST
Idempotency and the stored payloads. Build the lease queue and the dedupe key first, then kill the worker mid-run and confirm nothing is lost and nothing repeats. An automation tool that occasionally does something twice is one you stop trusting with anything that matters — which was every reason you had for building it.

What you lose

  • Thousands of maintained connectors, including the authentication dance for each one
  • Somebody else noticing and fixing an integration the morning a vendor changes its API
  • Retries, error notifications and replay of a failed run, without you building them
  • A visual builder a non-technical colleague can use without touching code
  • Webhook endpoints that stay up when your own server does not

If you would rather not build

  • Node-RED — flow-based automation, long-established

What it costs

read from their page 17 Aug 2026

PlanBilled monthlyBilled yearlyLast read
—$19.99/mo—17 Aug 2026

Their pricing page is where these came from. Seeing a different price? Tell us.

The escape hatch

open source · no votes, no paid placement

n8n

$0

Workflow automation with hundreds of nodes, self-hosted or on their cloud.

n8n-io/n8nfree · open source

Windmill

$0

Runs scripts and flows as internal tools, with a UI builder on top.

windmill-labs/windmillfree · open source

Why this verdict

our own opinion · changed only by a person

52/100

Verdict kinda at 52: a runner with retries and a run log is very doable and covers the three or four automations most people actually have. What you cannot rebuild is a catalogue of thousands of connectors and someone maintaining them.

History

tracked since 6 Aug 2026 · nothing is ever overwritten

Interest · last 30 dayspeak 2/day
views01230 Aug4 Sept9 Sept14 Sept19 Sept24 Sept28 Sept
— views— prompt copies none yet— votes none yet

Questions about Zapier

answered from the record above

Is Zapier free?

No — the plan we track is $19.99 a month. Professional from $19.99/month; the price climbs with task volume and the free tier covers 100 tasks.

Can you replace Zapier by building your own?

ALMOST. A weekend of work, and real gaps remain. Replacement score 52 out of 100, build time a weekend. Read what you lose before you decide.

How much does Zapier cost?

$19.99 a month on Professional — $239.88 a year. Recorded 17 Aug 2026.

What do you lose by replacing Zapier?

Thousands of maintained connectors, including the authentication dance for each one; Somebody else noticing and fixing an integration the morning a vendor changes its API; Retries, error notifications and replay of a failed run, without you building them; A visual builder a non-technical colleague can use without touching code; Webhook endpoints that stay up when your own server does not. If any of those carry weight for you, keep paying.

Is there an open-source alternative to Zapier?

Yes: n8n, Windmill. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 17 in Automation & notifications

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc