Shopify shipping rates by postcode let South African online stores charge different amounts for different delivery areas — essential when the courier cost to Sandton and the courier cost to a rural address in Limpopo can differ by a factor of two or more. If you are building or scaling your Shopify store in South Africa, the first thing to understand is that Shopify's native shipping zones stop at province level. They cannot target specific postcodes without an app or a deliberate workaround.

South Africa's 4-digit postcode system makes geographic rate logic entirely practical — 2196 is Sandton, 8001 is Cape Town CBD, 4001 is Durban central, 8801 is Upington. The delivery cost difference between a metro suburb and a small Northern Cape town is often significant enough to make individual orders unprofitable at a single flat rate. Yet Shopify's native settings give you nine provinces to work with, not 3,700 postcodes.

This guide covers the three paths to postcode-level rate control on Shopify, the plan requirements that determine which path is open to you, the apps that work for SA stores, and the exact steps for configuring each approach — from a five-minute province-zone setup to a full postcode app installation. Understanding Shopify postcode shipping rates starts with knowing where the native platform stops and where a third-party app takes over.

Quick Answer

Shopify shipping rates by postcode are not available through native Shopify settings — zones are limited to countries and provinces. South African stores have three options: configure province-level flat rates at no extra cost, install a postcode shipping app that connects via the Carrier Service API (plan-dependent), or use delivery customisation rules that reshape which methods appear without performing a live rate calculation. The right path depends on your Shopify plan and how meaningfully your courier costs vary by delivery area.

Not sure which shipping path fits your store?

Send us your current setup and we will show you which configuration gives you accurate rates without overcomplicating your checkout.

Get a free shipping review

Native Zones: Why Province Is as Granular as It Gets

Shopify's shipping zones are groups of countries or regions that share the same shipping rates. For South Africa, "region" means province — you can create a zone for Western Cape, add rates, and those rates apply to every address in that province, from the Cape Town CBD to a sheep farm in the Karoo. There is no native field for a postcode range, a suburb list, or a metro-versus-rural split.

This matters because South Africa's provinces are not natural shipping zones. Western Cape stretches from urban Cape Town to remote towns hours outside the city. KwaZulu-Natal covers Durban's dense metro and isolated coastal communities. A single province-level rate means you are either overcharging metro customers or subsidising every outlying delivery — and at scale, both errors compound quickly.

The Shopify Help Center's carrier-calculated rate options — USPS, UPS, Canada Post, Royal Mail — have no South African equivalent built in. No South African courier (The Courier Guy, Aramex, RAM, Dawn Wing, Pargo) is natively supported by Shopify's carrier service. This means live, courier-calculated rates at checkout for SA stores always require a third-party app, regardless of your plan tier.

Shopify shipping zones South Africa merchants can configure through native settings are capped at province level — province-level zones are the maximum native granularity, and SA courier integration requires a third-party app.

The native ceiling for SA stores

Shopify's built-in zone system stops at nine SA provinces. It cannot split metro from rural within a province, cannot target specific postcodes, and has no built-in rate lookup for any South African courier. Every postcode-level rate — and every live SA courier rate at checkout — requires a third-party app.

Three Ways to Set Shopify Shipping Rates by Postcode

Three configuration paths let South African stores set Shopify shipping rates by postcode or by province: flat rates built into Shopify admin with no app required; rates via a third-party app that uses Shopify's carrier-calculated shipping API; and delivery customisation rules that show or hide methods based on postcode without performing a live rate calculation.

PathGranularityApp neededPlan requirementBest for
Province-level flat ratesProvince (9 zones max)NoAny planSimple rate structures, single-metro stores
Postcode app (carrier-calculated)Postcode, suburb, or numeric rangeYesAnnual Grow or Advanced/PlusStores needing metro / regional / rural splits
Delivery customisationCan show/hide methods by postcodeYes (customisation API)Any planRestricting methods, not calculating new prices

Path 1 — Province flat rates: You create zones per province (or group provinces with similar courier costs), attach a flat rate, and Shopify routes the correct rate at checkout. No app, no additional monthly cost, and it works on every plan including Basic. The trade-off is coarse granularity — every customer in KwaZulu-Natal pays the same rate regardless of whether their delivery address is in the Durban CBD or a rural area three hours away.

