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:
- Cursor-based pagination (first/last/after/before)
- 4 filter options
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:
operator- Aggregation function:sum,mean,min,maxtransform- Mathematical transformation:absdateRange- Filter to specific date rangefacilityUrlList- Filter to specific facilities
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:
- 2 simple fields
- 1 enum field (with predefined values)
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:
PROD_STORE_ACTIVE- ActivePROD_STORE_INACTIVE- Inactive
Filters
productStoreUrl
- Label: Store
- Type: List|String
- Enabled: Yes
Filter Type: Text value
Usage Example:
GraphQL
query {
productStoreViewConnection(
first: 10
productStoreUrl: "/finaleengineer/api/productstore/100000"
) {
edges {
node {
name
productStoreUrl
}
}
}
}
status
- Label: Status
- Type: List|String
- Enabled: Yes
- Options:
- Active (PROD_STORE_ACTIVE)
- Inactive (PROD_STORE_INACTIVE)
Filter Type: Predefined options
Usage Example:
GraphQL
query {
productStoreViewConnection(
first: 10
status: ["PROD_STORE_ACTIVE", "PROD_STORE_INACTIVE"]
) {
edges {
node {
name
status
}
}
}
}