Proxy-Cheap
インテグレーション
Proxy integration with Zapier: the complete setup guide

Zapier Proxy Integration

Route Zapier requests through a proxy using Code by Zapier and Python. Working code, credential setup, rotation, error fixes, plus Proxy-Cheap proxies.
Proxy integration with Zapier: the complete setup guide 用のプロキシを取得
Proxy integration with Zapier: the complete setup guide
What is Zapier?
Zapier is a no-code automation platform that runs entirely on its own cloud infrastructure, so there's no system-level network to point a proxy at. Because Webhooks by Zapier has no proxy field, proxied requests run inside a Code by Zapier step instead, where the Python requests library is preloaded. Pairing that step with a Proxy-Cheap proxy lets a Zap pull geo-specific or high-volume data through a stable IP.

Key takeaways

  • Zapier is cloud-hosted, so a proxy cannot attach to a native Zap step or to Webhooks by Zapier. Route outbound requests through a Code by Zapier (Python) step, where the requests library is preloaded.
  • Set the proxy with a dict: {"http": "http://user:pass@host:port", "https": "http://user:pass@host:port"}. Both values use the http scheme, even when the target URL is HTTPS.
  • Use username and password proxy authentication, not IP allowlisting. Zapier's outbound AWS IPs are dynamic, so credentialed auth is the reliable pattern.
  • Match the Proxy-Cheap product to the job: rotating residential for geo-specific data, static residential (ISP) for a stable exit IP, datacenter for high-throughput public content.

What is Zapier?

Zapier is a no-code automation platform that connects the apps you already use and moves data between them on autopilot. You build a workflow called a Zap, pick a trigger event in one app, and add one or more actions that run automatically when the trigger fires. No servers to manage and no code required for the common cases.

At the time of writing, Zapier connects more than 9,000 apps, from Gmail and Slack to Airtable, HubSpot, and Google Sheets. It runs entirely in the cloud on Amazon Web Services, which is the single most important fact for this guide. Because your Zaps execute on Zapier's infrastructure rather than your own machine, you cannot point them at a system-level proxy. Any proxying has to happen inside the request itself, and that is exactly what a Code by Zapier step lets you do.

What is Zapier used for?

Most teams reach for Zapier to remove repetitive manual steps between tools. The typical jobs:

  • Lead routing. Push a new form submission into a CRM, notify a sales channel, and add a follow-up task.
  • Data sync. Keep records aligned across a spreadsheet, a database, and a billing tool without copy and paste.
  • Notifications. Send a Slack or email alert when a specific event happens in another app.
  • Content and ops automation. Publish, tag, back up, or archive records on a schedule.
  • Public-web data collection. Fetch a page or an API on a schedule, parse the response, and store the result. This is where a proxy enters the picture, because a scheduled fetch that runs from a single cloud IP behaves very differently from one routed through a residential network.

That last case is why developers search for a proxy integration with Zapier: they want an automation that pulls publicly available data or hits a geo-specific API from the right network.

Key features of Zapier

The pieces that matter when you plan a proxied workflow:

  • Zaps, triggers, and actions. A Zap is one trigger plus one or more actions. A multi-step Zap chains several actions after a single trigger.
  • 9,000+ app integrations. Prebuilt connectors for the major SaaS tools, so most automations need no code at all.
  • Code by Zapier. A step that runs your own Python or JavaScript. Python steps run Python 3.7.2 with the requests, BeautifulSoup, and StoreClient libraries preloaded. This is where proxied requests belong.
  • Webhooks by Zapier. Send GET, POST, PUT, or Custom Request calls to any URL. It has no proxy setting, which is why it is not the tool for this job (more on that below).
  • Storage by Zapier. A lightweight key-value store, also reachable inside code as StoreClient, useful for rotating through a list of proxies across runs.
  • Schedule by Zapier. A built-in trigger that fires a Zap on an interval, which pairs naturally with recurring data-collection tasks.

Is Zapier free to use?

