Pricing tiers
DisplaySync uses a platform fee + per-sign-day metered billing model that aligns with how AV equipment and labor are billed on event production budgets. Marketing pricing lives at displaysync.live/pricing; this page is the docs-side reference with the full enforcement detail behind each limit.
Tier table
| Tier | Platform fee/mo | Per sign-day | Signs/event | Total signs | Concurrent events | Team members | Storage |
|---|---|---|---|---|---|---|---|
| Free | $0 | — | 3 | 3 | 1 | 2 | 0.5 GB |
| Starter | $299 | $15 | 25 | 25 | 1 | 5 | 5 GB |
| Professional | $599 | $12 | 75 | 150 | 5 | 15 | 50 GB |
| Agency | $999 | $10 | 200 | 200 | Unlimited | 50 | 50 GB |
| Pilot | $0 | — | 200 | 200 | Unlimited | 50 | 50 GB |
| Enterprise | Custom | Custom | Unlimited | Unlimited | Unlimited | Unlimited | 500 GB |
Pilot and Managed are admin-assigned tiers. Pilot is for demos and trials (usage tracked, not billed). Managed is for DisplaySync-operated fleets (no preset limits — soft caps only). Neither is self-serve.
About the per-event sign limit
The per-event sign number is published as a soft guardrail aligned with the marketing tiers — but the backend currently enforces only the total signs cap across the org, not per-event. So a Professional org could put all 150 of its signs into a single event if it wanted to. This may tighten in a future release.
Additional tier limits
These limits aren't in the headline marketing comparison but matter for orgs choosing a tier or hitting an enforcement edge.
| Field | Free | Starter | Pro | Agency | Enterprise |
|---|---|---|---|---|---|
maxOrganizations (single-org cap; how many orgs one self-service account can own) | 1 | 1 | 1 | 10 | ∞ |
analyticsRetentionDays (per-sign analytics history) | 0 | 7 | 90 | 90 | 365 |
auditLogRetentionDays | — | — | 30 | 30 | unlimited |
Agency-only platform limits (platformMaxSigns / maxManagedOrgs / platformMaxStorageGB) | — | — | — | 1500 / 10 / 500 GB | — |
The Agency-only platform limits cap the totals across all managed orgs an Agency operator runs — independent of any single org's per-tier cap.
What a "sign-day" is
A sign-day is any calendar day during which a sign was linked to an event. Mechanics:
- A sign linked at 11:55 PM and unlinked at 12:05 AM the next day counts as 2 sign-days (each calendar day touched is one sign-day).
- A sign powered off but still linked to the event still counts — it's the link that triggers metering, not on/off state.
- An unlinked sign (in the dashboard's Unlinked state) does not count.
- Sign-days are computed in your org's time zone (set in Org → General).
This mirrors how equipment rental is billed: you pay for the full day a piece of gear is on the show, regardless of how many hours it was actually powered.
Limits and how they're enforced
Limits are enforced server-side by the enforceTierLimit(resource) middleware. When you trip a limit, the API returns:
HTTP 403
Content-Type: application/json
{
"success": false,
"message": "You've reached your plan limit of <label>. Upgrade your plan to add more.",
"limit": <number>,
"current": <number>,
"resource": "<events|signs|members|storage>"
}
The limit and current fields make it straightforward for client code to compute headroom or surface a useful upgrade prompt.
Total signs
The signs resource is org-wide — it counts every Sign record in the org, regardless of which event it's in or whether the kiosk is currently online.
- Tripped on sign creation (claim or pre-register).
- Unlinking a sign does not drop its Sign record (the record stays as
unlinked), so unlinking alone doesn't free a slot. Delete the Sign record from the dashboard to free one.
Concurrent events
The events resource counts events in active state across the org. upcoming, completed, and archived events don't count.
- Tripped when activating an event (start date arrives, or manual activation).
- Move stale events to
archivedto free slots.
Team members
The members resource counts all org-level memberships (owner + admin + member combined).
- Tripped on invitation acceptance.
- Pending invitations don't count toward the cap until they're accepted.
- Removing a member frees a slot immediately.
Storage
The storage resource caps the bytes of content uploaded to the org (configured in GB per tier). Counted in bytes by the middleware.
- Tripped on content upload.
- Today, content is webpage URLs only (v1) — storage is effectively unused. Image, video, and playlist uploads in v2 will be the first time most orgs touch this limit.
Feature gates
Some features are tier-gated by capability flag rather than usage-metered. The flags are checked via requireFeature() middleware on the relevant routes.
| Feature flag | Free | Starter | Professional | Agency | Enterprise |
|---|---|---|---|---|---|
apiAccess | ❌ | ❌ | ✅ | ✅ | ✅ |
whiteLabel | ❌ | ❌ | ❌ | ✅ | ✅ |
clientViewerPortal | ❌ | ❌ | ❌ | ✅ | ✅ |
crossOrgDashboard | ❌ | ❌ | ❌ | ✅ | ✅ |
sso | ❌ | ❌ | ❌ | ❌ | ✅ |
webhooks | ❌ | ❌ | ❌ | ❌ | ✅ |
Capability flags vs. shipping features
These flags gate routes that are or will be implemented. Some features behind their flags are still in development:
apiAccessis set on Professional+ tiers, but a public API isn't actually available yet — see API overview.webhooksandssoare similarly enabled at the tier-flag level but not yet shipping.
The flags exist in advance of the features so that, when each feature ships, it lights up automatically for tiers that already paid for it.
Billing mechanics
- Platform fee is billed monthly upfront in advance, prorated to the day on tier upgrades/downgrades. Stripe handles the proration.
- Sign-day usage is billed in arrears at the end of each monthly billing cycle. You see the usage tally in the dashboard's Organization → Billing view in real time.
- Failed payment triggers a 7-day dunning period. After that, the org transitions to read-only — signs continue displaying content (they're already deployed) but no new claims, content changes, or settings updates apply. Resolving the payment restores write access. See Dunning + downgrade blocking below for the full sequence.
Dunning + downgrade blocking
When a Stripe payment fails, the account enters dunning — a 3-attempt retry sequence on the Stripe side, paired with a grace window before suspension on the DisplaySync side.
| Stage | What's happening | Dashboard impact |
|---|---|---|
| Initial failure | Stripe retries the card automatically | Banner alerts billing-role members; signs continue running |
| Grace window (~7 days) | All retries failed; account is in dunning | Dashboard renders read-only; no new claims/edits/team changes; signs continue running |
| Suspension | Grace expired without resolution | Dashboard read-only; signs continue running until manually unregistered |
Tier downgrades are blocked while in dunning — operators must resolve dunning (Stripe Customer Portal → update payment method) before downgrading. The meter continues to accrue during dunning; sign-day usage isn't paused.
To resolve: open Profile → Billing → Manage in Stripe and update the card / pay the outstanding invoice. The dashboard re-enables write operations within ~1 minute of a successful retry.
Active event — precise definition
Tier sign limits enforce against signs assigned to events with status: 'active'. Understanding when an event becomes active matters for self-service users planning multi-day events.
Date-driven transitions:
upcoming→activehappens when the current date falls betweenstartDateandendDate(inclusive, in event-display TZ)active→completedhappens the day afterendDate- A manual
archivedtransition is possible from any state — operator-initiated
The meter ticks for the whole event window, not just hours-on. A 3-day conference is 3 sign-days per assigned sign, regardless of whether you power them off overnight.
Tier limit enforcement is at claim/link time — adding a sign that pushes you over the tier's maxSigns is rejected with a clear error referencing the tier's cap. Existing claims aren't ejected mid-event; the next claim is the gating moment.
Upgrades and downgrades
- Upgrades take effect immediately. New limits apply right away — useful when you need to add capacity mid-event.
- Downgrades take effect at the next billing cycle to avoid disrupting in-flight events. The downgrade fails up front if your current usage exceeds the target tier's limits ("you have 12 active events; downgrading to Starter would breach the 1-event cap").
Pilot and Managed tiers
These two are admin-assigned overrides:
| Tier | Purpose | Behavior |
|---|---|---|
| Pilot | Demos, customer trials, evaluation | Free; usage tracked but not reported to Stripe |
| Managed | DisplaySync-operated fleets (us running the deployment for the customer) | Custom-invoiced outside Stripe; soft caps only |
These tiers can't be self-served — they're set by [email protected] as part of an evaluation or contract.
Free tier specifics
The Free tier is permanently free, no credit card required. The hard caps:
- 3 signs total (not per-event — 3 across the whole org)
- 1 event (concurrent or otherwise — must complete or archive before starting the next)
- 2 team members including the owner
- All v1 features available — claim, assign, monitor, mobile app, remote control, notifications, Tailscale
- Best-effort support: 1-3 business days, docs first
Useful for: learning the platform, side projects, single-day single-display events. Production deployments usually outgrow it within the first project.
See also
- Pricing on the marketing site — the public-facing version with FAQ
- Roles & permissions — billing actions are gated to org owners only
- Getting support — for tier upgrades, custom Enterprise quotes, or Pilot tier requests