school

Exclusive content for registered members

Join the Academy for free and get full access
to all courses — at no cost

Sign in / Register for free ← Back to the preview
workspace_premium Full course — free access

AI Automation
Pro

The most comprehensive business-automation course, with AI. You'll learn to build advanced automation systems with Make.com and n8n, connect AI tools via API, and deploy 10 real business projects to production.

schedule 20 hours of content
rocket_launch 10 projects
all_inclusive Full lifetime access
menu_book 5 modules
Your progress
Module 1 of 5
1 module completed of 5
1
Module 1 — 4 hours

Advanced Make.com

Active
1.1

Webhooks in Make.com

Quick Win

What is a Webhook and why is it useful?

A Webhook is a unique URL that lets external systems "knock on the door" and pass you data in real time — without frequent polling. Instead of Make.com checking every two minutes whether something new happened, the third-party system sends an HTTP request the moment the event occurs. The result: much faster automation, with far fewer wasted API quotas.

Examples of common uses: receiving a new lead from a Typeform form, receiving a payment from Stripe, receiving a new message from Slack, updating an order status from WooCommerce, and hundreds of other services that support sending Webhooks.

Creating a Webhook in Make.com — step by step

1
Add a Trigger — Custom Webhook

Open a new Scenario in Make.com. Choose the first Trigger in Add a module, search for "Webhooks" and choose Custom Webhook. Click Add and give it a descriptive name like new-lead-webhook.

2
Set up Instant Trigger

Make.com generates a unique URL for you. Make sure the Instant Trigger option is checked — that is what makes the Scenario run immediately with every request, instead of waiting for polling.

3
Send a sample POST request

Click Determine data structure so Make.com learns your data structure. Send it a sample request (see code below) — the system will automatically analyze the JSON and generate a Schema.

4
Processing the data

After the structure is learned, all your fields (name, email, phone, etc.) will be available for mapping in the following modules in the Scenario. Drag them into the relevant fields.

Code: sending data to a Webhook in Make.com

If you want to test your Webhook from JavaScript code (Node.js, browser, or any other environment), here is a full example:

send-to-webhook.js
// sending data to a Webhook in Make.com
const webhookUrl = 'https://hook.eu1.make.com/YOUR_WEBHOOK_ID';

const data = {
  name: 'John Doe',
  email: 'israel@example.com',
  phone: '050-1234567',
  source: 'landing_page',
  timestamp: new Date().toISOString()
};

const response = await fetch(webhookUrl, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify(data)
});

console.log('Status:', response.status); // 200 = success
const text = await response.text();
console.log('Response:', text); // "Accepted" = Make.com received successfully
tips_and_updates
Tip: Make.com response

Make.com returns 200 Accepted the moment it receives the request — even before the Scenario finished. If you need an asynchronous response with results, use the Webhook Response module at the end of the Scenario.

Common mistakes and how to avoid them

cancel Missing Content-Type

You forgot to add the header Content-Type: application/json. Make.com will not parse the Body and will throw a parsing error.

cancel Scenario not active

The Webhook will return 200 even when the Scenario is off, but the requests will pile up in a Queue. Make sure the Scenario is active before testing.

cancel Using GET instead of POST

A Custom Webhook in Make.com expects a POST request with a Body. Using GET will fail to read the form fields.

check_circle Testing with RequestBin

Before connecting Make.com, test your Webhook with requestbin.com to see exactly what is being sent to you.

1.2

Advanced Routers and Filters

Deep Dive

Router Module — routing by conditions

The Router is one of the most powerful tools in Make.com. It lets you split the Scenario into several branches, each of which runs under different conditions. Think of it like an switch-case in code — each Branch gets a Filter with an activation condition.

Example: a lead coming from Facebook is sent to an immediate WhatsApp chat, a lead from the website gets a detailed email, a lead from LinkedIn is fed directly into the CRM. Each Branch runs independently and in parallel.

Setting Filter Conditions

Text operators
  • Equal to
  • Contains
  • Starts with
  • Matches pattern (RegEx)
Number operators
  • Greater than
  • Less than or equal
  • Between
