Make.com
The comprehensive guide
The most powerful visual automation platform — build complex Scenarios, connect 1,000+ apps, and embed AI without writing a single line of code.
What is Make.com?
Make.com (formerly Integromat) is a visual automation platform that lets you connect apps and build complex automated processes with a drag-and-drop graphical interface. Instead of writing code, you connect "blocks" and create Scenarios that run on a schedule or are triggered by an event.
What sets Make apart is its true power: unlike simple No-Code tools, Make enables branching logic, complex data processing, loops, aggregators, data filters, and deep integrations. It's meant for those who want the power of programming — without programming.
In 2022 the name changed from Integromat to Make.com. If you see old guides mentioning "Integromat" — they're still relevant; the interface changed a bit but the logic is the same.
Make vs Zapier vs n8n — a quick comparison
| Criterion | Make.com | Zapier | n8n |
|---|---|---|---|
| Interface | Visual — canvas | Visual — list | Visual — canvas |
| Logic complexity | Very high | Medium | Very high |
| Entry price | Free / $9/month | Free / $19.99/month | Self-hosted free |
| Number of integrations | 1,000+ | 6,000+ | 400+ |
| Data processing | Built-in and rich | Basic | Full JavaScript/Python |
| Webhooks | Yes, full | Yes | Yes, full |
| Built-in AI | Yes — OpenAI, HTTP | Yes — ChatGPT | Yes — LangChain, OpenAI |
| Self-hosting | No | No | Yes |
| Hebrew in the interface | No | No | No |
| Best for | Businesses, professionals | Beginners, SMB | Developers, DevOps |
Anatomy of a Scenario
Every Scenario in Make is built from a chain of modules that pass bundles (data bundles) between them:
Make.com pricing (2026)
| Plan | Price | Operations/month | Active Scenarios |
|---|---|---|---|
| Free | $0 | 1,000 | 2 |
| Core | $9 | 10,000 | Unlimited |
| Pro | $16 | 10,000 | Unlimited + premium |
| Teams | $29 | 10,000 | Team sharing |
Operation = one operation of one module on one bundle. A Scenario that runs 5 modules on 10 items = 50 operations.
Quick start — your first Scenario
Let's build the classic Scenario: every new email in Gmail adds a row to Google Sheets.
Step 1 — creating a free account
- Go tomake.com and click "Get started free"
- Sign up with a Google Account — most convenient for Google integrations
- Choose a server region — EU1 (Europe) for good stability
- Confirm the email and you'll enter the main interface
Step 2 — creating a new Scenario
- Click "Create a new scenario" in the top-left corner
- An empty Canvas opens with a circle "+" in the center
- Click the "+" and search Gmail
- Choose the Trigger: "Watch Emails"
Step 3 — configuring the Gmail Trigger
- Click the Gmail module ← "Add connection" ← approve OAuth with your Google account
- Folder: INBOX
- Criteria: All emails / unread only — your choice
- Maximum number of results: 10 (enough for testing)
- Click OK to save
Step 4 — adding Google Sheets
- Click the "+" next to the Gmail module ← search Google Sheets
- Choose "Add a Row"
- Connect the Google account (the same OAuth)
- Choose a Spreadsheet and Sheet
- Map fields:
A = {{1.subject}},B = {{1.from[].name}},C = {{formatDate(1.date; "DD/MM/YYYY")}}
Step 5 — running and scheduling
- Click "Run once" to test — you'll see green on every module
- Click the Scheduling clock at the bottom ← choose "Every 15 minutes"
- Enable the Scenario (the left toggle) — it will run in the background
Core concepts
To build powerful Scenarios, it's important to understand Make's building blocks:
Module types
| Type | Role | Example |
|---|---|---|
| Trigger | Starts the Scenario — listens for an event | Gmail: Watch Emails, Webhook |
| Action | Performs a single action | Sheets: Add Row, Slack: Send Message |
| Search | Searches for items and returns a list | Sheets: Search Rows, HubSpot: Search Contacts |
| Aggregator | Merges multiple bundles into one | Array Aggregator, Text Aggregator |
| Iterator | Splits an array into individual bundles | Iterator module |
| Router | Branches into different routes by a condition | Router module |
| Tools | Built-in utilities | Set Variable, Sleep, HTTP |
Connections — connecting to services
Every module needs a Connection — access approval for an external service. Make supports:
- OAuth 2.0 — most services (Google, Slack, HubSpot). Click "Add" ← approve in a popup
- API Key — simpler services. Paste the key in the field
- Basic Auth — username + password
- Custom Headers — via the HTTP module for any API
A Connection is saved once and can be used in all Scenarios.
Data Structures — Items, Bundles, Arrays
- Bundle — one "bundle" of data that passes between modules (like one row)
- Item — a single value inside a bundle: string, number, date, boolean
- Array — a list of values inside a bundle. For example: a list of email tags
- Collection — a key-value map (like a JSON object)
When a module returns multiple bundles (e.g. 10 rows from Sheets), they pass one after another through the rest of the Scenario.
Routes — branching routes
The Router is one of Make's powerful tools. It lets you split the flow into parallel routes:
- Each route can contain a Filter — a condition that decides whether the bundle passes
- You can add a Fallback Route — a default route if no condition matches
- Multiple routes run in order (not in parallel)
Filters — filtering data
A Filter is added between two modules — click the line connecting them ← add a condition:
- Text operators: Equal, Contains, Starts with, Matches pattern (regex)
- Number operators: Greater than, Less than, Between
- Date operators: Before, After, Within the last X days
- Array operators: Contains, Length greater than
- You can combine with AND / OR
Aggregators and Iterators
Iterator — got an array? An Iterator splits it so each element in the array becomes a separate bundle that continues through the flow.
Array Aggregator — the opposite: collects multiple bundles back into a single array. Useful before sending a summary email or writing to a single row in Sheets.
Text Aggregator — like the Array Aggregator but produces a single text. Excellent for building dynamic content.
Error Handling
- Click a module ← "Add an error handler" to choose the behavior on an error
- Ignore — ignore the error and continue
- Break — stop the run, save it in Incomplete Executions
- Retry — retry X times with an interval
- Rollback — roll back previous operations (if the API supports it)
Scheduling
Make allows two ways to trigger a Scenario:
- Polling — runs every X minutes/hours and checks for new data (most Triggers)
- Instant Trigger (Webhook) — triggered immediately when new data arrives ← no delay
- Cron-like scheduling: specific minutes, days of the week, dates
Data processing — Functions and Expressions
Make comes with hundreds of built-in functions for processing data. They're written directly inside fields in the interface with the syntax {{ function(value; parameter) }}.
Text functions
toString(value)— convert any value to a stringsubstring(text; start; length)— substringreplace(text; search; replacement)— replace texttrim(text)— trim whitespace from the edgeslower(text)/upper(text)— caselength(text)— string lengthsplit(text; separator)— split into an array by a separatorjoin(array; separator)— join an array into a stringcontains(text; search)— containment check — returns true/false
Math functions
1.price + 1.tax— simple addition with standard operatorsround(number; decimals)— roundceil(number)/floor(number)— round up/downmax(a; b)/min(a; b)— max/minabs(number)— absolute valueparseNumber(text)— convert a string to a number
Date functions
formatDate(date; "YYYY-MM-DD")— format a dateformatDate(now; "DD/MM/YYYY HH:mm")— current date and timeaddDays(date; n)— add daysparseDate(text; "DD/MM/YYYY")— convert a string to a datedateDifference(date1; date2; "days")— difference between datesnow— the current date and time
Array functions
length(array)— number of elementsfirst(array)/last(array)— first/last elementget(array; index)— element by index (starts at 1)flatten(array)— flatten a nested arrayarrayDifference(arr1; arr2)— difference between arraysdeduplicate(array)— remove duplicatessort(array; order)— sort an arrayslice(array; start; end)— slice an array
JSON and HTTP
parseJSON(jsonString)— parse a JSON string into an objecttoJSON(value)— convert a value to a JSON stringkeys(collection)— list of a collection's keysvalues(collection)— list of the valuesget(collection; "key")— a specific value from a collection
Expressions in practice
// format the current date
{{formatDate(now; "YYYY-MM-DD")}}
// trim an email subject to 50 characters
{{substring(1.subject; 0; 50)}}
// replace text in an email body
{{replace(1.text; "old_value"; "new_value")}}
// convert an object to a JSON string
{{toJSON(1.data)}}
// calculate the price including VAT
{{round(1.price * 1.17; 2)}}
// check if an email comes from a certain domain
{{if(contains(1.from[].address; "@company.com"); "internal"; "external")}}
// parse a date from a string
{{parseDate(1.date_string; "DD/MM/YYYY")}}
// concatenate strings
{{1.first_name & " " & 1.last_name}}
Regular Expressions
Make supports Regex via the functions match and replace:
// find a phone number in text
{{match(1.body; "\\d{10}")}}
// remove HTML tags
{{replace(1.html_body; "<[^>]*>"; "")}}
// trim after @
{{replace(1.email; ".+@"; "")}}
Webhooks — instant Triggers
A Webhook is a unique URL that lets an external service "knock on the door" and trigger your Scenario instantly, without polling.
Custom Webhook Trigger
- Create a Scenario ← "+" ← search Webhooks ← choose "Custom Webhook"
- Make will generate a unique URL like:
https://hook.eu1.make.com/abc123xyz... - Click "Determine data structure" ← send a test request
- Make will automatically learn the data structure
Instant vs Polling Triggers
| Type | Delay | Operations | Examples |
|---|---|---|---|
| Instant (Webhook) | seconds | by usage | Stripe, Typeform, GitHub |
| Polling | 15 min ← 1 min | by schedule | Gmail, Sheets, RSS |
Webhook URL + Secret
To protect your Webhook, add an IP whitelist or signature verification:
// a Header added to the request: X-Webhook-Secret
// in Make: Tools → Set Variable → check that the secret matches
{{if(1.headers["x-webhook-secret"] = "MY_SECRET"; true; false)}}
Testing Webhooks with Postman / curl
curl -X POST "https://hook.eu1.make.com/YOUR-WEBHOOK-ID" \
-H "Content-Type: application/json" \
-d '{
"name": "John Doe",
"email": "israel@example.com",
"message": "Hello world"
}'
Responding to Webhooks
You can respond to a Webhook request with a Response — important for integrations expecting a 200 OK with data:
- Add a module "Webhooks Response" at the end of the Scenario
- Set Status: 200, Body:
{{ toJSON(collection) }} - Useful for Chatbots, Forms, Slack slash commands
Example: Typeform → Make → Notion + Email
AI Modules — artificial intelligence inside Make
Make is a perfect tool for AI integration — you connect AI services to the rest of your apps and create smart automations.
The built-in OpenAI Module
Make includes an official OpenAI Integration with support for:
- Create a Chat Completion — GPT-4o, GPT-4 Turbo, GPT-3.5. Send a prompt ← get an answer
- Create an Image (DALL-E) — generating an image from a text description
- Create a Transcription (Whisper) — transcribing an audio file
- Create an Embedding — creating a vector embedding for RAG
Connect the OpenAI API Key once ← it will be available for all Scenarios.
HTTP Module — any AI API
For AI services without an official Integration, use theHTTP "Make a Request":
// Anthropic Claude API
URL: https://api.anthropic.com/v1/messages
Method: POST
Headers:
x-api-key: YOUR_CLAUDE_KEY
anthropic-version: 2023-06-01
Content-Type: application/json
Body (JSON):
{
"model": "claude-opus-4-5",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "{{1.email_body}}"}
]
}
A full example: an Email Intelligence Scenario
Prompt Engineering inside Make
// a System Prompt for classifying emails
You are an email classifier. Classify the following email into exactly one category:
- SALES: inquiry about buying, pricing, demo request
- SUPPORT: bug report, help request, complaint
- SPAM: unsolicited marketing, irrelevant
Reply with ONLY the category name in uppercase.
// User message (mapped from the Scenario)
Email Subject: {{1.subject}}
Email Body: {{substring(1.body; 0; 500)}}
Templates — a shortcut to automation
Make offers a library of over 1,000 Templates ready-made ones — Scenarios built by Make's team or the Community, which you can import and adapt within minutes.
How to use Templates
- Go toTemplates in the side menu ← search by app or category
- Click "Use Template" on a Template that fits your need
- Make will create a Scenario with all modules configured — just connect the Connections
- Adjust fields, Filters and Routing to your needs
Popular Templates
Even if the Template isn't a 100% fit, use it as a starting point. It shows you the right Pattern to build — and you can change, add and remove modules.
Advanced Features
Custom Apps — custom integrations
Make lets you build a custom App for any API without an official Integration:
- Go toConnections → Custom Apps
- Set up Authentication (OAuth2, API Key, etc.)
- Add Modules with an endpoint description, input/output fields
- The App will appear in search like any official integration
A faster alternative: use theHTTP module for a one-off API call.
Data Stores — a built-in database
A Data Store is a simple database built into Make — useful for keeping state between Scenario runs:
- Storing IDs that were already processed (to not process twice)
- A counter/accumulator between runs
- Caching expensive AI results
- A simple data sheet for a small app
Accessible via modules: Data store: Add/Update a Record, Search Records, Delete a Record.
Teams & Organizations
- Teams — sharing Scenarios, Connections and Data Stores between team members
- Roles — Admin, Member, Viewer
- Organizations — manages multiple Teams with unified billing
- Environment Variables — variables shared across all Scenarios
Versioning & Rollback
- Make automatically keeps a version history for every Scenario
- You can revert to a previous version with one click
- Check: Scenario ← History ← choose a version ← Restore
Make API — triggering Scenarios from outside Make
You can trigger any Scenario programmatically via the Make API:
// trigger a specific Scenario
curl -X POST "https://eu1.make.com/api/v2/scenarios/{SCENARIO_ID}/run" \
-H "Authorization: Token YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"responsive": true}'
// trigger a Webhook
curl -X POST "https://hook.eu1.make.com/YOUR-WEBHOOK-ID" \
-H "Content-Type: application/json" \
-d '{"name": "test", "email": "test@test.com"}'
The Make API also allows: listing Scenarios, managing Data Stores, Connections, Executions and more.
Make vs n8n vs Zapier — a decision guide
There's no "best" — there's what fits you. Here's a framework for deciding:
Choose Zapier if:
- You want maximum simplicity — a new Zap within 5 minutes
- You need the largest number of integrations (6,000+)
- Your team isn't technical and can't learn a complex interface
- Your Workflows are Linear only — A → B → C
Choose Make.com if:
- You want Complex logic — Routes, Aggregators, Iterators
- Heavy data processing — transforming, filtering, reshaping
- A limited budget — Make is significantly cheaper than Zapier at high volume
- You want a visual Canvas interface (not a list)
- AI Automation is a central part of your Workflows
Choose n8n if:
- You're a developer and want total flexibility with JavaScript/Python
- You want Self-host full — data doesn't leave your server
- GDPR / compliance is critical to you
- You want to pay $0 (forever, with self-hosting)
| Use Case | Recommendation | Reason |
|---|---|---|
| Startup — a fast MVP | Zapier / Make | Quick to start, a convenient interface |
| Marketing automation | Make | Routes, AI, low cost |
| E-commerce | Make | Shopify, WooCommerce, a strong CRM |
| Dev/DevOps | n8n | Code nodes, self-host |
| Enterprise / GDPR | n8n self-hosted | Data under full control |
| AI Automation | Make / n8n | Both are strong — Make is more accessible |
| SMB without IT | Zapier | Easiest to learn |
5 practical projects
From easy to hard — each project includes the architecture and key steps:
- ◆Set up Typeform with a Webhook → Make
- ◆Map fields: name, email, phone → Sheets columns
- ◆Send a personalized welcome email with the lead's name
- ◆Add a Slack notification to the sales team
- ◆RSS Trigger — new news every hour
- ◆An Iterator splits items → each item to OpenAI
- ◆Prompt: "Rewrite for a business audience, 300 words"
- ◆Filter: check that the content is at least 200 words (not half a request)
- ◆WordPress module: Create Draft Post with automatic tags
- ◆WhatsApp Business API Webhook → Make
- ◆OpenAI classifies: product question / support / order / other
- ◆Router to routes: FAQ Sheets / human Agent / HubSpot Deal
- ◆AI generates a tailored answer based on the customer's CRM data
- ◆Data Store: keeps conversation history for Context
- ◆Shopify Webhook: New Order → Make instantly
- ◆Router: domestic / international by shipping address
- ◆PDF Monkey / DocuSeal: generating a PDF invoice
- ◆Sending the invoice + order confirmation via Gmail
- ◆Creating a Lead/Deal in HubSpot CRM
- ◆SMS / WhatsApp with a shipping tracking number
- ◆Google Sheets: updating the inventory report
- ◆Google Sheets: Brief only — topic, tone, target audience, platform
- ◆OpenAI GPT-4o: writing a post tailored to each platform (Twitter, LinkedIn, Instagram)
- ◆DALL-E 3: generating an image from a prompt that OpenAI also produces
- ◆Buffer / Hootsuite: scheduling automatic publishing
- ◆Notion: a content archive + an optional approval workflow
- ◆Webhook Response to Sheets: updating the status to "Created ✓"
Cheat sheet — Make.com Cheatsheet
The most common functions
| Function | Use | Example |
|---|---|---|
formatDate | Format a date | {{formatDate(now; "DD/MM/YYYY")}} |
substring | Substring | {{substring(1.text; 0; 100)}} |
replace | Replace text | {{replace(1.body; "\n"; " ")}} |
if | A built-in condition | {{if(1.score > 80; "High"; "Low")}} |
parseJSON | Parse JSON | {{parseJSON(1.response_body)}} |
toJSON | Convert to JSON | {{toJSON(1.data)}} |
length | Length / count | {{length(1.items)}} |
split | Split a string | {{split(1.tags; ",")}} |
join | Join an array | {{join(1.names; ", ")}} |
round | Round a number | {{round(1.price * 1.17; 2)}} |
lower | Lowercase | {{lower(1.email)}} |
trim | Trim whitespace | {{trim(1.input)}} |
Common Patterns
| Pattern | Make structure | Use |
|---|---|---|
| Batch Processing | Trigger → Iterator → [action] → Aggregator | Processing a list of items |
| Conditional Routing | Trigger → Router (+ Filters) → Actions | Routing by condition |
| AI + Action | Trigger → OpenAI → Parse → Action | AI processing + execution |
| Webhook + Response | Webhook → Logic → Webhook Response | An API endpoint from Make |
| Dedup | Trigger → Data Store: Search → Filter: not found → Process | Preventing double processing |
| Retry | Module → Error Handler: Retry 3x | Error resilience |
| Scheduled Report | Schedule → Sheets: Search → Text Aggregator → Email | A daily/weekly report |
Common error codes
| Code/error | Meaning | Solution |
|---|---|---|
| 400 Bad Request | A missing/wrong field in the request | Check field mapping and syntax |
| 401 Unauthorized | The Connection expired | Renew the Connection |
| 403 Forbidden | No permission | Check the scopes in OAuth |
| 429 Too Many Requests | You exceeded the Rate Limit | Add a Sleep module / Retry |
| 500 Server Error | An external server error | Add an Error Handler with Retry |
| Cannot read property | An empty/nonexistent field | Use if() to check |
| Operation limit exceeded | You exceeded the Plan limit | Upgrade the Plan / reduce operations |
| Incomplete Execution | The Scenario stopped midway | Check Incomplete Executions to handle it |
Operations calculator
Before choosing a Plan, calculate Operations consumption:
// calculation formula:
Operations/month =
number of Modules in the Scenario × number of Bundles × run frequency × days in the month
// example: a Scenario with 5 modules, 100 bundles/run, 4× a day:
5 × 100 × 4 × 30 = 60,000 operations/month → Pro Plan
// tip: a Trigger doesn't count as an Operation
// tip: an Error Handler module that isn't triggered doesn't count
Turn Polling Triggers into Webhooks when possible — a Webhook doesn't consume Operations while waiting. Filter data early with a Filter — a bundle that doesn't pass a Filter doesn't trigger additional modules.
Keyboard shortcuts in the Make interface
Ctrl/Cmd + Z— undo the last actionCtrl/Cmd + S— saveSpace + drag— move the CanvasCtrl/Cmd + +/-— Zoom in/outF— Fit to screen (show everything)Delete— delete the selected module/connection
Ready to start?
Open a free account at make.com, choose a Template from our list, and watch your first Scenario run within less than an hour.