Skip to main content
Technology & EngineeringAutomation Workflow Services210 lines

Make Integromat

Build and manage Make (formerly Integromat) scenarios using modules, routers, webhooks, and data stores.

Quick Summary15 lines
You are an expert in Make (formerly Integromat) scenario design, custom app development, and the Make API. You build robust automation scenarios with proper error handling, data transformations, and efficient module chaining.

## Key Points

1. **Chaining 20+ modules without error handlers** - Any module can fail. Attach error handler routes at minimum to HTTP and database modules.
2. **Using Set Variable for persistent state** - Variables reset between executions. Use data stores for cross-execution state.
3. **Ignoring bundle limits on free/paid tiers** - Operations are metered per bundle per module. An iterator expanding 100 items through 5 modules costs 500 operations.
4. **Polling APIs every minute without deduplication** - Always track processed record IDs in a data store to prevent duplicate processing.
- Building multi-step workflows with complex branching logic that benefits from visual design
- Non-developers need to maintain and modify automation rules after initial setup
- Integrating apps that lack native connectors but expose REST APIs or webhooks
- Processing batch data with iterators, aggregators, and conditional routing
- Running scheduled ETL jobs with built-in error recovery and incomplete execution management
skilldb get automation-workflow-services-skills/Make IntegromatFull skill: 210 lines
Paste into your CLAUDE.md or agent config

Make (Integromat) Integration

You are an expert in Make (formerly Integromat) scenario design, custom app development, and the Make API. You build robust automation scenarios with proper error handling, data transformations, and efficient module chaining.

Core Philosophy

Visual Pipeline Thinking

Make scenarios are directed graphs of modules. Each module transforms or routes data bundles. Design scenarios as clear pipelines: source, transform, route, destination. Keep modules focused on single responsibilities.

Bundle-Aware Data Flow

Data flows through Make as bundles (arrays of key-value objects). Understand that each module processes one bundle at a time unless you use iterators or aggregators. Design for bundle cardinality from the start.

Defensive Error Handling

Every production scenario needs error handler routes. Modules fail, APIs timeout, data arrives malformed. Attach error handlers to critical modules and use the Break directive for retry-capable failures.

Setup

# Make API base URL
# https://us1.make.com/api/v2  (US region)
# https://eu1.make.com/api/v2  (EU region)

# Authenticate with API token
curl -H "Authorization: Token YOUR_API_TOKEN" \
  https://us1.make.com/api/v2/users/me
// Make API client setup
const MAKE_API = "https://us1.make.com/api/v2";
const headers = {
  Authorization: `Token ${process.env.MAKE_API_TOKEN}`,
  "Content-Type": "application/json",
};

// List all scenarios in a team
const response = await fetch(`${MAKE_API}/scenarios?teamId=${teamId}`, { headers });
const { scenarios } = await response.json();

Key Patterns

Use Routers for Conditional Branching

// Do: Route bundles based on conditions using router filters
// Router module with two branches:
// Branch 1 filter: {{order.total}} > 100 => "High Value" path
// Branch 2 filter: fallback => "Standard" path

// API: Create a scenario with router
const scenario = {
  name: "Order Processing",
  teamId: 12345,
  flow: [
    { module: "webhook:CustomWebhook", mapper: {} },
    { module: "builtin:BasicRouter", routes: [
      { label: "High Value", filter: { condition: "{{1.total}} > 100" } },
      { label: "Standard" },
    ]},
  ],
};

Leverage Data Stores for State

// Do: Use Make data stores for persistent key-value lookups
// Create a data store
const dataStore = await fetch(`${MAKE_API}/data-stores`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    name: "Processed Orders",
    teamId: 12345,
    datastructureId: 67890,
    maxSizeMB: 10,
  }),
});

// Don't: Store state in scenario variables or external databases
// when Make data stores provide native deduplication and lookups

Handle Errors with Break and Resume

// Do: Attach error handlers to modules that call external APIs
// Error handler types:
// - Resume: skip failed bundle, continue
// - Break: pause scenario, allow manual retry via incomplete executions
// - Rollback: revert all operations in the current cycle
// - Commit: save partial results, mark execution as success

// Don't: Let modules fail silently without error routes

Common Patterns

Webhook-Triggered Scenario

// Create a custom webhook trigger
const webhook = await fetch(`${MAKE_API}/hooks`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    name: "Order Webhook",
    teamId: 12345,
    typeName: "web",
    datastructureId: null, // auto-detect structure
  }),
});
// Returns { url: "https://hook.us1.make.com/abc123..." }

// Post data to trigger the scenario
await fetch(webhook.url, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ orderId: "ord_456", total: 75.0 }),
});

Iterator and Aggregator Pattern

// Scenario design for processing line items:
// 1. Webhook receives order with items[] array
// 2. Iterator module: splits items[] into individual bundles
// 3. HTTP module: enrich each item from inventory API
// 4. Array Aggregator: reassemble into single bundle
// 5. Email module: send summary with all enriched items

// Iterator config
const iteratorModule = {
  module: "builtin:BasicIterator",
  mapper: { array: "{{1.items}}" },
};

// Aggregator config
const aggregatorModule = {
  module: "builtin:BasicAggregator",
  mapper: {
    sourceModule: 3, // reference iterator module position
    groupBy: "",     // aggregate all bundles
  },
};

Scheduled Scenario with Pagination

// Scenario: Poll API every 15 minutes, handle paginated results
// Module 1: HTTP - GET /api/records?since={{last_run}}&page=1
// Module 2: Router
//   Branch A: hasMore === true => Loop back (set variable page++)
//   Branch B: hasMore === false => proceed to processing
// Module 3: Iterator on records[]
// Module 4: Data Store - check/add record for dedup
// Module 5: Action module

// Schedule config via API
await fetch(`${MAKE_API}/scenarios/${scenarioId}`, {
  method: "PATCH",
  headers,
  body: JSON.stringify({
    scheduling: { type: "interval", interval: 15 },
    isEnabled: true,
  }),
});

Custom App Module Definition

// Define a custom app module for Make
const moduleDefinition = {
  name: "getUser",
  label: "Get User",
  description: "Retrieves a user by ID",
  connection: "myAppConnection",
  parameters: [
    { name: "userId", type: "text", label: "User ID", required: true },
  ],
  expect: [
    { name: "id", type: "text", label: "ID" },
    { name: "email", type: "text", label: "Email" },
    { name: "name", type: "text", label: "Name" },
  ],
  url: "https://api.example.com/users/{{parameters.userId}}",
  method: "GET",
  headers: { Authorization: "Bearer {{connection.accessToken}}" },
};

Anti-Patterns

  1. Chaining 20+ modules without error handlers - Any module can fail. Attach error handler routes at minimum to HTTP and database modules.
  2. Using Set Variable for persistent state - Variables reset between executions. Use data stores for cross-execution state.
  3. Ignoring bundle limits on free/paid tiers - Operations are metered per bundle per module. An iterator expanding 100 items through 5 modules costs 500 operations.
  4. Polling APIs every minute without deduplication - Always track processed record IDs in a data store to prevent duplicate processing.

When to Use

  • Building multi-step workflows with complex branching logic that benefits from visual design
  • Non-developers need to maintain and modify automation rules after initial setup
  • Integrating apps that lack native connectors but expose REST APIs or webhooks
  • Processing batch data with iterators, aggregators, and conditional routing
  • Running scheduled ETL jobs with built-in error recovery and incomplete execution management

Install this skill directly: skilldb add automation-workflow-services-skills

Get CLI access →