Sellbrite

Sellbrite is a multichannel sales and inventory management solution for ecommerce sellers. Merchants can easily create and manage listings on multiple sales channels, control and sync inventory, and fulfill orders all from a single, intuitive interface that they love using.

Business Type: Multichannel Inventory Management Solution

Brian Nolan, CEO and co-founder

Shippo helped us close a crucial gap in our product and generate an entirely new revenue stream that we didn't have before. Shipping is not our core competency, it’s a piece of what we do. Because of that, it’s a value add to Sellbrite as a whole.

Shipping is not our core competency, it’s a piece of what we do. Because of that, it’s a value add to Sellbrite as a whole.

Challenge

Sellbrite’s goal is to streamline the entire inventory management lifecycle - listing, managing, receiving, shipping, and tracking. However, shipping was a gap in their product. Prior to Shippo, businesses who wanted to access shipping from Sellbrite had to sync their inventory to a third-party shipping software to print shipping labels then pass the tracking number back into their Sellbrite dashboard. The workflow was manual, and costly as businesses had to also pay for other 3rd-party shipping softwares.

To create a seamless experience on their platform, Sellbrite decided that they needed to implement shipping natively inside their app. They looked for a shipping API that would provide them with the flexibility to build shipping the way they needed, as well as clear, comprehensive documentation to guide them along the way.


  • Shipping was a the missing piece for Sellbrite’s end-to-end inventory management system.
  • 3rd-party shipping softwares created a poor experience for customers
  • Needed an API solution that could be fully integrated into their application

Creating a Shipment

  • cURL
  • Ruby
  • Python
  • PHP
  • Node
  • C#
  • Java
curl https://api.goshippo.com/shipments/  \
    -H "Authorization: ShippoToken API_KEY" \
    -H "Content-Type: application/json"  \
    -d '{
       "address_from":{
          "name":"Mr. Hippo",
          "street1":"215 Clayton St.",
          "city":"San Francisco",
          "state":"CA",
          "zip":"94117",
          "country":"US",
          "phone":"+1 555 341 9393",
          "email":"support@goshippo.com"
       },
       "address_to":{
          "name":"Mrs. Hippo",
          "street1":"965 Mission St.",
          "city":"San Francisco",
          "state":"CA",
          "zip":"94105",
          "country":"US",
          "phone":"+1 555 341 9393",
          "email":"support@goshippo.com"
       },
       "parcels":[{
          "length":"5",
          "width":"5",
          "height":"5",
          "distance_unit":"in",
          "weight":"2",
          "mass_unit":"lb"
       }],
       "async": false
    }'
require 'shippo'

Shippo::api_token = 'API_KEY'

address_from = {
    :name => 'Shawn Ippotle',
    :street1 => '965 Mission St.',
    :city => 'San Francisco',
    :state => 'CA',
    :zip => '94117',
    :country => 'US',
    :phone => '+1 555 341 9393',
    :email => 'shippotle@goshippo.com' 
}

address_to = {
    :name => 'Mr Hippo',
    :street1 => 'Broadway 1',
    :city => 'New York',
    :state => 'NY',
    :zip => '10007',
    :country => 'US',
    :phone => '+1 555 341 9393',
    :email => 'mrhippo@goshippo.com'
}

parcel = {
    :length => 5,
    :width => 1,
    :height => 5.555,
    :distance_unit => :in,
    :weight => 2,
    :mass_unit => :lb
}

shipment = Shippo::Shipment.create(
    :address_from => address_from,
    :address_to => address_to,
    :parcels => parcel,
    :async => false
)
import shippo

shippo.api_key = "API_KEY"

address_from = {
    "name": "Shawn Ippotle",
    "street1": "215 Clayton St.",
    "city": "San Francisco",
    "state": "CA",
    "zip": "94117",
    "country": "US",
    "phone": "+1 555 341 9393",
    "email": "shippotle@goshippo.com"
}