Zapier has a free tier and several paid plans: Free, Professional, Team, and Enterprise. The free plan covers basic Zaps (a trigger plus one action) and a capped number of monthly tasks, which is enough to test an idea.

For proxy work, the plan you choose has real consequences, and they come down to two limits:

  • Code by Zapier runtime. A Code step is capped at 1 second on the Free plan, 30 seconds on Professional and Team, and 2 minutes on Enterprise. A proxied request adds network latency, so 1 second is rarely enough. Professional or higher is the practical starting point.
  • Webhooks by Zapier availability. Webhooks is a premium app, available on Professional and above, not on Free.

Code by Zapier exists on every tier, so you can prototype a proxied request on Free, then move to Professional once real requests need more than a second to complete.

How to set up a Zap with a Code by Zapier step

Before any proxy, get a plain Code step running. The flow is the same every time.

  1. Create a new Zap and choose a trigger. For a scheduled data pull, use Schedule by Zapier. For an event-driven pull, use whatever app fires the event.
  2. Add an action step and search for Code by Zapier.
  3. Choose Run Python.
  4. In the Input Data section, add the fields your code needs as key-value pairs. Input Data is how you pass values into the sandbox: you name a field, map it to data from an earlier step, and read it in code as input_data["field_name"].
  5. Paste your Python into the Code field.
  6. Test the step and inspect the output.

Two rules of the Code by Zapier contract are worth memorizing. You read inputs from the input_data dictionary, and you return results by assigning a variable named output (a dict or a list of dicts). Anything you put in output becomes available to later steps in the Zap.

Quickstart: your first Code by Zapier request

Here is the smallest useful example: fetch a URL and return its status and a slice of the body. Map one Input Data field named target_url first.

# Code by Zapier (Python 3.7.2).

# requests, BeautifulSoup, and StoreClient are already available,

# so there is no import line to add.

url = input_data["target_url"]

response = requests.get(url, timeout=25)

output = {

    "status_code": response.status_code,

    "body": response.text[:500],

}

Note the timeout=25. The Code step is capped at 30 seconds on Professional and Team plans, so keeping the request timeout just under the ceiling means a slow target fails cleanly inside your code instead of tripping the sandbox timeout. Keep one network request per step for the same reason.

This works, but every request leaves from Zapier's shared cloud IP. To control the exit network, you add a proxy, and for that you need to know which Zapier tool can carry one.

Code by Zapier vs Webhooks by Zapier

New users reach for Webhooks by Zapier first, because sending an HTTP request looks like a job for a webhook. For a proxied request, that instinct leads to a dead end.

Webhooks by Zapier exposes URL, method, headers, and basic auth, but no proxy field. Code by Zapier lets you attach a proxies dict, so it is the step that carries the proxy.

Webhooks by Zapier is excellent at what it does: fire a GET, POST, PUT, or Custom Request at a URL, with query parameters, headers, and basic auth. What it does not expose is any way to route that request through a proxy. There is no proxy field, and no header you can add will change the outbound network path.

Code by Zapier is different. Because you control the actual request in Python, you control every option requests supports, including the proxies argument. That single difference is why the entire integration runs through a Code step and not a webhook. The rest of this guide lives inside Code by Zapier.

Why you need a proxy with Zapier

A Zap that fetches data runs from Zapier's shared AWS infrastructure. For a handful of low-stakes calls that is fine. It stops being fine the moment the workflow does public-web data collection at any volume, which is why data-heavy automations route through a residential proxy network. Three concrete reasons:

  1. Reliable connectivity and stable session quality. Many sites throttle repeated requests from a single IP. Routing through a proxy pool spreads requests across many IPs, which keeps response success rates steady across a recurring Zap.
  2. Accurate geo-specific data. Prices, listings, and search results change by country and city. Routing through an IP in the target market is the only way to capture what a user there actually sees, which matters for localization testing, ad verification, and market research.
  3. A stable, known exit identity. Zapier's own outbound IPs are dynamic, so any API that authenticates callers by IP allowlist is hard to satisfy from a raw Zap. A static residential proxy gives the target one consistent IP you can register, while username and password auth keeps working no matter which Zapier instance runs the step.

