Shipt Logo

Developer

Delivery APIPlatform APIResource GuidesSFTP Connection

Getting Started#

Sample Data vs Recurring Data Feed#

What's the Difference?

What is Sample Data?

Prior to signing a contract with Shipt, our Catalog team will need to review sample data to understand how long it will take to launch your catalog and store on Shipt's marketplace. The sample data files you send us just need to give us an accurate picture of your product & inventory data.

If you already have ecommerce data or are integrated with another 3rd party delivery service, please feel free to share a sample of the catalog data you use with those services.

Simply put, we need a file(s) that will help us understand what products you sell, and what the pricing/stock availability of those products are.

What is a Recurring Data Feed?

Once you are ready to launch on Shipt's marketplace, we will need to ensure that you are sending shipt updated catalog data on a regular cadence.

This helps us ensure:

  1. That we're listing as many products from your catalog as possible
  2. That our pricing & sales are accurate
  3. That stock availability is as current as possible

For a full breakdown of how to establish a recurring data feed with Shipt, please refer to the Recurring Data Feed Documentation listed below

How to Send Sample Data to Shipt#

Sample Data Submission Link

Once you are ready to share your sample data files with Shipt, please use our Form to submit your responses & sample data files. While we can receive you files via email as a backup solution, our preferred method is to receive your files via this form:

Sample Data Contents#

Prior to signing a contract, Shipt's Catalog teams need to review a sample of the type of data you plan on sending. By reviewing your sample data, we hope to understand:

  • How long it will take to launch your store
  • The member experience quality we expect to see at launch

Sample Data Format Overview

We are very flexible on sample data formatting. Our primary goal with reviewing sample data is to ensure that we have the fields we will need to launch your store on Shipt's marketplace and to get an understanding of any technical concerns we'll need to address prior to launch.

Preferred Sample Data Format

If possible, please send two CSV files:

  1. Product File
    • Contents: all product metadata.
    • This includes fields such as:
    • UPC
    • SKU
    • Product Name
    • Brand
    • Category
    • Primary Image
    • Tax Code
  2. Inventory File
    • Contents:: pricing & availability data for each store location
      • This file tells us which products are in stock at which store locations & what the price is of each product at each store
    • Fields generally include:
      • Availability
      • Price
      • Sale Price
      • Sale Start Date
      • Sale End Date
      • Product Weight

Required Sample Data Fields

Product File

What is a product file?Here's an example

We need sufficient information to ensure your catalog will look its best on Shipt's marketplace. Required fields include:

  1. UPC
  2. SKU
  3. Product Name
  4. Product Size
  5. Unit of Measure
  6. Image URL*
    • Shipt's preference is to download images from a retailer hosted image url.
    • The alternative is for images to be uploaded to an image directory with retailer files. This requires a common identifier (upc e.g.) to connect an image file to a product.
    • If image assets are not available, please inform us. While we can proceed without them, we would prefer to have any image assets you are able to provide.

Inventory File

What is an inventory file? Here's an example

We need some way to determine what products are in stock at each store location along with the price of each item at each store location. Required fields include:

  1. Store Number
  2. UPC (or) SKU
  3. Available (i.e. the "in-stock" or "out of stock" status)
  4. Price

Alternative Sample Data Formats

If you're unable to send us a sample file with our preferred formatting, don't worry! Please send us what you have and our Catalog team will take it from there.

Here's an example of a sample data sheet we might expect to receive

Integration Using Recurring Data#

Recurring Data Feed Documentation#

How Shipt Operates

At Shipt, we maintain an independent product catalog and listings for our users to browse and purchase. Users can enter their address in our app or website and see what stores are available to them based on the delivery address. Users are automatically matched to the closest location to them for each retailer. Users browse a store and view the products available. Once they check out, the order is broadcasted to shoppers in the area who then claim and go shopping.

Catalog Freshness

We try to keep our catalogs up to date, and this is where you come in. Keeping the catalog up to date is the responsibility of the retailer. Best practice is to update your catalog at least once a day. We recommend that data files are delivered as early as possible, as soon as the store locations close up for the day. Typically most partners deliver us data between midnight and 5:00 am local time. We can support handing midday and/or delta updates throughout the day as well: please inquire if you wish to set those up. As data updates happen more frequently, the happier customers will be with the entire experience!

Product Availability

At Shipt we view availability as a boolean True/False. This is our preference for managing product availability. If you have further detail around inventory, such as a more detailed status (ex: "Discontinued" or "Low Stock") or an exact count, please send that along as well.

