All segments

Integromat ChatGPT: Where the Model Call Belongs in Make

Integromat ChatGPT automation in Make: where the model call sits in the scenario, how to catch a malformed or refused reply, and which records need it.

  • Published
  • Reading time 14 min read
  • Author Nafiul Hasan
Integromat ChatGPT: Where the Model Call Belongs in Make. Diagram: attempts, spaced. AI FOR ECOMMERCE Integromat ChatGPT: Where theModel Call Belongs in Make WIDENING INTERVALS pointerflow.com

Short answer

Integromat is now called Make, and a ChatGPT call in a Make scenario works best placed after data validation and before the final write step, with a Router branch and a logged fallback for any malformed or refused reply, so one bad record never stalls the whole run.

Where does an Integromat ChatGPT call sit in a Make scenario?

Integromat is now called Make. The platform kept its module library, its scenario editor and its pricing structure through the rename, so this is a naming change, not a rebuild, and the rest of this article uses Make throughout. If you’re searching for “integromat chatgpt” because that’s the name you learned the tool under, you’re in the right place.

The question that matters more than the name is where the model call actually sits once you build the scenario. Put it first, ahead of any cleanup, and you’re sending raw, untrimmed data into a call that costs time and money on every run, including on records that were never going to need it. A trigger pulling in new orders, product updates or customer messages carries a mix of clean records and junk: test orders, out-of-stock placeholders, blank fields, duplicate webhooks firing twice for the same event. None of that needs a model call, and all of it can be caught with a Set Variables module and a Filter before the flow reaches the point of spending anything on an API request.

The working order looks like this: trigger, then normalise (Set Variables or a Text Parser module to strip whitespace, fix casing, pull out the fields you actually need), then filter (route out anything missing a required field, anything already flagged as handled, anything below the threshold that makes the record worth processing at all), then the model call, then a validation step on the reply, then a Router splitting success from failure, then the write step to whatever system receives the result — a Shopify product update, a Klaviyo profile field, a support ticket reply. The model sits in the middle of that chain, never at either end. It shouldn’t be the first thing that touches the data, because it shouldn’t have to do the cleanup work a Filter does for free. And it shouldn’t be the last thing before a write, because its reply needs checking before anything downstream trusts it.

What causes a ChatGPT call to fail, ranked by how often it happens?

This list is worth keeping next to the scenario, in the order these failures actually show up when a Make flow has a model call in it. It isn’t a theoretical list of things that could go wrong; it’s ordered by how often each one is the actual cause when a run stalls or produces a bad record.

1. Malformed JSON wrapped in commentary. The most common failure by a wide margin. You ask for structured output and the reply comes back as the JSON you wanted, plus a sentence before it (“Here’s the categorisation:”) or after it (“Let me know if you’d like adjustments”). A parse step expecting clean JSON from the first character fails on the wrapper text, even though the JSON itself would have been fine. This is a prompting problem, not a model limitation, and it’s the first thing to fix because it’s the easiest to fix.

2. A field in the right shape but the wrong type. Take this illustrative example: a price field returns as the string “$12.99” instead of a number the destination expects, even though the JSON itself is valid and the parse step passes it without complaint. A boolean can fail the same way, arriving as the word “true” in quotes rather than an actual boolean. This one is quieter than a parse failure because nothing errors immediately; it surfaces later, in the destination system, as a field that silently didn’t update or updated with a value the receiving app coerced into something unexpected.

3. Refusal or hedged language instead of the structured answer. Ambiguous or borderline content — a product description that reads close to a medical or safety claim, a customer message that sounds like a complaint about to become a legal one — can trigger a reply that declines to answer directly, or answers with caveats wrapped around the actual content. This looks like a malformed reply to a downstream parser, but the cause is different, and the fix is different too: a caveated reply usually means the record needs a person, not a retry.

4. Timeout or an empty response under load. Running a model call inside an Iterator processing a long list, back to back with no pacing, occasionally produces a timeout or an empty string where a full reply was expected. This shows up more on larger batches and busier times of day than on a small manual test, which is part of why it’s easy to miss until the scenario has been live for a while.

