Usa Shifter con Zapier
Zapier no expone un campo de proxy nativo, pero la acción Code by Zapier y la acción Webhooks by Zapier permiten realizar solicitudes salientes a través de la Web Scraping API de Shifter con unas pocas líneas de JavaScript o Python.
Inicio rápido
Instalar
// Add a 'Code by Zapier' or 'Webhooks by Zapier' action — no install required. Uso básico
// In a "Code by Zapier" (Run JavaScript) action:
const apiKey = inputData.shifter_api_key;
const targetUrl = inputData.target_url;
const country = inputData.country || "us";
const params = new URLSearchParams({
api_key: apiKey,
url: targetUrl,
country: country,
render_js: "1",
session_id: inputData.zap_run_id, // sticky residential IP for this run
});
const response = await fetch(`https://scrape.shifter.io/v1?${params}`);
const html = await response.text();
output = { html, status: response.status, length: html.length }; Características
Ejemplos
Code by Zapier: JavaScript con sesión persistente
Ejecuta un paso JS personalizado que obtiene una página a través de la Web Scraping API de Shifter. Pasa un session_id derivado del ID de ejecución del Zap para que cada paso de una ejecución comparta una misma IP residencial.
// "Code by Zapier" action -> Run JavaScript
//
// inputData.target_url -> https://example.co.uk/products
// inputData.country -> "uk"
// inputData.shifter_api_key -> your Shifter API key (Storage by Zapier secret)
// inputData.zap_run_id -> Zap run id from the trigger
const params = new URLSearchParams({
api_key: inputData.shifter_api_key,
url: inputData.target_url,
country: inputData.country || "us",
render_js: "1", // headless browser
session_id: inputData.zap_run_id, // sticky IP per Zap run
});
const response = await fetch(`https://scrape.shifter.io/v1?${params}`);
const html = await response.text();
// Extract a value with a regex — Zapier's Code action doesn't bundle cheerio.
const titleMatch = html.match(/<title>([\s\S]*?)<\/title>/i);
const priceMatch = html.match(/class=["']price["'][^>]*>([^<]+)/i);
output = {
status: response.status,
title: titleMatch?.[1]?.trim(),
price: priceMatch?.[1]?.trim(),
length: html.length,
}; Code by Zapier: Python (urllib)
El entorno de ejecución Python de Zapier es suficiente para llamar a la Web Scraping API y analizar la respuesta. Útil cuando prefieres escribir en Python y necesitas acceso a la biblioteca estándar.
# "Code by Zapier" action -> Run Python
import urllib.request
import urllib.parse
import re
params = urllib.parse.urlencode({
"api_key": input_data["shifter_api_key"],
"url": input_data["target_url"],
"country": input_data.get("country", "us"),
"render_js": "1",
"session_id": input_data["zap_run_id"],
})
req = urllib.request.Request(
f"https://scrape.shifter.io/v1?{params}",
headers={"User-Agent": "ZapierShifterClient/1.0"},
)
with urllib.request.urlopen(req, timeout=30) as resp:
html = resp.read().decode("utf-8", errors="replace")
status = resp.status
# Extract whatever the Zap needs.
title = (re.search(r"<title>(.*?)</title>", html, re.IGNORECASE | re.DOTALL) or [None, ""])[1].strip()
prices = re.findall(r'class="price"[^>]*>([^<]+)', html)
return {
"status": status,
"title": title,
"prices": prices[:10],
} Webhooks by Zapier: solicitud personalizada
Si tu Zap no permite pasos de código (en algunos planes), usa la acción 'Custom Request' de Webhooks by Zapier y llama a la Web Scraping API directamente con parámetros de consulta.
# Action: Webhooks by Zapier -> Custom Request
#
# Method: GET
# URL: https://scrape.shifter.io/v1
# Query String Params:
# api_key = {{credentials.shifter_api_key}}
# url = {{trigger.target_url}}
# country = us
# render_js = 1
# session_id = {{trigger.zap_run_id}}
#
# Headers:
# User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
#
# Output:
# The response body is the fully-rendered HTML, returned to Zapier
# as a single output field. Pipe it into a Filter, Formatter, or
# another Code step to parse what you need.
#
# Notes:
# - session_id uses the Zap run id so all requests within one run
# share the same residential IP (sticky session, 10 min default).
# - country can be sourced from a previous step
# ({{step1.country}}) for per-item geo routing. Storage by Zapier: gestión de secretos
No pegues la clave de API directamente en las acciones de código. Usa Storage by Zapier (o Zapier Vault en planes enterprise) para mantener tu clave de API de Shifter cifrada y reutilizable en todos tus Zaps.
// One-off setup (run once via Code by Zapier):
//
// await fetch("https://store.zapier.com/api/records", {
// method: "POST",
// headers: { "X-Secret": ZAPIER_STORAGE_SECRET },
// body: JSON.stringify({
// shifter_api_key: "YOUR_SHIFTER_API_KEY",
// }),
// });
//
// Then in any future Zap that needs the Shifter API key:
const storageRes = await fetch(
"https://store.zapier.com/api/records?key=shifter_api_key",
{ headers: { "X-Secret": process.env.ZAPIER_STORAGE_SECRET } },
);
const { shifter_api_key } = await storageRes.json();
const params = new URLSearchParams({
api_key: shifter_api_key,
url: inputData.target_url,
country: "us",
render_js: "1",
session_id: inputData.run_id,
});
const response = await fetch(`https://scrape.shifter.io/v1?${params}`);
// ... use response as in the previous examples Preguntas frecuentes
Preguntas frecuentes sobre el uso de Shifter con Zapier.
Not on the standard Webhooks action — Zapier's HTTP layer doesn't expose a proxy field. The supported workarounds are Code by Zapier (run a JavaScript or Python step that calls the Shifter Web Scraping API) or the Webhooks Custom Request action pointed at https://scrape.shifter.io/v1 with the country, render_js, and session_id query params.
Empieza a usar Shifter con Zapier
Añade los más de 205M de proxies residenciales y de ISP de Shifter a tus Zaps mediante Code by Zapier o Webhooks Custom Request. Sesiones sticky por ejecución, geo por elemento, renderizado headless integrado y soporte completo para credenciales con Storage / Vault.