When to use
- Brand owner asks “which stores carry my products?”
- Merchandising: “where do I have distribution gaps?”
- Combined with
brand-search-demandto identify demand/supply mismatch.
Auth
OAuth token with scopebrands:read and membership in the owning
organization.
Endpoint
Response (group_by=store)
Response (group_by=region)
Data sources
InStoreOffer— physical retail offers, with FK toproduct,location,organization(the retailer),status,quantity_on_hand,updatedOnlineOffer— online retailers’ offers (optional in response viainclude=online)Location— PostGIS Point for store coordinatesBrand → Product → Offer— brand ownership joined in viaProduct.brand.organization == <caller's org>
Dimensions available today
- Store-level distribution — one row per location × product
- Stock state — from
InStoreOffer.statusandquantity_on_hand - Freshness —
last_inventory_syncflags stale data (>48h stale) - Geographic aggregation — region / city via
Locationfields
Not yet available
- Sell-through velocity — we track inventory snapshots but not POS throughput. Planned via integrations API.
- Distribution gap alerts — auto-detect where
brand-search-demandis high but footprint is zero. Planned as a dedicated skill.
Guidance for agents
- Start with
group_by=regionfor a high-level picture; drill into stores only if the user asks. - Stale inventory flags — any store with
last_inventory_sync > 48h agoshould be marked; don’t let brand owners overreact to ghost data. - Online + offline: by default this skill reports physical retail
only. If the user asks about total distribution, call with
include=online(planned parameter).
Related skills
brand-scan-summary— engagement by productbrand-search-demand— where demand lives; cross-reference for gaps