5. Schema drift after a prompt or model change. A prompt gets tweaked to add a field, or the underlying model changes its default formatting habits, and the reply shape shifts slightly: a key gets renamed, a nested object flattens, an array that used to have one item now has several. The validation step written against the old shape stops matching, and every record that used to pass now fails, all at once, which is at least easy to notice compared to the quieter failures above it.

6. Data reaching the prompt that was already wrong. An earlier module mapped the wrong field — customer name into the product description slot, an ID into a text field — and the model, doing its best with malformed input, produces an odd reply that looks like a model failure but is actually an upstream mapping error. This is the one worth checking first when a failure doesn’t match any of the five failure modes described here: read the actual prompt that was sent, not just the reply that came back.

How do you stop a malformed or refused reply from stalling the scenario?

Stopping a stall starts with treating the model’s reply as untrusted input, the same way you’d treat a file a customer uploaded. Parse it, check it against what you expected, and only then let it continue downstream.

Make’s JSON app includes a Parse JSON module, and running the model’s reply through it immediately after the call catches the wrapped-commentary failure and any reply that isn’t valid JSON at all. That catches failure mode one. It doesn’t catch failure mode two — a valid JSON object with the wrong field types — so a second check, comparing the parsed object’s keys and rough value types against what the destination expects, needs to sit right after it. This can be as simple as a Filter module checking that a price field is numeric and a required key exists before the flow is allowed to continue to the write step.

From there, a Router splitting the flow into a success branch and a failure branch keeps one bad record from taking the whole run down with it. The success branch continues to the write step as normal. The failure branch routes to a log — a spreadsheet, a database table, a ticket queue, whatever your team already checks — recording the record ID, the raw reply and a timestamp, so a failed record is visible rather than silently dropped.

Make’s own error handling directives on the model module itself matter here too. Setting the module to break stops the entire scenario on any error, which is rarely what you want for a batch run: one bad record shouldn’t cost you the other four hundred behind it. Resume lets the scenario continue past the error with a default or blank value in the failed field, which suits low-stakes fields where a blank is safer than a guess. Commit and rollback control whether partial work already done in the run gets kept or undone; for most enrichment scenarios, resume paired with the failure-branch logging just described gives you both continuity and a visible trail, without silently pretending nothing went wrong the way ignore does.

For failure mode three specifically — a refusal or hedged reply — retrying immediately rarely helps, because the same ambiguous input tends to produce the same cautious reply. A short retry with a slightly reworded prompt is worth one attempt; past that, the record belongs in the human review queue rather than a longer retry ladder. For failure mode four — a timeout under load — a single automatic retry with a short delay handles most cases, since the cause is usually transient. Widening the delay on a second retry before falling back to the queue is a reasonable pattern; treating every timeout as permanent and routing it straight to a person adds review work that a retry would have avoided.

What does scoring every record with the model actually cost?

The trap is pointing an Iterator at the full record set and running every single one through the model call, regardless of whether the record needed it. It’s the simplest scenario to build, which is exactly why it’s the one most teams build first, and exactly why it’s the one that gets expensive without anyone deciding it should.

Here’s an illustrative comparison, not a measured cost, to show why the distinction matters: say a catalogue holds 20,000 SKUs and an enrichment scenario reruns weekly. Sending every record through the model call means 20,000 calls a week, whether or not the record’s data was already complete. If records missing a category tag make up a tenth of that catalogue at any given time, routing only those through the model — with a Filter checking for the missing field before the model call, not after — cuts that hypothetical 20,000 down to 2,000, without changing what the model actually fixes. The other 18,000 records already had what they needed; the model call was never going to change their outcome, only add a cost and a small chance of introducing an error where none existed before.

That arithmetic is illustrative, not a number to plan a budget against — your own catalogue size, refresh frequency and how often records actually need enrichment will set the real figure, and the model vendor’s own pricing page is the place to check current rates rather than a figure carried over from memory. The same caution applies to Make’s own operation allowance: each module run against a record counts against your plan’s operation limit, and that limit varies by plan and changes over time, so check your current plan’s allowance in Make’s own account settings before assuming a scenario will fit inside it at scale.

The broader point holds regardless of the exact numbers: a model call is not a free action to sprinkle across every record in a flow. It’s a step with a cost and a failure surface, and the records that don’t need it are the ones where that cost buys nothing.

Which records actually need a model call, and which don’t?