Date and state
  • Date is before/after
  • Exists / Is empty
  • Is true / Is false

Fallback Route — "otherwise"

Every Router needs at least one Branch with a Fallback (Otherwise). This is the Branch that runs all the data that did not pass any other Filter. Without a Fallback, data that does not match any Branch is silently lost — and you won't know about it. The right way: add a final Branch as Otherwise → send yourself an alert + save to an Error Log.

Nested Routers

You can nest Routers within Routers to create complex logic. For example: a first Router splits by country (Israel / abroad). The Israel Branch goes to a second Router that splits by city. Main use: complex Escalation processes in Sales Pipelines.

warning
Note: operations quota

Each Branch in a Router counts as a separate operation, including the operations inside it. A Router with 5 Branches, each containing 3 modules = 15 operations per run. Plan the architecture according to your quota.

1.3

Error Handling in Make.com

Deep Dive

Automation in production will encounter errors — it's not a question of if, but when. Make.com offers a powerful error-handling mechanism that lets you control exactly what happens when a module fails.

The four directives

B Break

Stop the run and mark it as failed. The data is saved in Incomplete Executions for manual handling. The default directive.

R Resume

Skip the failed record and finish the run as a success. Useful when some records are non-critical and you can continue without them.

I Ignore

Ignore the error completely and mark as success. Used when the error is expected and unimportant (for example, a permitted Duplicate in the DB).

C Commit

Save all operations completed up to the point of the error. Used with Roll Back Transactions to prevent duplicates.

Error Handler Routes

Right-click any module and choose Add error handler. This adds a special Branch that runs only when the module fails. There you can put: sending an email to the admin, adding a row to Google Sheets with the error details, sending a Slack message, and then choosing the appropriate directive.

Retry — automatic retry

For temporary network errors, set up Retry inside the Break directive. Set the number of attempts (up to 5) and the interval in seconds between each attempt. This is ideal for API calls that can fail due to Rate Limiting.

error-handler-config.json
{
  "errorHandler": "resume",
  "retryCount": 3,
  "retryInterval": 60,
  "fallbackValue": null
}
tips_and_updates
Recommended production approach

Set an Error Handler on every critical module (Google Sheets Write, CRM Update, sending email). In the Error Handler: save to a Log row ← send a Slack message with the run ID ← use Commit ← continue to the next record. This way you never lose data silently.

1.4

Data Stores and Aggregators

Deep Dive

Data Stores — a built-in database in Make.com

A Data Store is a minimalist database built directly into Make.com. It lets you save and retrieve data between different runs of the Scenario — something you cannot do with regular variables. Main uses: preventing duplicate processing (Deduplication), storing statuses, data cache, tracking a lead over time.

Each Data Store is defined with a Schema — the structure of the fields it will contain. For example: a field email (Text, Unique), status (Text), last_seen (Date).

add_circle
Add / Update Record

Add a new record or update an existing one by a unique Key

search
Get Record / Search

Retrieve a record by Key or search by filters

delete
Delete Record

Delete a specific record or clear the entire Store

Aggregators — collecting items from an Iterator

When an Iterator produces multiple items (for example: 50 rows from Google Sheets), an Aggregator collects them back into a single item. The three common Aggregators:

data_array
Array Aggregator

Collects all the items into a single Array. Useful for sending a list of leads as a JSON Body to an external service, or building a consolidated Payload.

text_fields
Text Aggregator

Merges multiple text values into a single string with a defined separator. Useful for building an email body from a list, or summarizing multiple fields.

calculate
Numeric Aggregator

Computes Sum, Average, Min, Max, Count across all items. Useful for daily reports, revenue calculation, counting leads by campaign.

🎯
Module 1 project

Automatic CRM — end to end

In this project you'll build a complete Scenario in Make.com that receives a new lead from the site, filters it by source, saves it, sends messages to the team and creates a new Contact in the CRM — all automatically within seconds.

The Scenario architecture

1
Trigger — Custom Webhook

Receives a new lead from the site. Fields: name, email, phone, source (facebook/website/linkedin), budget

2
Data Store — duplicate check

Search by email in the Data Store. If it exists — update the last date and stop. If not — continue to Step 3.

