Skip to main content

Looping Through Data from Webhook Triggers

Peter Novosel avatar
Written by Peter Novosel
Updated yesterday

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:

  1. Add a Webhook Trigger to your automation.

  2. Add a Looping Action as the final step.

  3. Choose the Webhook output or a specific array (e.g., new_subscribers, results) as the Input List.

  4. 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:

  1. Trigger: Webhook received

  2. Action: Loop through new_subscribers

  3. 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:

  1. Trigger: Webhook received

  2. Action: Loop through the payload

  3. 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:

  1. Trigger: Scheduled time

  2. Action 1: Send Webhook (AUTH)

  3. Action 2: Send Webhook (DATA)

  4. Action 3: Loop through returned array

  5. 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 > TitleRegulation Title

  • Current item > SummarySummary

  • Current item > EffectiveDateEffective Date

  • etc.


💼 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_nameFirst Name

  • Current item > last_nameLast Name

  • Current item > emailEmail

  • Current item > sourceLead Source

  • etc.


📣 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 itemEmail


👥 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 > descriptionTask Description

  • Current item > due_dateDue 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:

  1. Find Record in the Inventory table where Product SKU matches Current item > product_sku

  2. Update Record to set:

    • Stock LevelCurrent 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.

Did this answer your question?