About My Automations

1 +
workflows replaced
1 +
Manual clicks saved
1 +
hours of busy work saved
About Me

My purpose: to reduce the friction/sludge/busywork. 
My framework: reduce the number of tasks and decisions required by humans to reach an outcome. 
My joy: problem solving how to turn a manual workflow into an automated one. 

Some of my scenarios were built to be quick solutions and not permanent so you’ll see iterations that are built inefficiently. I’ve tried to include criticisms in some of the descriptions  about where improvements could be made as I look back with fresh eyes. 

Full Access Purchase
Full Purchase
Tech Stack: 12
Purpose:Complete order processing workflows
Explanation: This scenario is triggered by another scenario that sorts orders by ProductID. In this case, the buyer purchased either a digital or physical membership card. They’re assigned the correct role in WordPress, shipping information is printed, if applicable, or a custom digital membership card created for them. Information is also synced with the CRM, spreadsheets and Facebook Custom Conversions. For digital memberships, we built in a backup image processor when our original vendor had an outage.
Code Registration
Code Registration
Tech Stack: 7
Purpose: Validate registration codes from gifts and 3rd party vendors
Explanation: Codes are sold from our website and through 3rd parties vendors. Because we wanted to lower the friction on the consumer end and lower customer service requests, we organized codes ahead of time and direct registration forms based on prefixes or number ranges. This removed the need to ask the consumer where their code was purchased, and many times it was a gift so they didn’t know. Branches utilize different templates for membership cards.
Course Revision
Golf Course Edits
Tech Stack: 7
Purpose: Update and sync information across platforms when edits submitted
Explanation: Golf courses or admins can revise their offers or business details via Gravity Forms. We use Make to sync that data across WordPress, Google Sheets, and Airtable for a display map and then, if they change their offer status, change the status of the post to match different templates. The last module triggers a scenario to count courses and determine pricing. I could improve this scenario by mapping variables for the Gravity Form fields and use if-contains logic to reduce the number of branches
Dynamic Pricing and Counts
Dynamic Pricing
Tech Stack: 3
Purpose: Live pricing as offers are added or removed
Explanation: Triggered by the Golf Course Edits scenario, this scenario counts the number of golf courses per state per category (used to determine the correct templates in WordPress). Counts are used to determine pricing for each state and update custom fields so that information is available in real time to customers so they can make educated buying decisions. I can improve this scenario by reducing the number of branches by mapping the dynamic prices to a variable.
National Campaign Email Opens
Email Tracker
Tech Stack: 1
Purpose: Track email open counts to determine warm/hot leads
Explanation: In another scenario, we email golf courses and implant a webhook pixel into the email to track opens. Those webhooks are tallied into a Google Sheet and then this scenario totals the opens by email and adds the information to our main database sheet where we can relabel them as warm or hot leads by opens.
Email Campaign Updater
Campaign Updater
Tech Stack: 3
Purpose: Find hot leads and clear email inbox
Explanation: Similar to the previous scenario, this one tracked opens and clicks from a chrome extension. Triggered hourly, it will search for emails with certain words, parse the email, update the appropriate lead sheet, and then archive the email. I can reduce the upkeep on this scenario by improving on the router logic and combing all the email modules into a single instance as the last arm of the router.
Course referral
Referral Program
Tech Stack: 4
Purpose: Assign dynamic commissions based on referral of golf courses.
Explanation: Because commissions vary by state, it didn’t make sense to give the same amount across the country. Rather than create different forms for each state, I created this scenario to award commissions based on the number of golf courses active in the state.
Course Claim to Unverified
Claimed Listing
Tech Stack: 6
Purpose: Assign custom post to the claimant and sync data
Explanation: After a course operator claims their listing, we need to trigger some workflows within WordPress to assign the Gravity Forms ownership to the claimant. This scenario also completes creates folders in Google Drive for later use, updates the master spreadsheet and updates the CRM for an onboarding email sequence. The last module includes a webhook that triggers another scenario. I used this process to reduce the friction to the person on the other end by hiding the normal email verification process into a welcome email with their login information.
Arrivia webhook
3rd Party Rewards
Tech Stack: 3
Purpose: Validate a rewards claim and assign extra rewards if necessary
Explanation: Accepts a webhook from a 3rd party that a user registered their rewards code. Their system uses a custom validation response, which did not match their documentation so we worked with their support to solve the issue. After validation, we add rewards to the users account, then check to see if they have more rewards. Extra rewards were added if they purchased multiple years and filters are used to end the process if a user is not eligible for extra rewards.
HaT - Active Campaign
Active Campaign Data
Tech Stack: 3
Purpose: Gather data on open rates and subject lines
Explanation: This was a particularly interesting problem because Active Campaign doesn’t provide open rates and subject lines in the same API. I had to dig into their legacy API and chain different requests. Using the current “Get a Campaign” doesn’t provide the message ID so I had to go back a step with the legacy API “List Campaigns” which provided the message ID but not other information. After using 3 different modules to grab the right info, I was able to put it in a spreadsheet and include an image of the email itself for easy context about the contents and design of the email.
Image Validator
Image Validator
Tech Stack: 9
Purpose: Automated approval of image submissions
Explanation: I built this scenario to ensure the safety of the website. Users are allowed to submit pictures of their golf courses and before they’re uploaded, they’re run through Google Cloud Vision for any risk factures. If any, I am notified. If none, the picture is uploaded as either the featured image or logo depending on how it was submitted. It’s also added to the golf courses’ google folder and Airtable for the map display.
Gallery Images Checker
Gallery Image Validator
Tech Stack: 6
Purpose: Automated approval of gallery image submissions
Explanation: Built off the image validation scenario, I broke this off into a separate scenario to deal with multiple images being submitted for a gallery. I pull images one by one through the iterator to check for safety concerns and they’re uploaded to the post if they pass. Any image that has a concern is sent for manual verification and not uploaded.
Or Statement
Tech Stack: N/A
Purpose: Issue the right voucher
Explanation: I offered vouchers of different amounts as a purchase incentive. Rather than creating 5 different routers, I opted to learn how to wrap commands and use the OR statement. It was a great learning experience
GF Add Entry
Gravity Forms
Tech Stack: 1
Purpose: Add a form entry
Explanation: I used the Gravity Forms infrastructure to build out much of the website because it has API availability and some powerful add-ons. This simple scenario capitalizes on that by taking an entry from one form and adding it to another where the results are combined and displayed for others to view. It’s simple and effective.
Custom Fields
Custom Fields
Tech Stack: 1
Purpose: Post templates and data syncs
Explanation: There are approximately 17,000 golf courses listed on TheLinksCard.com. I utilized custom fields to enable dynamic posts so it became easy to sync information across WordPress, our spreadsheet and CRM. The REST API within WordPress is a game changer for systematically updating information using automations.