Guide · Make.com · JSON · Troubleshooting

Make Parse JSON errors: "Missing value of required parameter 'json'" and "Source is not valid JSON"

Short answer: Make's JSON › Parse JSON module fails in two different ways, and they need different fixes.

By Flowpaja · Published

This guide contains an affiliate link, marked “affiliate link”.

An AI module answering with a fenced JSON block, Parse JSON failing with Source is not valid JSON, and the fix: the module's JSON schema output
Read the exact error first: an empty JSON string and invalid JSON need different fixes.
Disclosure: everything in this guide works with plain Make.com and the apps it connects. At the end we mention our own Make templates and our Make scenario fix service on Fiverr. Module names, settings and limits were checked against Make's JSON app docs and OpenAI modules docs in October 2026. Menus and limits change, so check them if something looks different.
  • BundleValidationError: Missing value of required parameter 'json' means the JSON string field was empty when the module ran. Most often you clicked Run this module only (mapped values from earlier modules are empty in that case), the module before it returned nothing, or you mapped a field that is empty in this bundle.
  • DataError: Source is not valid JSON means something arrived, but it isn't strict JSON. The usual culprits are Markdown fences (```json) from an AI module, curly quotes, text around the JSON, raw line breaks from a mapped value, or JSON that Make had already parsed for you.

Find out which one you have, then jump to the matching section below.

What you need

  • The failed run open in History (or the scenario editor after a Run once)
  • Access to the output bubble of the module before Parse JSON
  • Five minutes and a scratch scenario for a clean test

Step 1: Read the error, not just the red module

Click the red Parse JSON module in the failed run and read the full message:

MessageWhat it meansGo to
BundleValidationError · Validation failed for 1 parameter(s). · Missing value of required parameter 'json'.The JSON string field was emptyStep 2
DataError · Source is not valid JSONThe field had text, but the parser rejected itStep 3

Then click the output bubble of the module before Parse JSON. The value you mapped into JSON string is the evidence. A label that looks right in the mapping panel tells you less than the actual value in the run.

Step 2: Fix "Missing value of required parameter 'json'"

Cause 1: you used "Run this module only"

This is the most common cause in Make Community threads. When you right-click Parse JSON and choose Run this module only, the earlier modules don't run, so everything you mapped from them is empty. Make then complains that the required json value is missing, even though the scenario works fine end to end.

Fix: click Run once at the bottom of the editor and run the whole scenario, or paste a sample JSON string into the dialog that appears when you run the module on its own.

Cause 2: the module before it returned nothing

Check the previous module's output bubble:

  • An AI module returned an empty result. It may have stopped early because Max Output Tokens was too low. For reasoning models, that limit includes reasoning tokens, so a low value can leave no visible output at all.
  • An HTTP request returned no body, for example a 204 No Content status.
  • A Google Sheets Search Rows found nothing. It still passes on one empty bundle with Total number of bundles = 0, so the next modules run with empty values. If your JSON lives in a sheet cell, add a filter after Search Rows: Total number of bundles greater than 0. See Search Rows returns nothing.

Fix: add a filter right before Parse JSON with the condition JSON string value Exists. Empty bundles then stop quietly instead of failing the run. If an empty value means something went wrong upstream, fix that module instead.

Cause 3: the mapping points at the wrong item

You may have mapped a field from a module you later replaced, or a field that only exists in some bundles (an optional form answer, for example). An old mapping can stay in the field and simply return nothing.

Fix: open Parse JSON, delete the old pill and map the field again from the current module's output. Only then run the whole scenario again.

Should I use ifempty() with "{}"?

Only if an empty object really is a valid input for the rest of your scenario. Wrapping the field in ifempty() with an empty object as the fallback makes the error go away, but every module after it then runs with empty values. That can mean blank sheet rows or empty Slack messages. A filter that stops the bundle is usually the better choice.

Step 3: Fix "Source is not valid JSON"

Copy the exact value from the previous module's output and paste it into any JSON validator. Then compare it with these six causes.

Cause 1: Markdown fences from an AI module

AI models often wrap JSON like this:

```json
{"category": "billing"}
```

