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. Read about Make.com pricing to plan your budget, or explore our Make.com agency services if you need professional implementation. Contact us for a free consultation.
Get Automation Insights That Matter
New tool comparisons, workflow tips, and pricing updates — directly in your inbox. No spam, unsubscribe anytime.
We respect your privacy. Unsubscribe at any time.