Bulk update shipping rates and read the results
Change the shipping rate on many subscriptions at once, and understand what each result row means
You changed your shipping rates in Shopify, ran a bulk update to move your subscribers to the new rate, and now the results page is full of "Subscription unchanged" or "Internal server error, please contact us". Most of the time nothing is broken. This article explains what each result means and what, if anything, you need to do.
Some background: existing subscriptions keep the shipping rate they were created with. When you change your shipping profiles in Shopify, existing subscriptions don't pick up the new rate by themselves (see How a subscription's shipping rate is set and when it changes). The Update shipping rate bulk update moves many subscriptions to a new rate at once. For the general bulk update steps (choosing subscriptions, scheduling, confirming), see Bulk updates.
Symptoms
You may be here because you saw one of these after a shipping rate bulk update:
- Rows marked "Subscription unchanged" (Awtomic).
- Rows marked "Internal server error, please contact us" (Awtomic).
- "The rate must be a number equal or higher than 0" (Awtomic) when you set up the update.
- A Shopify error message in the Details column of a row.
- "Most of my subscriptions failed" or "90% failed."
- "The bulk update is stuck in processing."
- "The counter won't go past 86."
- "Everyone was moved to the cheapest rate, not the one I wanted."
Quick checks
- Did you pick the right mode? In the bulk update form, under Update shipping rate, check whether you chose Refresh latest rate from Shopify delivery profiles or Define a custom rate. See The two modes below.
- Are most of the "problem" rows marked Ignored rather than Error? Ignored rows were already correct, or have no shipping address. See Ignored: "Subscription unchanged" under Causes and fixes.
- Do the Error rows belong to prepaid subscriptions? Open one from the row. Prepaid subscriptions are skipped on purpose. See Prepaid subscription skipped under Causes and fixes.
- For an Error row that isn't prepaid, does Shopify offer a shipping rate for that subscription's address and products? Open the subscription, select Edit shipping rate on the shipping row, and look at the list. If you see only Custom shipping rate, Shopify has no rate for it. See No shipping rates for subscription products.
- Is the bulk update still running? In Awtomic, go to Subscriptions → Bulk updates and open the Historical tab. Large updates can take hours, so check here before you start another one.
The two modes
In Awtomic, start a bulk update as described in Bulk updates. In Bulk update details, choose Update shipping rate, then choose one of the two modes. ("Delivery profiles" in the first mode's name is the developer term for shipping profiles.)
| Mode | What it does | List label |
|---|---|---|
| Refresh latest rate from Shopify delivery profiles | Asks Shopify for the rate again for each subscription's address and products. For subscriptions, Shopify returns only one shipping rate per shipping profile: the cheapest rate for that address. If the subscription already has that rate, it gets today's price. If it has a more expensive rate, it moves to the cheapest one. Both the price and the rate name are updated. | "Update shipping rate to latest" |
| Define a custom rate | Applies one fixed amount to every selected subscription, whatever its contents, address, or delivery method. The rate name doesn't change. | "Update shipping rate to {value}" |
The custom rate must be 0 or more. Otherwise the form shows "The rate must be a number equal or higher than 0". Enter 0 for free shipping.
Only customer subscriptions are updated. Records Awtomic creates behind the scenes, to bill one-time card-on-file purchases or to save a customer's card, are never included.
What each mode does for different kinds of subscriptions:
| Subscription | Refresh latest rate | Define a custom rate |
|---|---|---|
| Shipping, current rate is the cheapest for the address | Same rate, today's price | Your fixed amount |
| Shipping, current rate is more expensive, or was removed from Shopify | Moved to the cheapest rate Shopify returns | Your fixed amount, old rate name kept |
| Shipping, current rate is a custom rate | Replaced by a Shopify rate | Your fixed amount, recorded as the new custom rate |
| Local delivery | Current local delivery price from Shopify | Your fixed amount |
| Local pickup | Set to $0 | Set to $0 |
| Prepaid | Skipped | Skipped |
| No shipping address | Ignored | Your fixed amount |
ImportantBulk shipping rate updates set local pickup subscriptions to $0, in both modes.
The note in the bulk update form says pickup gets the latest rate from Shopify, but the update sets $0.
Leave pickup subscriptions out of the bulk update if they pay a pickup fee.
If your store has membership shipping discounts turned on, the refreshed rate also gets the member's shipping benefit.
ImportantRefresh can't move everyone to a rate you name, such as "Express".
Shopify returns only the cheapest shipping rate for each subscription's address, so refresh moves every shipping subscription to that rate.
Customers who paid for a more expensive rate end up on the cheapest one.
To keep a pricier rate, use Define a custom rate, or set a custom rate on each subscription.
Shopify has said that offering several rates per delivery type is rolling out. Until it reaches your store, this is how refresh behaves.
This matches Shopify's own rule for subscriptions: "After the initial delivery, recurring shipments default to the least expensive available shipping method" (Shopify's shipping rules for recurring subscription shipments). See Why subscriptions use the cheapest shipping rate.
Before you run it
- Test on a small group first. Filter your subscription list to 3 to 5 subscriptions that represent the change, then run the bulk update on Selected. Check them (see Check your results below) before you run the full update.
- Pick the faster mode when you can. A fixed amount is quicker than a refresh, because a refresh asks Shopify for rates for every subscription.
- Expect it to take time. Shopify limits how many requests an app can make to your store per minute (its API limit), and the update has to stay under it. A large store can take from several minutes to several hours. Other bulk updates wait in the queue until this one finishes.
- Know what is skipped. Prepaid subscriptions are skipped. Pickup subscriptions are set to $0.
- Paused subscriptions. If your filter includes paused subscriptions, test one first.
- Make sure the new rate will stick. A later edit by the customer or your staff can make Awtomic ask Shopify for the rate again, which can replace the rate you set. Reactivating a paused subscription doesn't re-check the rate. See How a subscription's shipping rate is set and when it changes.
Read the results
Open the bulk update to see each subscription's result. In Awtomic, go to Subscriptions, select Bulk updates, open the Historical tab, and select the bulk update. Each row shows the subscription ID, a badge (Success, Ignored, or Error), and a Details message.
Behind each result is a log code: a short technical label such as SC_SHIPPING_RATE_CHANGED that Awtomic records for that row. You don't need to know them to use the results page. They are listed here because support, and AI agents, use them to tell apart results that share the same Details text.
| Badge | Details shown | Log code | What it means | What to do |
|---|---|---|---|---|
| Success | "Successfully updated" | SC_SHIPPING_RATE_CHANGED | The rate changed. | Nothing. Spot-check a few. |
| Ignored | "Subscription unchanged" | SC_SHIPPING_RATE_UNCHANGED | The subscription already had this rate and price. | Nothing. |
| Ignored | "Subscription unchanged" | SC_NO_DELIVERY_METHOD_ADDRESS | Refresh mode only. A shipping or local delivery subscription has no address, or its address has no country. | Add or fix the address, then run the update again for it. |
| Error | "Internal server error, please contact us" | NO_SHIPPING_RATE_FOUND | Shopify returned no rate for this address and these products. | Fix the shipping profile, then retry. |
| Error | "Internal server error, please contact us" | INVALID_SC_PREPAID | A prepaid subscription. Skipped on purpose. | Nothing. |
| Error | Shopify's own message | SHOPIFY_ERROR | Shopify rejected the change. | Read the message and fix the cause. |
| Error | "Internal server error, please contact us" | (none) | A real failure. | Contact support. |
Important"Internal server error, please contact us" doesn't always mean something broke.
In a shipping rate bulk update, it usually means one of three things: Shopify has no rate for that address, the subscription is prepaid, or a real failure.
Work out which one before you contact support. The sections below show how.
Select Export to download the results as a CSV. It has a Status column (success or error; Ignored rows also show as error) and an Error Codes column with the log codes from the table above, such as SC_SHIPPING_RATE_UNCHANGED. It doesn't include the Details text. Use the Error Codes column to tell Ignored rows from real errors.
Causes and fixes
One section per result. Each starts with what it means in plain words and what to do next.
SC_SHIPPING_RATE_CHANGED: rate updated
SC_SHIPPING_RATE_CHANGED: rate updatedWhat it means: the update worked. The subscription now has the new rate.
What to do: nothing. Awtomic adds an entry to the subscription's timeline, for example "Shipping rate updated from {from} to {to} via {origin}.", with the bulk update's ID. Spot-check a few (see Check your results).
Ignored: "Subscription unchanged"
Two different log codes show this same text. Neither one is a failure.
SC_SHIPPING_RATE_UNCHANGED
SC_SHIPPING_RATE_UNCHANGEDWhat it means: the subscription already had the rate and price this update would set, so there was nothing to change. This is the most common result.
What to do: nothing.
SC_NO_DELIVERY_METHOD_ADDRESS
SC_NO_DELIVERY_METHOD_ADDRESSWhat it means: a shipping or local delivery subscription has no address, or its address has no country, so in refresh mode Awtomic couldn't ask Shopify for a rate. Local pickup subscriptions don't land here. They are set to $0 first, so they show Success (price changed to $0) or "Subscription unchanged" with SC_SHIPPING_RATE_UNCHANGED (already $0).
What to do: add or fix the address on the subscription (see Changing the shipping address), then check its rate on the shipping row. For pickup and local delivery, see Local pickup and local delivery for subscriptions.
NO_SHIPPING_RATE_FOUND: no rate for this address
NO_SHIPPING_RATE_FOUND: no rate for this addressWhat it means: Shopify has no shipping rate for this subscription's address and products, so there was nothing to update it to. The subscription keeps its old rate. Common causes:
- The address is in a shipping zone your profile doesn't cover.
- A product isn't stocked at a location in the profile.
- A rate condition (weight or order price) excludes this subscription.
How to confirm: open the subscription and select Edit shipping rate on the shipping row. If the list shows only Custom shipping rate, Shopify has no rate.
What to do: fix the profile in Shopify. No shipping rates for subscription products walks through it, and Shopify's guide to troubleshoot missing shipping rates at checkout has a checklist. Then use Retry errors.
INVALID_SC_PREPAID: prepaid subscription skipped
INVALID_SC_PREPAID: prepaid subscription skippedWhat it means: this is a prepaid subscription. Bulk shipping updates never change prepaid subscriptions. This is by design, not a failure.
What to do: nothing, unless you need this one subscriber on the new rate. To change one prepaid subscription, see Edit the shipping rate in a subscription.
SHOPIFY_ERROR: Shopify rejected the change
SHOPIFY_ERROR: Shopify rejected the changeWhat it means: Awtomic sent the change and Shopify refused it. The Details column shows Shopify's own message. If there are several, they are separated by semicolons.
What to do: fix what the message describes, then use Retry errors. If you don't understand the message, send it to support.
Real failures (no log code)
What it means: something failed for a reason that isn't listed above. It's a real failure if the row shows "Internal server error, please contact us", the subscription isn't prepaid, and Shopify does offer a rate for it (check 4 in Quick checks).
What to do: wait for the update to finish. Awtomic retries these automatically while it runs. If they still fail at the end, contact support with the details in Still stuck? Send support this.
Progress and "stuck" bulk updates
The detail page shows a count such as "120 of 500 processed". A large refresh can sit at the same number for a long time while it waits for Shopify's API limit to reset. That is normal.
If the count stops below the total, the rest may be Ignored or Error rows. The counter counts only rows marked Success. Open the update in the Historical tab when it completes to see the result for every row.
If a bulk update shows no progress for more than a day, contact support with the bulk update ID.
Retry errors
Retry errors runs the update again for the Error rows. It also reruns the Ignored rows, because Awtomic stores them the same way. That is harmless: they come back unchanged. Use it after you fix the cause, for example after you add a missing zone or location. Retrying without a fix gives the same result. Prepaid rows will always fail again, so you can ignore them.
Check your results
- Open 2 or 3 subscriptions marked Success. Check that the shipping row shows the rate name and price you expected.
- Check the subscription's timeline for the "Shipping rate updated from … to …" entry.
- Open one Ignored row and one Error row. Confirm they match the reasons in the table above.
- If you used Define a custom rate, remember that the rate name didn't change. If your fulfillment partner routes by rate name, see Wrong shipping method name on subscription orders.
- Wait for the next renewal on a test subscription and check the order's shipping line.
What Shopify controls
| Behavior | Owner | Workaround |
|---|---|---|
| Which rates exist for an address and its products | Shopify (your shipping profile) | Fix zones, locations, and rate conditions in Shopify. See set up shipping zones and rates |
| Only the cheapest shipping rate is returned for a subscription | Shopify | Design rates so the cheapest one is the one you want, or use a custom rate |
| Renewals bill the rate stored on the subscription | Shopify | Run this bulk update after you change rates |
| How fast the update runs (API limits) | Shopify | Use a fixed amount, or run updates in smaller groups |
| Refresh can't target a named rate | Awtomic | Use Define a custom rate, or edit subscriptions one at a time |
| Prepaid subscriptions are skipped | Awtomic (by design) | Edit them one at a time |
| Unclear "Internal server error" text for expected outcomes | Awtomic | Use the table in Read the results above |
If you use an AI agent
- Give your agent the bulk update ID and ask it to sort the rows by badge, then map them to the log codes in this article.
- For each Error row, ask it to check in the Shopify admin whether that subscription is prepaid, and whether the address is covered by a zone in the profile that holds the subscription's plan.
- Ask it to compare a few Success rows against the rate you expected.
- See Debug subscription shipping with your AI agent.
Still stuck? Send support this
- Your shop domain (yourstore.myshopify.com).
- The bulk update ID.
- The mode you used and, for a custom rate, the amount.
- 2 or 3 subscription IDs with Error rows, and the exact Details text for each.
- Whether those subscriptions are prepaid or local pickup.
- A screenshot of Edit shipping rate for one of those subscriptions, showing which rates Shopify offers.
- Screenshots of the plan's Enable subscription shipping setting and the profile's zones and locations.
- What you already checked from this article.
Related
- Bulk updates
- How a subscription's shipping rate is set and when it changes
- No shipping rates for subscription products
- Why subscriptions use the cheapest shipping rate
- Local pickup and local delivery for subscriptions
- Edit the shipping rate in a subscription
- Subscription shipping troubleshooting
- Debug subscription shipping with your AI agent
Updated 5 days ago
