Skip to content

Store Location

Find nearby LCBO stores, filter by amenities, and get detailed location information.

Geospatial Filtering

When using latitude, longitude, and radiusKm filters:

  • Results are automatically sorted by distance (nearest first)
  • The distanceKm field is computed and included in results
  • Coordinates use decimal degrees (e.g., Toronto: 43.6532, -79.3832)
  • Radius is in kilometers

Find Nearby Stores

Use case: User clicks "Find stores near me" or enters their postal code.

graphql
query StoresNearby(
  $latitude: Float!
  $longitude: Float!
  $radiusKm: Float!
) {
  stores(
    filters: {
      latitude: $latitude
      longitude: $longitude
      radiusKm: $radiusKm
    }
    pagination: { first: 25 }
  ) {
    edges {
      node {
        externalId
        name
        address
        city
        latitude
        longitude
        distanceKm
        hasWheelchairAccessability
        hasTastingBar
        hasParking
        hasPublicTransit
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
    totalCount
  }
}

Variables (Toronto downtown example):

json
{
  "latitude": 43.6532,
  "longitude": -79.3832,
  "radiusKm": 10
}

Results are automatically sorted by proximity, with the distanceKm field showing how far each store is from the search location.

Filter by Amenities

Use case: User wants stores with specific features (wheelchair access, tasting bar, parking).

graphql
query StoresWithFeatures {
  stores(
    filters: {
      latitude: 43.6532
      longitude: -79.3832
      radiusKm: 15
      hasTastingBar: true
      hasWheelchairAccessability: true
    }
    pagination: { first: 20 }
  ) {
    edges {
      node {
        externalId
        name
        address
        distanceKm
        hasTastingBar
        hasWheelchairAccessability
        hasParking
        hasVintagesSection
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
    totalCount
  }
}

Available Amenity Filters

  • hasParking - Store has parking available
  • hasTastingBar - In-store tasting bar
  • hasWheelchairAccessability - Wheelchair accessible
  • hasSameDayPickup - Same-day pickup available
  • hasPublicTransit - Near public transit
  • hasBilingualService - Bilingual service available
  • hasVintagesSection - Premium wine selection
  • hasProductConsultant - Product consultant on staff
  • hasColdBeerRoom - Cold beer room

Get Store Details

Use case: User clicks on a store from the list to see full details.

graphql
query StoreDetails($storeId: String!) {
  store(id: $storeId) {
    externalId
    name
    address
    city
    latitude
    longitude
    
    # Hours
    mondayOpen
    mondayClose
    tuesdayOpen
    tuesdayClose
    wednesdayOpen
    wednesdayClose
    thursdayOpen
    thursdayClose
    fridayOpen
    fridayClose
    saturdayOpen
    saturdayClose
    sundayOpen
    sundayClose
    
    # Amenities
    hasParking
    hasTastingBar
    hasWheelchairAccessability
    hasSameDayPickup
    hasPublicTransit
    hasBilingualService
    hasVintagesSection
    hasProductConsultant
    hasColdBeerRoom
  }
}

Variables:

json
{
  "storeId": "511"
}

Store Hours Format

Store hours are 24-hour format strings (e.g., "09:00", "21:00"). Closed days are null.

Search Stores by Name

Use case: User searches for a specific store location by name.

graphql
query SearchStores($storeName: String!) {
  stores(
    filters: {
      name: $storeName
    }
    pagination: { first: 20 }
    sortBy: NAME
    sortDirection: ASC
  ) {
    edges {
      node {
        externalId
        name
        address
        city
        latitude
        longitude
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
    totalCount
  }
}

Variables:

json
{
  "storeName": "Queen"
}

This searches for stores with "Queen" in the name (e.g., "Queen & Portland", "Queen Street").

Store with Product Availability

Use case: Show stores near user that have a specific product in stock.

graphql
query StoresWithProduct(
  $latitude: Float!
  $longitude: Float!
  $radiusKm: Float!
  $sku: String!
) {
  product(sku: $sku) {
    name
    priceInCents
    inventories(
      filters: {
        latitude: $latitude
        longitude: $longitude
        radiusKm: $radiusKm
        minQuantity: 1
      }
      pagination: { first: 10 }
    ) {
      quantity
      distanceKm
      store {
        externalId
        name
        address
        city
        hasParking
        hasTastingBar
      }
    }
  }
}

See the Inventory Lookup guide for more details on checking product availability.

Sorting Stores

When NOT using geospatial filters, you can sort by:

  • NAME - Alphabetical order
  • UPDATED_AT - Recently updated stores

When using latitude/longitude/radiusKm, stores are always sorted by distance (nearest first) and cannot be sorted by other fields.

Pagination

Use cursor-based pagination to load more stores:

graphql
query StoresPage($latitude: Float!, $longitude: Float!, $after: String) {
  stores(
    filters: {
      latitude: $latitude
      longitude: $longitude
      radiusKm: 20
    }
    pagination: {
      first: 25
      after: $after
    }
  ) {
    edges {
      node {
        externalId
        name
        address
        distanceKm
      }
      cursor
    }
    pageInfo {
      hasNextPage
      endCursor
    }
    totalCount
  }
}

To load the next page, use pageInfo.endCursor as the after value.

Next Steps