3
Router — sorting by source

Branch A: source = "facebook" ← send immediate WhatsApp. Branch B: source = "linkedin" ← direct CRM. Branch C: Otherwise ← welcome email.

4
Google Sheets — saving the lead

Add a new row in the "Leads" sheet. Include: name, email, phone, source, date, budget, status (NEW).

5
Gmail — welcome email

Send a personalized email with the lead's name, an initial offer, and a link to schedule a call (Calendly). Include the rep's details in the signature.

6
Slack — alert to the sales team

Send a message to the #new-leads channel: lead name, source, budget, link to the row in Sheets. Include an @mention of the relevant rep.

7
HubSpot / Pipedrive — creating a Contact

Create a new Contact in the CRM with all the lead's details. Add a Deal/Opportunity with a "New Lead" stage and link it to the appropriate Pipeline.

emoji_objects
Bonus challenge

Add an OpenAI module before the Google Sheets step. Let it assess the lead's seriousness based on the "message" field they left in the form — and ask it for a 1-10 score + a short reason. Save the score in the sheet and the CRM as a Custom Property.

2
Module 2 — 4 hours

n8n Self-Hosted

2.1

Installing n8n on Docker

Quick Win

n8n is the most powerful open-source automation tool available. Unlike Make.com, when you run n8n Self-Hosted — there are no quotas, no per-operation cost, and your data stays with you. The fastest way to install n8n in a production environment is Docker Compose.

Prerequisites

Docker + Docker Compose VPS / server with Linux A domain name (for SSL) 2GB RAM minimum

Configuring docker-compose.yml

docker-compose.yml
# create a folder
mkdir n8n-data && cd n8n-data

# docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.1'
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=your-secure-password
      - WEBHOOK_URL=https://your-domain.com/
      - N8N_HOST=your-domain.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
    volumes:
      - ~/.n8n:/home/node/.n8n
EOF

docker compose up -d

Explanation of the variables

N8N_BASIC_AUTH_ACTIVE

Enables basic authentication. Mandatory in production so not everyone can reach your interface.

N8N_BASIC_AUTH_PASSWORD

Choose a strong password. After going live, change it to an environment Variable.

WEBHOOK_URL

Your public address. n8n will use it to build Webhook URLs. Must be HTTPS.

volumes: ~/.n8n

Store the data outside the Container. Without this you'll lose all the Workflows on every Restart.

tips_and_updates
HTTPS with Nginx + Certbot

For production with a real domain, add Nginx as a Reverse Proxy with SSL from Let's Encrypt. The command: certbot --nginx -d your-domain.com. The course includes a full Nginx config with Rate Limiting.

2.2

Complex Workflows and Code Nodes

Deep Dive

n8n offers a Code Node that lets you write JavaScript (or Python) directly inside the Workflow. This makes anything that can be coded — possible. Data cleaning, complex calculations, building dynamic Payloads, and processing business logic that does not exist as a built-in Node.

n8n Code Node — lead processing
// n8n Code Node — lead processing from CRM
const items = $input.all();
const processed = items.map(item => {
  const data = item.json;

  // clean an Israeli phone number
  const phone = data.phone?.replace(/\D/g, '');
  const formattedPhone = phone?.startsWith('972')
    ? `+${phone}`
    : `+972${phone?.replace(/^0/, '')}`;

  // compute Lead Score
  let score = 0;
  if (data.email?.endsWith('.co.il')) score += 20;
  if (data.company) score += 30;
  if (data.budget > 10000) score += 50;

  return {
    json: {
      ...data,
      phone: formattedPhone,
      leadScore: score,
      processedAt: new Date().toISOString()
    }
  };
});

return processed;

The code receives all the items ($input.all()), iterates over them with map, normalizes the phone, computes a Lead Score according to business criteria, and returns the enriched data to the next Nodes. Note that you must always return an array of objects with a field json.

2.3

AI Nodes in n8n

Deep Dive

n8n 1.x includes full support for LangChain directly in the interface. You can build AI Agents, Prompt chains, and conversations with Memory — all without a line of code.

smart_toy
AI Agent Node

