Zapier alternative: when a 20-line Python script replaces a monthly subscription

Zapier and Make are built for the case where you're wiring up many integrations and the list keeps changing. If that's you, the subscription earns its keep — you're paying for the catalog of pre-built connectors and the UI that lets anyone on the team add a new one. But a lot of people land on a Zapier plan for exactly one connection that never changes: every new Typeform response becomes a Google Sheets row, every Stripe payment posts a Slack message, every form submission gets forwarded somewhere. For that case, a subscription is the wrong shape of cost — a fixed, one-time integration doesn't need a monthly bill.

Zapier / MakeA small script
CostMonthly, scales with usageOne-time, then free
Best forMany changing integrationsOne fixed integration
SetupNo code, drag-and-dropNeeds someone to write it once
Who maintains itZapierWhoever owns the code

Here's the shape of the script for the common case — poll or receive an event, pull out the fields that matter, send them on:

import json, urllib.request

SOURCE_EVENT = {"name": "Jane Doe", "email": "[email protected]", "plan": "pro"}
TARGET_WEBHOOK = "https://hooks.example.com/incoming"

payload = {
    "text": f"New signup: {SOURCE_EVENT['name']} ({SOURCE_EVENT['email']}) on {SOURCE_EVENT['plan']}",
}
req = urllib.request.Request(
    TARGET_WEBHOOK,
    data=json.dumps(payload).encode("utf-8"),
    headers={"Content-Type": "application/json"},
)
urllib.request.urlopen(req, timeout=10)

Wrap that in a small HTTP server (or a scheduled job, if the source is polled rather than pushed) and it's the entire integration — no monthly fee, no vendor to depend on for something this narrow.

Where it stops being a 20-line script

The moment any of these show up, "just write a script" starts costing more time than it saves: the source needs signature verification so random requests can't spoof it, a field needs reshaping or looking up against a second system before it's usable, a failed delivery needs a retry instead of silently dropping, or the target isn't a plain webhook URL but a proper API with its own auth. That's still not a reason to pay for a general no-code platform you'll only ever use for one connection — it's a reason to have the one-off script written properly instead of accreting fixes to a first draft.

The finished version, free

If the conclusion here was "a script would do", the scripts are written: csvclean.py for messy exports, listscrape.py for pulling a list off a page, hookbridge.py for moving events between two services without losing them. One file each, no dependencies, public domain.

the three scripts on GitHub — one file, no dependencies, public domain, tested on Python 3.9 to 3.13. Keep it, change it, ship it in something you sell.

Get the one-off version written for you

Send the two services and what should happen between them — forward form submissions into a spreadsheet, post events to Slack, sync records both ways — and get back working code, field mapping and signature verification included where the source supports it. No subscription, yours to keep and re-run.

99€ — one-time, fixed, 48h

Buy — Stripe checkout   details

See the underlying webhook-receiver script  ·  See the other two packages (CSV cleanup, website scraping)