SmartSuite's automation capabilities empower users to streamline workflows and automate tasks based on various triggers. Among the powerful automation actions is the Looping action, which allows you to repeat one or more actions for each item in an “input list”. This is particularly useful when dealing with data received from external systems via Webhook Triggers, enabling efficient processing of lists of information.
Plan Availability | All plan types |
Permissions | Solution Creators – Can create, modify, and manage automations in the Solutions they manage. |
Related Reading |
SmartSuite’s Looping action makes it easy to repeat actions for each item in a list—especially when that list comes from a Webhook Trigger. This powerful feature helps automate the handling of structured data from external systems, like user signups, task updates, or regulatory feeds.
🔁 What Is the Looping Action?
The Looping action lets you repeat a group of actions for each item in an input list. It lives under the Advanced Logic section when creating an automation.
Key Points:
Visual Container: Looping groups are visually distinct in the automation builder.
One Per Automation: You can only add one Looping group per automation.
Final Step Only: Looping must be the last action in your automation.
No Nesting: You can’t nest one Looping group inside another.
💡 Actions inside a Looping group don’t always run in a strict order—be mindful when chaining dependent steps.
🌐 Using Webhook Triggers as the Input List
You can feed data into a Looping action using the output of a Webhook Trigger—perfect for reacting to external events that send data in bulk.
✅ Supported JSON Structures
To be used in a Looping action, the Webhook payload must contain a top-level array, either as:
A root-level array
jsonCopyEdit["item1", "item2", "item3"]
A named array inside a JSON object
jsonCopyEdit{ "results": [ {"id": "1", "value": "A"}, {"id": "2", "value": "B"} ] }
If there are multiple top-level arrays, you’ll be prompted to choose the one you want to loop through.
⚠️ Arrays nested inside other arrays are not supported.
⚙️ Configuring the Looping Action
Here’s how to set up your Looping action when using a Webhook Trigger:
Add a Webhook Trigger to your automation.
Add a Looping Action as the final step.
Choose the Webhook output or a specific array (e.g.,
new_subscribers
,results
) as the Input List.Inside the Looping group, define the actions you want to repeat for each item.
🧠 Accessing Data with "Current item"
Within a Looping group, you get access to a dynamic output called Current item—this represents the data for each individual loop.
Simple Arrays (e.g., list of emails):
Current item
= the value (like a string or number).No dropdown is shown.
Object Arrays (e.g., list of tasks):
Current item
= the object (with keys/fields).Dropdown appears, so you can choose:
Current item > name
Current item > due_date
, etc.
All outputs from previous steps are also accessible inside the Looping group.
📘 Real-World Use Cases
1. Add Email Subscribers Automatically
Scenario: A newsletter platform sends a list of new subscribers via webhook.
Webhook Payload:
jsonCopyEdit{ "new_subscribers": ["subscriber1@example.com", "subscriber2@example.com"] }
Automation Workflow:
Trigger: Webhook received
Action: Loop through
new_subscribers
Inside Loop: Create Record in "Subscribers"
Email
=Current item
✅ Each email is added as a new record in your table.
2. Turn Project Updates into Tasks
Scenario: A project tool sends an array of task updates.
Webhook Payload:
jsonCopyEdit[ {"task_name": "Design Mockups", "due_date": "2024-07-20", "assignee_id": "user_123"}, {"task_name": "Develop Backend", "due_date": "2024-07-27", "assignee_id": "user_456"} ]
Automation Workflow:
Trigger: Webhook received
Action: Loop through the payload
Inside Loop: Create Task in "Tasks"
Task Name
=Current item > task_name
Due Date
=Current item > due_date
Assignee
=Current item > assignee_id
(optional: use a Find Record to match the ID)
✅ Tasks are created for each project update, ready to assign and track.
3. Ingest Regulatory Data
Scenario: A scheduled webhook pulls regulatory updates from an API.
Webhook Response:
jsonCopyEdit[ { "Title": "New Regulation", "Summary": "Summary text...", "Agency": "EPA", "Effective Date": "2024-08-15" } ]
Automation Workflow:
Trigger: Scheduled time
Action 1: Send Webhook (AUTH)
Action 2: Send Webhook (DATA)
Action 3: Loop through returned array
Inside Loop: Create Record in "Regulatory Updates"
Title
=Current item > Title
Summary
=Current item > Summary
Agency
=Current item > Agency
Effective Date
=Current item > Effective Date
✅ Records are automatically added to track new regulations.
⚠️ Things to Keep in Mind
Feature | Details |
Looping Limit | One Looping group per automation |
Max Actions in Loop | Up to 10 actions inside a Looping group |
No Nesting | Looping groups can’t contain or be inside another loop |
Conditional Groups | One level supported: can include inside a loop |
Performance | No limit on list size, but large arrays may impact speed |
Run History | Looping actions are collapsed and grouped for clarity |
✅ Final Thoughts
Looping through data from Webhook Triggers gives you powerful control over bulk automation. Whether you're adding users, processing tasks, or importing records from APIs, the Looping action helps you scale with ease.
Master the "Current item" output, structure your JSON payloads properly, and you'll unlock endless possibilities in SmartSuite Automations.
Additional Examples
📘 GRC (Governance, Risk, and Compliance)
Use Case: Processing Regulatory Data Feed
Scenario: An external regulatory body provides updates through a webhook. The payload includes a list of new regulations. You want to create a record in SmartSuite for each regulation.
Trigger: When a webhook is received.
Webhook Payload Example:
jsonCopyEdit[ { "Title": "Cybersecurity Incident Reporting Rule", "Summary": "Regulation requiring prompt reporting of cybersecurity incidents.", "EffectiveDate": "2025-02-01", "Jurisdiction": "US" }, { "Title": "AI Transparency Act", "Summary": "Law requiring transparency in AI algorithms used by businesses.", "EffectiveDate": "2025-03-15", "Jurisdiction": "EU" } ]
Looping Action:Iterate through the top-level array from the webhook payload. The Input List is set to the webhook trigger output (the JSON array).
Action Inside Loop:Create a new record in the Regulations table, mapping:
Current item > Title
→ Regulation TitleCurrent item > Summary
→ SummaryCurrent item > EffectiveDate
→ Effective Dateetc.
💼 Sales
Use Case: Processing New Leads from a Marketing Platform
Scenario: Your marketing platform sends a webhook with a batch of new leads. You want to add each lead as a record in SmartSuite CRM.
Trigger: When a webhook is received.
Webhook Payload Example:
jsonCopyEdit{ "campaign_id": "CAM-2025-004", "leads": [ { "first_name": "Alice", "last_name": "Brown", "email": "alice.brown@example.com", "source": "LinkedIn Ad" }, { "first_name": "Bob", "last_name": "Davis", "email": "bob.davis@example.com", "source": "Webinar Registration" } ] }
Looping Action:Iterate through the leads array. Input List: Webhook Trigger Output > leads
Action Inside Loop:Create a new record in the Leads table, mapping:
Current item > first_name
→ First NameCurrent item > last_name
→ Last NameCurrent item > email
→ EmailCurrent item > source
→ Lead Sourceetc.
📣 Marketing
Use Case: Adding New Email Subscribers to a List
Scenario: A webhook sends an array of email addresses when users subscribe via a form. You want to add each to the Subscribers table.Trigger: When a webhook is received.
Webhook Payload Example:
jsonCopyEdit{ "subscriber_emails": [ "user1@example.com", "user2@example.net", "user3@example.org" ] }
Looping Action:Iterate through the subscriber_emails array. Input List: Webhook Trigger Output > subscriber_emails
Action Inside Loop:Create a new record in the Subscribers table, mapping:
Current item
→ Email
👥 HR (Human Resources)
Use Case: Processing New Employee Onboarding TasksScenario: An external HR system sends onboarding tasks for a new hire. You want to create each task in SmartSuite.Trigger: When a webhook is received.
Webhook Payload Example:
jsonCopyEdit{ "employee_id": "EMP-2030", "tasks": [ { "description": "Complete HR paperwork", "due_date": "2025-06-01" }, { "description": "Attend safety training", "due_date": "2025-06-02" }, { "description": "Meet team mentor", "due_date": "2025-06-03" } ] }
Looping Action:Iterate through the tasks array. Input List: Webhook Trigger Output > tasks
Action Inside Loop:Create a new record in the Onboarding Tasks table, mapping:
Current item > description
→ Task DescriptionCurrent item > due_date
→ Due Date
⚙️ Operations
Use Case: Updating Inventory Levels from Supplier Feed
Scenario: A supplier sends updates on stock levels. You want to update the corresponding inventory records.Trigger: When a webhook is received.
Webhook Payload Example:
jsonCopyEdit{ "supplier_id": "SUP-789", "inventory_updates": [ { "product_sku": "SKU-001", "available_quantity": 500 }, { "product_sku": "SKU-002", "available_quantity": 750 }, { "product_sku": "SKU-003", "available_quantity": 300 } ] }
Looping Action:Iterate through the inventory_updates array. Input List: Webhook Trigger Output > inventory_updates
Actions Inside Loop:
Find Record in the Inventory table where
Product SKU
matchesCurrent item > product_sku
Update Record to set:
Stock Level
→Current item > available_quantity
These examples demonstrate how webhook triggers and looping actions work together to process arrays of structured data. The Current item variable gives you access to each element, whether it's a simple value or an object with multiple fields.