Proxy-Cheap offers several product lines that map onto Zapier workloads. For a wider view of what to look for in a provider, the best proxies for web scraping guide covers the selection criteria.

Pick the product by the shape of the workload the Zap performs, not by budget alone.

  • Rotating residential for geo-specific pricing, listings, and search data. A large pool across 180+ countries with automatic IP refresh per request or a sticky session.
  • Static residential (ISP) for a stable exit IP that a target can allowlist, and for account-aware sessions that need the same identity over time.
  • Datacenter for high-throughput fetches of documentation, public catalogs, and static content where raw speed matters more than residential identity.

How to set up a proxy with Zapier

A Zap trigger fires a Code by Zapier step. The step routes the request through the Proxy-Cheap gateway, fetches the target through a proxy IP, and returns the response to the next action.

Inside a Python Code step, a proxy is one dictionary passed to requests. Before the code, a quick note on Proxy-Cheap's endpoint format, because it differs by product:

  • Rotating residential uses a single shared hub: thehub.proxy-cheap.com:8080 You choose the country in the dashboard credential generator, so there is no separate US or EU gateway. Each request through the hub gets a new exit IP automatically.
  • Static residential, ISP, and datacenter assign a unique IP and port to each proxy you order. You copy the exact host and port from the dashboard.

The setup. First, add three Input Data fields in the step: proxy_user, proxy_pass, and target_url. Mapping the credentials as fields keeps them out of the code itself. Then:

# Code by Zapier (Python). requests is preloaded.

# Input Data fields: proxy_user, proxy_pass, target_url

host = "thehub.proxy-cheap.com:8080" # one hub; choose the country in your dashboard credentials

proxy_url = "http://{user}:{pw}@{host}".format(

    user=input_data["proxy_user"],

    pw=input_data["proxy_pass"],

    host=host,

)

proxies = {

    "http":  proxy_url,   # both keys use the http scheme,

    "https": proxy_url,   # even when target_url is https (the scheme is the proxy hop)

}

response = requests.get(input_data["target_url"], proxies=proxies, timeout=25)

output = {

    "status_code": response.status_code,

    "exit_ip": response.text,   # try target_url = https://httpbin.org/ip to see the exit IP

}

Test the step against https://httpbin.org/ip. If the JSON shows an IP from the proxy pool rather than an AWS address, the route is working.

A few practical notes from real usage:

  • Both `proxies` values use the `http` scheme. A common mistake is writing "https": "https://...". The scheme names the connection to the proxy, not the destination, so http:// is correct for both keys even when the target is HTTPS. For the wider tradeoff between protocols, see SOCKS vs HTTP proxies.
  • Prefer username and password auth. Because Zapier egresses from a changing set of AWS IPs, IP allowlisting is unreliable from a Zap. Credentialed auth in the URL userinfo works regardless of which instance runs.
  • Generate credentials in the dashboard. Proxy-Cheap delivers host, port, username, and password in the Setup Credentials panel. For a full walkthrough, see the guide to using residential proxies.

Rotating proxies with Zapier

You get IP rotation in one of two ways, depending on the product.

Rotating residential: rotation is automatic. Every request through thehub.proxy-cheap.com:8080 gets a fresh exit IP from the hub. Your code needs only the single hub entry from the previous section, and each run of the Zap lands on a new IP with no extra work.

Static proxies: rotate in code. If you bought a set of static residential, ISP, or datacenter proxies, each is a fixed IP. To spread requests across them, cycle through the list. StoreClient persists a counter between Zap runs, so a round-robin survives across executions:

# Code by Zapier (Python). StoreClient persists values between runs.

# Input Data fields: proxy_user, proxy_pass, target_url

hosts = [

    "thehub.proxy-cheap.com:8080",

    "thehub.proxy-cheap.com:8080",

    # or the unique host:port of each static proxy from your dashboard

]

store = StoreClient("<your-store-secret>")