If you have inventory counts, we can accept and use that data. Our Data Science team has built 'Out Of Stock' prediction models that prompt customers to pre-select substitutions if inventory counts and order trends give a high probability the item won't be on the shelf.

Summary/Overview of Data Requirements for Integration#

Shipt is flexible with the formatting of the data that we consume from our partners. However, deviating from our preferred file formats and/or omitting required fields will result in delays to the onboarding process. For the quickest integration timeline, we recommend adhering to the recommended file formatting guidelines detailed in this document.

Preferred File Formatting

  1. Products File
  2. Contents: all product metadata
    • Specific fields are specified in the "Product Data" portion of this document
  3. File Delivery Cadence: Daily delivery is our preference
  4. File type: UTF-8 encoded CSV
    • Files should be zipped or gzipped to reduce data transfer times

Product File Example

What is a product file? Here's an example

We need sufficient information to ensure your catalog will look its best on Shipt's marketplace. Required fields include:

  1. UPC
  2. SKU
  3. Product Name
  4. Product Size
  5. Unit of Measure
  6. Image URL*
    • Shipt's preference is to download images from a retailer hosted image url.
    • The alternative is for images to be uploaded to an image directory with retailer files. This requires a common identifier (upc e.g.) to connect an image file to a product.
    • If image assets are not available, please inform us. While we can proceed without them, we would prefer to have any image assets you are able to provide.
  7. Inventory File
  8. Contents: pricing & availability data for each store location
    • Specific fields are specified in the "Pricing/Availability Data" portion of this document
  9. File Delivery Cadence: Daily delivery is our preference; however, we can ingest multiple files and delta files throughout the day
  10. File type: UTF-8 encoded CSV
    • Files should be zipped or gzipped to reduce data transfer times

Inventory File Example

What is an inventory file? Here's an example

We need some way to determine what products are in stock at each store location along with the price of each item at each store location. Required fields include:

  1. Store Number
  2. UPC (or) SKU
  3. Available (i.e. the "in-stock" or "out of stock" status)
  4. Price

Preferred file delivery methods

  1. SFTP
    • SFTP is Shipt's preferred way of integration to send catalog feeds
  2. API Integration
    • While we can connect to a partner's API, this generally results in a longer time-to-launch
  3. Google Sheets
    • Our Google Sheets connection allows for the shortest time-to-launch
    • We use Box.com to host your images, if you don't already have hosted image URLs
    • This integration option is only available to retailers with an assortment that's less than 10,000 products

Summary of required fields

Please note, there is a thorough breakdown of each of these fields, along with suggested fields in the "Product Data" & "Pricing/Availability Data" sections

Product Data, Required Fields

  1. Product UPC
  2. Product Name
  3. Product Size
  4. Unit of Measure
  5. Priced by Weight
  6. Product Category

Pricing/Availability Data, Required Fields

  1. Store Number
  2. Product UPC
  3. Price

Integration Timeline#

General Guidelines

Your Partner Success Manager will connect with a member of Shipt's Engineering team, who will assist in facilitating access to Shipt's SFTP. This is Shipt's preferred method of receiving partner data.

General Timeline

A typical integration process with Shipt takes anywhere from 4 to 8 weeks*. Your Partner Success Manager will work across both teams to determine the launch date based on all variables for consideration. The main variables with time to launch are how "e-commerce" ready the data is (product names that are clear and human-readable, granular categories to sort products, etc…), how quickly the daily data feed can be set up, and responsiveness to any questions we might have along the way.

Our work can begin as soon as we finalize the format, structure, and content of the files. We can begin work with the final version of the files as you continue to automate the data delivery and schedule a job.

_*_4-8 weeks from the start of the data conversation is not equivalent to a go-live date.

Connection Types (SFTP, API, Google Sheets)#

SFTP

Sharing files with our partners in a secure fashion is extremely important to us. Shipt will be using SFTP to facilitate these file transfers in the most secure way possible.

SFTP is our preferred connection method at Shipt for transmitting catalog feeds. For instructions on getting setup, please download this onboarding guide.

API

If you have a REST API, we are able to connect and retrieve data from there. We can make multiple calls, such as needing to pull pricing and sale pricing separately. We only ask that the API is performant enough that we can retrieve all product/pricing/availability data for all store locations in an hour or less.

We run a Staging environment at Shipt and would look to pull data for that set up as well, so expect two sets of calls a day. We can schedule the Staging call during your off-peak hours.

