DEV Community

Rojo
Rojo Subscriber

Posted on • Originally published at packagepr.com

Why So Many US Retailers Won't Ship to Puerto Rico (And How to Fix It)

If you've ever tried to order something online while living in Puerto Rico, you've probably hit the dreaded "we don't ship to your address" wall. It's frustrating, confusing, and — for the 3.2 million US citizens living on the island — maddeningly common.

But why? Puerto Rico is a US territory. Residents pay federal taxes, carry US passports, and use USPS with regular US ZIP codes (00XXX). So what's going on behind the scenes?

As someone who's dug into the technical side of e-commerce shipping, I can tell you: it's a mix of outdated legislation, lazy software defaults, and carrier API quirks that combine into a perfect storm of exclusion.

Let's break it down.


The Jones Act: A 100-Year-Old Law Still Causing Problems

The Merchant Marine Act of 1920 — better known as the Jones Act — requires that all goods shipped between US ports be carried on ships that are US-built, US-owned, and US-crewed. Since Puerto Rico is an island that receives almost all goods by sea, this law has an outsized impact.

The result? Shipping costs to Puerto Rico are significantly higher than they'd be in a free market. Studies estimate the Jones Act adds $1.1 billion in annual costs to Puerto Rico's economy. A container shipped from the US East Coast to Puerto Rico can cost double what it would cost to ship the same container to a foreign Caribbean island like Jamaica or the Dominican Republic.

For retailers, these elevated costs eat into margins. Many simply decide it's not worth the hassle and exclude PR ZIP codes entirely.

The Technical Side: Why Retailer Systems Fail Puerto Rico

Here's where it gets interesting for the dev crowd. A huge part of the problem is how shipping and address validation systems are built.

1. Address Validation APIs Treat PR as "International"

Many address validation services — including older versions of popular APIs — categorize Puerto Rico addresses as international. When a retailer's checkout flow hits the validation step, PR addresses get flagged or rejected.

This happens because:

  • Country/state dropdowns don't include PR as a US state (it's a territory)
  • ZIP code databases sometimes map 00XXX codes to "foreign" buckets
  • Older USPS API integrations handle territories inconsistently

If you've ever built a checkout form, you know the pain. The address object expects state to be one of 50 values. Puerto Rico (PR), Guam (GU), US Virgin Islands (VI), and other territories get dropped.

// This is the kind of thing that breaks PR shipping
const US_STATES = [
  'AL', 'AK', 'AZ', ... 'WI', 'WY'
  // PR, GU, VI, AS, MP — missing!
];

function isValidUSAddress(address) {
  return US_STATES.includes(address.state);
  // Returns false for Puerto Rico 🙃
}
Enter fullscreen mode Exit fullscreen mode

2. Carrier Rate APIs Return Errors or Inflated Rates

When retailers query carrier APIs (UPS, FedEx, DHL) for Puerto Rico shipping rates, they often get:

  • Error responses because the integration doesn't handle territory-specific rate zones
  • Wildly inflated rates because the API defaults to international pricing
  • No available service levels because the retailer only configured domestic options

Rather than handle these edge cases, many engineering teams just... don't. Puerto Rico gets silently excluded.

3. Tax Calculation Complexity

Puerto Rico doesn't have a traditional state sales tax — it uses a Sales and Use Tax (IVU) system with different rates and rules. Tax calculation services like Avalara and TaxJar handle this, but retailers using simpler tax logic often can't compute PR taxes correctly and block orders rather than risk compliance issues.

4. Fulfillment Network Limitations

Major retailers with distributed warehouse networks optimize for the continental US. Their fulfillment software calculates shipping from the nearest warehouse, and when the destination is PR, the algorithms either:

  • Can't find a valid shipping route
  • Flag the order for manual review (which effectively kills it)
  • Default to expensive air freight instead of ground shipping

The Wall of Shame: Retailers That Won't Ship to Puerto Rico

Here's an incomplete but telling list of major US retailers that either don't ship to Puerto Rico at all or severely restrict what they'll deliver:

