Menu

This page exists in one language only. Some pages here are English, some Swedish.

Platform Overview

Stockisto is the supplier's record of the channel. A supplier's own record stops at the first sale; Stockisto keeps the record of what happens after it, through the retailers and installers in between. The surfaces that collect it are a branded, white-labeled locator for consumers, a self-service portal for the retailers in your network, and the analytics built on both. This page explains who Stockisto serves, how value flows through the supplier → retailer → consumer → installer chain, and the multi-tenant model and module map underneath. Start here, then follow the cross-links into the role-specific guides.


What Stockisto is

At its core, Stockisto turns a supplier's list of retailers into three connected things:

  • A branded "where to buy" locator: a white-labeled, map-and-list locator consumers use to find a retailer that carries your products. It filters by current stock status, showroom availability, and service tags.
  • Retailer-network intelligence: the relationships, profiles, and analytics behind the locator. You manage your network and bring discovery data to every partner conversation.
  • Installer lead routing: a separate installers platform that surfaces qualified installers near a consumer and routes lead requests to them.

It is built for European B2B suppliers, supports GDPR data deletion on request, and is EU-hosted (Sweden Central).

More than an address list

A where-to-buy widget is a list of addresses with no relationship context and no analytics. Stockisto models the full supplier–retailer network, lets retailers maintain their own profiles, and keeps the record of what the network delivers, so value can be shown at every partner meeting.


The three audiences

Stockisto serves three audiences, but they are modeled differently in the system. Suppliers and retailers are tenant types; installers are a separate platform.

AudienceHow it's modeledPrimary value
SuppliersTenantType.SupplierBranded locator, network management, ROI analytics
RetailersTenantType.RetailerSelf-service profile, get found, own performance data
InstallersSeparate installer platform (not a tenant type)Surface in discovery, receive routed local leads

The TenantType enum defines exactly three values: Supplier, Retailer, and Stockisto (the internal platform operator). There is no Installer tenant type.

Why installers are separate

An installer is registered as an InstallerCompany in the installers platform with its own approval lifecycle ( Pending → Approved → Rejected → Revoked). It is not tenant-scoped business data and does not log in as a supplier or retailer tenant. Consumers are not accounts at all. They use the public locator anonymously.


The value chain

Value flows in one direction, and each link makes the next one stronger:

  1. Supplier imports its retailer network, brands a locator, and publishes it.
  2. Retailer claims and completes its profile (stock tags, showroom, services) so it appears accurately in the locator.
  3. Consumer searches the branded locator, filters by stock/showroom/service, and finds a nearby retailer that carries the product.
  4. Installer is surfaced for jobs that need fitting, and qualified lead requests are routed to nearby approved installers.

Every step generates analytics (searches, profile views, CTA clicks, lead requests) that flow back to the supplier and the retailer as proof of the network's discovery value. See the Analytics & Attribution guide for what's tracked and the Searches, clicks and reports guide for the dashboards.


The multi-tenant model

Stockisto is a single deployment shared by many tenants. A tenant is one organization: a supplier or a retailer (or the internal Stockisto operator). Isolation is enforced in the data layer, not left to individual queries.

TenantId row isolation

Every row of tenant business data carries a TenantId, and any entity that stores supplier or retailer data implements the ITenantScoped marker interface. EF Core global query filters key off that interface to scope every read to the caller's own tenant, and a write-time guard refuses to insert any tenant-scoped row that hasn't been stamped with a TenantId. A query against retailers, products, or analytics can therefore only ever return the caller's own rows.

Read the security page for the details

The exact isolation machinery (global query filters, the write-side TenantInsertGuard, the operator-only cross-tenant bypass, RBAC roles, and authentication) is documented in the Security & Data guide.

Lifecycle stages

Each tenant has an authoritative LifecycleStage that advances as the tenant gets value from the platform. Transitions are append-only: there is no rollback.

StageMeaning
TrialSigned up, in the free trial, not yet activated
ActivatedCompleted onboarding and reached first value (a live locator)
ActiveUsing the platform in an ongoing way
MonetizedOn a paid plan
AdvocateReferring other suppliers into the platform

Plan tiers

A tenant's commercial plan is its PlanTier. New self-serve tenants start on Free with a 90-day trial at Pro limits. When the trial ends, the tenant settles onto its own tier:

TierRetailersBrandsUsersHow to buy
Free1012Self-serve
Starter (displayed as "Start")10013Self-serve
Growth500315Self-serve
Pro2,0001040Sales
EnterpriseUnlimitedUnlimitedUnlimitedSales

Subscription state is tracked separately on the tenant (SubscriptionStatus: Trial, Active, PastDue, Canceled, Paused). For prices and how billing works, see the Plans & Billing guide.

Stages and tiers are independent

Lifecycle stage describes how much value a tenant is getting; plan tier describes what they pay for. A tenant can be Active on a trial, or Monetized on the Growth tier. The two move on their own tracks.


Module map

The backend is organized into focused modules, each owning its own bounded context and database schema. The main modules are:

ModuleResponsibility
IdentityTenants, users, roles, invitations, authentication
NetworkRetailers, locations, supplier–retailer relationships, groups, sharing
CatalogBrands, products, SKUs, assortments, locator config
IngestionThe public intake API for source-data partners
WebhooksOutbound webhooks to supplier systems
ActivationOnboarding, locator projects, publish state, install-health
LocatorThe public "where to buy" search and embed endpoints
AnalyticsDiscovery event capture and reporting
EntitlementsPlan tiers, feature flags, and quota enforcement
BillingSubscriptions and Stripe integration
LifecycleLifecycle-stage transitions and records
CampaignsCampaigns to retailers and groups
PRMPartner tiers (e.g. Gold/Silver/Bronze) and benefits
InstallersThe installer platform: registration, approval, finder, leads
MessagingConversation threads between organizations
CommsOutbound communications (email)
NotificationsIn-app notifications
AdminInternal operator tooling (cross-tenant administration)
ScoringRetailer/profile scoring
MarketGraphRetailer-network intelligence graph
AIAI-assisted features

One module, one schema

Each bounded context owns its own PostgreSQL schema and migration history, so concerns are separated at the database level. The Integrations & Embed guide covers how data enters the Catalog and Network modules and how the public locator endpoints are exposed.


Where to go next

cebf50c · 2026-10-05 22:57