Google Sheets

We support integrations via Google Sheets & Box.com. If you feel this is the most appropriate option for you, please reach out to Shipt to let us know you'd like to pursue this option.

Here's our technical explanation on how to use Google Sheets to onboard with Shipt. Let us know if you have questions!

File Formatting & Data Requirements#

Flat Files#

Our preferred standard method of delivery is flat-file CSVs. We can also accept variations of that in PSVs (pipe separated) or TSVs (tab-separated). Using flat files helps keep the complexity low and troubleshooting easier. We will not accept Excel files.

UTF-8 is the preferred encoding for maximum compatibility.

File Naming#

Files sent to Shipt should follow a uniform convention that you are able to provide, and the files should include the date of their processing or transmission to Shipt. Some accepted naming include, but are not limited to:

  • catalog_20201215.csv
  • products_file_20201215.csv
  • 20201215_prices.txt
  • 20201215_shipt_location_pricing.tsv

File Compression#

Data posted should be zipped or gzipped to reduce data transfer times. File size after compression shouldn't exceed ~100MB. If you find sizes are larger, you may want to partition the data into pieces (Store Locations are a great key to split upon).

File Structure#

We are flexible when it comes to how the required content is structured. We can accept a large (wide) normalized file with products & pricing merged, separate product and pricing files, or separate pricing files for each store (assuming the naming conventions allow us to pick up all with a regex wildcard).

To avoid errors, the names of existing fields should not be edited. Deprecated existing fields should not be removed and can be filled in with Null values.

File Updates#

What fields does Shipt update/not update daily?

Daily Updates are applied to:

  • Cost
  • Sale Dates
  • Sale Prices
  • Taxability
  • Deposit Amount
  • Aisle / Location
  • Availability

Daily Updates are NOT applied to:

  • Product name
  • Brand name
  • Product descriptions
  • Product images
  • Product categorizations

Shipt can update your feed to update these fields everytime you send new values. If you want to go this route, lets discuss as there are potentially unwanted side-effects of this approach

Post launch: should you need to update one of the fields above, please contact your Partner Success Manager and provide the UPC(s) and details. By default we do not automate updates to these fields as doing so would revert any improvements made during our QA process.

Product Details#

Product Data#

In order to effectively display your store's inventory in our application, we'd like the following pieces of information about each item you sell. All fields marked with an asterisk (*) are required. Providing additional information will both increase the quality of service we can provide to your customers, and also increase the speed at which we can incorporate your data into our application.

Below is a standard listing of columns. There will not be any issues if you omit certain columns that may not be applicable to your store (such as deposit amount or alcohol flags). You may also include extra columns (like an internal product number or GTIN) for your own use, but the set below typically covers everything needed.

All fields marked with an asterisk (*) are required.

