Shopify Integration

Integrate your Shopify instance through Shopify Private Apps

Updated over a week ago

Summary

Toolio provides turn-key integration with your Shopify instance via Shopify Custom Apps. With the Shopify integration, Shopify can serve as a source of truth for your Sales, Inventory and Product information. The table below gives an overview of the type of information available for each of the data feeds, and your options where Shopify doesn’t have all the required information.

Shopify Feeds

Products, variants and collections

Provides variant level meta-data and pricing information. Shopify will likely not have the merchandise hierarchy information you need for planning. In this case, you can manually upload product attributes directly into Toolio.

Orders, transactions and fulfillments

Provides variant and location level sale information. If you are running all your commerce activity on Shopify, then Shopify will be your source of truth for sales information. If not, integrating the sales feed from your ERP will be a better option.

Inventory

Provides variant and location level daily inventory information. Toolio snapshots your inventory daily, so that you can leverage historical inventory data effectively.

How to Integrate Shopify and Toolio

2. Grant ‘Read Access’ in Admin API for the following scopes:

  • Inventory

  • Locations

  • Products

  • Orders

Here is an example for how to grant access for the inventory scope.

You can read more about API Scopes on Shopify here

3. Share Integration Details

Please share the following integration details with your Customer Success manager at Toolio:

  • Admin API access token

  • API Key

  • API Secret Key

  • Shopify Shop Name

FAQs

Sales numbers in Toolio are not matching my Shopify report

You might have some customizations in your Shopify report, causing the sales numbers in Toolio to be different than what you have in your Shopify report. The best way to diagnose this discrepancy is:

  1. Focus on identifying the discrepancy on the smallest time aggregation possible; ideally 1 day.

  2. Make sure that the same filters are applied on Toolio & Shopify

  3. Make sure that you are comparing the right metrics

Let's go through the steps of how to achieve this.

See sales by SKU on a particular date

Toolio has an out of the box report under Sales > Sales by Location , which by default filters to the last 7 days. Use the date range in this report to pick 1 day where the sales numbers are not matching. Below is what the filter would look like

In the Shopify report, also find the same date, and make sure that it's broken down by SKU. Shopify has an out of the box report for this called Sales by Product Variant SKU. Then by comparing SKU by SKU, starting from the top selling SKU, you should be able to identify which SKU is being included in the Toolio report vs. Shopify Report

Make sure that same filters are applied

If you identify a SKU that is in Toolio, but not in your Shopify report, e.g. Freebies, Gift Bags, Excluded Channels, make sure that the same SKUs are being excluded using Import Filters.

Make sure that you are using the same metrics

Please familiarize yourself with the Shopify Metrics & Toolio Metrics, and make sure that you're comparing apples to apples. For example, Shopify definition of Gross Sales is inclusive of discounts, whereas Gross Sales Retail in Toolio excludes discounts. Please see here for more on this topic. It is always easiest to compare Shopify's Ordered Quantity to Toolio's Gross Sales Units as a starting point.

Gross Sales Cost in Toolio is lower than expected

Please make sure that all products in your Shopify account are attributed with accurate costs at the variant level. Please see how to bulk update products on Shopify here.

If you cannot update your pricing information on Shopify, you can use Toolio's data enriching capability; however, managing the sales cost information directly in Shopify (or your ERP) would be the recommended option.

Gross Sales Retail in Toolio is lower than expected

Gross Sales Retail in Toolio is defined as topline sales after discounts and markdown but before returns. Please note that this definition differs from "Gross Sales" in Shopify, which is before discounts. Please make sure that discounts and markdowns have been deducted from your Shopify Gross Sales when comparing against the Gross Sales Retail value in Toolio. You can read more about the metrics in Toolio and how they are defined here.

Discounts in Toolio are higher than expected

If you are using a returns solution such as Loop Returns, please read more about how exchanges are handled in Toolio here.

How are Markdowns captured with Shopify?

Please see this article to understand how Markdowns are calculated automatically as a part of the Shopify Integration.

Product Images are Incorrect
Please make sure that your product images are attributed at the variant level in Shopify, and that the Variant Ids in Shopify are identical to the Variant Ids on your product feed.

Sales Location Discrepancies

Because sales location from Shopify is captured after fulfillment has begun, please note that sales which have not yet entered the fulfillment process will be tagged with a default fulfillment location. Please consult with your Customer Success Manager to change your default location.

How are Returns Calculated?

Shopify Orders feed contains the items that were refunded in each Order, and that is the information Toolio uses to calculate returns. Note that the returns values are attributed to the day that the refund was initiated, not the date of they original sale.

How do Shopify API fields map into Toolio fields?

Sales Feed

Toolio Field

Shopify Field

sale_id

order.line_items.line_item_id

timestamp

order.created_at

variant_id

order.line_items.sku

sales_units

order.line_items.quantity

sales_cost

fetched from product feed

sales_retail

(lineItem.price) * lineItem.quantity - totalDiscount

markdown

Math.max(0,(NUMBER('{shopify_variant__compare_at_price}' || 0) * NUMBER('{sales_units}') - '{discount}' - '{sales_retail}'))

discount

sum(order.line_items.discount_allocations.amount)

returns_units

order.refunds.refund_line_items.quantity

returns_cost

fetched from product feed

returns_retail

order.refunds.refund_line_items.subtotal

location

origin_location.name

Related Articles


Did this answer your question?