A record needs the model when the input varies enough that a fixed rule can’t reliably cover it: free-text customer messages that need classifying into a support category, a new SKU description that needs a category tag it doesn’t already have, a product description that needs rewriting to a length limit while keeping meaning intact. These are tasks where the same input doesn’t map to the same output in a way a lookup table could encode.

A record doesn’t need the model when a rule already answers the question. A SKU that already carries a category tag doesn’t need to be re-tagged. An order that already matches a known pattern — same customer, same product, same shipping method as the last ten — doesn’t need a model call to decide how to route it. A customer message that matches an existing keyword pattern for “where’s my order” is cheaper and more consistently handled by a keyword-based Filter than by a model call that might phrase its classification slightly differently each time.

The practical test is a Filter module sitting before the model call, checking for the condition that actually signals ambiguity: is the category field empty, does the message not match any of the known keyword patterns, is this SKU new in the last import rather than one seen before. Records that pass the filter go to the model. Records that don’t, skip it entirely and go straight to whatever rule-based handling already covers them. Building that filter takes longer than skipping straight to the model call for everything, and it’s the difference between a scenario that scales with your catalogue and one that scales its cost with it too.

What happens when the model call fails mid-run, not at the start?

A scenario that fails on record one is easy: you see the error, you fix it, nothing has happened yet. A scenario that fails on record four hundred out of five hundred is a different problem, because four hundred records have already been processed and written, and the run needs to either resume cleanly from where it stopped or be safe to rerun from the beginning without duplicating that work.

Idempotent design matters more here than it sounds like it should. If the write step checks whether a record has already been updated — a “last enriched” timestamp field, a flag set on successful write — before writing again, then rerunning the whole scenario from the start after a mid-run failure simply skips the records already done and picks up from where it stopped, without creating duplicate updates or double-sent messages. Without that check, a rerun reprocesses everything, including the four hundred already-correct records, at full cost and full risk of introducing a new error into records that were previously fine.

Make’s scenario history shows exactly which records ran and which didn’t in a given execution, which is the first place to look after a mid-run failure — not to diagnose why record four hundred and one failed specifically, but to confirm where the run actually stopped, since a Router or Aggregator further downstream can sometimes make that less obvious than it looks. An Aggregator collecting results from a batch before a final summary write is a common point where this gets confusing: if the aggregation step itself fails, none of the individually successful upstream writes are lost, but the summary that depends on all of them might never fire, and checking that separately from the individual record writes avoids treating a summary failure as a full-run failure when it isn’t.

Why does this matter for AI search visibility?

AI-driven traffic to ecommerce stores is no longer a marginal channel. Shopify’s president, Harley Finkelstein, told Q1 2026 earnings call listeners that AI traffic to Shopify stores was up 8 times year-on-year, with AI-search orders up nearly 13 times over the same period — a vendor-reported figure, but a directional one worth taking seriously given the scale of Shopify’s merchant base. When an AI shopping assistant reads your catalogue, your product feed or your site content to answer a shopper’s question, it’s reading whatever your systems actually wrote, including anything a Make scenario enriched, tagged or rewrote along the way.

A malformed reply that slipped past validation and landed in a product’s category field, a description field, or a structured attribute doesn’t just sit there quietly. It’s the exact kind of inconsistent, wrong or blank data that makes a catalogue harder for an AI system to parse correctly, and harder for it to cite your product with confidence over a competitor’s. Independent research from Princeton found that applying deliberate generative engine optimisation techniques can lift AI visibility by 30 to 40 percent — the flip side being that avoidable, unforced errors in the underlying data work against that same visibility, quietly, without anyone connecting the dropped visibility back to the automation scenario that caused it.

Reliable automation and AI search visibility aren’t separate problems. The scenario that reliably catches a malformed reply before it reaches a product field is doing visibility work, even though it looks like an operations task.

Who should not build this without a review queue?

This pattern is built for operators running enough volume that manual review of every record was never realistic in the first place — brands at $3M to $30M in revenue on Shopify Plus or a comparable paid subscription platform, where a catalogue or message volume big enough to need automation is also big enough that a bad batch of silent failures can do real damage before anyone notices.