FieldColumn NameData TypeDescription
Product UPC (*)upcStringUnique UPC code issued by GIS or another UPC agency; not a store SKU or item code
Internal SKUretailer_skuStringAn optional, internal identifier that you may use internally
Alternate UPCsalternate_upcsString / ArrayOther acceptable UPCs for a product. UPCs listed will also be used when shoppers scan to confirm the correct item.This field can also be used for combining multiple products into a single entity. Example: A pint of strawberries that comes from 10 different farms with 10 different UPCs.
Product Name (*)product_nameStringThe human-readable name of a product that will be displayed to customers
Product Size (*)product_sizeDecimalThe size of the product being sold, for example "22 oz"
Unit of Measure (*)unit_of_measureStringThe unit of measure the product is sold, for example "oz" or "lb"
Priced by Weight? (*)product_sold_byBooleanIs this item sold piecewise, or priced and sold by the pound? See below for a deeper dive on how Shipt handles weighted products
Product Category (*)categoryStringThe ID of the category or department where this product is sold in your store. This may be multiple columns and is used to match your product to Shipt's taxonomy.Please send the most granular, specific category you have. We will be creating a mapping table to lookup the Shipt category equivalent to help normalize catalogs across our marketplace.Please be mindful not to send any sale specific categories, such as "ShiptMart's Weekly Discounts"
Brand Namebrand_nameStringThe brand name for the product that will be displayed to customers
DescriptiondescriptionStringA copy text description for the product
Product Highlightsproduct_highlightsString / Array / JSONA list of bulleted features/highlights about the product. Can be an array, multiple columns, or formatted in JSON.
Unit Weightunit_weightDecimalAn estimated package weight for products sold by weight. Generally for meat products. Users pay the exact cost, see further examples below.Example: A package of a dozen chicken wings weighs approximately 1.5 lbs. Shipt uses this number to estimate the total cost (One 1.5 lb Package * $2.99/lb = ~$4.49)
Average Weightaverage_weightDecimalThe average weight for products sold by weight. Generally for produce that people generally think of buying individually. Example: A single banana weighs approximately 0.25 lbs. Shipt uses this number to extrapolate a unit price (One 0.25lb Banana * $0.99/lb = ~$0.24 per Banana)
Package Countpackage_countStringA number used to tell the customer how many items per package, shown in the product description. Example: "12 Chicken Wings Per Package"
Label Overridelabel_overrideStringUsed to change the selection count unit, primarily for meats. Example: Changing "+1 ct" to "+1 Rack of Ribs"
Deposit Amountdeposit_amountDecimalIf there is a deposit amount for the item, include that here. Use the total deposit charged (and not the deposit per one bottle/can)
Image URLimage_urlStringThe location Shipt will use to copy the product image we will display in our app if we do not currently possess the image. See the image standard section below for specifics around quality/format.If you do not have the images hosted, we can support setting you up in SFTP to ingest directly.
Secondary Imagessecondary_imagesArray / StringAdditional views/images of the product (by URL)
Is Alcohol?is_alcoholBooleanDoes the product contain alcohol that requires an ID Check?
Tax Codetax_codeStringTax code of the product used to determine taxability (Avalara or Vertex tax code for example).
Product Warningsproduct_warningsStringAny relevant warning that comes with the product such as "Flammable", "Corrosive", "Product can be very hot", "Keep away from eyes", or mature DVD ratings. Warnings appear on the Shipt PDP page with a yellow warning triangle.
Choking Hazardchoking_hazardStringA warning if the product has a risk for infants/toddlers to choke on it. Sometimes legally mandated. Choking Hazards appear on the Shipt PDP page with a yellow warning triangle.
Prop 65 Warningp65_warningStringA legally required warning based on California Prop 65 and if materials in the product pose a cancer risk. By default, Shipt applies the following general warning to all products. "California Proposition 65 WARNING for exposure to Bisphenol A (BPA) from canned and bottled foods and beverages: Many food and beverage cans have linings containing bisphenol A (BPA), a chemical known to the State of California to cause harm to the female reproductive system, or birth defects, or cancer. Jar lids and bottle caps may also contain BPA. You can be exposed to BPA when you consume foods or beverages packaged in these containers. For more information go to:https://www.p65warnings.ca.gov/BPA"Sending a custom value will override the above warning with your text.
IngredientsingredientsStringA simple list like on the side of any food item
Nutritional Detailnutritional_detailString / JSONA breakdown of calories, fats, sugars, protein, etc. Further discussion on format is needed if you have this data.
Allergen Infoallergen_infoStringWarnings if the product "Contains" or "May Contain" nuts, soy, etc... Appears with a yellow A on the PDP page.
Food Classificationsfood_classificationsString / Array / JSONKosher, Gluten-Free, Vegetarian, Vegan, etc
Purchase Limitpurchase_limitIntegerA maximum limit for purchase for when you need to restrict the purchase quantity of a particular item across all stores. At this time we do not support purchase limits for "groups" of products. Example: We can't limit 2 packages of toilet paper per customer, but can limit 2 of each UPC/SKU
Variation Parent IDparent_idStringFor Product Variations. The ID/SKU of the parent product that groups the items together. See below for more detail.
Variation Colorvariation_colorStringFor Product Variations. The color facet for a variation. See below for more detail.
Variation Sizevariation_sizeStringFor Product Variations. The size facet for a variation. See below for more detail.

Description Guidelines

Format

  • Text
  • No HTML encoding
  • More than just instructions/title
  • 500 character display limit for frontend display (if longer it will be trimmed)

Style

  • This should be used to give the customer additional information to purchase a product. Please avoid advertising promotional campaigns in the product description.
  • Additional necessary items are also appropriate (ex. 2 eggs are needed to make brownies with mix)

Example

From Chicken Noodle to Tomato and everything in between. We make delicious soups in flavors you know and love. Whether Campbell's Condensed soups are your secret ingredient or you want to simmer down with the perfect bowl, we have a soup for everyday that everyone can enjoy.

Product Warnings Guidelines

Format

  • Text
  • No HTML/special characters
  • 500 character display limit for frontend display (if longer it will be trimmed)