Best fix: ask the module for JSON instead of asking nicely in the prompt.

  • In OpenAI Generate a response, set Output Format to JSON schema (or JSON object; Make's docs say your prompt must then contain the word "json").
  • In OpenAI Generate a completion, set Response Format to JSON Object and tell the model to answer in JSON in a system or user message.

Fallback for models without a JSON mode: strip the fences before parsing.

{{trim(replace(replace(5.result; "```json"; emptystring); "```"; emptystring))}}

Replace 5.result with the field from your own module. Paste the formula whole, braces included: the quotes are part of Make's copy-and-paste format, and without them the scenario fails validation and won't run. If you type it in the mapping panel instead, type the backticks without quotes around them: quotes you type there become part of the text. emptystring is Make's built-in empty value; typing "" instead inserts two quote characters. If the fence still isn't removed, look for a space before or after ```json.

Cause 2: curly quotes

JSON only accepts straight double quotes ". Curly quotes “ ” creep in when you paste JSON from Google Docs, Word or a chat window into a Make field. Retype the quotes inside Make, or build the JSON with Create JSON (cause 3).

Cause 3: a mapped value broke JSON you typed by hand

If you typed {"message": "{{1.message}}"} into a text field and the message contains a quote or a line break, the result is no longer valid JSON. A form answer like Please call "after lunch" is enough.

Fix: use JSON › Create JSON with a data structure. It escapes quotes and line breaks for you. Don't delete the punctuation from the person's answer to make the error go away.

Cause 4: it was already JSON, and Make had already parsed it

  • A Custom webhook receiving Content-Type: application/json gives you separate fields straight away.
  • HTTP › Make a request with Parse response set to Yes gives you a parsed Data collection.

If you map that collection into Parse JSON, you're parsing something that is no longer a JSON string. Fix: remove Parse JSON and map the fields directly. See Make webhook JSON.

Cause 5: an HTML page instead of JSON

If the value starts with <!DOCTYPE html> or <html>, the API sent back an error or login page. In the HTTP module, set Return error if HTTP request fails to Yes. The run then stops at the HTTP module with the real 4xx or 5xx status instead of failing later at Parse JSON.

Cause 6: JavaScript-style "almost JSON"

These look harmless but aren't valid JSON:

{"email": "lead@example.com",}      <- trailing comma
{'email': 'lead@example.com'}       <- single quotes
{email: "lead@example.com"}         <- unquoted key

The valid version is {"email": "lead@example.com"}. Fix the producer (your script, your prompt or the sending app) rather than stacking replace() calls in Make.

Step 4: Test with a tiny sample in a scratch scenario

  1. Create a new scenario with only JSON › Parse JSON.
  2. Paste a minimal valid sample into JSON string, for example {"email":"lead@example.com","name":"Test Lead"}.
  3. Click Run once. Make builds the data structure from the sample.
  4. Now paste the real value from your failed run. If the sample works and the real value fails, the difference between the two is your bug.

Watch out: arrays multiply your credits

If the JSON string is an array ([ {...}, {...} ]), Parse JSON outputs one bundle per item, and every module after it runs once per item. Each of those runs costs a credit. Ten items going into Add a Row is ten operations. If you need them together (one email, one Slack message), add an Array aggregator after Parse JSON. See Iterator vs aggregator and Make credits explained.

Don't hide bad input with an error handler

  • Retry (formerly Break) is for problems that fix themselves, such as a timeout. Retrying the same invalid string fails the same way every time.
  • Skip (formerly Ignore) drops the bundle and lets the run look green. Use it only if losing that record is acceptable.
  • Resume lets you substitute output. Don't use it to invent data that never arrived.

A scenario that starts with an instant trigger, such as a webhook, is switched off after the first unhandled error. Scheduled scenarios get the Errors before deactivation count (3 by default). A filter in front of Parse JSON plus a fixed producer beats any handler. See Make error handlers.

Common causes at a glance

What you seeLikely causeFix
Missing value of required parameter 'json' only when testing one moduleRun this module onlyRun once on the whole scenario
Missing value… in real runsEmpty upstream output or empty Search Rows bundleFilter: value Exists / Total number of bundles > 0
Source is not valid JSON after an AI module```json fences or extra textOutput Format: JSON schema; or strip fences
Source is not valid JSON with pasted JSONCurly quotesRetype quotes; use Create JSON
Fails only for some form answersQuote or line break in a mapped valueBuild with Create JSON
Parse JSON after a webhook or HTTP moduleAlready parsedRemove Parse JSON; map fields directly
Value starts with <html>API error pageReturn error if HTTP request fails = Yes

Start from a webhook that needs no Parse JSON

Free template: Webhook to Google Sheets, no duplicates. A Custom webhook receives JSON as separate fields, a filter stops incomplete requests, and Search Rows blocks repeats before Add a Row. It's tested in Make on fictional data and works on the Free plan.

Leads coming from a Google Form and going to HubSpot? Lead Router ($19) adds exact-email dedupe, hot-lead routing to Slack and error alerts.

No Make account yet? Create a free Make account (affiliate link). Flowpaja may earn a commission if you sign up through it, at no extra cost to you.

FAQ

Why does Parse JSON work in a full run but fail when I test it alone?
Run this module only doesn't run earlier modules, so everything mapped from them is empty. Use Run once, or paste sample input into the test dialog.
Do I need Parse JSON after an OpenAI module?
Often not, or only once. Set the module's output format to JSON schema or JSON object so the answer is strict JSON. If the output panel already shows separate fields, map them directly. If it shows one text result, parse that text once with Parse JSON. See Make + ChatGPT.
My JSON passes an online validator but Make still says it's invalid. Why?
You probably validated a cleaned-up copy. Copy the value from the run's output bubble (Download output bundles). It may contain hidden line breaks, curly quotes or a leading fence that the chat window or editor removed when you copied it.
How many credits does Parse JSON use?
One credit per operation, like most modules. With an array it outputs several bundles, so the modules after it run, and charge, once per item.

Parse JSON still failing?

Send the exported blueprint and the failed run's input bundle to our Make scenario fix service on Fiverr. No logins needed.

Stuck on an error in your own Make scenario? Make scenario fix / debugging on Fiverr, from $25: send the exported blueprint and a description of the error, no logins needed.

← All guides · All templates

Make, OpenAI, ChatGPT, Google and Google Sheets are trademarks of their owners. Flowpaja is independent and not affiliated with or endorsed by them. Menus, limits and prices change; check the providers' current help.