address_to = {
    "name": "Mr Hippo",
    "street1": "Broadway 1",
    "city": "New York",
    "state": "NY",
    "zip": "10007",
    "country": "US",
    "phone": "+1 555 341 9393",
    "email": "mrhippo@goshippo.com"
}

parcel = {
    "length": "5",
    "width": "5",
    "height": "5",
    "distance_unit": "in",
    "weight": "2",
    "mass_unit": "lb"
}

shipment = shippo.Shipment.create(
    address_from = address_from,
    address_to = address_to,
    parcels = [parcel],
    async = False
)
require_once('lib/Shippo.php');
Shippo::setApiKey("API_KEY");

$fromAddress = array(
    'name' => 'Shawn Ippotle',
    'street1' => '215 Clayton St.',
    'city' => 'San Francisco',
    'state' => 'CA',
    'zip' => '94117',
    'country' => 'US',
    'phone' => '+1 555 341 9393',
    'email' => 'shippotle@goshippo.com'
);

$toAddress = array(
    'name' => 'Mr Hippo"',
    'street1' => 'Broadway 1',
    'city' => 'New York',
    'state' => 'NY',
    'zip' => '10007',
    'country' => 'US',
    'phone' => '+1 555 341 9393',
    'email' => 'mrhippo@goshippo.com'
);

$parcel = array(
    'length'=> '5',
    'width'=> '5',
    'height'=> '5',
    'distance_unit'=> 'in',
    'weight'=> '2',
    'mass_unit'=> 'lb',
);

$shipment = Shippo_Shipment::create( array(
    'address_from'=> $fromAddress,
    'address_to'=> $toAddress,
    'parcels'=> array($parcel),
    'async'=> false
    )
);
var shippo = require('shippo')('API_KEY');

var addressFrom  = {
    "name": "Shawn Ippotle",
    "street1": "215 Clayton St.",
    "city": "San Francisco",
    "state": "CA",
    "zip": "94117",
    "country": "US",
    "phone": "+1 555 341 9393",
    "email": "shippotle@goshippo.com"
};

var addressTo = {
    "name": "Mr Hippo",
    "street1": "Broadway 1",
    "city": "New York",
    "state": "NY",
    "zip": "10007",
    "country": "US",
    "phone": "+1 555 341 9393",
    "email": "mrhippo@goshippo.com"
};

var parcel = {
    "length": "5",
    "width": "5",
    "height": "5",
    "distance_unit": "in",
    "weight": "2",
    "mass_unit": "lb"
};

shippo.shipment.create({
    "address_from": addressFrom,
    "address_to": addressTo,
    "parcels": [parcel],
    "async": false
}, function(err, shipment){
    // asynchronously called
});
APIResource resource = new APIResource ('API_KEY');

// to address
Hashtable toAddressTable = new Hashtable();
toAddressTable.Add("name", "Mr Hippo");
toAddressTable.Add("company", "Shippo");
toAddressTable.Add("street1", "215 Clayton St.");
toAddressTable.Add("city", "San Francisco");
toAddressTable.Add("state", "CA");
toAddressTable.Add("zip", "94117");
toAddressTable.Add("country", "US");
toAddressTable.Add("phone", "+1 555 341 9393");
toAddressTable.Add("email", "mrhippo@goshipppo.com");

// from address
Hashtable fromAddressTable = new Hashtable();
fromAddressTable.Add("name", "Ms Hippo");
fromAddressTable.Add("company", "San Diego Zoo");
fromAddressTable.Add("street1", "2920 Zoo Drive");
fromAddressTable.Add("city", "San Diego");
fromAddressTable.Add("state", "CA");
fromAddressTable.Add("zip", "92101");
fromAddressTable.Add("country", "US");
fromAddressTable.Add("email", "mshippo@goshipppo.com");
fromAddressTable.Add("phone", "+1 619 231 1515");
fromAddressTable.Add("metadata", "Customer ID 123456");

Hashtable parcelTable = new Hashtable ();
parcelTable.Add ("length", "5");
parcelTable.Add ("width", "5");
parcelTable.Add ("height", "5");
parcelTable.Add ("distance_unit", "in");
parcelTable.Add ("weight", "2");
parcelTable.Add ("mass_unit", "lb");

resource.CreateShipment(new Hashtable(){
	{ "address_to", toAddressTable},
	{ "address_from", fromAddressTable},
	{ "parcels", parcelTable},
	{ "async", false}});
Shippo.setApiKey('API_KEY');

// To Address
HashMap<String, Object> addressToMap = new HashMap<String, Object>();
addressToMap.put("name", "Mr Hippo");
addressToMap.put("company", "Shippo");
addressToMap.put("street1", "215 Clayton St.");
addressToMap.put("city", "San Francisco");
addressToMap.put("state", "CA");
addressToMap.put("zip", "94117");
addressToMap.put("country", "US");
addressToMap.put("phone", "+1 555 341 9393");
addressToMap.put("email", "mrhippo@goshipppo.com");

// From Address
HashMap<String, Object> addressFromMap = new HashMap<String, Object>();
addressFromMap.put("name", "Ms Hippo");
addressFromMap.put("company", "San Diego Zoo");
addressFromMap.put("street1", "2920 Zoo Drive");
addressFromMap.put("city", "San Diego");
addressFromMap.put("state", "CA");
addressFromMap.put("zip", "92101");
addressFromMap.put("country", "US");
addressFromMap.put("email", "mshippo@goshipppo.com");
addressFromMap.put("phone", "+1 619 231 1515");
addressFromMap.put("metadata", "Customer ID 123456");

// Parcel
HashMap<String, Object> parcelMap = new HashMap<String, Object>();
parcelMap.put("length", "5");
parcelMap.put("width", "5");
parcelMap.put("height", "5");
parcelMap.put("distance_unit", "in");
parcelMap.put("weight", "2");
parcelMap.put("mass_unit", "lb");

// Shipment
HashMap<String, Object> shipmentMap = new HashMap<String, Object>();
shipmentMap.put("address_to", addressToMap);
shipmentMap.put("address_from", addressFromMap);
shipmentMap.put("parcels", parcelMap);
shipmentMap.put("async", false);

Shipment shipment = Shipment.create(shipmentMap);

Solution

Sellbrite implemented shipping onto their platform using Shippo in three components:

Multi-Carrier Shipping Back-end
Shippo provided Sellbrite the ability to connect to multiple shipping carriers within one API. Businesses on Sellbrite are able to use Shippo’s USPS account to purchase discounted USPS labels, and add their own FedEx and UPS accounts directly through the carrier endpoints that Sellbrite exposed on directly on their dashboard.

Shipping User Interface
Sellbrite built a native shipping interface within their platform for businesses to manage their shipping.

Postage Wallet
To make the billing process more seamless and cost-effective for both Sellbrite and businesses shipping, Sellbrite implemented a postage wallet that businesses would auto-load. Shipping costs would come out of this user-based wallet directly, keeping transactions low.

  • Shipping API solution that is fully integrated into Sellbrite’s workflow
  • Sellbrite is able to offer a global network of carriers
  • Sellbrite can manage payments via existing customer wallet

Results

Along with their inventory management system, Sellbrite is now able to offer discounted and simplified shipping as an additional value adding feature to their platform. They also opened a new revenue stream and method to balance their cash-flow over the slower holiday season with shipping and postage wallets.

Even better, customers who are utilizing Sellbrite’s native shipping solution built with Shippo to be stickier. The ability for customers to use Sellbrite end-to-end has decreased their churn as well.


  • Shipping is now a value add to Sellbrite’s entire platform
  • A new revenue opportunity with shipping
  • Customers shipping through Sellbrite are less likely to look for an alternative platform