Style

  • Product Warnings can be any additional warnings about the product that are not communicated in Choking Hazard, Allergen Info, or Prop 65

Example

Will cause drowsiness. Keep out of reach of children. Do not use if you are pregnant or lactating without the advice of your physician.

Choking Hazard Guidelines

Format

  • Text
  • No HTML/special characters
  • 500 character display limit for frontend display (if longer it will be trimmed)

Style

  • Statements that detail the pieces or parts that pose a choking risk and age specific guidelines about them

Example

Warning: Cap and plastic tamper band may pose a choking hazard. Keep away from children under three.

Ingredients Guidelines

Format

  • Text
  • No HTML/special characters
  • 500 character display limit for frontend display (if longer it will be trimmed)

Style

  • List format, non-narrative

Example

Whole Grain Oats, Sugar, Oat Bran, Corn Starch, Honey, Brown Sugar Syrup, Salt, Tripotassium Phosphate, Canola Oil, Natural Almond Flavor. Vitamin E (Mixed Tocopherols) Added To Preserve Freshness.Vitamins And Minerals: Calcium Carbonate, Zinc And Iron (Mineral Nutrients), Vitamin C (Sodium Ascorbate), A B Vitamin (Niacinamide), Vitamin B6 (Pyridoxine Hydrochloride), Vitamin B2 (Riboflavin), Vitamin B1 (Thiamin Mononitrate), Vitamin A (Palmitate), A B Vitamin (Folic Acid), Vitamin B12, Vitamin D3.

Nutrition Guidelines

Format

  • JSON Blob

Style

  • These will be processed and formatted to populate a Nutrition Facts Table

Example

{ "labels": [ { "fat": { "total": { "value": "1.5", "dailyPct": "2" }, "trans": { "value": "0" }, "saturated": { "value": "0", "dailyPct": "0" }, "monounsaturated": { "value": ".5" }, "polyunsaturated": { "value": ".5" } }, "iron": { "dailyPct": "25" }, "zinc": { "dailyPct": "25" }, "carbs": { "fiber": { "dietary": { "value": "2", "dailyPct": "8" }, "soluable": { "value": "1" } }, "sugar": { "total": { "value": "9" } }, "total": { "value": "22", "dailyPct": "7" } }, "title": "As Packaged", "niacin": { "dailyPct": "25" }, "sodium": { "value": "160", "dailyPct": "7" }, "calcium": { "dailyPct": "10" }, "protein": { "value": "2" }, "serving": { "size": "28 g", "perContainer": "ABOUT 19" }, "thiamin": { "dailyPct": "25" }, "calories": { "fat": "15", "total": "110" }, "vitaminA": { "dailyPct": "10" }, "vitaminC": { "dailyPct": "10" }, "vitaminD": { "dailyPct": "10" }, "folicAcid": { "dailyPct": "50" }, "magnesium": { "dailyPct": "6" }, "potassium": { "value": "115", "dailyPct": "3" }, "vitaminB6": { "dailyPct": "25" }, "riboflavin": { "dailyPct": "25" }, "vitaminB12": { "dailyPct": "25" }, "cholesterol": { "value": "0", "dailyPct": "0" }, "phosphorous": { "dailyPct": "8" } }, { "fat": { "total": { "value": "1.5", "dailyPct": "2" }, "trans": { "value": "0" }, "saturated": { "value": "0", "dailyPct": "0" }, "monounsaturated": { "value": ".5" }, "polyunsaturated": { "value": ".5" } }, "iron": { "dailyPct": "25" }, "zinc": { "dailyPct": "30" }, "carbs": { "fiber": { "dietary": { "value": "2", "dailyPct": "8" }, "soluable": { "value": "1" } }, "sugar": { "total": { "value": "15" } }, "total": { "value": "28", "dailyPct": "9" } }, "title": "As Prepared", "sodium": { "value": "220" }, "calcium": { "dailyPct": "25" }, "protein": { "value": "7" }, "serving": { "size": "28 g", "perContainer": "ABOUT 19" }, "thiamin": { "dailyPct": "30" }, "calories": { "fat": "15", "total": "150" }, "vitaminA": { "dailyPct": "15" }, "vitaminC": { "dailyPct": "10" }, "vitaminD": { "dailyPct": "25" }, "folicAcid": { "dailyPct": "50" }, "magnesium": { "dailyPct": "10" }, "potassium": { "value": "320", "dailyPct": "9" }, "vitaminB6": { "dailyPct": "25" }, "riboflavin": { "dailyPct": "25" }, "vitaminB12": { "dailyPct": "35" }, "cholesterol": { "value": "5", "dailyPct": "1" }, "phosphorous": { "dailyPct": "20" } } ], "audience": "adult", "warnings": "CONTAINS ALMOND INGREDIENTS.", "ingredients": "Whole Grain Oats, Sugar, Oat Bran, Corn Starch, Honey, Brown Sugar Syrup, Salt, Tripotassium Phosphate, Canola Oil, Natural Almond Flavor. Vitamin E (Mixed Tocopherols) Added To Preserve Freshness.Vitamins And Minerals: Calcium Carbonate, Zinc And Iron (Mineral Nutrients), Vitamin C (Sodium Ascorbate), A B Vitamin (Niacinamide), Vitamin B6 (Pyridoxine Hydrochloride), Vitamin B2 (Riboflavin), Vitamin B1 (Thiamin Mononitrate), Vitamin A (Palmitate), A B Vitamin (Folic Acid), Vitamin B12, Vitamin D3." }

Allergen Info Guidelines

Format

  • Text
  • No HTML/special characters
  • 500 character display limit for frontend display (if longer it will be trimmed)

Style

  • The 8 main allergens identified by the FDA are the main focus of this field
  • Contains/May Contain: any of the following
    • Milk
    • Eggs
    • Fish
    • Shellfish
    • Tree Nuts
    • Peanuts
    • Wheat
    • Soy

Example

Contains: Soy, Wheat

How Shipt Handles Weighted Products#

Setup 1 - Meat & Seafood - Piecewise

Used for meat products that are sold by the pound, but the exact weight of the package varies.

Example: chicken breast packs, pork chop packs, salmon filets.

Data required:

  • Product data flagging that product is to be sold "by weight"
  • Approximate weight of the package, filled in the unit_weight field
  • Item count per package (Optional, for the product detail description)

Setup 2 - Meat & Seafood - By the Pound

Used for meats where the amount someone can get will vary. Shoppers will select how much they want in ½ lb increments.

Example: ground beef, ground pork, deli meat.

Data required:

  • Product data flagging that product is to be sold "by weight"

Setup 3 - Produce - Piecewise Items by Counts

The default setup for nearly all items sold: a fixed set cost per single item.

Example: bag of salad, bell pepper, cereal, most consumer-packaged-goods.

Data required:

  • Product data with to be sold by count

Setup 4 - Produce - By Pound items sold by Piece/Package/Bunch

