Get to know

Formulas

REVERSE(all_incident_reports)JSONPATH(request.form, "$.phoneNumbers[*].type")MD5(fetched_data)SORT(incident.tags, "name")MAP(ip_reports, "deliverable")
REVERSE(all_incident_reports)JSONPATH(request.form, "$.phoneNumbers[*].type")MD5(fetched_data)SORT(incident.tags, "name")MAP(ip_reports, "deliverable")
REVERSE(all_incident_reports)JSONPATH(request.form, "$.phoneNumbers[*].type")MD5(fetched_data)SORT(incident.tags, "name")MAP(ip_reports, "deliverable")
IF(AND(creation.status = 200, …)TRUNCATE(error.message, 8)FIND(ARRAY(r,g,b), LAMBDA(value, VALUE > 128))TRUNCATE(alert_payload.message, 8)
IF(AND(creation.status = 200, …)TRUNCATE(error.message, 8)FIND(ARRAY(r,g,b), LAMBDA(value, VALUE > 128))TRUNCATE(alert_payload.message, 8)
IF(AND(creation.status = 200, …)TRUNCATE(error.message, 8)FIND(ARRAY(r,g,b), LAMBDA(value, VALUE > 128))TRUNCATE(alert_payload.message, 8)
MODULO(numerator, denominator)OBJECT("parsed", PARSE_CSV(upload))ZIP(download_from_s3.result, "attachments.zip")DEFAULT(form.body.slack_channel_name, "general")
MODULO(numerator, denominator)OBJECT("parsed", PARSE_CSV(upload))ZIP(download_from_s3.result, "attachments.zip")DEFAULT(form.body.slack_channel_name, "general")
MODULO(numerator, denominator)OBJECT("parsed", PARSE_CSV(upload))ZIP(download_from_s3.result, "attachments.zip")DEFAULT(form.body.slack_channel_name, "general")

Many security automation tools and SOAR platforms claim to be no-code. But once you need to do something tricky, like precisely assembling a piece of text or modifying the structure of data between APIs, you’ll either find yourself blocked, or needing to write code.

Introducing formulas. You already know how to use them, and with our in-built library of hundreds of functions, you can instantly tap into the power you need.

Proudly not invented here

In Tines, one action can reference another, just like the cells in a spreadsheet. So when it came to finding the perfect way of manipulating data for actions, the answer was right in front of us: formulas. We’re proud to tap into an almost 50 year history, and include one of the very best ideas in software directly in Tines.

1979 - Visicalc

PCs owe everything to spreadsheets. In 1979 VisiCalc hit the stage and opened the door to personal computers.

VisiCalc succeeded by allowing a much broader audience to be productive with computers. For the first time, the concept of formulas was introduced to a sheet of cells, allowing you to combine data and compute useful results.

1987 – Excel250 million new programmers

We all meet equations and formulas from a young age in math and science classes. Those formulas and equations grew up with us into business with spreadsheets from Lotus 1-2-3 which displaced VisiCalc in 1983 and then Excel displacing Lotus again in 1987.

Formulas made code feel like no code. Spreadsheets became a bigger and bigger hit. While other features came and went, formulas stood strong.

2006 – Google sheetsInternet spreadsheets

Spreadsheets survived the arrival of the internet. Google Sheets revolutionized spreadsheets with live collaboration. Later entrants, like Airtable and Equals, continue to take the metaphor to increasingly ambitious places.

Through all of this innovation, formulas persist. SUM works exactly the same in Airtable and Equals as it did all the way back in VisiCalc.

You are here – TinesWorkflow automation

You can’t automate your security team with spreadsheets. We now live in a networked world with complex data flowing between different apps and APIs constantly.

That’s where Tines comes in. Instead of cells, actions perform different jobs, like fetching data from other systems. But just like in cells, an action might need data from another to calculate a new value. Formulas live on.

How it works

Just like a cell in a spreadsheet can be computed with a formula, so can a value in a Tines action.

Spreadsheet

Build values by referencing other cells

Tines

Build values by referencing other actions and object-like resources

Try formulas now

REVERSE(all_incident_reports)JSONPATH(request.form, "$.phoneNumbers[*].type")MD5(fetched_data)SORT(incident.tags, "name")MAP(ip_reports, "deliverable")
REVERSE(all_incident_reports)JSONPATH(request.form, "$.phoneNumbers[*].type")MD5(fetched_data)SORT(incident.tags, "name")MAP(ip_reports, "deliverable")
REVERSE(all_incident_reports)JSONPATH(request.form, "$.phoneNumbers[*].type")MD5(fetched_data)SORT(incident.tags, "name")MAP(ip_reports, "deliverable")
IF(AND(creation.status = 200, …)TRUNCATE(error.message, 8)FIND(ARRAY(r,g,b), LAMBDA(value, VALUE > 128))TRUNCATE(alert_payload.message, 8)
IF(AND(creation.status = 200, …)TRUNCATE(error.message, 8)FIND(ARRAY(r,g,b), LAMBDA(value, VALUE > 128))TRUNCATE(alert_payload.message, 8)
IF(AND(creation.status = 200, …)TRUNCATE(error.message, 8)FIND(ARRAY(r,g,b), LAMBDA(value, VALUE > 128))TRUNCATE(alert_payload.message, 8)
MODULO(numerator, denominator)OBJECT("parsed", PARSE_CSV(upload))ZIP(download_from_s3.result, "attachments.zip")DEFAULT(form.body.slack_channel_name, "general")
MODULO(numerator, denominator)OBJECT("parsed", PARSE_CSV(upload))ZIP(download_from_s3.result, "attachments.zip")DEFAULT(form.body.slack_channel_name, "general")
MODULO(numerator, denominator)OBJECT("parsed", PARSE_CSV(upload))ZIP(download_from_s3.result, "attachments.zip")DEFAULT(form.body.slack_channel_name, "general")
Sign up free