If your catalogue is small enough that a person could reasonably review every enrichment by hand in an afternoon, the fallback-and-review-queue machinery described here is more infrastructure than the problem needs; a person doing the work directly, with the model as an occasional assist rather than a scenario running unattended, is the simpler and safer choice at that scale. And if nobody on the team is going to check the failure log or the review queue on a routine basis, don’t build the scenario to run unattended at all: an automated flow with no one watching the exceptions doesn’t remove the risk of bad data reaching customers, it just delays when someone notices.

Getting the failure handling right in a Make scenario is, in the end, an AI search visibility problem as much as an operations one: the data your automation writes is the data an AI shopping assistant reads, and Pointerflow’s AI search visibility work starts from exactly that link between what your systems produce and what shows up when a shopper asks an AI assistant about your products.

Sources

  • Shopify president Harley Finkelstein, Q1 2026 earnings call: AI traffic to Shopify stores up 8x year-on-year, AI-search orders up nearly 13x (vendor-reported).
  • Princeton study: generative engine optimisation techniques lift AI visibility by 30–40% (independent).

Frequently asked

What does Integromat becoming Make change for existing scenarios?

The rename happened at the platform level, not inside individual scenarios. Old scenarios built under the Integromat name keep running under Make without edits. What changes is documentation, support articles and marketplace listings, which now use Make throughout, so search for help under the current name.

Can I call ChatGPT with a plain HTTP module instead of a dedicated app module?

Yes. An HTTP module calling the API endpoint directly works the same way as a packaged app module, and gives you full control over the request body and headers. The tradeoff is you build the JSON payload and error handling yourself rather than relying on a pre-built module's defaults.

What's the difference between a scenario failing and a scenario stalling?

A failure stops the run and shows an error you can see in the history log. A stall is quieter: the scenario completes without error, but a record silently gets a blank, wrong or default value because a malformed reply passed validation loosely. Stalls are harder to catch than failures.

How do I test a ChatGPT call before it runs on live order data?

Run the scenario manually against a small batch of real but non-live records, with the write step pointed at a test destination or turned off. Check the raw model output before any parsing, not just the final mapped fields, so you see what the model actually returned.

Should the model call run before or after data validation?

After. Validate and normalise the incoming record first, so the model receives clean, consistent input. Running the model on raw, unfiltered data means it has to guess at formatting on top of doing the actual task, which raises the chance of an inconsistent reply.

What happens if the API returns valid JSON but the wrong fields?

A JSON parse step will pass it, because the JSON is well formed. This is why parsing alone isn't validation. A separate check against the expected key names catches schema drift that valid-but-wrong JSON slips through, and should run as its own step before the write module.

How do I know if a record needs the model or a lookup table?

If the same input reliably produces the same correct output, a lookup table or a set of conditional rules will do it more cheaply and more predictably than a model call. Reserve the model for records where the input varies enough that a fixed rule can't cover it.

What's a reasonable way to log a refused or malformed reply?

Route it to a separate data store, spreadsheet or ticket queue with the record ID, the raw model output and a timestamp, rather than dropping it silently. Without a log, the same record fails the same way on every rerun and nobody notices the pattern.

Does batching records into one prompt reduce cost safely?

It can reduce the number of calls, but it raises the cost of a single bad reply, because one malformed response can affect an entire batch instead of one record. Batch only after you have validation and a fallback route in place, not as the first thing you try.

How do I stop one bad record from breaking an entire run?

Wrap the model call in a Router with a validation branch and a fallback branch, and use the scenario's error handler on the model module itself set to resume or commit rather than break, so the iterator moves on to the next record instead of halting the whole scenario.

What should trigger a human review queue instead of an automatic retry?

A repeated failure on the same record after one automatic retry, a refusal response rather than a malformed one, and any record touching customer-facing text or pricing. Automatic retries suit transient errors; refusals and high-stakes fields suit a person looking at the record directly.

Is it safe to run this without any monitoring?

No. A scenario can run for weeks producing quietly wrong output if nobody checks the error log or the fallback queue. A weekly check of the scenario history and the review queue catches drift long before it reaches a customer or a product page.

Next step

Is this your ai search visibility problem, or a symptom of another one?

Bring your numbers — the churn split, the decline rate, whatever your flows are earning — and we will tell you which of them is the expensive one.

Book a call →