Appearance
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
distanceKmfield 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 availablehasTastingBar- In-store tasting barhasWheelchairAccessability- Wheelchair accessiblehasSameDayPickup- Same-day pickup availablehasPublicTransit- Near public transithasBilingualService- Bilingual service availablehasVintagesSection- Premium wine selectionhasProductConsultant- Product consultant on staffhasColdBeerRoom- 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 orderUPDATED_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
- Inventory Lookup - Check what's in stock at stores
- Product Discovery - Find products to check availability
- Rate Limits - API usage limits