Last updated: June 2026
Table of contents
- The 30-second answer
- How a Make filter actually decides
- Cause 1: the wrong operator
- Cause 2: comparing numbers as text
- Cause 3: empty and missing values
- Cause 4: capitalization mismatches
- Cause 5: AND/OR logic that doesn’t mean what you think
- Cause 6: filters on a router behave differently
- A worked example: debugging a live filter
- Frequently asked questions
You added a filter to keep the junk out, ran the scenario, and got the opposite of what you wanted. Either every bundle sailed through as if the filter weren’t there, or nothing came through at all and the modules downstream never fired. When a Make filter is not working the way you expect, it is almost never a Make bug. It is one of a handful of small, fixable mismatches between what the filter is checking and what the data actually contains.
A filter in Make is quiet by design. It throws no error when it passes a bad bundle or blocks a good one — it just makes a decision and moves on. That silence is exactly why a misconfigured filter is so easy to miss. This guide walks through the specific reasons a filter passes everything or blocks everything, and the fix for each, grounded in how Make’s filter mechanics actually work.
The 30-second answer
A Make filter sits on the line between two modules and evaluates a condition for every incoming bundle. Bundles that pass continue downstream; bundles that fail are dropped, and the modules after the filter don’t run for them. If your filter is misbehaving, work through these in order:
- Wrong operator — “Exists” is not “Equal to,” and “Contains” is not “Equal to.” The wrong operator silently lets bad bundles through or blocks good ones.
- Numbers compared as text — pick the numeric operator when comparing numbers, or a text operator can compare them like strings instead of values.
- Empty or missing values — use Exists / Not exists to test whether a field is filled in at all, before you test what’s in it.
- Capitalization — if the right operand’s case doesn’t match the data, an exact-match condition can fail every time.
- AND/OR logic — conditions on one row are AND; separate rows are OR. Mixing them up flips your result.
The fastest diagnostic: run the scenario once, click the bundle bubble above the module feeding the filter, and read the actual value the filter is judging. Most “broken filter” problems disappear the moment you see the real data instead of the data you assumed.
How a Make filter actually decides
A filter is a wrench, not a module. You add one by clicking the line between two modules and clicking the wrench icon, then Set up a filter. A filter has no credit cost — it’s a condition on the connection between modules, not a credit-consuming module — which makes it the cheapest tool in Make and one of the most useful for keeping usage down. (If you’re watching your usage, filtering early is one of the cheapest ways to reduce downstream module runs and credits — see our guide on Make operations vs credits.)
Every filter has two parts. A label — a plain-language name like “Has email” or “Active customers only” that shows up in the editor and run history — and one or more conditions. Each condition has a left operand, an operator, and (for most operators) a right operand. The operands can be mapped from previous modules, exactly like any other field.
The single most important thing to understand: a filter evaluates once per bundle. If the module before it outputs 100 bundles, the filter runs its check 100 times — once for each — and decides each one independently. There is no “the filter only ran once” failure mode. If only one bundle made it through, the filter judged all of them and only one passed. That distinction matters, because it tells you the fix is in the condition, not in some imagined single-pass behavior.
Debugging tip: bundles that don’t pass simply don’t continue down the line, and they leave no error behind. So a filter that “blocks everything” looks identical to a downstream module that never received input. Always confirm the bundle count entering the filter before you assume the filter itself is the problem.
Cause 1: the wrong operator
This is the most common reason a filter quietly misbehaves. Make gives you a specific operator for each kind of check, and choosing the wrong one produces a result that looks plausible but is wrong:
- Exists / Not exists — checks whether a field is filled in at all. This is the operator for “skip empty rows.” The right operand is left blank.
- Equal to / Not equal to — an exact match against the right operand.
- Numeric: equal to, greater than, less than — for comparing numbers.
- Text: contains, starts with, ends with, matches pattern (regex) — substring and pattern matching.
- Date: before, after, equal to — date comparisons.
- Array: contains, equal to — checks against values inside an array.
The classic trap: you want “the status field is filled in,” you reach for Equal to with a blank right operand, and now you’re testing whether the field equals an empty string — which is not the same as testing whether it exists. Use Exists. Likewise, “the email contains @” is a Contains check, not Equal to. Match the operator to the question you’re actually asking.
Cause 2: comparing numbers as text
If your filter is supposed to pass orders over $100 and it’s letting through a $20 order — or blocking a $1,000 one — you’re almost certainly comparing numbers using a text operator. Text comparisons can behave like string comparisons rather than numeric ones, which makes thresholds unreliable: the values look numeric to you, but the operator may be sorting them like words. Whenever you’re comparing order totals, quantities, or prices, use the numeric operator.
The fix is to choose the numeric operator (numeric greater than, numeric less than, and so on) rather than the text one. Make treats the operands as numbers and the comparison behaves the way you expect. This is worth checking any time a threshold filter produces results that seem backwards — it’s almost always a text-versus-numeric operator choice.
Cause 3: empty and missing values
A surprising share of “my filter blocks everything” reports come down to a field that isn’t there. If you build a condition like email Equal to something, but the incoming bundle has no email field at all (or it’s null), the condition can’t be satisfied and the bundle is dropped — every time, for every bundle. From the outside it looks like the filter is broken. It’s doing exactly what you told it.
The fix is to test for existence first. Put an Exists condition on the field before you test its contents, or restructure so the empty case is handled. When a mapped value renders as a literal token with curly braces in your output, that’s Make telling you the source bundle didn’t actually contain that field — a strong sign your filter is judging a value that isn’t there. Click the bundle bubble above the upstream module and confirm the field is present and populated.
The reliable check: before testing what a value is, test whether it is. Exists / Not exists is the most-used filter in Make for exactly this reason.
Cause 4: capitalization mismatches
If you’re matching text exactly — say, status Equal to “Active” — and the source system actually sends “active” or “ACTIVE,” an exact-match condition can fail on data that is, for your purposes, correct. The values are the same word; the capitalization differs.
The safe pattern is to normalize both sides before comparing: wrap the mapped field in a text function such as lower() and compare it against a lowercased literal, so “Active,” “active,” and “ACTIVE” all collapse to the same value. That removes capitalization from the equation entirely.
If capitalization might be involved, the dependable approach is to normalize both sides yourself with lower() or upper() rather than relying on the operator to handle case for you. Treat case-sensitivity as something to test on your actual data, not a universal rule.
Cause 5: AND/OR logic that doesn’t mean what you think
Make’s filter logic follows a simple but easy-to-misread rule. Multiple conditions on the same row are joined with AND — all must be true. Conditions on separate rows are joined with OR — any one row passing lets the bundle through.
So if you intended “active AND has email” but you put the two conditions on separate rows, you’ve actually built “active OR has email,” and far more bundles pass than you wanted. Reverse the mistake and far fewer pass. When a filter is letting through too much or too little and each individual condition looks right, check whether your conditions are arranged on one row or several.
For genuinely complex logic — nested ANDs and ORs in non-trivial combinations — the filter panel gets unwieldy. The cleaner approach is to compute the true/false decision upstream in a Set variable module, or to split the flow with a router so each branch carries its own simple filter.
Cause 6: filters on a router behave differently
When your filter lives on a route coming out of a router, a couple of behaviors catch people out. Each route has its own filter, set on the line between the router and that route’s first module. A single incoming bundle can take more than one route — if it satisfies the filters on Route 1 and Route 3, both routes process it. That’s intended router behavior, and it surprises people who expect a bundle to pick exactly one path.
If you want a bundle to follow only its first matching path, a router isn’t the right tool — that’s what the If-else module is for, where only the first route whose condition is true runs, with an Else route catching everything that matched nothing. And if you need a route that collects the bundles no other route accepted, mark one route as the fallback (right-click the route’s filter and set Fallback to Yes); it receives the bundles that didn’t satisfy any other route’s filter. For a true catch-all, don’t write a normal condition — mark the route as fallback so it receives the bundles that didn’t satisfy any other route. (Make does allow filters on fallback routes too, but that’s a narrower advanced case.) For the difference between routers and other branching, our iterators and aggregators guide covers the related flow-control patterns.
A worked example: debugging a live filter
Say you have a Google Sheets trigger watching new rows, feeding a Gmail module, with a filter on the line between them. You want to email only rows that have an email address and a status of “active.” Customers are being skipped who clearly qualify. Here’s the order of operations:
First, run the scenario once and click the bundle bubble above the Sheets module. Read the actual values — you discover the status column contains “Active” with a capital A, not “active.” That’s your culprit if you wrote an exact-match condition against the lowercase literal.
Second, check your operators. The email condition should be email Exists (not Equal to blank). The status condition should be Equal to with both sides normalized to the same case using lower().
Third, confirm both conditions sit on the same row so they’re joined with AND — you want “has email AND is active,” not “has email OR is active.” Save, run once more, and watch the bundle count: the rows that should pass now do, and the empty or inactive rows drop out cleanly. If a module still misfires after the filter, the problem has moved downstream — see Make error handling for what to do when a module itself throws.
Want the whole troubleshooting toolkit in one place? Grab the free Builder’s Companion Kit — cheat cards, ready-to-import blueprints, and the filter and error-handling patterns we use most — at mmsvegas.com/make-resources. You’ll need a free Make account to import the blueprints; you can create one here.
Frequently asked questions
Why is my Make filter blocking every bundle? The most common causes are a condition testing a field that’s empty or missing (use Exists first), an exact-match value whose capitalization doesn’t match the data, or a numeric comparison set to a text operator. Run the scenario once, open the bundle feeding the filter, and read the real value the condition is judging.
Why is my Make filter passing everything? Usually the operator doesn’t ask what you think — “Exists” passes any non-empty value, and a blank right operand on the wrong operator can pass nearly everything. It can also be AND/OR logic: conditions on separate rows are OR, so any one of them passing lets the bundle through.
Do filters in Make cost anything? No. A filter is a wrench on the line between two modules, not a module itself, so it has no credit cost. Filtering early is one of the cheapest ways to reduce downstream module runs and credits.
Why does my number filter behave backwards in Make? Because a text operator can compare values like strings rather than numbers, so a threshold check on order totals, quantities, or prices can pass or block the wrong bundles. When you’re comparing numbers, choose the numeric operator instead of the text one and the comparison behaves as expected.
How do I make a Make filter ignore capitalization? Normalize both sides before comparing — wrap the mapped field and the literal in lower() (or upper()) so different capitalizations collapse to the same value. Confirm against your current Make UI whether a case-insensitive operator is also available directly.
Why does a bundle take two routes out of my router? Routers evaluate each route’s filter independently, and a bundle that satisfies more than one route’s filter is processed by all of them. If you want only the first matching path to run, use the If-else module instead of a router.
Sources
Grounded in The Missing Manual for Make (MMS Vegas) — chapters on flow control, filters, and routers — and verified against the current Make documentation:
- Make Help Center — Filtering
- Make Help Center — How features use credits
- Make Help Center — Operations
- Make Help Center — Router
- Make Help Center — If-else and Merge
- Make Help Center — Item data types
About the author
Brian Kasday is a direct-response marketer with four decades in the trade who rebuilt his entire marketing capability as a one-person operation using AI and a low-cost software stack. He writes The Operator’s Library for MMS Vegas, including The Missing Manual for Make — the thorough, plain-language reference the platform’s own docs never quite became.
Brian Kasday writes The Operator’s Library for MMS Vegas — production-grade reference manuals for the tools small operators actually run.





