Zapier Functions is being deprecated on September 1, 2026. This guide maps each Functions feature to Code by Zapier and explains migration paths for secrets, app actions, and Python code.
Before you start
- Copy your function code. From the Functions home, open each function and save your Python code locally before the September 1, 2026 shutdown date.
- List your functions and triggers. Note which apps, triggers, and actions each function uses.
- Review Code by Zapier docs: JavaScript code in Zap workflows, Python code in Zap workflows, Use the Zapier SDK in Code steps, and How to get started with API by Zapier.
Timeline
| Date | What happens |
|---|---|
| June 1, 2026 | Functions is no longer accepting new users. Start planning your migration. |
| September 1, 2026 | All functions stop running. Migrate your workflows before this date. |
Feature comparison
| Functions feature | Code by Zapier equivalent | Notes |
|---|---|---|
| Python code | Python or JavaScript code | Use JavaScript if you need the Zapier SDK. |
| Third-party packages | npm and PyPI packages | Available on Zapier paid plans. |
zapier.action (authenticated app calls) |
Zapier SDK (JavaScript only) | (Optional) Replace zapier.action with the Zapier SDK |
| Multiple triggers | Sub-Zap | Create one Zap per trigger, or share logic in a sub-Zap. |
| Secrets (API keys, tokens) | API by Zapier + Zapier SDK (JavaScript only) | (Optional) Replace secrets with API by Zapier |
| Multiple code files | Single Code step | Combine logic into one step, or split across multiple Zap steps. |
| Copilot in Functions | AI-assisted code generation | Built into the Code editor. |
| Deploy and rollback | Zap publishing | Use Zap version history to manage changes. |
| 5-minute runtime | Extended runtimes | Code steps can run up to 10 minutes on paid plans. |
| 1,500 tasks per month | Tasks counted per Zap run | Standard task usage applies. |
Step-by-step migration
1. Create a new Zap with a trigger
Each function trigger becomes a separate Zap trigger. If your function had multiple triggers, create one Zap per trigger or share code logic in a sub-Zap.
Create a Zap with the same trigger your function used. For trigger setup, go to Set up your Zap trigger.
2. Add a Code by Zapier step
- JavaScript (required for the Zapier SDK or API by Zapier): Use JavaScript code in Zap workflows
- Python (when you do not need the SDK): Use Python code in Zap workflows
3. Adapt your code for Code by Zapier
Choose your migration path:
-
Python code without
zapier.actionor secrets: Reuse much of your code in a Python Code step. Update how input and output data are handled. -
zapier.actioncalls: Rewrite in JavaScript using the Zapier SDK. -
Secrets or custom API calls: Use API by Zapier with the Zapier SDK. Do not use
fetchfor these calls.
| Python (Functions) | JavaScript (Code by Zapier) |
|---|---|
input_data['key'] |
inputData.key or inputData['key']
|
output = {'key': 'value'} |
output = {key: 'value'} |
print(value) |
console.log(value) |
import requests |
Use fetch, or API by Zapier with the Zapier SDK for authenticated calls |
requests.get(url) |
await fetch(url) |
requests.post(url, json=data) |
await fetch(url, {method: 'POST', body: JSON.stringify(data), headers: {'Content-Type': 'application/json'}}) |
try: ... except: |
try { ... } catch (error) { ... } |
zapier.action.app.action_key(params={...}) |
Zapier SDK: await app.write.action_key({inputs: {...}})
|
Use AI-assisted code generation in the Code editor to help adapt your code.
(Optional) Replace secrets with API by Zapier
Use this section if your function stored API keys or tokens as secrets.
Code by Zapier cannot store secrets like API keys in your code. If you need to call an app Zapier does not support, or an API endpoint that is not in the standard app integration, use API by Zapier with the Zapier SDK. That is the safest way to make authenticated calls without putting credentials in your code. Follow Add the Zapier SDK to a Code step to set up the step and attach your API by Zapier connection.
import requests
response = requests.post(
"https://api.example.com/v1/items",
json={"name": input_data["name"]},
headers={"Authorization": f"Bearer {secrets['api_token']}"},
)
import { createZapierSdk } from '@zapier/zapier-sdk';
const zapier = createZapierSdk();
export default async function main({inputData, connections}) {
const api = zapier.apps.api_by_zapier({
connectionId: connections['api_by_zapier'],
});
const { data: result } = await api.write.custom_request({
inputs: {
method: 'POST',
url: 'https://api.example.com/v1/items',
body: JSON.stringify({ name: inputData.name }),
},
});
return { result };
}
-
connections['api_by_zapier']must match the Account ID Variable for your API by Zapier connection.
(Optional) Replace `zapier.action` with the Zapier SDK
Use this section if your function used zapier.action to call app actions.
Follow Add the Zapier SDK to a Code step to enable the SDK and attach your app connections.
zapier.action.slack.send_channel_message(
params={"channel": "#general", "text": "Hello"},
type_of="write",
)
import { createZapierSdk } from '@zapier/zapier-sdk';
const zapier = createZapierSdk();
export default async function main({inputData, connections}) {
const slack = zapier.apps.slack({ connectionId: connections['slack'] });
await slack.write.channel_message({
inputs: {
channel: "CHANNEL_ID",
text: "Hello",
},
});
return { success: true };
}
-
connections['slack']must match the Account ID Variable for your Slack connection. -
inputsreplacesparams.
(Optional) Replace Python libraries
Use this section if your function relied on Python libraries beyond the standard library.
| Python (built-in) | JavaScript (built-in) | Purpose |
|---|---|---|
requests |
fetch |
HTTP client |
print |
console.log |
Debugging |
StoreClient |
StoreClient |
Store and retrieve data between Zap runs |
BeautifulSoup |
Not applicable | Parse HTML and XML content |
For other libraries, add third-party packages to your Code step.
4. Test and publish
Test your Zap steps, remap fields in downstream steps if needed, then publish your Zap. Once confirmed, stop or remove the original function.
Related resources
Get help
- Early Access Program (EAP) users: Ask questions in Zapier's EAP Slack.
- All customers: Contact Zapier Support for help with your migration.