Make.com Tutorial: From Your First Workflow to Automation Pro
Complete tutorial from basics to advanced techniques with practical examples.
Make.com (formerly Integromat) is one of the most powerful no-code automation tools on the market. This tutorial will take you from zero to a working workflow with concrete examples and best practices.
What is Make.com?
Make.com is a visual automation platform. You connect apps, define logic, and let data flow automatically.
What Make can do:- 1,500+ app integrations
- Complex logic (If/Else, Loops, Filters)
- Data transformation (JSON, XML, Text)
- HTTP requests for any API
- Scheduling (time-based triggers)
Part 1: The Basics
Creating an Account
Understanding the Interface
+-------------------------------------------------------------+
| [Scenarios] [Templates] [Data] [Team] [Run once] |
+-------------------------------------------------------------+
| |
| +---------+ |
| | Trigger | |
| | (App) | |
+----+----+ +----v----+ Action (App) +----+----+ +----v----+ Action (App) +---------+ [+] Add module
+-------------------------------------------------------------+
Key Terms:
- Scenario: A complete workflow
- Module: A building block (Trigger or Action)
- Connection: Link to an app (OAuth)
- Operation: Each module execution counts
- Bundle: A data record passing through
Your First Workflow: Google Sheets to Slack
Goal: When a new row appears in Google Sheets, send a message to Slack. Step 1: New Scenario
New row: {{1.Column A}} - {{1.Column B}}
Done! Your first workflow is running.
Part 2: Intermediate Concepts
Filters: Only Let Certain Data Through
Example: Only process rows where column "Status" = "New" - Field: {{1.Status}}
- Operator: "Equal to"
- Value: "New"
[Google Sheets] --[Filter: Status=New]--> [Slack]
Router: Multiple Paths
Example: Different actions based on status+--[Filter: Status=New]--> [Slack: #new]
[Google Sheets] --> |
(Router) +--[Filter: Status=Done]--> [Slack: #done]
|
+--[Filter: Status=Error]--> [Email: Alert]
Iterator: Loop Through Arrays
Example: An API returns 10 results. Process each one individually.{{1.results}}[HTTP: Get Items] --> [Iterator] --> [For each: Create Record]
(Array) (Split) (Single Item)
Aggregator: Combine Multiple into One
Example: Summarize 10 individual results into one email[Iterator] --> [Process each] --> [Aggregator] --> [Email: Summary]
Error Handling
What happens when errors occur?- Resume: Continue, ignore error
- Commit: Save changes, then stop
- Rollback: Undo changes, stop
- Break: Move to Incomplete queue, retry later
Best Practice: Always add error handlers to critical workflows[Module] --+---> [Next Module]
|
+---> [Error Handler] ---> [Slack: Error Alert]
Part 3: Advanced Techniques
HTTP Module: Any API
Example: Call an API without native integrationhttps://api.example.com/data
Authorization: Bearer {{your_api_key}}
Content-Type: application/json
Method: POST
Body type: Raw
Content type: JSON
Request content:
{
"name": "{{1.name}}",
"email": "{{1.email}}"
}
Webhooks: Instant Triggers
Instead of polling (checking every X minutes) -> Instant (immediately when event occurs)
Create a Custom Webhook:https://hook.eu1.make.com/xxxTypeform sends data to webhook URL
|
Make receives instantly
|
Workflow starts immediately
JSON & Data Structure
Parse JSON:{
"contact": {
"firstName": "{{1.firstName}}",
"lastName": "{{1.lastName}}",
"email": "{{1.email}}"
},
"metadata": {
"source": "website",
"timestamp": "{{now}}"
}
}
Text & Data Transformation
Useful Functions:# Text
{{lower(1.Name)}} -> lowercase
{{upper(1.Name)}} -> UPPERCASE
{{substring(1.Text; 0; 10)}} -> First 10 characters
{{replace(1.Text; "old"; "new")}}
# Date
{{formatDate(now; "YYYY-MM-DD")}}
{{addDays(now; 7)}}
{{parseDate(1.date; "DD.MM.YYYY")}}
# Numbers
{{round(1.price; 2)}} -> 2 decimal places
{{sum(1.items[].price)}} -> Sum array
# Logic
{{if(1.status = "active"; "Yes"; "No")}}
{{ifempty(1.name; "Unknown")}}
Data Stores: Internal Database
Make has a built-in database for persistent data.
Example: Avoid Duplicates[Trigger] --> [Data Store: Search by Email]
|
[Filter: not found]
|
[Create Contact]
|
[Data Store: Add record]
Scheduling & Optimization
Schedule Options:- Every 15 minutes (default)
- Once a day (daily at X time)
- Custom cron expression
- Apply filters early (before expensive modules)
- Aggregate instead of processing individually
- Use webhooks instead of polling where possible
- Utilize batch processing
- Max 40 modules per scenario
- Max 100MB file transfers
- Timeout: 40 minutes
Part 4: Practical Example
Complete Workflow: Lead Capture with Enrichment
Goal:[Typeform: Watch Responses]
|
v
[HTTP: Clearbit Enrichment API]
|
[Router]
|
+-----+-----+
v v
[Found] [Not Found]
| |
v v
[HubSpot: [HubSpot:
Create Create
Contact Contact
+ Company Basic]
Data] |
| |
+-----+-----+
v
[Slack: New Lead Notification]
|
v
[Gmail: Send Welcome Email]
Step-by-Step Setup:
1. Typeform Trigger
Module: Typeform -> Watch Responses
Form: "Contact Form"
2. Clearbit Enrichment
Module: HTTP -> Make a request
URL: https://company.clearbit.com/v2/companies/find
Query: domain={{parseURL(1.email).host}}
Headers: Authorization: Bearer {{clearbit_key}}
Parse response: Yes
3. Router with Filter
Path 1 Filter: {{2.company.name}} exists
Path 2 Filter: {{2.company.name}} does not exist
4. HubSpot (Path 1 - with Company Data)
Module: HubSpot -> Create a Contact
Email: {{1.email}}
First Name: {{1.firstName}}
Company: {{2.company.name}}
Industry: {{2.company.category.industry}}
Employees: {{2.company.metrics.employees}}
5. HubSpot (Path 2 - Basic)
Module: HubSpot -> Create a Contact
Email: {{1.email}}
First Name: {{1.firstName}}
6. Slack Notification
Module: Slack -> Create a Message
Channel: #leads
Text:
New Lead: {{1.firstName}} {{1.lastName}}
Email: {{1.email}}
Company: {{ifempty(2.company.name; "Unknown")}}
7. Welcome Email
Module: Gmail -> Send an Email
To: {{1.email}}
Subject: Welcome to [Company]!
Content: [HTML Template with {{1.firstName}}]
Part 5: Best Practices
Naming Convention
[Area] - [Purpose] - [Details]
Examples:
"Sales - Lead Enrichment - Typeform to HubSpot"
"Support - Ticket Routing - Zendesk"
"Marketing - Social Posting - Blog to LinkedIn"
Folder Structure
Sales
+-- Lead Enrichment
+-- Deal Alerts
Marketing
+-- Social Automation
+-- Email Sequences
Operations
+-- Reporting
+-- Notifications
Error Handling
Always include:[Module]
|
+--[Error Handler: Break]
|
+--[Slack: "Warning: Error in {{scenario.name}}: {{error.message}}"]
Testing
Documentation
In each scenario:
Conclusion
Make.com is powerful, but only as good as your understanding of it.
Learning Path:Want to use Make.com for your business but need support? We build your workflows from concept to production system.