If your e-commerce store ships to the US West Coast and you’ve never noticed OnTrac showing up in your shipments, you probably will soon. OnTrac is one of the few regional last-mile carriers in the US that has scaled enough to matter, and an increasing share of west-coast DTC packages move through it instead of the major nationals.

This guide covers what OnTrac is, why it shows up in your tracking data, how its tracking numbers look, and how to integrate it cleanly without writing carrier-specific code.

What Is OnTrac?

OnTrac is a US regional last-mile carrier focused on the western United States. It operates as the merged entity formed when LaserShip combined with the original OnTrac operation, retaining the OnTrac brand. Its core value proposition is faster ground-speed deliveries within the western states than you’d typically get from the national carriers — often next-day or two-day on routes the nationals would call “ground.”

Coverage (as of 2026, verify current footprint with OnTrac):

  • California
  • Arizona
  • Nevada
  • Oregon
  • Washington
  • Utah
  • Idaho
  • Colorado

Outside that footprint, OnTrac doesn’t deliver — your packages are going through USPS, UPS, FedEx, or another regional partner.

Why does it show up in your tracking data?

A growing number of e-commerce platforms and 3PLs route west-coast-bound packages through OnTrac because of cost and speed advantages over the national carriers in that geography. Shopify Shipping, ShipBob, and various other platforms include OnTrac in their carrier mix automatically.

If you ship a lot to LA, San Francisco, Seattle, or Phoenix and you’ve never integrated OnTrac, your customers in those cities are probably hitting tracking pages that don’t work properly — they paste an OnTrac number into your tracking page and it returns “carrier not supported.”

OnTrac Tracking Number Format

OnTrac numbers are alphanumeric and don’t fit any of the major-carrier patterns:

  • Length: typically 15 characters
  • Pattern: alphanumeric, often starting with D or C
  • Examples: D10010962369999, CTLAB1234567890

They look nothing like USPS, UPS, FedEx, or DHL numbers, which is good news for auto-detection — there’s very little ambiguity.

For a deeper dive into how tracking number shapes vary by carrier, see Understanding Tracking Number Formats.

Tracking OnTrac Directly — The Native API Reality

In theory you can hit OnTrac’s tracking system directly. In practice, this isn’t a great fit for most e-commerce integrations:

  • Direct API access requires a shipper account. OnTrac’s tracking API is built for shippers and resellers, not for arbitrary tracking-number lookups
  • Documentation isn’t widely available. Compared to FedEx or UPS, OnTrac’s developer-facing materials are thinner
  • Web scraping is fragile. OnTrac’s public tracking page changes shape periodically, breaking unmaintained scrapers
  • Coverage is regional. Even if you build the integration, you only use it for west-coast shipments — every other package still needs a different code path

This is the kind of carrier where a unified multi-carrier API earns its keep: you don’t want a bespoke OnTrac integration sitting next to your USPS, UPS, and FedEx integrations.

Tracking OnTrac via WhereParcel

WhereParcel handles OnTrac alongside 60+ other live carriers (more on request) under a single REST API. You don’t sign a separate OnTrac contract, you don’t write OnTrac-specific parsing, and you don’t maintain a scraper.

curl -X POST https://api.whereparcel.com/v2/track \
  -H "Authorization: Bearer $WP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "trackingItems": [
      { "carrier": "us.ontrac", "trackingNumber": "D10010962369999" }
    ]
  }'

Or, if you don’t want to hardcode the carrier (the right move when ingesting tracking numbers from mixed sources):

curl -X POST https://api.whereparcel.com/v2/track \
  -H "Authorization: Bearer $WP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "trackingItems": [
      { "carrier": "auto", "trackingNumber": "D10010962369999" }
    ]
  }'

The Response

{
  "success": true,
  "data": [
    {
      "carrier": "us.ontrac",
      "carrierName": "OnTrac",
      "trackingNumber": "D10010962369999",
      "status": "in_transit",
      "lastUpdated": "2026-05-04T12:00:00Z",
      "events": [
        {
          "time": "2026-05-04T12:00:00Z",
          "location": "Los Angeles, CA",
          "description": "Out for delivery"
        }
      ]
    }
  ]
}

The schema is identical to USPS, UPS, FedEx, DHL, Amazon Logistics, and every other supported carrier. Your downstream code doesn’t change when an OnTrac number flows through.

Common E-Commerce Scenarios Where OnTrac Matters

1. West Coast DTC Brands

If most of your customers are in California, Arizona, or Washington, OnTrac may already be handling a meaningful percentage of your shipments through your 3PL or fulfillment platform — even if you didn’t pick it directly.

2. Amazon Buy Shipping Overflow

Some merchants using Amazon Buy Shipping see OnTrac labels assigned automatically for west-coast routes. If your tracking dashboard doesn’t recognize OnTrac numbers, those orders look “lost” to your CS team.

3. ShipBob, ShipStation, and Other Platforms

Multi-carrier shipping platforms route packages to whichever carrier is cheapest and fastest for the destination. For west-coast destinations, that’s often OnTrac. Your tracking page needs to handle the resulting carrier diversity gracefully.

4. Multi-Region Stores

If you ship nationwide, your tracking integration needs to handle USPS for rural routes, UPS/FedEx for cross-country, OnTrac for the west coast, and Amazon Logistics for some Amazon-fulfilled orders. The unified API approach keeps this from becoming a forest of if/else branches.

Building a Branded Tracking Page That Handles OnTrac

If you have a branded tracking page, the OnTrac case is automatically handled when you use carrier: "auto":

async function trackOrder(trackingNumber) {
  const res = await fetch('/api/track?number=' + trackingNumber);
  const data = await res.json();
  return data; // Returns OnTrac, USPS, UPS, FedEx — same shape
}

Your timeline component renders the same way regardless of carrier. The only OnTrac-specific UX consideration: status descriptions from OnTrac tend to be terse compared to UPS or FedEx. If you’re rewriting carrier copy in your own voice anyway, this is a non-issue.

Pros and Cons of OnTrac for Your Customers

Pros:

  • Often faster than UPS/FedEx Ground for west-coast routes
  • Lower shipping costs for shippers, sometimes passed to consumers as faster free-shipping eligibility

Cons:

  • Service quality varies by route — some metros are excellent, some have historical complaints
  • No nationwide footprint, so cross-country shipments still need national carriers
  • Customer recognition is lower than USPS/UPS/FedEx, so a generic “your package is with OnTrac” can confuse some buyers — branded tracking copy helps here

Summary

OnTrac is a real and growing piece of US west-coast e-commerce delivery. Pretending it doesn’t exist means your customers in California and Washington see broken tracking pages.

The two practical paths:

  • Build a custom OnTrac integration. Possible, expensive in maintenance time, only helps for one carrier
  • Use a multi-carrier tracking API. OnTrac becomes one row in a list of 64+ live carriers (with rapid on-request additions), with the same response schema as everything else

For the second path, WhereParcel handles OnTrac plus USPS, UPS, FedEx, DHL, Amazon Logistics, and every major US carrier under a single REST endpoint. The 7-day free trial gives you enough time to verify it works on a real OnTrac number from your own shipments.


Related guides: