Marketing Tools

Architecting for Failure: Building “Dead Letter Queues” in Make.com

Architecting for Failure: Building “Dead Letter Queues” in Make.com

Most Make.com scenarios are designed as if everything will work.

That assumption holds—right until one API returns a malformed payload, a webhook times out, or a downstream system rejects data. Then your “automation” becomes a black hole where failures disappear and nobody knows what was lost.

A Dead Letter Queue (DLQ) fixes that. Not by preventing errors, but by capturing them, preserving context, and making them replayable.


What a Dead Letter Queue Actually Is (In Make Terms)

A DLQ is not a built-in feature. You design it.

It’s a separate, isolated system that receives failed executions and stores:

  • original payload
  • error reason
  • timestamp
  • retry status

Think of it as a buffer between failure and recovery.


The Core Pattern (Don’t Skip This)

ComponentRole
Main scenarioExecutes business logic
Error handlerIntercepts failures
DLQ scenarioStores failed payloads
Storage layerGoogle Sheets / DB
Replay mechanismManual or automated

1) Build a Dedicated Error Logging Scenario (Not Inside Your Main Flow)

Most teams try to log errors inside the same scenario.

That’s the first mistake.

If your main scenario breaks, your logging logic might never execute. Or worse—it triggers another failure.

You want decoupling.


How It Looks in Make.com

Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com

What the screenshot shows:
A Make.com scenario using an error handler that routes failed executions to a webhook module, triggering a completely separate logging scenario.


Architecture

StepAction
Error occursScenario fails at module
Error handler triggersCaptures payload + error
Webhook callSends data to DLQ scenario
DLQ scenario runsStores error safely

Payload You Should Send

{
  "scenario": "lead-processing-v2",
  "module": "hubspot-create-contact",
  "error": "400 Bad Request",
  "payload": {
    "email": "test@example.com",
    "company": "Example Ltd"
  },
  "timestamp": "2026-01-01T10:00:00Z"
}

Notice one thing: you store the original payload.

Without it, replay is impossible.


2) Store Failed Payloads for Replay (Google Sheets vs Database)

Now that errors are captured, they need to be stored somewhere usable.

Not logs. Not console output.

Structured storage.


Option A: Google Sheets (Fastest to Implement)

Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com

What the screenshot shows:
A Make.com module writing error data into Google Sheets, with structured columns for payload, error, and timestamp.


Recommended Sheet Structure

IDScenarioErrorPayloadStatusRetry CountTimestamp
1lead-flow400JSONpending010:00
2billing401JSONfailed210:05

Option B: Database (Production-Grade)

Use when:

  • volume is high
  • replay needs automation
  • multiple teams access logs

Example schema:

CREATE TABLE dlq_events (
  id SERIAL PRIMARY KEY,
  scenario TEXT,
  error TEXT,
  payload JSONB,
  status TEXT DEFAULT 'pending',
  retry_count INT DEFAULT 0,
  created_at TIMESTAMP DEFAULT NOW()
);

Why This Matters

Without structured storage:

  • you cannot replay
  • you cannot analyze patterns
  • you cannot prove what failed

You’re blind.


3) Replay Mechanism (Where Most Teams Fail)

Capturing errors is easy.

Recovering from them is where systems either mature—or collapse.


Manual Replay (Start Here)

You build a second scenario:

  • reads rows from DLQ
  • reprocesses payload
  • updates status

Replay Scenario Structure

Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com

What the screenshot shows:
A Make.com scenario reading rows from Google Sheets, iterating through failed payloads, and retrying the original workflow logic.


Replay Logic Example

if (retry_count < 3) {
  process(payload);
  updateStatus("success");
} else {
  updateStatus("failed_permanent");
}

Key Rule

Never replay blindly.

Always:

  • limit retries
  • track retry count
  • update status

Otherwise, you create chaos.


4) Prevent Infinite Error Loops (The Silent Killer)

This is where most “DLQ implementations” fail.

You build:

  • error handler → DLQ → replay

But forget:

what if replay fails again?


How Infinite Loops Happen

StepResult
Original flow failsSent to DLQ
Replay runsFails again
Error handler triggersSends back to DLQ
Loop beginsForever

How to Stop It

You need loop protection logic.


Implementation Pattern

if (retry_count >= 3) {
  stopProcessing();
  markAsPermanentFailure();
}

In Make.com (What You Configure)

Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com

What the screenshot shows:
A filter condition in Make.com that prevents further retries when retry count exceeds a defined threshold.


State Model You Should Use

StatusMeaning
pendingWaiting for replay
processingCurrently retrying
successRecovered
failed_permanentStop retrying

5) Putting It All Together (Production DLQ Architecture)

Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com
Architecting for Failure: Building “Dead Letter Queues” in Make.com

What the screenshot shows:
A full DLQ architecture: main scenario → error handler → webhook → logging scenario → storage → replay scenario with retry limits.


End-to-End Flow

StageAction
ExecutionMain scenario runs
FailureError handler triggers
LoggingSent to DLQ scenario
StorageSaved in Sheets/DB
ReplaySeparate scenario processes
ControlRetry limits applied

What Changes After You Implement This

Before DLQ:

  • failures disappear
  • debugging is reactive
  • data loss is silent

After DLQ:

  • every failure is captured
  • replay becomes controlled
  • system becomes observable

A Hard Truth Most Teams Learn Late

You don’t need a DLQ when things work.

You need it when:

  • APIs rate-limit you
  • schemas change
  • third-party systems behave unpredictably

Which is to say—always.


Final Remark

If your Make.com setup:

  • doesn’t store failed payloads
  • doesn’t allow replay
  • and doesn’t limit retries

you didn’t build automation.

You built a system that works exactly until it doesn’t…
and then quietly loses data while pretending everything is fine.

Elizabeth Sramek
Written by

Elizabeth Sramek is an independent advisor on search visibility and demand architecture for B2B companies operating in high-competition markets. Based in Prague and working globally, she specializes in designing search presence for AI-mediated discovery and building category visibility that survives algorithmic shifts.