Retailer Status
Target Won't ship most items to PR
Wayfair Restricted — many items excluded
Adidas Does not ship to PR
Nike Limited shipping to PR
Sephora Does not ship to PR
Crate & Barrel Does not ship to PR
Pottery Barn Does not ship to PR
West Elm Does not ship to PR
Restoration Hardware Does not ship to PR
Chewy Restricted shipping to PR
Dyson Does not ship to PR
Bose Does not ship to PR

And this is just the tip of the iceberg. Hundreds of smaller retailers have the same restrictions baked into their checkout systems.

The irony? Many of these companies have physical stores in Puerto Rico or sell to completely foreign countries. They'll ship to Canada or the UK, but not to a US territory with US postal codes.


The Developer's Responsibility

If you're building e-commerce software, this is partially on us. Every time we hardcode 50 states, skip territory handling in our address validation, or don't test our shipping integrations with PR ZIP codes, we're perpetuating the problem.

Here's a quick checklist for devs:

Address Forms:

  • Include all US territories in your state/region dropdowns (PR, GU, VI, AS, MP)
  • Validate ZIP codes in the 00600-00988 range as domestic US

Shipping Integration:

  • Test carrier API responses for PR addresses explicitly
  • Handle territory-specific rate zones in your shipping calculator
  • Don't silently fail — surface clear messaging if shipping is restricted

Tax Calculation:

  • Use a proper tax service that handles PR's IVU system
  • Don't block checkout because your tax logic can't handle territories
# Better approach
US_STATES_AND_TERRITORIES = [
    'AL', 'AK', 'AZ', 'AR', 'CA', 'CO', 'CT', 'DE', 'FL', 'GA',
    'HI', 'ID', 'IL', 'IN', 'IA', 'KS', 'KY', 'LA', 'ME', 'MD',
    'MA', 'MI', 'MN', 'MS', 'MO', 'MT', 'NE', 'NV', 'NH', 'NJ',
    'NM', 'NY', 'NC', 'ND', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC',
    'SD', 'TN', 'TX', 'UT', 'VT', 'VA', 'WA', 'WV', 'WI', 'WY',
    # US Territories — don't forget these!
    'PR', 'GU', 'VI', 'AS', 'MP', 'DC',
]
Enter fullscreen mode Exit fullscreen mode

The Workaround: Package Forwarding

Until every retailer fixes their systems (don't hold your breath), people in Puerto Rico have found a practical workaround: package forwarding services.

The concept is simple — you get a US mainland address to ship to, and the service forwards your packages to Puerto Rico. It's the same idea as a mail forwarding service, but optimized for e-commerce.

One service worth mentioning is PackagePR, which gives you a Miami-based shipping address. You shop at any US retailer, ship to your PackagePR address, and they forward it to Puerto Rico. It effectively removes the "we don't ship to PR" barrier entirely.

It's a band-aid solution to a systemic problem, but it works — and for the millions of people dealing with this daily, that matters.


What Needs to Change

Short term:

  • Retailers need to audit their shipping configurations and fix territory exclusions
  • E-commerce platforms (Shopify, WooCommerce, BigCommerce) should ship with territory support enabled by default
  • Carrier API documentation should include territory-specific examples and test cases

Long term:

  • The Jones Act needs reform or repeal to bring shipping costs in line with market rates
  • Address and shipping standards need to treat territories as first-class domestic destinations
  • Tax calculation services need better territory support out of the box

For developers right now:

  • Test your checkout with PR addresses today
  • Add territories to your state lists
  • File bugs against libraries and platforms that exclude territories

Wrapping Up

The fact that 3.2 million US citizens can't freely shop online from US retailers in 2026 is absurd. It's a problem with roots in century-old maritime law, compounded by software defaults that treat territories as an afterthought.

As developers, we can't repeal the Jones Act. But we can stop writing code that pretends Puerto Rico isn't part of the United States. Every state dropdown, every ZIP code validator, every shipping integration — these are small decisions that have real impact on real people.

Next time you're building a checkout flow, remember: there are 50 states, but there are 56 domestic destinations. Code accordingly.


Originally published at packagepr.com

Top comments (0)