Path 2 — Postcode app with carrier-calculated shipping: Apps like Postcode Shipping let you define postcode groups, assign rate rules per group, and display the correct rate at checkout. These apps connect to Shopify via the Carrier Service API — specifically the custom carrier service connection, which is plan-restricted and distinct from Shopify's built-in carrier-calculated rates (available on all plans for carriers like USPS and DHL Express). Bob Go, the leading SA courier platform, connects Shopify directly to SA couriers with live rate lookup at checkout via the same Carrier Service API.

Both require Carrier Service API access to be enabled on your store. Before choosing any postcode shipping app, Shopify merchants on Basic need to understand this clearly: the Basic plan does not include the Carrier Service API, so postcode apps that rely on it will not display rates at checkout.

Path 3 — Delivery customisation: Shopify's delivery customisation API lets apps hide, sort, or rename existing shipping methods at checkout based on conditions — including postcode. You could hide a "same-day delivery" method for postcodes outside your same-day zone. What it cannot do is calculate a new price. It is a useful complement to Path 1 (adding postcode-level method control on top of province flat rates), not a replacement for Path 2.

Which path to start with

Start with province flat rates. Add a postcode app only when the metro/rural rate gap is creating consistent losses on a meaningful share of orders. Delivery customisations work on any plan — use them to control method visibility alongside whichever flat-rate or app-based approach you choose.

Plan Requirements for App-Based Postcode Logic

Whether a postcode shipping app works at checkout depends on your Shopify plan — the Carrier Service API (the custom carrier connection most postcode apps rely on for dynamic rate display) is not available on the Basic plan and costs extra on a monthly Grow subscription.

PlanMonthly priceAnnual priceCarrier-calculated shipping
Starter$5/mo—Not available
Basic$39/mo$29/moNot available
Grow (monthly)$105/mo + $20† CCS add-on = $125/mo—Add-on at $20/mo extra†
Grow (annual)—$79/moIncluded
Advanced$399/mo$299/moIncluded
Plusfrom $2,500/mo (1-yr contract min.)from $2,300/mo (3-year)Included

† $20/mo add-on price documented by third-party Shopify partners; verify current pricing at Settings → Subscription before activating.

SA-specific note: Shopify Payments is not available in South Africa as of mid-2026. You will use a third-party payment gateway — PayFast, Peach Payments, PayGate, or Ozow — and pay the applicable transaction fee: 2% on Basic, 1% on Grow, 0.6% on Advanced. This does not affect shipping configuration, but it is a factor in total cost comparisons across plans. All plan prices above are in USD. The SA Digital Cost Index uses a calculation assumption of R16.42/USD (August 2026) — not a live exchange rate.

The practical implication: a store on Basic that wants true postcode-level rate calculation needs to upgrade. The most cost-effective path to carrier-calculated shipping is annual Grow at $79/mo with CCS included, versus $125/mo all-in on a monthly Grow subscription. Apps that use delivery customisations instead of the Carrier Service API can work on Basic, but they control method visibility, not price calculation.

The carrier-calculated shipping Shopify exposes through the Carrier Service API is the mechanism postcode rate apps rely on to display live rates at checkout. To activate it, your store must be on an eligible plan or you must add the CCS add-on — documented by third-party Shopify partners at $20/month — through your subscription settings. The setting is in Settings > Shipping and delivery > Carrier-calculated rates.

The plan threshold in plain terms

Annual Grow ($79/mo) is the minimum plan for a postcode shipping app that calculates rates at checkout. Monthly Grow adds $20 on top for the Carrier Service API activation. Basic cannot use postcode rate apps that rely on the Carrier Service API — only province flat rates or delivery customisation tools.

SA Courier Bands and How to Set Your Zone Pricing

South African couriers typically price delivery across three rate bands — local (within the same metro area), main centres (between major cities), and regional or outlying (smaller towns and rural addresses) — and building your Shopify shipping rates by postcode zone around these same three tiers means your checkout rates will match what you actually pay to ship.

