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 / Make | A small script | |
|---|---|---|
| Cost | Monthly, scales with usage | One-time, then free |
| Best for | Many changing integrations | One fixed integration |
| Setup | No code, drag-and-drop | Needs someone to write it once |
| Who maintains it | Zapier | Whoever 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 detailsSee the underlying webhook-receiver script · See the other two packages (CSV cleanup, website scraping)