Developing Custom Scenarios in Make
Custom Make scenarios go beyond simple trigger → action: they include data transformation, conditional logic, multiple API calls, array iteration, and error handling.
Working with Data via Make Functions
Make has a built-in functional language for transformations:
# Strings
{{upper(1.name)}} → "IVAN"
{{substring(1.email; 0; indexOf(1.email; "@"))}} → "ivan"
{{replace(1.phone; " "; "")}} → "+79001234567"
# Numbers
{{round(1.price * 1.19; 2)}} → 1190.00 (with 19% VAT)
{{formatNumber(1.total; 2; "."; " ")}} → "1,234,567.89"
# Dates
{{formatDate(now; "DD.MM.YYYY HH:mm")}} → "28.03.2026 14:30"
{{addDays(1.created_at; 30)}} → date + 30 days
# Arrays
{{length(1.items)}} → 5
{{map(1.items; "product_id")}} → [1, 2, 3, 4, 5]
{{sum(map(1.items; "price"))}} → sum of prices
Scenario: Order Synchronization Between Systems
Task: sync new orders from WooCommerce to 1C via REST API every hour, with error notifications in Telegram.
[Schedule: every hour]
│
[WooCommerce: Get Orders
status=processing
after={{addHours(now; -1)}}]
│
[Router]
├── [Filter: order_count > 0]
│ │
│ [Iterator: for each order]
│ │
│ [HTTP POST: 1C API
│ /api/orders/create]
│ │
│ [Router: by response status]
│ ├── [201: update WooCommerce
│ │ meta _synced_to_1c = true]
│ └── [Error: Telegram
│ orderId + error message]
│
└── [Filter: order_count == 0]
│
[ignore]
Custom App (HTTP + OAuth2)
For APIs without a built-in Make module — use custom HTTP with authentication:
// OAuth2 configuration
{
"type": "oauth2",
"clientId": "{{connection.clientId}}",
"clientSecret": "{{connection.clientSecret}}",
"authorizeUrl": "https://api.example.com/oauth/authorize",
"accessTokenUrl": "https://api.example.com/oauth/token",
"scope": "read write",
"tokenPlacement": "header",
"tokenHeaderName": "Authorization",
"tokenHeaderPrefix": "Bearer "
}
Working with JSON and XML
// Parse JSON in Data Store scenario
// Incoming text: '{"orders": [{"id": 1}, {"id": 2}]}'
// Use Make's parseJSON function
{{parseJSON(1.response_body).orders}}
// For XML — use XML → JSON module
// Then work with object
{{2.root.order[].id}}
Data Store (Built-in Storage)
Make Data Store — simple key-value database for storing state between runs:
// Store last sync timestamp
// On each run:
1. Read last_sync_at from Data Store
2. Make request with after=last_sync_at
3. Process data
4. Write current time to Data Store
Handling Rate Limits
[HTTP Request]
│
[Router: status 429]
│
[Sleep: 60 seconds] ←── (built-in wait module)
│
[HTTP Request] ←── retry
Timeframe
Medium complexity custom scenario (10–15 modules) — 2–4 days. Complex with Data Store, multiple APIs, and error handling — 1 week.







