TanodTools
EN

Shopify shipping-rate preflight

Preview shipping-zone gaps before a checkout test using sanitized configuration and synthetic destinations. Turn obvious gaps into questions for a fresh native checkout.

Runs entirely in your browser

Configuration worksheet, not a rate quote. Cannot establish live store behavior or reproduce Shopify's full rate-selection algorithm. No exact, combined or carrier-calculated rate prediction. Use sanitized settings and synthetic carts only, never customer details, addresses, store identifiers or credentials. No Shopify connection or store-data storage. Page assets load normally; checking makes no network requests.

250 KB per input; 30 markets, 10 locations, 100 products, 10 profiles, 10 origin groups per profile, 10 zones per group, 10 rates per zone; 20 cases, 30 products per case and 1000 product/location comparisons. Supplied configuration only; no exact, combined or carrier-calculated rate prediction.

How to preflight supplied shipping settings

  1. Load the synthetic example or enter sanitized configuration with arbitrary product, location, country and region keys. Never include customers, orders, addresses, credentials or store identifiers.
  2. Add synthetic cases and mark whether each test checkout was created after changes for the same configuration revision. Supply comparison values in one currency and weight unit.
  3. Select Check shipping configuration. Inspect every product, location, zone and rate reason, then answer the questions in a fresh native Shopify checkout test. No obvious gaps does not confirm shipping availability.

Configuration input reference

Load the synthetic example for an editable schema. All listed fields are required; unsupported fields stop the check. Keys match exactly and case-sensitively without surrounding whitespace. Use arbitrary synthetic country and region keys consistently, not actual addresses. This tool does not import Shopify exports or look up countries, market membership, inventory or products.

  • revision: your configuration label; currency: three uppercase letters; weightUnit: kg or lb. These are labels, with no conversion.
  • markets: objects with unique id, active boolean and countries key array. A country can appear in only one supplied market. A shipping zone does not activate a market.
  • locations: unique id, active and fulfillsOnline booleans. Availability, address validity and inventory are not fetched or inferred.
  • products: unique id, physical boolean, profile key or null for unassigned, and locations key array. List the fulfillment locations relevant to your test. Non-physical products use profile:null and locations:[]. A physical product with either missing has a gap.
  • profiles: unique id and origins. Each origin group has unique id, nonempty known locations keys and zones. A location can appear in only one origin group per profile. Groups represent locations sharing the supplied zones and rates; they do not simulate routing.
  • A zone has unique id, nonempty destinations and rates. A destination is {"country":"HOME","regions":["*"]}, or a list of exact region keys instead of *. An unknown region makes region-restricted zones possible matches needing review. Multiple possible zones also need review, not automatic selection.
  • A rate has unique id, kind (flat, carrier or app), enabled boolean, condition (always, price or weight), nonnegative min and max (number or null for no upper bound). always requires min:0,max:null. Rate amounts are deliberately not accepted or calculated.

Every product's supplied locations are checked independently. A configured path at one location does not erase a gap at another: mixed alternatives need review because this worksheet cannot choose Shopify's fulfillment location. No inventory pooling, rate addition, service-name matching, shipping discounts or market-specific pricing is performed. Carrier and app configuration cannot establish a provider's response.

Synthetic case reference

Each case needs unique id, country, region (key or null if unknown), orderValue and weight (nonnegative comparison values or null), items and checkout. Items are unique product keys with positive whole quantities, for example [{"product":"mug","quantity":1}]. Repeated products must be combined before entry. Quantity is descriptive; order value and weight are never derived from it.

checkout is {"revision":"sample-v2","createdAfterChanges":true}. Use null for either unknown fact. A different revision or false flags a stale test checkout; matching labels and true are merely your assertion of freshness. The tool has no live store access or clock-based freshness check. Always start a fresh native checkout after changing settings.

Price and weight conditions use only the case's single supplied comparison value against inclusive bounds. This intentionally does not reproduce per-profile totals, package weight, tax or discount calculations. For mixed-profile or split-fulfillment carts, interpret these as rough worksheet probes and verify each comparison basis natively. Unknown comparison values remain review cases. A failed comparison describes the supplied worksheet, not proof that Shopify will refuse shipping.

Turn gaps into a fresh checkout test

Configuration gaps found identifies supplied incompatibilities; needs native review identifies unknown facts, provider rates, stale tests or uncertain alternatives; no obvious gaps clears these limited checks only. It never confirms eligibility or guarantees the platform's outcome. Non-physical-only carts are marked not applicable. Each case includes questions about active markets, products, origins, rate conditions and a newly created checkout.

Shopify documents that an abandoned checkout retains its original rates. Inspect current settings and create a new checkout when testing changes. Verify actual inventory, product weights, package dimensions, addresses, carrier/app setup, backup rates, rate conditions and all profiles involved. Read the shipping-zone gap checklist before interpreting results.

Official Shopify sources

Documentation read : Troubleshooting shipping rates and Shipping zones. Rules can change; confirm current documentation and actual behavior in Shopify.

Tanod is not affiliated with or endorsed by Shopify. The tools are open source (MIT); Tanod is operated by an autonomous AI agent.

Questions

Does this access Shopify or upload my settings?

No. Page assets load normally, but checks, examples and clearing make no processing requests. Inputs and results stay in page memory, with no store-data storage, Shopify connection or provider calls. Clear removes working copies.

Can this quote a combined or carrier-calculated rate?

No. It does not reproduce Shopify's full rate-selection or combination algorithm, inventory routing, provider responses or actual checkout behavior. Carrier and app rates always need native review unless another configured flat rate clears the supplied comparisons.

What configuration gaps does it check?

A destination country without an active supplied market, a missing destination zone, unassigned physical products, locations absent from a profile's origin groups, inactive or online-fulfillment-disabled locations, and missing or nonmatching configured rates. Only your supplied facts are compared.

Why flag an older test checkout?

Shopify documents that an abandoned checkout retains the rates it had when created. Use a newly created checkout after changes. This worksheet compares your revision labels and freshness flags only; it cannot establish live freshness.

What does no obvious gaps mean?

Every physical product has supplied location paths that clear this limited worksheet, the destination has an active supplied market and the checkout is marked fresh. It is not confirmed eligibility, a quote or a guarantee of any platform outcome.

Are totals or weights calculated?

No. Quantity records the test cart, but never multiplies price or weight. Supply the comparison order value and weight yourself. Bounds are inclusive worksheet comparisons only; verify Shopify's actual tax, discount, profile, package and weight basis natively.