This document provides instructions for integrating Shopify data into Panoply. The following items will be covered:

Shopify Data Integration

To integrate Shopify data into Panoply using default selections, complete the following steps. For more advanced options, complete the following and refer to the subsequent sections for detailed information.

  1. Click Data Sources in the navigation menu.
  2. Click the Add Data Source button.
  3. In the Data Sources – Choose Source Type window, select Shopify. Shopify is listed under APIs.
  4. In the Data Sources – Shopify screen, type the name of your shop as it appears in the Shopify subdomain scheme. For example, if your URL is, you would type This-Is-Your-Shop-Name.
    • Even if your Shopify store uses a custom domain, your URL is still active. See Shopify’s documentation on Managing Domains for more information on identifying your shop name.
  5. Click Connect.
  6. If you are not already logged into your Shopify store, you will be prompted to log in. Enter your Shopify username and password, and then click Log in.
  7. A Shopify page explains that the Shopify Data Source will be able to access your Shopify data. Click Install unlisted app.
  8. (Optional) To customize the ingestion from your data source, review the advanced options.
  9. Click Collect.

The Data Sources – Shopify window will appear grayed out while the data integration is pending. A small green progress bar appears below Shopify.

You will be prompted to set up the integration of another data source. You can set up multiple data integrations without impacting the ingestion of the already scheduled or pending data integrations.

From the Data Sources main menu, you can monitor the data ingestion status of the scheduled and pending data integrations. After the data ingestion is complete, you can clean or transform your data in the Tables menu.

Advanced Options

Clicking Show next to Advanced will expand the Data Sources - Shopify window to include Destination, Primary Key, Exclude, Parse string, and Truncate table.

  • Destination - Default isshopify_{__resource}. This means that a table will be created for each unique __resource value, and each table will be prefixed with shopify_. If you want to customize the destination for this data source solely by altering the prefix, be sure to keep the _{__resource} postfix. For example, you could change shopify to company-name, resulting in this destination: company-name_{__resource}. If you do not include the _{__resource} postfix, all Shopify data from this data source will be collected into a single table.

  • Primary Key - Default is id, which is returned by the Shopify API.

  • Incremental Key - Not configurable for this data source. The Shopify data source pulls data incrementally based on when the ingestion process was last suceessfully completed. Panoply pulls all of your Shopify data the first time you click the Collect button, which results in a slower run time. All subsequent data collections (for the same Shopify data source) only pull the delta between the last time it finished successfully and now.

Data Schema

Panoply uses Shopify’s REST Admin API to ingest data into your Panoply data warehouse. This article explains the details of that integration. For complete information regarding the Shopify REST API, see Shopify’s REST Admin API reference documentation.

Because some Shopify data is nested, such as the billing address details for an order (see the Order properties for details), you should be aware of what Panoply does with nested data. By default, Panoply transforms nested data into a set of many-to-many or one-to-many relationship tables. This is the classic solution for nested structures in relational databases, where the nested model is transformed into several flat tables that can be joined together. In the case of the billing_address data for an order, if you use the default destination, then Panoply would create a table called shopify_orders_billing_address to store the billing address information associated with the orders stored on the shopify_orders table.


Retrieves all orders, along with any associated refunds, transactions, and checkouts. Each order is a record of a complete purchase that includes details of the customer, their cart, and any transactions.

Data for each of the following are related to an order.


Returns information about a shop’s customers, such as their contact details, their order history, and whether they’ve agreed to receive email marketing.

Column Name Data Type Description
accepts_marketing Boolean Whether the customer has consented to receive marketing material via email.
accepts_marketing_updated_at Datetime The date and time (ISO 8601 format) when the customer consented or objected to receiving marketing material by email. Set this value whenever the customer consents or objects to marketing materials.
admin_graphql_api_id Text  
created_at Datetime The date and time (ISO 8601 format) when the customer was created.
currency Text The three-letter code (ISO 4217 format) for the currency that the customer used when they paid for their last order. Defaults to the shop currency. Returns the shop currency for test orders.
email Text The unique email address of the customer. Attempting to assign the same email address to multiple customers returns an error.
first_name Text The customer’s first name.
id Text A unique identifier for the customer.
last_name Text The customer’s last name.
last_order_id Number The ID of the customer’s last order.
last_order_name Text The name of the customer’s last order. This is directly related to the name field on the Order resource.
marketing_opt_in_level Text The marketing subscription opt-in level (as described by the M3AAWG best practices guideline) that the customer gave when they consented to receive marketing material by email. If the customer does not accept email marketing, then this property will be set to null
orders_count Number The number of orders associated with this customer.
phone Text The unique phone number (E.164 format) for this customer. Attempting to assign the same phone number to multiple customers returns an error. The property can be set using different formats, but each format must represent a number that can be dialed from anywhere in the world.
state Text The state of the customer’s account with a shop. Default value: disabled.
tax_exempt Boolean Whether the customer is exempt from paying taxes on their order. If true, then taxes won’t be applied to an order at checkout. If false, then taxes will be applied at checkout.
total_spent Number The total amount of money that the customer has spent across their order history.
updated_at Datetime The date and time (ISO 8601 format) when the customer information was last updated.
verified_email Boolean Whether the customer has verified their email address.

Customer Addresses

Returns information about customer addresses.

Column Name Data Type Description
address1 Text The customer’s mailing address
address2 Text An additional field for the customer’s mailing address.
city Text The customer’s city, town, or village.
country Text The customer’s country.
country_code Text The two-letter country code corresponding to the customer’s country.
country_name Text The customer’s normalized country name.
customer_id Number A unique identifier for the customer.
default Boolean Whether this address is the default address for the customer.
first_name Text The customer’s first name.
id Text A unique identifier for the address.
last_name Text The customer’s last name.
name Text The customer’s first and last names.
phone Text The customer’s phone number at this address.
province Text The customer’s region name. Typically a province, a state, or a prefecture.
province_code Text The two-letter code for the customer’s region.
shopify_customers_id Text  
zip Number The customer’s postal code, also known as zip, postcode, Eircode, etc.


Retrieves a list of products.

Abandoned Checkouts

Queries the Checkout resource to return abandoned checkouts. A checkout is considered abandoned when a customer has entered billing and shipping information, but hasn’t completed the purchase. Each Checkout object includes a URL to the online checkout, where the customer can complete their purchase.

Custom Collection

Retrieves a list of custom collections. A custom collection is a grouping of products that a merchant can create to make their store easier to browse. The merchant creates a custom collection and then selects the products that will go into it.


Retrieves a list of metafields that belong to a Shop resource. Metafields can be used in several ways, such as to add a summary to a blog post. You can also use metafields to share information with other Shopify apps.


Retrieves all collects for the shop. The Collect resource connects a product to a custom collection. For every product in a custom collection there is a collect that tracks the ID of both the product and the custom collection. A product can be in more than one collection, and will have a collect connecting it to each collection. Unlike many Shopify resources, collects aren’t apparent to store owners.

Getting started is easy! Get all your data in one place in minutes.
Try Free