How to Split Webhooks with Zapier

Webhooks are great right? They let you pass information where you need them and then you can use them when you need to use them. Sounds perfect! There can come a time however when you have a webhook built into a script which you want to be able to do multiple different things. Multiple different things with the same webhook becomes difficult if you are not passing a lot of data. 

This problem occurred to me. I have a python script which when executed passed a webhook to a URL after every loop through. The webhook will then pass a URL which I then want to search in a CRM system and change the stage of a deal. The issue is, some of the URLs are in the first stage and some in the 2nd and 3rd.. etc. How does one solve this? 

With a master hook that is how! The python script will pass the data to one webhook. This will then go into zapier and that is where the magic happens;

  1. Webhook arrives (trigger in Zapier)
  2. find the URL in the CRM to find the deal
  3. with this found, you can see what stage that deal is. Each stage has an ID
  4. Create 4 fresh webhook zaps and note the URL of the webhooks
  5. Create a google sheet with the 4 webhook URLs, in the same row, add the id of each stage
  6. In the master hook zap, add a stage to search this google sheet for the stage id. 
  7. Finally push a webhook out and build the url with <webhook url>+<google sheet info>+<url data in step 1>
  8. Hey presto, you have successfully filtered the webhooks to where they need to go. 

What can I do now?

Now that you have each of these webhooks receiving based on the master hook zap – you can build the zaps you need for each. The Stage 1 zap can now push the deal to stage 2 and mark an activity as done. The stage 2 zap can now push the deal to stage 3 and mark an activity as done etc etc. 

This is a fairly powerful workflow as it let’s you create a bunch of custom actions based off a single webhook. It takes a bit of time and patience to set up correctly and for a noob like me, dealing with webhooks is something completely new but I am starting to realize the potential now. 

After spending way too long trying to do a PUT request with Python or javascript or some other nonsense, I even found that you can do this with a webhook directly from Zapier! That was a pretty great non technical achievement to set up. 

Do a Google Search from Slack!

Everybody loves going to a search engine when something doesn’t make sense. If you aren’t already at your browser though you may be thinking… hey, how can I speed up my workflow and ensure I can limit my time spend? Well today I introduce you a basic workflow which will allow you to search within Slack. 

I know, I know.. first world problems. This is something which doesn’t really solve much problems but it does speed things up! The benefits from what I could see were the following;

  • Easily create a search in slack, spit out a URL and click it… hello efficiency!
  • Slack is usually where you talk with your team. Being able to share a search with your team is incredibly powerful
  • Everybody loves a Slackbot right? #amiright

The initial outline

Ok, so we want to do a search in slack and then get a Google URL. How would we go about this? Well of course, the workflow will be something I will share below. This is what I want to happen;

  1. Go to a specific slack channel
  2. Write ‘search <thing you want to search>
  3. A bot will send a message with the URL of the search which you can then click

I told you it wasn’t difficult right. So let’s get cracking. I guess it makes sense to try and figure out how Google searches look and understand the URL… let’s search for sausage and beans for jokes… 

A casserole recipe! Well… that looks tasty but look at the top… look at that horrendous URL. Incase you can’t see it, it looks like this – https://www.google.co.th/search?dcr=0&source=hp&ei=eACXWoeOOIzcvgSIwYy4Dg&q=sausage+and+beans&oq=sausage+and+beans&gs_l=psy-ab.3..0l10.2521.4349.0.4456.20.17.0.0.0.0.146.1567.9j6.16.0….0…1.1.64.psy-ab..4.15.1567.0..0i131k1j0i10k1.87.t-_Jvn3kfjY

Not too much of a fan of all that source and following information. Just want something to work and don’t really want to get the Google suggestions… I just want the things that work… I think it is time for a pivot!

The pivot

All the cool kids pivot right? This is mine. Time to use DuckDuckGo. It is like Google but without all the tracking and annoying cookies and other non-edible joke things. If I do a search on DuckDuckGo what do I see? Oh! Oh! This is something I can work with.

More importantly to this is the URL. The URL is https://duckduckgo.com/?q=sausage+and+beans. This is easy and easy to work with. So the string that we need to create is whatever we want to work with + instead of the spaces and we just need to attach the whole lot to the end of duckduckgo.com?q=<SEARCH+HERE>. 

Putting it all together…

like a great sausage and beans casserole.. anyone else hungry by this point? Ok stop messing around. This is a super simple process with Zapier. Let’s get started!

Step 1 – You will need to go create a new zap and have Slack as the trigger. Choose post message to a channel and choose which channel you want this to work on. I chose #random because we never use it. 

Step 2 – We want this to only trigger if the message starts with search. This will mean that if the message is anything else then it won’t trigger the action. You can do this by setting up a filter. 

Easy life that worked! Now to split the text so that you can add it to the search for DuckDuckGo. For this you need to use the formatter tool. First we need to split the text.

Step 3 – Make a Formatter action and then choose the split text function. You want the formatter to return everything after the ‘search ‘ in the message. Very easy to set up like this;

