Make Integromat
Build and manage Make (formerly Integromat) scenarios using modules, routers, webhooks, and data stores.
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 linesMake (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
- Chaining 20+ modules without error handlers - Any module can fail. Attach error handler routes at minimum to HTTP and database modules.
- Using Set Variable for persistent state - Variables reset between executions. Use data stores for cross-execution state.
- 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.
- 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
Related Skills
N8n
Build self-hosted and cloud workflow automations with n8n using nodes, expressions, webhooks, and code nodes.
Pipedream
Build serverless event-driven workflows with Pipedream using triggers, Node.js/Python steps, and data stores.
Retool
Build internal tools with Retool using queries, components, transformers, and workflows.
Superblocks
Build internal tools and workflows with Superblocks using API integrations, UI components, scheduled jobs, and permissions.
Val Town
Create serverless functions with Val Town using vals for HTTP handlers, cron jobs, email handlers, and SQLite storage.
Windmill
Build scripts, flows, and apps with Windmill using TypeScript and Python runtimes.