index = int(store.get("rr_index") or 0)

host = hosts[index % len(hosts)]

store.set("rr_index", index + 1)

proxy_url = "http://{u}:{p}@{h}".format(

    u=input_data["proxy_user"], p=input_data["proxy_pass"], h=host,

)

proxies = {"http": proxy_url, "https": proxy_url}

response = requests.get(input_data["target_url"], proxies=proxies, timeout=25)

output = {"used_host": host, "status_code": response.status_code}

Which line to choose comes down to the workload. Rotating residential is the default for high-volume, geo-specific collection: a large pool, a new IP per request, and stable quality across long-running Zaps. Static products are the right pick when you need the same IP to persist, for account-aware sessions or an allowlisted API. For a deeper look, read static vs rotating proxies, and for rotation patterns in raw Python, how to rotate proxies in Python with Requests and AIOHTTP.

Advanced: geo-specific data collection with proxied requests

Once the proxy is in place, a single Code step can fetch and parse in one pass. BeautifulSoup is preloaded, so you can route through a proxy in the target country and pull a specific value out of the HTML without any extra install. The example below reads a static host from Input Data so you can pin the request to one market:

# Code by Zapier (Python). requests and BeautifulSoup are preloaded.

# Input Data fields: proxy_user, proxy_pass, proxy_host, target_url

# proxy_host is a static residential host:port in the target market.

proxy_url = "http://{u}:{p}@{h}".format(

    u=input_data["proxy_user"], p=input_data["proxy_pass"], h=input_data["proxy_host"],

)

proxies = {"http": proxy_url, "https": proxy_url}

response = requests.get(input_data["target_url"], proxies=proxies, timeout=25)

soup = BeautifulSoup(response.text, "html.parser")

price = soup.select_one(".price")

output = {

    "price": price.get_text(strip=True) if price else None,

    "http_ok": response.status_code == 200,

}

A static residential IP in the target country returns the pricing and inventory a local user would see, which is what makes geo-specific collection accurate. From there, the parsed value flows straight into the next Zap action: a Google Sheets row, a Slack alert, a database insert.

For jobs that genuinely need more than the Code step allows, longer than the plan's runtime or larger than the payload limit, move the heavy fetch off Zapier. Have the Zap call your own small endpoint (a serverless function or a tiny API) that runs the proxied request and returns compact JSON. Zapier orchestrates and stores the result; your endpoint does the work without the sandbox limits. This is the clean pattern for long crawls, big responses, or anything that needs a library beyond the preloaded set.

Common errors and how to fix them

Most proxy issues inside Zapier fall into a handful of buckets. Each has a direct fix.