Now that we have sausage and beans I think there is an end to the journey but one more formatter is needed. We said earlier that the DuckDuckGo search uses + instead of spaces. So this time we want to use the replace function. 

Step 4 – Open formatter use the replace function and make sure you use it based on the last output as that is the text we need to manipulate now. Use the replace function and replace the spaces with +. Very simple and your output should look like this;

Yehaw! Now to add the last step which is to push this all back into the #random channel in Slack with the search term. For this you will need to use a Slack action.

Step 5 – Make a new channel message in Slack and choose what you want it to say. For this example I will make it say ‘Click here to see that search! <SEARCH LINK>. Easy way to finish off. I will make it send as a bot and my bot will be Bulma from DBZ because why not…

Turn the zap on and you are now ready to search in slack. Let’s have some fun. 

Automating Your Etsy Store!

How did I end up here?

Welcome to WordPress. This is your first post. Edit or delete it, then start writing!

Selling on Etsy is fairly difficult. If you manage to get some traction then you will find that more sales will likely follow. I started to sell a few things on Etsy to just try to understand the market and dip my toes into some ecommerce. It all started like all good things start… out shopping!

I was walking around Bangkok and figured to go into one of the shopping malls for the air conditioning and shelter from the sweltering weather. I didn’t really have any plans to buy anything and I think this frame of mind is very much the definition of mooching. I was mooching around and noticed there was a handicraft market going on in the middle of the shopping mall and decided to take a closer look. 

Pretty standard stuff but one thing in particular caught my eye – a stall selling handmade natural wood business card holders. I always see these guys at networking events with these metal card holders so figured I could probably make use of one. Purchase made, I went home and decided to research the guys who made them. They had a whole line of products and some of them were pretty cool. I figured, I could probably sell the stuff on Etsy as it was handmade and just work as a middle man connecting the Thai seller with the European, US and Australian buyers. Fast forward 3 months, and the first sale happened. 

Initial Traction

Please note if you are easily offended by me calling myself a ‘biatch’ in Slack, please click the x on this tab. Everybody should have the right to call themselves whatever they want.

That was cool! I can now see when an order comes in but I still need to manually go to Etsy, find out what it is and then message the guys to fulfill it. The deal I made was to not touch any goods, I hate the word but effectively dropship the items where I provide the item quantity and the address, they provide me the bill and everyone is happy. 

Turns out even this takes more time than I wanted to spend… how do you automate this so that I can literally click a button and have it taken care of?

Email Parsing comes to the rescue!

An email parser is something that looks at your email and looks for patterns within it, it then will extract certain pieces of text / data which you can then feed into other applications you may want to use. I figured that the important bits of text from an Etsy order confirmation were the following;

It will end up looking something like this. I took the transaction ID from the subject of the email but could have also grabbed it from the body.

Now I had all the fields I needed there was just one more problem. The makers of the products had somewhat standard names for them. I obviously had tried to make them sound more appealing playing on alliteration and other techniques. I couldn’t just send them the product name that I had and expect them to fulfill it. How would I go about fixing this? Time to get automatic. Let’s head to Zapier. 

Automating the Data

Before creating a Zap (process in Zapier). I like to try and envisage it in my head and write it down if possible. What we want to be able to do here is the following;

  1. Only process on emails matching the Etsy confirmation style – easily achieved with a filter. 
  2. Send the email to the parser – simple with the Parseur application.
  3. Take the parsed text and feed the product into a database to find the matching text – could use Google Sheets for this but I used Airtable.
  4. When the matching field is found, find the other field in the row which is the name the maker gave the product. 
  5. Compose an email to the maker with the Order ID in the title and ‘New Order Received – ID’ in the subject and giving the order details in the body with the quantity. 
  6. Compose an email to the buyer thanking them for the order and letting them know that we have many other products for sale and if they did want more they would save on shipping (the upsell).
  7. Add the customer email to a list – mailchimp or google sheet works here.
  8. Send a message in Slack to provide basic details on the price and items that have been ordered – this just ensures that I see it from the Slack command center. 
Easy life.

Issues to overcome

Parseur which is the email parsing product I use have a table parsing feature. This will identify a table and parse all data within it. This means if someone orders 1 item, it will parse the information for the 1 item, if 2 or 3, you will still get the items parsed. The problem with this is that it is hard to feed it into Zapier with the lookup database workflow to get the real names if you don’t know how many items are going to appear each time. This led us to not using this feature in the parser. So how did we solve it?

Parseur doesn’t put a limit on the amount of email addresses you can use for parsing. I simply created an inbox for 1 item and an inbox for 2 items and so on. It is rare that someone orders more than 4 different items from us, so setting up these 4 inboxes covered 100% of the orders. Now this does mean that you actually have to set up individual zaps in Zapier for each of these to run correctly and you will need to manually trigger the process by looking in the email for how many items before sending it to the right inbox.. this is a small price to pay for the freedom it allows though!