This page provides some examples for using JavaScript code steps. Every example depends on specific inputData
, which is provided under the "Input Data" field when setting up your Zap. This example screenshot shows three demonstration inputs you can use in your code like this: inputData.body
, inputData.receivedDate
, and inputData.subject
. Be sure you read the code examples and provide the right inputs otherwise nothing will work as expected!
JavaScript is an advanced programming language. If you're not familiar with using JavaScript, it's recommended to ask a developer for help.
Introductory Examples
Each of the four examples below expects a name
in the "Input Data" field.
A synchronous example might be something as trivial as:
return {id: 1234, hello: 'world!', name: inputData.name};
You can also bind the result to output
—the code above has exactly the same behavior as the code below:
output = {id: 1234, hello: 'world!', name: inputData.name};
A synchronous example with an early empty return might be something like:
if (inputData.name === 'Larry') {
return []; // we don't work for Larry!
}
return {id: 1234, hello: 'world!', name: inputData.name};
If Code by Zapier is the Zap's trigger and you return an empty array []
, we will not trigger any actions downstream. It's as if you said "never mind" in code. This does not apply when Code by Zapier is used as an action, only when it is the trigger.
An asynchronous example might be something like:
callback(null, {id: 1234, hello: 'world!', name: inputData.name});
Introductory HTTP Example
As of June 2018, Node.js version 8 is available in Code steps. That release made async // await
available for general use, greatly simplifying asynchronous javascript code. You can read more about await
here.
A more complex asynchronous example (no "Input Data" needed) is:
const res = await fetch('http://example.com/');
const body = await res.text();
return {id: 1234, rawHTML: body};
// or
// output = {id: 1234, rawHTML: body}
For older Code steps, you can do the same with promises:
fetch('http://example.com/')
.then(function(res) {
return res.text();
})
.then(function(body) {
var output = {id: 1234, rawHTML: body};
callback(null, output);
})
.catch(callback);
Be sure to use callback
in asynchronous code that uses .then()
!
Introductory Logging Example
This example expects a name
in the "Input Data" field:
if (inputData.name) {
console.log('got name!', inputData.name);
}
return {id: 1234, hello: 'world!', name: inputData.name};
Test your action and look at the data to see the console.log
result.
Simple Math: Divide by Two
This example expects a rawNumber
in the "Input Data" field:
return {
calculatedNumber: Number(inputData.rawNumber) / 2
};
Simple Email Extraction
This example expects a rawText
in the "Input Data" field:
return {
firstEmail: (inputData.rawText.match(/([\w._-]+@[\w._-]+\.[\w._-]+)/gi) || [])[0]
};
Complex Multiple Email Extraction
This example expects a rawText
in the "Input Data" field:
var emails = inputData.rawText.match(/([\w._-]+@[\w._-]+\.[\w._-]+)/gi) || [];
return emails.map(function(email) {
return {email: email};
});
Because this returns an array like []
instead of a single object like {}
this will activate follow up actions multiple times, one for each email found! If no emails are found, nothing happens.
Weather JSON API Call
This example expects a zipCode
in the "Input Data" field:
const res = await fetch('https://api.openweathermap.org/data/2.5/weather?zip=' + inputData.zipCode + ',us&APPID={api_key_here}');
const json = await res.json();
return json;
Where {api_key_here}
is to be replaced by your API Key you can get in OpenWeather: https://openweathermap.org/faq
Zapier advises against inputting sensitive information such as api_key in Code or Webhook steps as plain text. For a more secure technique, build your own private app on our Zapier Developer Platform.
For older Code steps, you can do the same with promises:
fetch('http://api.openweathermap.org/data/2.5/weather?zip=' + inputData.zipCode + ',us&APPID={api_key_here}')
.then(function(res) {
return res.json();
})
.then(function(json) {
callback(null, json);
})
.catch(callback);
Store State
It isn't uncommon to want to stash some data away for the next run, and our StoreClient
can do exactly that. For example, this is a counter that keeps track of how many times it is run:
const store = StoreClient('your secret here');
const count = await store.get('some counter')
const newCount = (count || 0) + 1;
await store.set('some counter', count);
return {count: newCount}
For older Code steps, you can do the same with promises:
var store = StoreClient('your secret here');
var outCount;
store
.get('some counter')
.then(function(count) {
count = (count || 0) + 1;
outCount = count;
return store.set('some counter', count);
})
.then(function() {
callback(null, {'the count': outCount});
})
.catch(callback);
Learn more about StoreClient.