1. `407 Proxy Authentication Required`. The gateway rejected your credentials. The cause is almost always a malformed proxy URL. Put the credentials in the URL userinfo (http://USER:PASS@HOST:PORT), read them from Input Data rather than pasting them inline, and URL-encode any special characters in the password. Confirm the host, port, username, and password against the dashboard.

2. The request works without a proxy but breaks with one. Check the scheme in your proxies dict. Both the http and https values must start with http://, not https://, because the scheme describes the hop to the proxy. A mismatched scheme is the most common silent failure.

3. `The app did not respond in-time` or a sandbox timeout. The Code step ran past its limit (1 second on Free, 30 seconds on Professional and Team). Set an explicit timeout=25 on the request, keep one network call per step, and upgrade to Professional if a single proxied call still needs more room. Retry a slow or dead proxy quickly rather than waiting on it.

4. An API rejects the call even though the code is correct. The target likely authenticates by IP, and Zapier's outbound AWS IP is dynamic. Route the call through a static residential or ISP proxy so the target sees one stable IP you can register, or switch to credentialed proxy auth, which does not depend on the caller's IP.

5. `SSLError: certificate verify failed`. First confirm it is a real certificate problem and not a slow-connection timeout wearing the same error text. Prefer proxies that pass TLS through transparently so the target's real certificate reaches your code. Disabling verification with verify=False is a last resort for non-sensitive endpoints only, and you should understand the tradeoff before using it.

6. `Response payload size exceeded` or `Response content is too large`. A Code step runs on AWS Lambda with roughly a 6 MB input/output limit, and webhook responses have their own caps. Slice the response before returning it (response.text[:5000]), extract only the fields you need with BeautifulSoup, and never pass a full raw HTML page into output.

Is Zapier good for proxy workflows? Pros and cons

For no-code and low-code teams, Zapier is a strong home for proxied automations, as long as you keep each request small and run it inside a Code step. A few honest tradeoffs.

Pros

  • No infrastructure to run: triggers, scheduling, and 9,000+ app connectors are built in.
  • Code by Zapier gives full control of the request, including the requests proxies argument.
  • requests, BeautifulSoup, and StoreClient are preloaded, so fetch, parse, and rotation logic fit in one step.
  • The parsed result flows straight into any downstream app with no glue code.

Cons

  • The Code step timeout (30 seconds on Professional and Team) rules out slow or multi-page jobs inside a single step.
  • The roughly 6 MB payload limit means large responses must be trimmed or offloaded.
  • No native proxy field on Webhooks by Zapier, so proxying is Code-step only.
  • Dynamic outbound IPs make IP-allowlist auth impractical, so plan on username and password proxy auth.

The middle ground for most teams: keep Zapier as the orchestrator, do the proxied fetch in a lean Code step, and pair it with a value-tier proxy on pay-as-you-go billing. That covers the large majority of automation-driven data collection without standing up your own servers.

よくある質問

Yes. The requests library is preloaded in every Python Code step, along with BeautifulSoup and StoreClient, so you can call requests.get() without an import line. You cannot pip-install arbitrary packages in the classic Code step, though paid plans offer a separate feature for adding public packages.

No. Webhooks by Zapier can send GET, POST, PUT, and Custom Request calls with headers and basic auth, but it has no field to route the request through a proxy. To use a proxy, make the request inside a Code by Zapier step, where you control the requests proxies argument.

Zapier runs on AWS and provisions instances on demand, so outbound requests from Code and Webhooks steps come from a large, changing pool of IPs rather than one fixed address. Because of that, allowlisting Zapier by IP is unreliable. Route through a static proxy with a known IP, or use username and password proxy auth instead.

Use rotating residential for geo-specific pricing, listings, and search data that benefits from a fresh IP per request. Use static residential (ISP) when a target needs to see one stable IP, or for account-aware sessions. Use datacenter for high-throughput fetches of public, unprotected content.

Pass timeout to the request, for example requests.get(url, proxies=proxies, timeout=25). Keep it just under the step limit, which is 30 seconds on Professional and Team plans. This makes a slow target fail cleanly in your code instead of triggering the sandbox timeout.

Yes. Rotating residential rotates automatically at the gateway, so each request gets a new IP with no extra code. For a list of static proxies, store a counter with StoreClient and select the next host by index on each run, which gives you round-robin rotation that persists across Zap executions.

Use HTTP proxies with the preloaded requests library, since SOCKS support needs an extra package that the classic Code step cannot install. Proxy-Cheap supports HTTP and SOCKS5 across its products, so pointing the proxies dict at the HTTP gateway is the compatible path inside Zapier.

A 407 means the proxy did not accept your credentials. Rebuild the proxy URL as http://USER:PASS@HOST:PORT, read the username and password from Input Data fields rather than hardcoding them, and URL-encode special characters in the password. Then re-check each value against your dashboard.

Only up to a point. A Code step runs on AWS Lambda with roughly a 6 MB input and output limit, so a full HTML page can exceed it. Parse the page with BeautifulSoup and return only the fields you need, slice long text before assigning it to output, or offload the heavy fetch to an external endpoint that returns compact JSON.

Yes, Code by Zapier exists on the Free plan, but the step is capped at a 1-second runtime there, which is usually too short for a proxied request. Professional and Team plans raise the cap to 30 seconds, and Enterprise to 2 minutes, so Professional is the practical starting point for real proxy work.