Product Store

Product Store

Overview

Product Stores represent sales channels or marketplaces where products are sold. They define the context for product availability, pricing, and visibility - essentially, which products are offered on which sales channels and under what terms. This supports multi-channel selling where the same product might be available on your website, Amazon, eBay, and retail stores with different prices or availability on each channel.

Each product store represents a distinct sales channel. Your Shopify website is one store, your Amazon seller account is another, your physical retail location is a third. By creating separate product store records for each channel, you can manage channel-specific settings and track sales by channel. This channel tracking supports profitability analysis and marketing ROI calculation.

Product visibility by store controls where products appear. A product might be enabled for your website store but disabled for Amazon. This selective availability supports different product mixes by channel - perhaps some products are exclusive to your website, others are available everywhere. The store settings control this visibility without needing duplicate product records.

Pricing can vary by product store. A product might have a retail price of $29.99 on your website but sell for $24.99 on Amazon due to competitive pressure. Price levels and special pricing rules can be assigned to stores, letting you optimize pricing for each channel's market dynamics. This pricing flexibility is essential for competitive multi-channel selling.

Inventory allocation by store supports channel-specific stock management. You might allocate 100 units to Amazon FBA, 50 units to your Shopify store, and keep 200 units unallocated for general fulfillment. These allocations help prevent overselling when inventory is committed to specific channels that have their own fulfillment requirements.

Integration connections often tie to product stores. When you integrate with Shopify, that integration connects to your Shopify product store record. Product data flows from Finale to that specific store based on the store's settings. Order data flows from that store back to Finale, tagged with the store as the source. This store-level integration organization keeps multi-channel data flows manageable.

Sales analysis by product store answers critical business questions. Which channels are most profitable? Which products sell best on each channel? How does average order value compare across channels? By tagging transactions with their source store, the system enables this channel-level analysis that drives strategic decisions about where to invest in growth.

GraphQL API

The productStore collection provides access to productStore data via the GraphQL API. All queries use the Relay connection specification with cursor-based pagination.

Query Name:productStoreViewConnection

Available Features:

Basic Query

The productStore collection is accessed via the productStoreViewConnection query, which returns a Relay-style connection with pagination support.

GraphQL

query {
  productStoreViewConnection(first: 10) {
    edges {
      node {
        name
        productStoreUrl
        status
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}

Pagination

Use cursor-based pagination to retrieve large datasets:

GraphQL

# First page
query {
  productStoreViewConnection(first: 50) {
    edges {
      node { name }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}

# Subsequent pages
query {
  productStoreViewConnection(first: 50, after: "cursor-from-previous-page") {
    edges {
      node { name }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}

Filtering

Apply filters to narrow results:

GraphQL

query {
  productStoreViewConnection(
    first: 10
    productStoreUrl: "/finaleengineer/api/productstore/100000"
  ) {
    edges {
      node { name }
    }
  }
}

Summary and Aggregation

This collection supports metrics aggregation through the summary field. You can calculate totals, averages, counts, and other aggregate values across filtered data.

Query Structure

GraphQL

productStoreViewConnection(filters...) {
  summary {
    errorCode
    errorMessage
    metrics {
      # Calculated metrics (see table below)
    }
  }
}

Available Metrics

This collection provides 1 metric that can be aggregated:

Metric Parameters Description
count None Count of items in the result set

Common Parameters:

Examples

Example 1: Total productStore Metrics

Calculate aggregate metrics across all productStore records:

GraphQL

query {
  productStoreViewConnection(first: 1) {
    summary {
      errorCode
      errorMessage
      metrics {
        totalCount: count
      }
    }
  }
}

Expected result structure:

JSON

{
  "data": {
    "productStoreViewConnection": {
      "summary": {
        "errorCode": null,
        "errorMessage": null,
        "metrics": {
          "totalCount": [1523]
        }
      }
    }
  }
}

Fields

This collection has 3 fields:

Simple Fields

name

The user-defined display name for a product store, providing a human-readable label to identify the store in the user interface and reports.

Label: Name

Sortable: No

productStoreUrl

The unique identifier for a product store. This field is automatically generated by the server and serves as the primary key for the productStore collection.

Label: Product store url

Sortable: No

Enum Fields

status

Indicates whether the product store is active or inactive.

Label: Status

Sortable: No

Possible Values:

Filters

productStoreUrl

Filter Type: Text value

Usage Example:

GraphQL

query {
  productStoreViewConnection(
    first: 10
    productStoreUrl: "/finaleengineer/api/productstore/100000"
  ) {
    edges {
      node {
        name
        productStoreUrl
      }
    }
  }
}

status

Filter Type: Predefined options

Usage Example:

GraphQL

query {
  productStoreViewConnection(
    first: 10
    status: ["PROD_STORE_ACTIVE", "PROD_STORE_INACTIVE"]
  ) {
    edges {
      node {
        name
        status
      }
    }
  }
}