Automation Challenges with Solutions.
Challenge 1:
Email invoices to buyers when a new entry is added to the Google sheet.
Given Data: Invoice template in Google Docs.
Requirement: Generate a PDF from the Doc and attach it to a Gmail send.
Solution:
Trigger -> Google Sheets: New Row Added
Action 1-> Google Docs: Create from Template. This action response returns a PDF Export file (capture file/URL), which you can use and send to gmail
Action 2-> Send email from gmail attach file here.
Optional (If user want to share hosted PDF file)
Action 3-> Upload file to google drive (in a specific folder)
Action 4-> Share that PDF with anyone or specific user
_____________________________________________________________________
Challenge 2:
I want to check how many people filled the form and when 50 or 100 or 200 people filled the form, send me a notification on slack.
Solution:
You must use Workspace Memory to build this type of automation.
Trigger -> New form submitted
Action1 -> Use memory that will keep the count and add 1 every time flow ran
MultiPath->
->Path1: If count = 50 return true
->Action: send slack message “total 50 people filled the form”
->Path2: If count = 100 return true
->Action: send slack message “total 100 people filled the form”
->Path1: If count = 200 return true
->Action: send slack message “total 200 people filled the form”
Solution 2:
You must use Workspace Memory to build this type of automation.
Trigger -> New form submitted
Action1 -> Use memory that will keep the count and increase by 1 every time flow ran.
Action 2 -> JS code that will return true if count in the memory reach to 50 or 100 or 200
MultiPath->
->Path1: If JS code action return TRUE
->Action: send slack message “total {{Count from memory response}} people filled the form”
____________________________________________________________________
Challenge 3:
Your company maintains a task tracker in viaSocket Table or Airtable. Each row represents a task with columns such as Task ID, Task Title, Assignee Name, Status, and Created At.
Whenever a new task is created, an alert should be sent to Slack #task channel.
If the task remains in Pending status for more than 2 hours, a follow-up alert must be sent to the #founder channel, including the Task Title and the Assignee Name.
Solution:
Trigger: New row added in table (Google Sheets / Airtable / viaSocket Table).
Action 1: Send Slack message to #task with Task Title, Assignee, and Status.
Action 2: Add Delay of 2 hours.
Action 3: Fetch the same row from the table.
MultiPath -> Path1-> Condition: If Status == "Pending".
-> Action inside condition: Send Slack message to #founder with Task Title and Assignee.
_____________________________________________________________________
Challenge 4:
An E-commerce company wants to automate its order delivery and tracking process.
A new order is created, it should be sent to the Delivery Courier Service API. (which returns a Tracking ID).
The Delivery API provides the following endpoints: Create, Update, List(s), Delete.
The company wants to monitor all orders continuously, and if an order is not delivered within 3 days, an escalation alert must be sent to the Operations Manager on Slack with the Order ID and Customer Name.
Constraints:
You must build this using a single workflow.
You are not allowed to use Delay or Memory features.
We don't have instant Triggers for this E-commerce company.
Delivery Service means services that deliver e-commerce products like DHL or BlueDart, Use the available Delivery API endpoints to handle order status tracking.
Solution:
Trigger:
Cron → Run every hour
Advanced Config: JS code to fetch all orders created in the last 1 hour and return them in an array to run the flow one by one.
If no orders available → return a "No-orders" dummy array.
Actions1:
MultiPath -> Path 1 Condition: If trigger result ≠ "No-orders"
-> Action 1 Inside Multipath: Delivery API → Create Order (returns Tracking ID)
Action 2: JS code that will call the List All Courier Items API only if the current time is between 11:00 AM – 11:59 AM and return only the items not delivered in exactly 3 days.
If no overdue orders are found → return "No-data".
Action 3 Mutipath -> path1 Condition: If JS output ≠ "No-data"
-> Action 3 inside path1: Send Slack message to Operations Manager with escalation details.
Why Advanced Config + Dummy Array?
So that we will know if there is an order or not to run the Create Delivery API. Otherwise, the workflow would try to run even when no orders exist.
Why Check Current Time in the Second JS Action?
We only want to check overdue orders once a day (at 9 AM). Without this condition, the workflow would repeatedly call the List All Courier Items API every hour, which is unnecessary. users might get a few hours of delay, and we can add two or three different time periods if the user agrees.
_____________________________________________________________________
Challenge 5:
You want to:
Send an email to the contact (from Airtable / Google Sheet ) only once when the Status column changes to "Issue Solved".
Constraint
Using the trigger “When entry updated” would fire every time any field changes, not just the status field — meaning you’d send multiple duplicate emails per record.
Solution:
Trigger → Row Updated
→ MultiPath (if Status == "Issue Solved" and Mail_Sent != true)
→ Send Email
→ Update same row set (Mail_Sent = true)
Explanation:
This means you need to keep one additional column in your table - e.g., Mail_Sent - to track whether the email has already been sent.
_____________________________________________________________________
Challenge 6:
You have a table of leads in Google Sheets.
When a lead’s “Follow-up Date” matches the current date:
Automatically send a personalized follow-up email using Gmail and AI.
If the email bounces (based on Gmail send response), update the Google Sheet column “Status” = “Invalid Email” notify Sales Lead on Slack.
Solution:
Flow 1: Automated Follow-Up Email
Trigger:
→ Run daily once
Advance config: (return all rows one by one)
Advance config If condition: “If followupdate == current date”
Actions:
Write mail using AI
Send mail
Flow 2: Handle Email Bounce Reports
Trigger:
→ Gmail: “Email Failed/Bounced”
Actions:
Update google sheet
Send mail on slack
Note:
(Why two flows): We need to use two different flows here because Gmail generally tries itself to send the mail and sometimes the report comes in 1, 2, or 3, 7 days In the second flow we will use “mail failed/bounce” as trigger.
Can be possible in single flow if use delay feature in same flow.
_____________________________________________________________________
Challenge 7:
Problem Statement: Missing Slack Info in Employee Database
When a new employee joins your company, as an HR you ask them to fill a joining form with details like:
Name
Joining Date
Department
You store this data in your Airtable / viaSocket Table / SQL Database.
After 7 days of joining, you create their Slack account, where Slack stores details such as:
Name
Email
Phone
Slack ID
The Problem
After a year, you realize your database (Airtable / viaSocket Table / SQL DB) only has the basic information — name, joining date, and department.
But it’s missing the important Slack details like:
Email
Phone
Slack ID
Now, you have thousands of records (around 1000+) of employees in your database with only their names, and you need to:
Get their Slack details (email, phone, Slack ID) from Slack,
And update your database with this information for all those employees.
Solution:
Solution:
Flow: Sync Slack Details to Employee Database
Trigger:
→ New user created or updated on Slack
Actions:
Find record already existing in the DB with “Name” (pass Slack candidate name coming from trigger)
Condition: If "find record action" return data exists
2.1 Action: Update record with Slack ID, Email, and Mobile Number
Note:
Here we need to use or build a Slack trigger which supports bulk transfer.
Why only this solution:
because we runs the bulk transfer slowly, in the background. Ensuring it doesn’t send all Bulk or 1000+ API calls at once and avoids hitting any app’s API rate limit.
_____________________________________________________________________
Challenge 7.2:
The goal is to automate a monthly mentor feedback process through viaSocket and Slack. On the 25th of every month, a feedback form link must be sent via Slack DM to all mentors listed in the viaSocket Table. Each mentor is responsible for submitting feedback for their assigned mentee.
If a mentor fails to submit the form, the system should automatically send three daily follow-up reminders (on the 26th, 27th, and 28th). After these three days, if feedback is still not received, two actions are triggered:
A Slack DM to the mentee, informing them that their mentor hasn’t filled the form and that their salary will be held.
A message in the #general channel, tagging all affected mentees by their Slack IDs, warning that salaries will not be processed unless feedback is submitted within 24 hours.
Once a mentor submits their feedback, it should automatically be shared with the respective mentee.
All data (mentors, mentees, Slack IDs, and feedback) are stored in viaSocket tables, and viaSocket actions already exist for fetching records, sending DMs, and triggering forms.
The challenge is to design a single, optimized workflow—ideally without using the “Delay” feature—by leveraging conditional logic, daily triggers, and table updates to manage reminders, submissions, and notifications efficiently.
Solution: Trigger:
→ Cron that runs on 25th, 26th, 27th, and 28th of every month
→ Advance Config: Fetch data from viaSocket Table (where feedback is empty)
→ Loop over each record
---
Actions:
Action 1: Find mentor Slack ID
Action 2: Send DM to mentor (message includes feedback form link)
Action 3: Get memory key → message_sent_on_general = Yes/No
Action 4: MultiPath condition
➡️ Path 4.1: (If date is 28th)
→ Action 4.1.1: Send DM to mentee ("You are not going to get salary")
→ Action 4.1.2: Send DM to mentor ("Your mentee will not get salary")
➡️ Path 4.2: (If date is 28 && If message_sent_on_general = No)
→ Action 4.2.1: Find all records where feedback is null/empty
→ Action 4.2.2: Send Slack message on #general channel (tag mentees)
→ Action 4.2.3: Update memory → `message_sent_on_general = Yes
_____________________________________________________________________
Challenge 9:
New leads are added to Airtable with fields Lead Name, Email, Notes.
You want:
Use AI to determine the lead’s category: “Hot”, “Warm”, “Cold”.
If “Hot”, send to Slack channel #sales-hot-leads.
If “Warm”, create a follow-up task in Google Tasks
If “Cold”, just update Airtable “Next Review Date” = +7 days.
Constraint:
You can't use Multipath (IF condition).
Solution:
1️⃣ Trigger — Airtable
Trigger when a new record is created in the Leads table.
Capture fields:
Lead Name
Email
Notes
2️⃣ Action — AI Categorization
Use an AI Text Classification model to analyze the “Notes” field.
The model returns one of: “Hot”, “Warm”, or “Cold”.
3️⃣ Action — JavaScript Logic
The JavaScript step will:
Receive the AI classification result along with lead details.
Check the category value returned by AI.
Perform API operations accordingly:
If “Hot” → Call Slack API to post a message in the #sales-hot-leads channel with lead details.
If “Warm” → Call Google Tasks API to create a “Follow-up” task for the lead (due in 2 days).
If “Cold” → Call Airtable API to update the same record by setting the Next Review Date to 7 days from today.
Return a confirmation message summarizing which action was executed.
✅ Outcome Summary
Lead Category | Action Taken |
Hot | Send Slack notification to sales channel |
Warm | Create a follow-up Google Task |
Cold | Update Airtable with “Next Review Date” = +7 days |
Challenge 9.1
An E-commerce company uses Shopify for online orders and Airtable for order tracking.
When a new order is created in Shopify, the system must automatically create a corresponding record in Airtable.
If the Airtable record already exists (matching by Order ID), it should be updated instead of duplicated.
If an order is cancelled in Shopify, the system should update Airtable’s “Order Status” column to “Cancelled” and send a Slack message to the Logistics Manager.
The workflow should handle both creation and cancellation using a single flow and avoid duplicate updates even during Shopify API retries.
Solution : 1️⃣ Trigger — Shopify
Triggered when a new order is created or updated in Shopify.
2️⃣ Action — JavaScript Logic
Handles both order creation/update and cancellation in one step.
Searches Airtable by Order ID.
If found → updates the record.
If not found → creates a new record.
If order is cancelled → updates Airtable status to “Cancelled” and sends a Slack alert.
Ensures no duplicate updates using Shopify’s event ID or timestamp.
3️⃣ Action — Airtable
Creates or updates the record based on Order ID.
4️⃣ Action — Slack
Sends a cancellation notification to the Logistics Manager channel when an order is cancelled.
_________________________________________________________________
Challenge 10:
A company is conducting a large hiring drive where around 1,000 candidates are expected to appear. The company wants to automatically save the data of every candidate who visits the drive with the following conditions: If the candidate’s college name is IET or DAVV, store the data in a different Table/Sheet/Database. If the mobile number does not start with “91”, automatically add “91” before saving it to the database. If the candidate’s email domain contains “gmail.com”, send a welcome email that includes a coding-related motivational quote. If the email domain is not gmail.com, send only a basic welcome email.
Solution:
1️⃣ Trigger — Candidate Form Submission
Triggered whenever a new candidate submits their details.
2️⃣ Action — JavaScript Logic
Check if College Name = IET or DAVV → save data to a separate table/sheet.
If Mobile doesn’t start with “91” → add “91” before saving.
If Email Domain = gmail.com → send a welcome email with a motivational coding quote.
Else → send a basic welcome email.
3️⃣ Actions — Database & Email
Save candidate data (with corrected mobile and table logic).
Send the appropriate email based on domain.
Challenge 10.2
Build the most optimized solution possible for the above workflow.
Solution : Receive candidate data (name, college, email, mobile, etc.).
Normalize mobile number:
If it doesn’t start with "91", prefix "91".
Check college name:
If college is IET or DAVV, save to a separate table/database.
Otherwise, save to the main candidate table.
Check email domain:
If domain is gmail.com, send a welcome email with a motivational coding quote.
Else, send a basic welcome email.
Return a success message confirming where the data was stored and which email type was sent.
_____________________________________________________________________
Challenge 11:
Simple Automation Challenge 11.1
Goal:
A student recently started an agency business and wants to improve his business vocabulary automatically.
Automation Idea:
He wants to receive one new vocabulary word every day via email.
Each email should include:
The word
Its meaning in Hindi and English
Real-world use cases
At the same time, every word should be saved to a database (like a Google Sheet or table) with these columns:
Word
Hindi Meaning
English Meaning
Use Cases
The system should not repeat any word that has already been sent.
Constraints:
No constraints. (We can use any app or approach.)

For one full year, the system must ensure no vocabulary word repeats.
After one year, the system should start sending 10 previously learned words per day (as a revision).
The daily email will include those 10 words with their Hindi meanings, English meanings, and use cases.
After all words completed (10 each day), start with new words again.
Constraints:
The database (where all words are stored) can return only 200 rows at a time, so we need logic to handle data in batches when revising.
__________________________________________________________________________________________________
Solution: (By Kushagra)
11.1 Solution : -
Trigger - cron (which runs daily), with a retrieve data step of sheets to fetch all the stored words
Step 1 - Call AI with all the words fetched from sheet and a prompt which says
You are an AI assistant generating a daily vocabulary word for an email.
I will give you a list of words that have already been used.
Your task:
1. Generate a new English word NOT present in the given list.
2. Provide:
The word
Hindi meaning
English meaning
Real world use cases (at least 2–3 sentences)
3. Return the final answer in the following JSON format:
{
"emailContent": "<string with the full email content ready to send>",
"wordDetails": {
"word": "<word>",
"hindiMeaning": "<hindi meaning>",
"englishMeaning": "<english meaning>",
"useCases": [
"<use case 1>",
"<use case 2>",
"<use case 3>"
]
}
}Step 2 - Send Mail (send mail to the target person, and use the mail content returned by AI)
Step 3 - Add new row in sheet (add the new word details in the sheet)
Mail content is not necessary to be generated by ai, we can just get the new words details, and use them in a manually written message which sending mail
11.2 Solution (6 steps) : -
Data will be stored in 2 sheets - one with all the words data and another one with 2 values (current word count and revised word count)
Trigger - Cron which runs daily
Step 1 - JS code ( this will call the data fetching api from sheet in loop to fetch all the data as there is a limit of 200 rows and also fetch data from sheet 2)
Step 2 - Call AI (Send the current list of words and the two values fetched from sheet 2, along with a detailed prompt which will explain the AI what to do)
Step 3 - Send Mail
Step 4 - Update Sheet 2 for the 2 values
Step 5 - If condition, to check if a new word was generated or old words were revised
Step 6 - Add new row in sheet 1 (if new word added condition is true)
_____________________________________________________________________
Challenge 12:
A multinational enterprise operates across multiple regions (US, EU, APAC) and runs over 200 tools, cloud functions, and integrations.
Each system continuously sends real-time alerts via webhooks to a central monitoring system.
Each alert includes:
alert_id, service_name, region, severity, type, description, timestamp
Automatically create and maintain regional “Incident Summary Tasks” in tools (Trello, Airtable, or Sheets.)
Only one active task per region per 7-day window. (No duplicate cards in last 7 days.)
Append all related alerts for that week to that same task and share summary on mail once in a week.

Build using single workflow
________________________________________________________________________________________Complex Automation Challenge 12.2
Extend the simple challenge:
Escalate alerts dynamically based on trend and context.
If more than 10 alerts in 7 days → Notify Regional Ops Manager.
If alert frequency doubles compared to last week → Notify Global CTO.
If same alert reappears 3+ times in 24 hours, trigger auto-remediation via internal Fix API.
Predict upcoming incident spikes using AI trend analysis and send proactive early-warning notifications.
Human-in-loop intervention:
If AI flags “Potential false positive”, pause escalation and await manual Ops review via Gmail or Slack approval.
Continue workflow once approved or rejected.
Generate and distribute a weekly AI-written “Incident Intelligence Report” summarizing all incidents by category, region, and trend, automatically sent to leadership.

Build using single workflow
________________________________________________________________________________________
Solution:
12.1 (By Ashish Sahu)
Step Action to Use :
1 Trigger: Webhook Incoming Event (main trigger)
2 Find/Check Existing Task (Search by Region + Date <= 7 days)
3A If task exists → Update Task (Append alert details)
3B If no task exists → Create New Task
4→ Send Summary Mail.
_____________________________________________________________________
Challenge 13:

Design a database (Sheet/Table) to store email data (like recipient email, subject, message, sender account, etc.).
Create a workflow logic using viaSocket to automatically distribute and send emails — making sure:
Each email ID only sends up to 400 emails a day.
Emails are evenly divided among the 8 accounts.
Sending happens in batches using BCC.

No email ID exceeds the daily limit (400).
All 10,000 emails are sent efficiently.
The workflow can run daily until all emails are sent.
Note: In the thread just number of steps you used to build this logic
Solution: (By Roy)
cron daily
Workspace memory store offset
Find Row - Limit 3200, map offset from step 2.
Update memory workspace- offset fetched from step 3.
AI step- Configure 8 email and give proper to split 3200/8 for each email .
_____________________________________________________________________
Challenge 14:

There are 8 different sender email IDs available. Emails should be sent alternately from these accounts to ensure equal distribution.
Each email must be sent individually in the “To” field (not in BCC).
Each sender email ID can send a maximum of 200 emails per day.
The system should continue sending emails daily until all contacts in the database have received their email.

When new rows are found in the database (meaning new contacts are manually added), the system should automatically start sending emails to these new email addresses.
When no new rows are found in the database, the system should instead send a follow-up email in the same email thread using the original message’s thread ID.
Solution: (By Ajit)
Daily Cron Execution
The cron job will run every day at 12:00 AM.
Fetch Client Data
Retrieve client records from the database one by one using a loop.
Each record must include: Row Number, Status, Name, and Email.
Email Sending Logic (Using JavaScript)
Use 8 different sender email IDs to send emails.
Emails should be sent only to clients whose status is “unsent.”
Logic based on row number ranges:
Rows 1 to 200 → send using Email ID 1
Rows 201 to 400 → send using Email ID 2
Rows 401 to 600 → send using Email ID 3
Rows 601 to 800 → send using Email ID 4
Rows 801 to 1000 → send using Email ID 5
Rows 1001 to 1200 → send using Email ID 6
Rows 1201 to 1400 → send using Email ID 7
Rows 1401 to 1600 → send using Email ID 8
As soon as row number 1600 is reached, the workflow must stop.
Use JavaScript code to generate email body dynamically.
Update Client Record
After sending each email, update the client sheet and mark the status as "sent".
Email Mapping in Code
In the send-email function, map the data properly:
To Email
From Email (based on row number logic)
Email Body (generated using JavaScript)
_____________________________________________________________________
Challenge 15:
Problem Statement
A client wants to automate their daily Slack “Focus of the Day” routine using viaSocket.
Current process:
Every day, the client manually sends the message “What’s your focus of the day?” to 4 different Slack channels.
Team members reply to this message in the thread with their daily focus updates.
What the client wants to automate:
Automatically send the message “What’s your focus of the day?” every day to all 4 Slack channels.
Wait for 5 hours after sending the message.
Retrieve all thread replies for each channel using the Slack actions available in viaSocket.
Filter out unique users and capture:
Slack user ID
Their focus message (text)
Slack Channel name/Team name/TeamID
Send each user’s response one by one to another workflow for further processing.
Check attendance:
Compare which Slack users have not replied.
For users who missed sending their focus OR sent focus message in the thread after 10 AM mark them as “absent” in Keka.
The client already has a database mapping:
Slack ID
Email ID
Team Name
Keka Account ID
You have 30 minutes to solve this without using AI agents.
Make sure to reply in the thread like: "Solved in 10 steps in 15 mins."
I will help you learn automation only if I know that you genuinely want to learn, so make sure to mention the time you took to solve this automation challenge.
Solution: (By Ravi Sir)
Trigger:
We will call Cron, and then attach an Action (JS Code) where we will mention the channel IDs of all channels and the channel ID we want to send the Focus message on, and then use the “Run individually” option to trigger the flow for each channel.Actions:
→ First, we will send a normal Slack message to the respective channel.
→ Then, we will add a Delay for a random time between 5 to 7 hours.
→ After delay, we will retrieve the message replies (thread messages) from Slack.
→ Next, we will retrieve the database records for that specific channel name/team name.
→ Then, we will write a JS code step to compare who has replied with the database data and identify all team members and their Slack IDs.
→ This JS step will return all members’ details (team member name, Slack ID, Keka ID, focus text, and absent flag – true/false). The JS code will then send data for all team members one by one to another flow using a webhook or API trigger.
→ In another flow, it will check the absent flag, and if it is true, the system will mark the user as absent in Keka.
_____________________________________________________________________
Challenge 16:
Problem Statement — “AI-Powered Employee Appraisal Flow Using Keka”Every company conducts annual appraisals to evaluate employee performance. The goal is to automatically generate AI-driven appraisal reports for each employee using data available in Keka APIs, such as attendance, login/logout times, leave details, and holidays — without any manual work.
Objective:
To create an automated workflow that:
Collects employee data (attendance, leaves, holidays) from Keka APIs for a 12-month period.
Calculates:
Total leaves taken (categorized by type: medical, floater, etc.)
Total attendance days.
Average login and logout times.
Total working hours and punctuality (based on login time).
Overdue or irregular attendance.
Sandwich leaves (leaves taken before and after holidays).
Generates an AI-based performance summary that describes what the employee achieved or how consistent they were throughout the year.
Send the report 10 days before a employee is completing 12 months in the company.
Constraints :
Each flow in viaSocket has a maximum runtime of 50 seconds, so long-running calculations must be divided into multiple smaller flows.
Keka APIs only allow 3 months of attendance data per call, so the system must iterate across four quarterly periods to gather the full year.
Key Data Sources (from Keka APIs):
Get All Employees (which returns Keka IDs and name of employees)
Get Employee Attendance (start date – end date) – 3 months per call (return only dates when attendance marked, time of login and logou)
Get Declared company's Holiday.
Get Leaves by Keka ID of employee (Requested, assigned, approved, paid, type)
Expected Workflow Output:
Attendance regularity
Working hour patterns
Leave patterns and punctuality
Observed work discipline
AI-generated yearly performance summary in natural language
You have total 1 hours to build this workflow.
Note: Reply in the thread like Total number of steps, number of flow (if any), Total time taken to build.
Solution:

Flow 1 :
first we set one scheduler for every day at one time
after that get the data from keka api it will give you ID and name
and then with the help of id we are getting joining date
then cal. the day from joining data to now and if total days + 10 = 365 day or 366 day then we send one post api which is sending the Id of that user
Flow 2 :
if this post api hit then take the Id if their is to many id then take it one by one
then create one loop in that loop we are getting 3 month data from keka api and calculate all the attendence and all
it will run 4 times
after the we got all the data then send it to AI and generate report
then send msg.
_____________________________________________________________________
Challenge 17:
Solution:
_____________________________________________________________________
Challenge 18:
Solution:
_____________________________________________________________________
Challenge 19:
Solution:
_____________________________________________________________________
Challenge 20:
Solution:
_____________________________________________________________________
Challenge 21:
Solution:
_____________________________________________________________________
Challenge 22:
Solution:
_____________________________________________________________________
Challenge 23:
Solution:
_____________________________________________________________________
Challenge 24:
Solution:
_____________________________________________________________________
Challenge 25:
Solution:
_____________________________________________________________________
Challenge 26:
Solution:
_____________________________________________________________________
Challenge 27:
Solution:
_____________________________________________________________________
Challenge 28:
Solution:
_____________________________________________________________________
Challenge 29:
Solution:
_____________________________________________________________________
Challenge 30:
Solution:
_____________________________________________________________________
Challenge 31:
Solution:
_____________________________________________________________________