
Introducing Multi-Step Zaps: An Easier Way to Build Powerful Workflows - Brian_Curliss
https://zapier.com/blog/workflow-automation/
======
mikeknoop
Zapier co-founder here.

This is seriously the biggest change to our product since launching the
company. We've been working on it for a year (including a beta w/ several
thousand users) and are very excited to finally release it. Before, Zapier
only supported 1-to-1 integrations which limited it's power. Multi-Step Zaps
open up a huge array of new power...

\- transforming data (like dates, string manipulation)

\- executing JS code in between steps (can do manipulation, extra API calls,
etc.)

\- looking up data inside other apps

\- if an item isn't found when looking it up, create it

More details in our release notes: [https://zapier.com/blog/workflow-
automation/](https://zapier.com/blog/workflow-automation/)

How we built this: [http://blog.invisionapp.com/redesigning-interactive-
editor/](http://blog.invisionapp.com/redesigning-interactive-editor/)

I know a ton of folks in the HN community use Zapier. Thank you so much for
your support. I can't wait to see what you build now!

~~~
bryanh
Likewise - Zapier co-founder/CTO here - really excited about this launch. It
represents a complete re-build of our stack to support workflows. Pretty much
anyone can build complex workflows from a pretty easy to use UI.

To call this out specifically - I think HN might appreciate the Code steps you
can add to your workflow - we support both Python [0] and Javascript [1]
today.

I've been using it to replace dozens of crontabs and others are using it to
inject custom scripting into workflows around Github, Bitbucket, Trello,
Salesforce, etc. I especially like making Slack bots with it (we've made a few
game moderator bots, pretty fun).

I'll be around all day - happy to answer any questions. There is some cool
tech under the hoods.

[0] [https://zapier.com/help/code-python/#how-does-it-
work](https://zapier.com/help/code-python/#how-does-it-work)

[1] [https://zapier.com/help/code/#how-does-it-
work](https://zapier.com/help/code/#how-does-it-work)

~~~
ycapplication
We love Zapier and I'm really excited to start playing around with this. One
concern I've always had as an engineer using Zapier was how it accounted for
unique trigger events.

1\. Concerning privacy, for API's that don't offer webhooks for instance, does
Zapier poll the API and then store some of our data in order to confirm that
new records are indeed new? 2\. Concerning robustness, what insurance is there
against any failure that the zap will catch up with its triggers?

We don't currently use Zapier for anything mission critical and I'm hesitant
to recommend it, but it would be pretty cool if we could use it for making
zaps that contain more sensitive data and are more critical.

The privacy policy states: "Your user-facing Task History is stored for the
life of your account so that you can monitor Zapier activity and replay
failures." [1] I was hoping for a bit more of a technical explanation, though,
and could only find pricing FAQ's.

[1] [https://zapier.com/help/data-privacy/](https://zapier.com/help/data-
privacy/)

~~~
bryanh
A quick primer:

1\. We store a hashed unique id for polling deduplication for as long as your
zap is on. We don't store "all" data for all items "seen" in this case.

2\. The nice thing about polling is even if we miss a beat here or there -
catching up is crazy easy. This is usually no problem at all.

Reliability is actually a big push for us in 2016 - while we are already
pretty good we want to be provably safe for mission critical stuff. Keep an
eye for some transparency/service status stuff from us this year.

More details since you linked to data privacy:

The task history stores all the data around a task that fires, we've found it
is critical for transparency so users can see what happened when and with what
data.

The raw logs (think outbound HTTP API calls) are stored for 7 days max and are
absolutely critical for us determining just what an account is doing in the
system. We just roll them off after 7 days for security reasons.

------
colinbartlett
This is HUGE! So excited to see this. I automate huge swaths of my life with
Zapier.

I have been relying on a little self-hosted web app to "fork" some web hooks
and this seems to me to eliminate that need entirely.

[https://github.com/deadlyicon/deploy-hook-
forker](https://github.com/deadlyicon/deploy-hook-forker)

~~~
bryanh
That is pretty clever. We also let you rewrite the "hook" \- or shrink it - or
even augment it!

------
roycehaynes
Good stuff - I know this has been in the pipeline for sometime. Excited to see
it out in the wild. Congrats to the Zapier team on producing an awesome
product - look forward to using multi-step zaps.

------
einarvollset
I love Zapier, with one exception. For some reason the webhook zap doesn't
provide the whole post body. Strips the root {} meaning it shows up as text
without structure. Very odd choice that I wish they'd fix. Besides that am big
fan

~~~
bryanh
Great suggestion - thanks! I'll look into providing the POST body for inbound
webhooks.

~~~
einarvollset
Thanks dude!

------
acutelyobtuse
Anyone who uses Zapier for personal workflows - I am curious why use Zapier
over IFTTT?

Note: this is NOT a challenge to why something like Zapier exists for
business, nor a comment directly on the new multi-step Zaps.

~~~
krmmalik
Its hard to explain but i dont feel IFTTT and Zapier quite operate in the same
space. IFTTT is much more about your relationship with a service that needs
some basic interaction with another. Every "recipe" is built around you, your
relationship with the primary online service.

Zapier is more like a glue between two building blocks, it doesnt have to
include the relationship to you, just between two building blocks. That simple
shift in the way zapier is solving automation make it incredibly powerful.

------
gk1
I'm super excited about this. Well done!

One of my biggest pain points was the lack of ability to determine if a record
already exists before choosing to use an Update or Create action. (You'd think
a service's API would treat Update the same as Create if no matching record is
found, but that's not always the case.) So I've had to err on the side of
caution and always use a Create action, thus filling the CRM (or whatever)
with many many duplicates.

The search feature looks like it will handle this. Will be implementing
shortly.

~~~
mikeknoop
Some APIs do support "upsert" functionality which is basically what you
suggested. It's not very popular though and Zapier previously had to support
the lowest-common-denominator which is plain creates.

Now that we officially support Search actions, we can do a lot more cool
things.

------
Brian_Curliss
I remember this being something I saw people on hacker news asking about in
2012 :)

------
joelrunyon
If you have multiple zaps that could be one multi-step zap - do you have a way
to merge them?

~~~
bryanh
We don't have any automated tools for combining zaps into multistep zaps right
now - unfortunately. Seems like it could be useful though!

------
philsnow
Very cool, congratulations on the launch.

I'd be curious to read a blog post about if/how you beta tested this feature
and ensured "fit" of the final shipped feature. Did you have an early adopter
/ guinea pig group?

If I wanted to make a Zap DAG, would I just arbitrarily linearize it ? i.e. if
my deps were,

    
    
        A -> B
        B -> X
        B -> Y
        B -> Z
        X -> C
        Y -> C
        Z -> C
        C -> D
    

one linearization is A -> B -> X -> Z -> Y -> C -> D

Do you notice implicit dependencies and do actions in parallel where there is
no dependency ? Maybe it doesn't matter except for very deep / wide zaps.