A Node that runs a full Agent with Tools. Define the System Prompt, connect Tools (Webhooks, APIs, SQL), and it will automatically decide what to use.

memory
Memory Nodes

Window Buffer Memory keeps the last N messages. Redis Chat Memory for long-term memory. Postgres/SQLite for permanent storage.

model_training
OpenAI Chat Model

A direct connection to GPT-4o, GPT-4 Turbo and GPT-3.5. Includes Temperature, Max Tokens, and System Message settings.

hub
LangChain Integration

Every LangChain Node is available: Document Loaders, Text Splitters, Vector Store Retrievers, Embeddings, and more.

2.4

Security in n8n Self-Hosted

When you run n8n in production with access to sensitive business data, security is not optional. Here is the list of essential checks:

verified_user
Basic Auth / OAuth2

Protect the n8n interface with Basic Auth. For multi-user environments — enable n8n User Management and move to OAuth2 with Google.

vpn_key
Credentials Encryption

Set N8N_ENCRYPTION_KEY — a long, random string. n8n will use it to encrypt all Credentials. Back up this key separately!

firewall
Firewall + IP Whitelist

If n8n does not need public access, restrict access to Port 5678 to your specific IP only. Keep Port 443 open for Webhooks only.

backup
Automatic backup

Set up a daily Cron Job that pushes the ~/.n8n to S3 or Google Drive. A backup without a restore plan is not a backup.

🎯
Module 2 project

Lead Management Pipeline with AI Scoring

In this project you'll build a Workflow in n8n that handles incoming leads, passes them through a Code Node for processing and only then scores them with GPT-4o — and then routes them automatically to the right rep.

1
Webhook Trigger

Receiving a lead from Typeform/HubSpot Forms with all the form fields

2
Code Node — data normalization

Cleaning the phone, analyzing the email domain to identify the company, computing an initial Lead Score

3
OpenAI Node — AI Score

Send the inquiry content to GPT-4o: "Rate this lead 1-10 by level of seriousness" + structured JSON in the response

4
IF Node — routing by score

Score ≥ 8: senior rep + immediate WhatsApp. Score 5-7: regular email process. Score < 5: newsletter only

5
Postgres / Airtable

Save all the data including AI Score, a manual score to be set later, inquiry history

Modules 3–5

Click any module to navigate to its full content

4
Module 4 — 5 hours

10 Business Automation Projects

Ten full business projects ready for production. Each project includes documentation, downloadable code, and a Walk-through video. The projects cover the areas: E-commerce, customer service, HR, sales, marketing and content.

P1
Order-to-Delivery Tracker

WooCommerce + Shipping API + WhatsApp updates

P2
Customer Support Triage

Classifying customer inquiries with GPT-4 + handoff to a rep

P3
Social Media Content Engine

Weekly content creation with AI + publishing schedule

P4
CV Screening Pipeline

Reading resumes + scoring + a report to the manager

P5
Invoice Processing Bot

Extracting data from PDF invoices + recording in the ERP

P6
Competitor Intelligence

Scraping + AI Summary + an automatic weekly report

P7
Meeting Notes Automation

Zoom/Meet transcription + summary + tasks in Asana

P8
Inventory Alert System

Inventory check + automatic ordering + a report to the manager

P9
Personalized Email Sequences

A personalized email series with GPT-4 + A/B Testing

P10
Full Sales Dashboard

Collects CRM data + calculations + Google Data Studio

5
Module 5 — 2 hours

Production, Monitoring & Scale

Moving the automations from development to production professionally. Ongoing monitoring with Dashboards, error management, scaling and a course certificate.

workspace_premium
Course completion certificate

After completing all 5 modules and 10 projects you'll receive a digital certificate from Automation4MI. Shareable on LinkedIn.

You finished Module 1

Ready for Module 2?

Module 2 awaits you — installing n8n from scratch, building complex Workflows with Code Nodes, and integrating with AI. Click to continue.

Continue to Module 2 arrow_back
The private Discord community

Connect to an exclusive community of AI Automation Pro students. Ask questions, share projects, get Feedback from mentors and senior students.

Join the community arrow_back