The classification matters because "regional" and "outlying" areas attract meaningfully higher courier tariffs than metro-to-metro routes. A parcel shipped from a Johannesburg warehouse to Cape Town (a main-centre route) typically costs less than the same parcel shipped to a small town in the Northern Cape — the remote area surcharge is real, and it compounds across multiple orders a week. Bob Go, The Courier Guy, and Aramex all use variants of this three-band structure, even when they describe the tiers differently in their rate cards.

For Shopify postcode-based shipping rates, these three bands translate directly into the zone groups you configure in your app:

  • Metro/local: Postcodes within your primary fulfilment city. For Johannesburg-based stores, the 2000–2199 range covers much of greater Johannesburg including Sandton (2196). Cape Town CBD sits around 8001. Lowest rate tier.
  • Main centres: Major cities outside your base — Durban (4001), Pretoria (0001), Port Elizabeth (6001), East London (5201), Bloemfontein (9301). Mid-rate tier, reflecting metro-to-metro courier costs.
  • Regional/outlying: All other South African addresses — smaller towns, farming areas, postcode ranges outside the major metro corridors. Highest rate tier.

Pargo and PUDO (locker-to-locker networks) are worth configuring as a separate lower-cost method for regional and outlying customers. Parcel lockers reduce courier costs significantly for non-metro deliveries, and displaying the option at checkout gives rural customers an affordable alternative rather than facing a full outlying-rate door-to-door price.

Match zones to courier rate bands

SA couriers classify delivery by local, main centre, and regional/outlying. Use these same three tiers as your postcode zone groups in Shopify. Any more granularity is rarely necessary — and any less means some orders will cost you money. Add Pargo or PUDO as a fourth option to give outlying customers a more affordable delivery path.

Losing margin on rural orders without knowing it?

We will review your shipping profile and show you where the rate gaps are — no obligation, response within 24 hours.

Request a free rate review

Province Zone Setup in Five Steps

Setting province-level zones in Shopify admin takes five minutes, requires no app, and works on every plan — it is the right starting point for stores with straightforward rate logic, limited delivery areas, or insufficient order history to justify postcode-level precision.

  1. Go to Settings > Shipping and delivery in your Shopify admin and select the shipping profile to edit, or create a new one for a product category with different cost requirements.
  2. Locate your South Africa zone and click Edit zone. If you only have one South Africa zone with one rate, you are charging every SA customer the same — that is the baseline to improve.
  3. Create separate zones for each cost tier. A practical three-zone structure: Group Gauteng, Western Cape, and KwaZulu-Natal (urban) together as your metro-heavy zone; Eastern Cape and North West as secondary; Limpopo, Mpumalanga, Northern Cape, and Free State as outlying. Name each zone clearly — "SA Metro Provinces", "SA Secondary Provinces", "SA Outlying Provinces".
  4. Add shipping rates to each zone. For each zone, click Add shipping option and configure a flat rate, weight-based rate, or order-value-based rate. Set the price that reflects your actual average courier cost for that zone group plus a buffer for variance.
  5. Test before publishing. Use Shopify's rate preview (available in the shipping settings) to verify a sample address in each province group returns the correct rate. Then place a test order from your store with an address in each zone tier to confirm the rate appears correctly at checkout.

Shipping profiles for different product weights: If you sell both standard-size parcels and large or heavy items with different courier rates, create separate shipping profiles per product category rather than layering multiple weight tiers within one rate table. Shopify shipping profiles let you assign different rate rules to different product groups within the same store.

Postcode App Configuration: Step-by-Step