Used for produce that is sold and rung up in-store by the weight, but typically thought of as piecewise by customers. In the App we extrapolate the selling price as [item's average weight * $/lb] in single units.

Example: Bananas, apples, ginger root

Data required:

  • Product data flagging that product is to be sold "by weight"
  • Approximate weight of the package, filled in the average_weight field.

Setup 5 - Produce - Loose, Weighed Items By Pound

Users will select how much they want in Lb increments. However, there is no description or indication of the average weight of an item or how many items are in a pound.

Example: Green beans, salad bar.

Data needed:

  • Product data flagging that product is to be sold "by weight"

Products with Variations#

Shipt currently supports color & size variations. In order to support setting up variations in your marketplace, Shipt needs 3 aspects in the data feed:

  1. Both a parent and child product record. The parent record should be the product with a generic name (Example: "ShiptMart Cotton Bath Towel") and the child record should have a specific name (Example: "ShiptMart Large Red Cotton Bath Towel").
  2. The child products should have an ID that can be used to join all of the family together.
  3. variation_size and/or variation_color fields filled in.

Below is a simplified table showing how Product data should be structured.

SKUUPCProduct NameVariation SizeVariation ColorVariation Parent ID
1Shipt Fleece Hoodie
201111122333Red Shipt Fleece HoodieSmallRed1
501111122336Green Shipt Fleece HoodieLargeGreen1
801111122339Purple Shipt Fleece HoodieMediumPurple1

Pricing/Availability Data#

In order to effectively display prices & sales, we need information at the store location level. Promotions and sale pricing are not required, however we are unable to suppress the Sales (Deals) section of the Shipt Marketplace. The Deals tab will appear empty with a message that says 'Nothing on sale today. New deals will appear here.'

All fields marked with an asterisk (*) are required.

FieldColumn NameData TypeDescription
Store Number (*)store_numberStringAn identifier to denote the store number.
Product UPC (*)upcStringThe identifier you use to track a unique product sold in your store (can be an internal SKU or ID, as long as it's present in both files)
Price (*)priceDecimalThe price a product is sold for in-store , not online e-commerce prices.
AvailableavailableBooleanIndicates whether the product is available at the store location. True - "in-stock" false - "out of stock"
Sale Pricesale_priceDecimalThe price a product is sold at during a price reduction.
Buy One Get One FreebogoBooleanA flag for Buy One Get One free sales.
Sale Start Datestale_starts_onDateA sale's effective start date. If you do not have a set timeframe on sales, please let us know. We can support general sales ("We only can share what's currently on sale for today") or set timeframe sales ("Our weekly circular sales always run Wednesday to the following Tuesday")
Sale End Datesale_ends_onDateA sale's effective end date
Aisle LocationaisleStringWhere in the Store can the shopper find the product
Purchase Limitpurchase_limitIntegerA maximum limit for purchase for when you need to restrict the quantity of a particular item for individual store locations.

Custom Sales

Although not officially supported yet, Shipt can support different types of "Buy X Get Y" sales by extrapolating per piece costs. Example: Buy 2, Get 1 Free --> divide price by 3 items to get a price per item. "Buy 2 for $5, Get 1 Free" would be $5 / 3 items = $1.67 per item

We currently are unable to support the following types of sales:

  • "Buy Product X, Get Product Y for $1"
  • "Buy Products X & Y, Get Product Z for free"
  • "Buy Products X & Y together for discounted price"
  • "Get X% off when you buy Y"

Product Image Standards#

Product images are an important part of the Shipt user and shopper experience. Shipt currently holds images for hundreds of thousands of UPCs and may be able to cover most of your missing national brand products. However, Shipt relies on partners to provide accurate, consistent images for house and local brands. The target image coverage for retailers is 95%. Your Shipt partner success manager and data engineer can work with you to develop a strategy for collecting missing images.

Image Delivery

In the Products data table, which also includes pricing and category details, product images should be included as a link to the URL with a photo of the product. Shipt can assist with a large initial load of images, but incremental additions post-launch should be included within the standard data feed.

Image Sources

Typically a majority of images come from partners through the daily data feed, but Shipt can use other data sources to increase the picture match for your catalog. Outside of matching existing images within the Shipt Database, we have connectors to Syndigo, ItemMaster, IX-One, and Salsify to download more.

Shipt attempts to re-download the images every 7-14 days in order to make sure we always have the latest, most current version.

What are best practices for photographing product images?

Setup

  • Use the same solid seamless white background for all products.
  • Steady the camera with a tripod.
  • Use a reflector to avoid shadows and glare on the product.
  • Be consistent with the lighting, image size and angles.

Image Formatting

  • Formatting Format: PNG with clipped background, or JPG with a white background (255, 255, 255)
  • Clipped images or images without a background are preferred.
  • Color space: sRGB
  • Size: 600px x 600px minimum or larger
  • DPI: 72-dpi minimum or better
  • File naming: "UPC".png

Examples

Style

  • Bright, high-resolution photos
  • No shadows or reflections visible in image
  • 0 degree angle preferred

Good: Bad:

  • Top down orientation preferred

Good: Bad:

  • Packaging must be unbroken

Good: Bad:

  • No colored backgrounds

Good: Bad:

  • No Staged/"Lifestyle" photos

Good: Bad:

  • Package image must represent size for UPC
  • No pricing/visible expirations if possible
  • If the item is unbranded, then image must reflect tha

Special Notes for using Optimized Product Imagery for Primary Image

  • No floating titles or "Optimized" content outside of item image

Good: Bad:

  • Enhanced information on the packaging (enlarged size information, easier to read titles, etc) is acceptable, but is better suited for secondary images
  • The enhanced information should not disguise the original packaging, the Shipt Shopper must be able to find the product

Secondary Image Guidelines

Format

  • File Format: .jpg with white background (255) or .png clipped background
  • Clipped Images or Images without a background are preferred
  • Color Spacing: sRGB
  • Size: 600x600px minimum
  • DPI: 72-dpi minimum
  • Limit of 5 total Secondary Images, in the order you wish to see them

Style

  • Bright, high-resolution photos
  • No shadows or reflections visible in image
  • Back, side, and angle photos are all acceptable
  • Photos of ingredients and nutrition facts are also acceptable
  • Optimized product imagery is acceptable for secondary images

Product Enrichment#

Over the years, Shipt has developed our own product content library that we've dubbed "Universal Products." We have relationships with several content providers out there, including Syndigo (formally Gladson, ItemMaster, and Kwikee), IX-ONE, and Salsify. Some CPGs also provide us content directly. From these companies we get imagery, product names, descriptions, and ingredients.

We've also partnered with Nutritionix, now a subsidiary of Syndigo, to provide Shipt with nutritional content and product tags/attributes (ex: organic, vegan, gluten-free).

By default, we will use this information to enrich your product metadata. Our content process begins with us applying any needed product cleanup in our data pipeline. This often means applying some consistency standards to match Shipt standards. For example, we prefer to list sizes on a 12pk of soda as 12 ct; 12 fl oz. After the initial data load, we enrich the products based on matches and manually review anything untouched.

Any updates in the data feed after this point in time will not be processed. Because we've enriched what matches and manually QA'd everything else, we want to avoid overwriting that work with something that may be less accurate. We do not have any hybrid approaches - it's an all or nothing configuration.

Store Location Data#

While we are not yet automatically ingesting changes to store locations like hours or special closures, we do need a full list of the individual locations that will be on the Shipt Marketplace as we prepare for launch.

All fields marked with an asterisk (*) are required.

FieldColumn NameData TypeDescription
Store Number (*)store_numberStringAn identifier to denote the store number.
Store NamenameStringThe individual store location name, for example, "Shipt Markets at River Crossings"
Street AddressaddressStringA location's street address.
CitycityStringCity of operation.
StatestateStringState of operation.
Zip CodezipStringZip code of operation.
Store StatusstatusStringA column indicating if a particular location is active or disabled.
Store Hours<multiple>StringThere is some flexibility in format here. If all locations have the same hours each day, providing an "open" & "closed" field will suffice. If operating hours are specific to each day, include separate opening & closing hours for each day.

Marketplace Onboarding FAQs#

How closely does our feed need to follow these guidelines?

The user experience is only as good as the data we get from a retailer. While we do our best to create a consistent experience for all users this all starts with the data we are provided. The further you are from these, the longer it may take us to bring you to market.

We've built our own ETL processing framework in Python. Over the years, seeing a large variety of retailers, that framework has become quite robust and flexible. Minor departures like field names or separate vs all-in-one store pricing files we can handle without any delays. Large differences like only having abbreviated product names or needing to parse size values from another column can add days to weeks to our timeline.

If you have additional concerns about meeting these requirements, please speak with your Business Development Representative at Shipt

What are the most significant data items to work on?

According to our catalog team, here are some of the more troublesome we see in partner data:

  • Duplicate produce items that are treated as separate SKUs by partners. If we ingest this as-is, members can see duplicate items for produce items at a particular store location. We recommend that you aggregate produce items sourced from multiple vendors into a "parent" item & send us availability & pricing for that item.
  • Invalid treatment of UPCs. We regard the UPC-A formatting standard as our internal standard. Especially if you don't have a lot of product metadata referenced in the Products section above, Sending us a valid UPC-A helps resolve your products set to a Universal Product, allowing you to take advantage of our internal library of product data. The GS1 website has a number of resources on this subject.
  • Sending merchandising or promotional categories for your products. At Shipt, we categorize products primarily to its taxonomical home (a stick of butter would be categorized to "Dairy" & "Butter," for example). Sending categories associated with special events or promotions (like "ShiptMart's Favorite Pastry Ingredients") can result in delays in making that product visible on your storefront.

What products are not allowed?

Size limitations

  • Listed products should be under 50" in any single dimension
  • Listed products should be under 35" in any two dimensions
  • Listed products should weigh 50 lbs or less

Prohibited Product Categories

  • Cigarettes
  • Tobacco
  • Gift cards
  • Propane tanks (small camping tanks are fine)
  • Magazines
  • Newspapers
  • Fireworks
  • Movie Tickets
  • Lottery Tickets
  • Live Animals - ex: Fish from the Pet Section or Live Seafood
  • Guns
  • Ammunition
  • Pseudoephedrine
  • Rentals ex: rug doctor
  • Furniture/Hardware - over 50 lbs
  • Coupons
  • Donations
  • CBD Products

Miscellaneous Prohibited Products

  • Food Court Items
  • Target Cafe
  • Starbucks
  • Pizza Hut
  • Quantity- or age-restricted items

Specific Product FAQ

Propane tanks

  • Small camping tanks are allowed
  • Burners for catering are allowed
  • Larger five-gallon tanks for grilling are not allowed

Can you support special/foreign characters?

If it renders in UTF-8, we likely can. Please no HTML text.