Metafield size limits & many active campaigns
Why some campaigns stop showing after you add more, the metafield warning banner, and how each feature handles overflow.
If you have ever added a few more campaigns and noticed that some of them quietly stopped appearing at checkout, you have almost certainly hit Shopify's metafield size limit. Llama Upsells stores your campaign rules, discounts, restrictions, and product limiters inside Shopify metafields so the checkout extensions can read them instantly, with no call back to the app. Those metafields have a hard character cap, and with enough active rules you can reach it. This page explains the limit, the warning you will see, exactly how each feature behaves when the limit is approached, and how to bring your payload back under control.
Why metafields at all? Shopify's checkout runs your rules inside sandboxed extensions that cannot make backend calls. The app pushes a compact copy of every active rule into a metafield, and the extension reads it at cart and checkout time. That is what makes enforcement fast and reliable — but it also means everything has to fit inside Shopify's size budget.
The 10,000-character limit
Shopify caps each metafield value the checkout extensions read at 10,000 characters. This is a hard platform limit, not an app setting — you cannot raise it.
To stay safely under it, the app keeps its own internal safety margin and treats roughly 9,990 characters as the working ceiling. The extra headroom prevents an off-by-a-few-bytes write from being rejected by Shopify.
To make your rules fit, the app compresses the data before it writes it. Verbose field names are replaced with one- and two-letter keys (for example, the campaign's funnel type, condition groups, and rules are all stored under short keys instead of full words). Compression typically reduces the stored size by 40–60%.
Compression buys you a lot of room, but it is not unlimited. Each active campaign — especially one with many conditions, rule groups, markets, and customer tags — still consumes characters. Add enough complex campaigns and even the compressed payload can approach the 9,990-character ceiling. When it does, the storefront can only read what fits, and the rules that did not fit may stop displaying.
The admin warning banner
The app continuously tracks how full your metafield is, so you are not left guessing. When your stored payload approaches the limit, the admin shows a warning banner about metafield size.
Behind the banner, the app measures the current value and reports four things:
| Reported value | What it means |
|---|---|
| Limit | The ceiling the app is measuring against (10,000 characters). |
| Current size | How many characters your active rules currently occupy. |
| Percentage | Current size as a percentage of the limit — your "how full am I" gauge. |
| Exceeded | A simple yes/no flag for whether you are over the limit. |
The banner appears in your Llama Upsells admin near your campaign and rules management area. Treat it as an early warning, not an error message.
Act when you see the warning, not after. The banner is designed to appear before you exceed the limit. If you wait until the payload is fully over, some of your newest campaigns may already have stopped displaying at checkout. Reduce your payload (see How to reduce your payload) as soon as the banner shows.
What happens if you exceed it
Not every feature handles overflow the same way. Some warn you and stop there, one strips fields to stay small, and only one — automatic product discounts — actually splits its data across multiple containers on its own. Here is the behavior feature by feature.
| Feature | Where it's stored | What happens near/over the limit |
|---|---|---|
| Campaigns | Shop metafield | The admin shows the warning banner. There is no automatic split — if the compressed campaigns exceed the limit, some campaigns may not display on the storefront. You must reduce the payload yourself. |
| Cart restrictions | Validation metafield | The app strips out non-essential fields (titles, IDs, timestamps) so restrictions stay small. No automatic split. In practice restrictions rarely approach the limit. |
| Product limiter | Shop metafield | The admin shows the warning banner. No automatic split — reduce the number of product, variant, or SKU limits if you approach the cap. |
| Automatic product discounts | Discount node metafields | The only feature that automatically splits its data across multiple Shopify discount nodes when one would exceed the limit. No merchant action is required. |
| Tier discounts | Discount node metafield | One configuration per discount node, so each is naturally small and bounded. No split needed. |
| Shipping discounts | Discount node metafield | One configuration per discount node, so each is naturally small and bounded. No split needed. |
The key thing to remember: only automatic product discounts auto-split. Campaigns do not. If your campaign payload overflows, the app will warn you, but it will not silently spread campaigns across extra containers — so it is on you to deactivate or simplify campaigns to bring the size down. The discount system splits automatically only because a single discount metafield can hold the conditions and variants from every campaign at once, which makes it the most likely to overflow.
How to reduce your payload
If the warning banner is showing — or you simply want to leave headroom for future campaigns — every item below removes stored characters. Work down the list until the banner clears.
Deactivate campaigns you no longer use
Only active campaigns are written to the metafield. An old seasonal campaign you forgot to switch off is still taking up space. Open your campaign list and deactivate anything that should not be running. Deactivating does not delete the campaign — you can reactivate it later.
Simplify over-complex conditions
A campaign with many rule groups and many rules inside each group costs far more characters than a simple one. Trim conditions to the minimum that expresses your intent: fewer rule groups, fewer rules per group, and fewer values per rule. See Complex conditions for how condition cost adds up.
Consolidate overlapping campaigns
If two or three campaigns target nearly the same audience or product set, you can often fold them into one. One campaign with a well-built condition usually stores less than several near-duplicate campaigns.
Remove unused markets and tags
Each market and each customer tag attached to a campaign's targeting is stored. If you have markets or tags listed that you no longer use, removing them from the campaign's targeting settings shaves characters off every campaign that referenced them.
After you reduce the payload, use the Sync action on a campaign to force the metafield to refresh immediately. Otherwise the storefront keeps reading the previous value until the next save or scheduled sync. See Sync delays.
Recipe: newest campaigns vanished after a big launch
You built out a holiday push — a batch of new campaigns, each with several conditions and a list of markets — and afterward your most recently added campaigns are not showing at checkout, while the older ones still work.
Check the warning banner
Open your Llama Upsells admin. If the metafield warning banner is showing — especially if it reports you are over the limit — this is the cause. The newest campaigns are the ones that did not fit.
Deactivate or simplify
Deactivate any campaigns you do not need right now, and trim conditions, markets, and tags on the ones you keep. Watch the reported percentage drop back under the limit.
Sync and retest
Run Sync on a campaign to push the smaller payload, wait a few seconds, then reload the storefront and confirm the previously missing campaigns now appear.
Note on auto-split discount nodes
Because automatic product discounts split across multiple Shopify discount nodes when they grow large, you may notice Shopify automatic discounts titled Llama Upsells - N - DO NOT MODIFY (where N is a number) in your Shopify admin under Discounts.
These are app-managed split containers. The app creates them automatically to hold your discount configuration when one node is not enough, and it keeps them in sync for you.
Do not edit, rename, or delete these DO NOT MODIFY discount nodes by hand. They are written and maintained entirely by the app — manual changes can break how discounts apply at checkout. When a node is no longer needed (for example, after you remove campaigns and the data shrinks), the app cleans up the unused nodes automatically. Leave them alone.
Symptom → cause → fix
| Symptom | Likely cause | Fix |
|---|---|---|
| Newest campaigns are not displaying at checkout | The campaign metafield is over the size limit, so the rules that did not fit are dropped | Deactivate or simplify campaigns to reduce the payload, then run Sync |
A Shopify discount titled Llama Upsells - N - DO NOT MODIFY appeared | Normal behavior — automatic product discounts split across discount nodes when large | Leave it alone; the app manages and cleans up these nodes for you |
| A warning banner about metafield size is showing | Your active rules are approaching the character limit | Reduce the number of active campaigns and simplify their conditions before you exceed it |
Related
How features interact
How campaigns sync to metafields, plus what overrides what when features overlap.
Sync delays
Why a change takes a moment to reach the storefront, and how to force a refresh.
Statuses & health
How to read campaign status and the app's health indicators.
Complex conditions
How rule groups and rules add up — and how to keep conditions lean.