Adding a postcode-based rate app involves confirming your plan, creating postcode zone groups that mirror your courier's rate bands, configuring rate rules, and testing with real SA addresses before going live — skipping the test step is the most common cause of checkout rate errors after launch. Every postcode shipping app Shopify merchants install falls into one of two categories: apps that use the Carrier Service API for live rate calculation (plan-dependent), and apps that use delivery customisations to control method display (available on all plans).

  1. Confirm carrier-calculated shipping is enabled. In Settings > Shipping and delivery, check whether your plan includes the Carrier Service API (listed in Shopify admin as custom carrier service connection or carrier-calculated rates). If you are on Basic, you need to upgrade to at least annual Grow or add the $20/mo CCS feature on monthly Grow before a postcode rate app can display rates at checkout.
  2. Install your chosen app. For SA-native live courier rate lookup, Bob Go on the Shopify App Store connects to The Courier Guy, Aramex, RAM, SkyNet, Pargo, and others, with plans from R249/month excluding VAT. For manual postcode-zone rate rules without live courier lookup, Postcode Shipping ($20/month) offers a rule-based setup that suits most SA three-tier structures. Choosing a postcode shipping app for your Shopify store ultimately comes down to whether you need live courier rates or manually-maintained flat rates per zone.
  3. Create postcode zone groups that match your courier's rate bands. Most apps support three input formats: exact 4-digit codes (2196, 8001), numeric ranges (4000–4999 for the Durban area), and wildcard patterns (8* for most Western Cape postcodes). Name your zones to match your courier's terminology — Local, Main Centre, Regional — so your fulfilment team speaks the same language as your rate logic.
  4. Set rates per zone. For carrier-calculated apps like Bob Go, connect your courier account or accept displayed carrier rates. For manual-rule apps, assign a flat rate, weight-based formula, or order-value rate to each postcode group. Set the most specific zones first — the first matching zone wins when a customer's postcode could fit more than one group.
  5. Test with real SA postcodes before going live. Test at minimum one address per zone tier: Sandton (2196) for metro, Durban central (4001) for main centre, and Upington (8801) for outlying. Verify the correct rate method appears at checkout for each. Also test the PUDO or Pargo method if you have configured it — confirm it appears for outlying addresses and shows the correct lower rate.

Well-configured setup: A Johannesburg homewares store creates three postcode groups matching its courier's rate bands — Metro (Gauteng, Western Cape metro postcodes), Main Centre (other major SA city postcodes), and Regional (all remaining). Rates per group reflect the store's actual Bob Go tariffs for those routes. Rural customers see a rate that reflects the real delivery cost and are not surprised at checkout. The store is not subsidising every outlying order.

Common mistake: A store installs a postcode rate app on a Basic plan, goes live, and discovers that shipping rates are not displaying at checkout — only "Calculated at checkout" with no figure. The app is functioning correctly. The issue is the plan — the app uses the Carrier Service API, which Basic does not include. The fix is upgrading to annual Grow (or adding the $20/mo CCS add-on on monthly Grow) before the app can calculate and display rates.

Ready to get postcode rates configured before launch?

Tell us your plan, your courier, and your delivery area — we will walk you through the configuration that fits your store and prevents the Basic-plan trap.

Book a free setup consultation

Why South African Ecommerce Businesses Work with Growth Pulse Media

Growth Pulse Media is a registered Shopify Partner that builds and configures complete SA ecommerce operations. Our Shopify marketing and ecommerce build work integrates courier selection, rate logic, checkout flow, and conversion tracking as a connected system — not a checklist of disconnected tasks. Shipping configuration is one of the areas where SA stores most often lose margin silently — a rate setup that looked functional at launch slowly undercharges on outlying orders as volume grows.

We work with a limited number of clients at a time so the person configuring your shipping setup is the same person reviewing your checkout conversion data. All work is executed in-house. If your current rate structure is costing you margin on rural orders, we can show you where and build the fix.

Who This Is NOT For

Postcode-level rate logic earns its complexity only when courier costs vary meaningfully across your delivery footprint — these store types are better served by simpler approaches.

Stores delivering within a single metro area: If every customer you ship to is in Johannesburg, or every order goes to Cape Town, a single flat rate or free-shipping threshold is correct and simpler. Postcode configuration adds ongoing setup and maintenance for a precision you do not need when your courier cost barely varies across your delivery footprint.

Stores using a 3PL that presents rates at checkout directly: If your third-party logistics partner surfaces real-time courier quotes through their own Shopify integration, adding a separate postcode rate app creates conflicts. Two sources of checkout rates confuse customers and complicate fulfilment workflows. Resolve the 3PL integration fully before layering a postcode app on top.

Stores with a uniform product range and small rate variance: If every order in your catalogue ships at the same weight and size, and the courier rate difference between your metro and regional destinations is small relative to your product margin, a flat rate or free-shipping threshold is cleaner than a three-zone matrix you maintain indefinitely. Complexity only earns its cost when the rate differential is meaningful.

Early-stage stores without order geography data: As a working rule of thumb, if you have not shipped enough orders to know whether outlying deliveries represent a meaningful share of your volume, build postcode logic into your roadmap but do not implement it on day one. Start with province-level zones, review your first few months of order postcodes, and add granularity only where the data shows a real cost gap.

Frequently Asked Questions

Can you set Shopify shipping rates by postcode without an app?

No — Shopify's native shipping zones only support country and province-level targeting. There is no built-in field for postcode ranges or suburb lists. To charge different rates for different postcodes in South Africa, you need either a third-party postcode shipping app (which requires carrier-calculated shipping) or delivery customisation rules that control which shipping methods appear based on postcode. Delivery customisations cannot create new price calculations — only hide or show existing methods.

Which Shopify plan do I need for postcode-based shipping rates in South Africa?

The Carrier Service API — the custom carrier service connection required by most postcode rate apps — is not available on the Basic plan. On a monthly Grow plan, accessing it costs an additional $20/month (documented by third-party Shopify partners; verify current pricing in your subscription settings) on top of the base $105/month subscription. On annual Grow ($79/month), Carrier Service API access is included, making it the most cost-effective entry point for postcode rate apps. Advanced and Plus plans include it as standard.

What is the best postcode shipping app for Shopify in South Africa?

For SA-native live courier rate display — connecting to The Courier Guy, Aramex, RAM, Pargo, SkyNet, and others — Bob Go (available on the Shopify App Store) is the most practical choice, with plans from R249/month excluding VAT. For manual postcode-zone rate rules without live courier lookup, Postcode Shipping at $20/month offers a straightforward rule-based setup for most SA three-tier rate structures. The deciding factor is whether your business needs live carrier rates at checkout or well-maintained flat rates per postcode zone.

How do I handle rural versus metro shipping rates on Shopify?

Group your delivery addresses into three tiers that mirror your courier's existing rate bands: metro/local (within your fulfilment city), main centres (other major SA metros), and regional/outlying (smaller towns and rural addresses). In a postcode app, create a zone per tier and assign postcode ranges accordingly — start with exact codes for the major metro CBDs and use numeric ranges for broader metro areas. In native Shopify province zones, group the nine SA provinces into metro-heavy, secondary, and outlying cost tiers and set flat rates per group. Consider adding Pargo or PUDO as a separate, lower-cost method for outlying customers.

Does carrier-calculated shipping work differently in South Africa than in other countries?

The API mechanism is the same — Shopify's Carrier Service API requests rates from a connected service and returns them for display at checkout. The SA-specific difference is that no South African courier is natively supported by Shopify's built-in carrier integrations, unlike the US (USPS, UPS, DHL) or Canada (Canada Post). SA couriers always require a third-party app — Bob Go, Postcode Shipping, or similar — to connect to the Carrier Service API or to calculate rates using their own postcode-rule logic. This makes the app selection step more consequential for SA stores than it is for merchants in supported markets.

Get Your Shopify Shipping Rates Right the First Time

Growth Pulse Media is a registered Shopify Partner. We configure shipping profiles, postcode rate logic, and SA courier integrations as part of complete Shopify builds — not as isolated fixes applied after launch. If your rates undercharge on outlying orders, that loss compounds with every new customer outside your metro. We will review your current setup and show you where the gaps are.

No obligation — we will get back to you within 24 hours.

Talk to a Shopify specialist
Dirk van Greuning — Founder, Growth Pulse Media
Dirk van Greuning Founder, Growth Pulse Media

Founder of Growth Pulse Media and a specialist in South African search dominance. Dirk translates his experience in scaling South African businesses into high-velocity digital strategies for B2B and retail leaders. He writes about SEO, lead generation, and paid media from an operator's perspective — prioritising pipeline value over impressions.

Connect on LinkedIn