-
Notifications
You must be signed in to change notification settings - Fork 46
[ftf-304] Adding pricing examples #3090
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
JamieAbly
wants to merge
10
commits into
main
Choose a base branch
from
ftf-304-adding-pricing-examples
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
df30c3d
Adding pricing examples
JamieAbly 5b0a9bb
Update src/pages/docs/platform/pricing/examples/data-broadcast.mdx
JamieAbly 9911d46
Update src/pages/docs/platform/pricing/examples/data-broadcast.mdx
JamieAbly f3dd12a
Update src/pages/docs/platform/pricing/examples/data-broadcast.mdx
JamieAbly 853b58b
Update src/pages/docs/platform/pricing/examples/support-chat.mdx
JamieAbly 5749b76
Update src/pages/docs/platform/pricing/examples/data-broadcast.mdx
JamieAbly 962d117
Update src/pages/docs/platform/pricing/examples/livestream.mdx
JamieAbly 46969ec
Implemented feedback on pricing examples
JamieAbly b5ac074
Merge branch 'ftf-304-adding-pricing-examples' of https://github.com/…
JamieAbly 54c0cde
Pricing examples formatting fixes
JamieAbly File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,3 @@ | ||
| ruby 3.4.5 | ||
| nodejs 22.19.0 | ||
| yarn 1.22.19 | ||
| yarn 1.22.22 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
89 changes: 89 additions & 0 deletions
89
src/pages/docs/platform/pricing/examples/data-broadcast.mdx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,89 @@ | ||
| --- | ||
| title: Data broadcast pricing example | ||
| meta_description: "A pricing example that uses Ably Pub/Sub for data broadcast. Example shows how message conflation reduces message costs from ~$1,800 to ~$370/month for 10K users across 50 matches." | ||
| meta_keywords: "sports betting, live odds, realtime odds updates, message conflation, Pub/Sub pricing, betting platform, live sports data, odds streaming, realtime data delivery, Ably Pub/Sub pricing" | ||
| intro: "This Pub/Sub example demonstrates consumption-based pricing for a realtime data broadcast – a single source publishing frequent updates to many subscribers." | ||
| --- | ||
| This example uses a sports betting scenario where odds are updated and fanned out to bettors. The same pattern applies to any broadcast where only the latest value matters, such as stock tickers, live scores, auction platforms and transport arrivals. | ||
|
|
||
| ## Assumptions | ||
|
|
||
| - 10,000 monthly active users | ||
| - 50 live matches per month | ||
| - 200 concurrent viewers per match | ||
| - 2-hour match duration | ||
| - 60-minute average session duration | ||
| - 10 raw odds updates per second from data provider | ||
| - Message conflation enabled (500ms interval) | ||
|
|
||
| These assumptions generate: | ||
| - [147,600,000 messages](#messages) | ||
| - [2,400,000 connection minutes](#minutes) | ||
| - [4,800,000 channel minutes](#minutes) | ||
|
|
||
| <Aside data-type='note'> | ||
| Conflation intervals are configurable from 100ms to 500ms – lower intervals reduce latency; higher intervals reduce message volume and costs. | ||
| </Aside> | ||
|
|
||
| ## Cost summary | ||
|
|
||
| The high-level cost breakdown for this scenario. Messages are billed for both inbound (published to Ably) and outbound (delivered to subscribers). | ||
|
|
||
| | Item | Calculation | Cost | | ||
| |------|-------------|------| | ||
| | Messages (with conflation) | (3,600,000 inbound + 144,000,000 outbound = 147,600,000) × $2.50/M | $369 | | ||
| | Connection minutes | 2,400,000 × $1.00/M | $2.40 | | ||
| | Channel minutes | 4,800,000 × $1.00/M | $4.80 | | ||
| | Package fee | | [See plans](/docs/platform/pricing) | | ||
| | **Total** | | **~$376.20/month** | | ||
|
|
||
| ## Message breakdown <a id="messages"/> | ||
|
|
||
| How the message total is calculated. Conflation reduces outbound delivery from 10 updates/sec to 2 updates/sec (500ms interval). | ||
|
|
||
| | Item | Calculation | Messages | | ||
| |------|-------------|------| | ||
| | Inbound (from data provider) | 10 updates/sec × 7,200 sec × 50 matches | 3,600,000 | | ||
| | Outbound (to viewers, with conflation) | 2 updates/sec × 7,200 sec × 200 viewers × 50 matches | 144,000,000 | | ||
| | **Total** | | **147,600,000** | | ||
|
|
||
|
|
||
| ## Connection and channel minutes <a id="minutes"/> | ||
|
|
||
| The following table shows how connection and channel minute costs are calculated in this example: | ||
|
|
||
| | Metric | Calculation | Monthly | Cost | | ||
| |--------|-------------|---------|------| | ||
| | Connection minutes | 10,000 users × 4 sessions × 60 mins | 2,400,000 | $2.40 | | ||
| | Channel minutes | 40,000 sessions × 60 mins × 2 channels | 4,800,000 | $4.80 | | ||
|
|
||
|
|
||
| ## Why conflation, not batching? | ||
|
|
||
| For live betting, [message conflation](/docs/messages#conflation) is the right optimization because: | ||
|
|
||
| - Old odds are semantically stale — batching would group outdated prices together | ||
| - Users need the latest price, not a history of price changes | ||
| - Conflation reduces both inbound and outbound message costs | ||
|
|
||
| Use [server-side batching](/docs/messages/batch#server-side) instead when every message matters, for example in a chat use case or when you're sending push notifications. | ||
|
|
||
| <Aside data-type='note'> | ||
| Without conflation: 723,600,000 messages = ~$1,809 in message costs. Conflation saves ~80%. | ||
| </Aside> | ||
|
|
||
| ## Further optimization: Delta compression | ||
|
|
||
| For richer payloads such as full market depth or live statistics, [delta compression](/docs/channels/options/deltas) can reduce bandwidth costs by sending only the difference between updates. | ||
|
|
||
| | Payload type | Full size | With delta | Bandwidth reduction | | ||
| |--------------|-----------|------------|---------------------| | ||
| | Full market (10+ selections) | 8 KiB | ~2 KiB | 75% | | ||
| | Live stats + odds bundle | 15 KiB | ~4 KiB | 73% | | ||
|
|
||
| <Aside data-type='further-reading'> | ||
| Useful links for exploring this topic in more detail. | ||
| - [Talk with sales](https://ably.com/contact) to get a personalized quote. | ||
| - [Learn how Genius Sports uses delta compression, significantly reducing transit latencies and bandwidth costs.](https://ably.com/case-studies/genius-sports) | ||
| - [When Stadion set out to develop the fastest live scores app on the market, Ably was their No. 1 choice.](https://ably.com/case-studies/stadion) | ||
| </Aside> | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,77 @@ | ||
| --- | ||
| title: Major livestream event pricing example | ||
| meta_description: "Calculate Ably Chat pricing for livestream events with high-concurrency chat. Example shows 25K concurrent viewers, message batching reducing costs by 95%, and total cost of ~$2,430 for a 1-hour major event." | ||
| meta_keywords: "livestream chat, high concurrency chat, message batching, chat pricing, realtime messaging, room reactions, chat moderation, event chat, scalable chat, Ably Chat pricing" | ||
| intro: "This Ably Chat example demonstrates consumption-based pricing for a major live event – thousands of viewers chatting simultaneously during a broadcast. Livestream chat involves high message velocity over a short duration, where batching is essential to manage costs at scale." | ||
| --- | ||
|
|
||
| ## Assumptions | ||
|
|
||
| The scale and features used in this calculation. | ||
|
|
||
| | Scale | Features | | ||
| |-------|----------| | ||
| | 1-hour event duration | ✓ Message batching (100ms window) | | ||
| | 100 messages per second | ✓ Moderation (100% of messages) | | ||
| | 360,000 messages sent = 900,000,000 delivered (with batching) | ✓ Room reactions | | ||
| | 10,000 room reactions = 70,000,000 delivered (with batching) | | | ||
| | 25,000 viewers × 1 hour = 1,500,000 connection minutes | | | ||
|
|
||
| <Aside data-type='note'> | ||
| Batching intervals are configurable from 50ms to 500ms. Lower intervals reduce latency; higher intervals increase batching efficiency. | ||
| </Aside> | ||
|
|
||
| ## Cost summary | ||
|
|
||
| The high-level cost breakdown for this scenario. Messages are billed for both inbound (published to Ably) and outbound (delivered to subscribers) – a single message to 100 subscribers generates 101 billable messages. | ||
|
|
||
| | Item | Calculation | Cost | | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The dollar results in this table are rounded to integer dollars so they look wrong. Eg 1.5 x $1 = $2. They shouldn't be rounded |
||
| |------|-------------|------| | ||
| | Messages (with batching) | 900,000,000 × $2.50/M | $2,250 | | ||
| | Room reactions (with batching) | 70,000,000 × $2.50/M | $175 | | ||
| | Connection minutes | 1,500,000 mins × $1.00/M mins | $1.50 | | ||
| | Moderation (Ably) | 360,000 msgs × 1 rule invocation | $1.00 | | ||
| | Package fee | | [See plans](/docs/platform/pricing) | | ||
| | **Total** | | **$2,427.50/event** | | ||
|
|
||
| ## Message breakdown | ||
|
|
||
| How the message cost breaks down by type. | ||
|
|
||
| | Type | Inbound | Outbound | Total | Cost | | ||
| |------|---------|----------|-------|------| | ||
| | Chat messages | 360,000 | 900,000,000 | 900,360,000 | $2,250 | | ||
| | Room reactions | 10,000 | 70,000,000 | 70.010,000 | $175 | | ||
| | Moderation* | 360,000 | — | 360,000 | $1.00 | | ||
| | **Message costs** | **730,000** | **970,000,000** | **970,730,000** | **$2,426** | | ||
|
|
||
| <Aside data-type='note'> | ||
| Third-party moderation providers (Hive, Bodyguard, Tisane) are billed separately. | ||
| </Aside> | ||
|
|
||
| ## Batching impact | ||
|
|
||
| How batching reduces costs at scale. Actual savings depend on your message patterns – bursty traffic batches more efficiently than steady streams. | ||
|
|
||
| | Scenario | Cost | Messages | Savings | | ||
| |----------|------|----------|---------| | ||
| | Without batching | $22,500 | 9,000,000,000 messages | — | | ||
| | With batching | $2,250 | 900,000,000 messages | **$20,250** | | ||
|
|
||
| ## Room reactions calculation | ||
|
|
||
| 10,000 room reactions to 25,000 viewers would generate 250,000,000 outbound messages unbatched. | ||
|
|
||
| With batching enabled and assuming 80% of reactions occur in bursts (during key moments), total outbound messages drop to 70,000,000: | ||
|
|
||
| - **Burst reactions (80%):** 8,000 reactions batched into ~800 deliveries × 25,000 viewers = 20,000,000 messages | ||
| - **Individual reactions (20%):** 2,000 × 25,000 viewers = 50,000,000 messages | ||
|
|
||
| **Total:** 70,000,000 messages × $2.50/M = **$175** | ||
|
|
||
| <Aside data-type='further-reading'> | ||
| Useful links for exploring this topic in more detail. | ||
| - [Talk with sales](https://ably.com/contact) to get a personalized quote. | ||
| - [See how Sportsbet relies on Ably to handle 4.5 million daily chat messages.](https://ably.com/case-studies/sportsbet) | ||
| - [Learn how 17Live leverages Ably to host over 100,000 concurrent livestreams.](https://ably.com/case-studies/17live) | ||
| </Aside> | ||
84 changes: 84 additions & 0 deletions
84
src/pages/docs/platform/pricing/examples/realtime-dashboard.mdx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,84 @@ | ||
| --- | ||
| title: Realtime dashboard pricing example | ||
| meta_description: "Calculate Pub/Sub pricing for healthcare patient monitoring dashboards. Example shows realtime vitals tracking for 100 patients monitored by 5 care coordinators, with total cost of ~$98/month including presence and history features." | ||
| meta_keywords: "healthcare dashboard, patient monitoring, realtime vitals, healthcare IoT, care coordination, patient monitoring devices, clinical dashboard, realtime healthcare data, Pub/Sub pricing, Ably healthcare" | ||
| intro: "This Pub/Sub example demonstrates consumption-based pricing for a realtime dashboard – many data sources publishing to a small number of viewers." | ||
| --- | ||
|
|
||
| This example uses a healthcare scenario, sending patient vitals to care coordinators. The same pattern applies to any dashboard with high inbound volume and low fan-out, such as IoT sensor monitoring, logistics tracking, infrastructure observability, and more. | ||
|
|
||
| ## Assumptions | ||
|
|
||
| The scale and features used in this calculation. | ||
|
|
||
| | Scale | Features | | ||
| |-------|----------| | ||
| | 100 patients with home monitoring devices | ✓ Presence (shift handover visibility) | | ||
| | 5 care coordinators viewing dashboard | ✓ History retrieval (late joiners see recent readings) | | ||
| | 8-hour monitoring shifts, 22 days/month | | | ||
| | Vitals transmitted every 10 seconds (6 per minute) | | | ||
| | 15 clinical alerts per patient per day | | | ||
|
|
||
| These assumptions generate: | ||
| - [38,210,000 messages](#messages) | ||
| - [1,110,000 connection minutes](#minutes) | ||
| - [1,110,000 channel minutes](#minutes) | ||
|
|
||
| ## Cost summary | ||
|
|
||
| The high-level cost breakdown for this scenario. | ||
|
|
||
| | Item | Calculation | Cost | | ||
| |------|-------------|------| | ||
| | Messages | 38,210,000 × $2.50/M | $95.53 | | ||
| | Connection minutes | 1,110,000 × $1.00/M | $1.11 | | ||
| | Channel minutes | 1,110,000 × $1.00/M | $1.11 | | ||
| | Presence & history | 6,600 messages | Less than $0.02 | | ||
| | Package fee | | [See plans](/docs/platform/pricing) | | ||
| | **Total** | | **$97.77/month** | | ||
|
|
||
| ## Message breakdown <a id="messages"/> | ||
|
|
||
| Patient devices transmit vitals (heart rate, SpO2, blood pressure) every 10 seconds, plus clinical alerts when readings breach thresholds. Each message is delivered to all 5 care coordinators subscribed to the monitoring channel. | ||
|
|
||
| | Message type | Calculation | Monthly | | ||
| |--------------|-------------|---------| | ||
| | Vitals updates (inbound) | 100 patients × 6/min × 480 mins × 22 days | 6,340,000 | | ||
| | Clinical alerts (inbound) | 100 patients × 15/day × 22 days | 33,000 | | ||
| | **Total inbound** | | **6,370,000** | | ||
| | Outbound to care team | 6,370,000 × 5 coordinators | 31,850,000 | | ||
| | **Total messages** | | **38,210,000** | | ||
|
|
||
| **Message cost:** 38,210,000 × $2.50/M = **$95.53** | ||
|
|
||
| ## Connection and channel minutes <a id="minutes"/> | ||
|
|
||
| The following table shows how connection and channel minute costs are calculated in this example: | ||
|
|
||
| | Metric | Calculation | Monthly | Cost | | ||
| |--------|-------------|---------|------| | ||
| | Patient device connections | 100 × 8 hrs × 22 days × 60 mins | 1,060,000 | $1.06 | | ||
| | Care coordinator connections | 5 × 8 hrs × 22 days × 60 mins | 52,800 | $0.05 | | ||
| | **Total connection minutes** | | **1,110,000** | **$1.11** | | ||
| | Channel minutes | 105 users × 8 hrs × 22 days × 60 mins | 1,110,000 | $1.11 | | ||
|
|
||
| ## Presence and history | ||
|
|
||
| These features add negligible cost at this scale but provide important clinical functionality. Presence shows which coordinators are actively monitoring during shift changes, while history lets late joiners see recent readings. | ||
|
|
||
| | Feature | Calculation | Monthly messages | | ||
| |---------|-------------|------------------| | ||
| | Presence events | 5 coordinators × 2 events × 22 days | 220 inbound | | ||
| | Presence fan-out | 220 × 4 other coordinators | 880 outbound | | ||
| | History retrieval | 5 coordinators × 1 request/shift × 22 days × 50 msgs | 5,500 | | ||
| | **Total** | | **6,600** | | ||
|
|
||
| **Total cost:** 6,600 messages × $2.50/M = **$0.02** | ||
|
|
||
| <Aside data-type='further-reading'> | ||
| Useful links for exploring this topic in more detail. | ||
| - [Talk with sales](https://ably.com/contact) to get a personalized quote. | ||
| - [Using Ably, Experity’s live BI dashboard transforms US urgent healthcare provision](https://ably.com/case-studies/experity) | ||
| - [See how doxy.me turned realtime from a liability into a strategic asset](https://ably.com/case-studies/doxyme) | ||
| </Aside> | ||
|
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,79 @@ | ||
| --- | ||
| title: Enterprise support chat pricing example | ||
| meta_description: "Calculate Ably Chat pricing for enterprise customer support chat. Example shows 50K MAU, one-to-one messaging, and why consumption pricing at ~$78/month outperforms MAU pricing at $2,500/month for support use cases." | ||
| meta_keywords: "support chat, customer support, enterprise chat, one-to-one messaging, chat pricing, MAU pricing, consumption pricing, support agent chat, customer service chat, Ably Chat pricing" | ||
| intro: "This Ably Chat example demonstrates consumption-based pricing for enterprise customer support – one-to-one conversations between agents and customers. Support chat typically involves brief, infrequent sessions, making consumption-based pricing significantly more cost-effective than MAU pricing for this pattern." | ||
| --- | ||
|
|
||
| ## Assumptions | ||
|
|
||
| The scale and features used in this calculation. | ||
|
|
||
| | Scale | Features | | ||
| |-------|----------| | ||
| | 50,000 MAU (customers) | ✓ Typing indicators | | ||
| | 300 support agents | ✓ Presence | | ||
| | 5 conversations per customer/month (250,000 total) | ✓ History retrieval (20% of conversations, 50 messages each) | | ||
| | 20 messages per conversation | | | ||
| | 15 typing events per conversation | | | ||
| | 4 presence events per conversation | | | ||
| | 20-minute average conversation | | | ||
|
|
||
| These assumptions generate: | ||
| - [27,000,000 messages](#messages) | ||
| - [5,530,000 connection minutes](#minutes) | ||
| - [5,000,000 channel minutes](#minutes) | ||
|
|
||
| ## Cost summary | ||
|
|
||
| The high-level cost breakdown for this scenario. | ||
|
|
||
| | Item | Calculation | Cost | | ||
| |------|-------------|------| | ||
| | Messages | 27,000,000 × $2.50/M | $67.50 | | ||
| | Connection minutes | 5,530,000 × $1.00/M | $5.53 | | ||
| | Channel minutes | 5,000,000 × $1.00/M | $5.00 | | ||
| | Package fee | | [See plans](/docs/platform/pricing) | | ||
| | **Total (Consumption)** | | **$78.03/month** | | ||
|
|
||
|
|
||
| ## Message breakdown <a id="messages"/> | ||
|
|
||
| How the message cost breaks down by feature. Batching has minimal impact in 1:1 chat since there's only one recipient per message – batching benefits scale with room size. | ||
|
|
||
| | Feature | Events | Inbound | Outbound | Total messages | | ||
| |---------|--------|---------|----------|----------------| | ||
| | Chat messages | 5,000,000 | 5,000,000 | 10,000,000 | 15,000,000 | | ||
| | Typing indicators | 3,750,000 | 3,750,000 | 3,750,000 | 7,500,000 | | ||
| | Presence | 1,000,000 | 1,000,000 | 1,000,000 | 2,000,000 | | ||
| | History retrieval | 50,000 requests | — | 2,500,000 | 2,500,000 | | ||
| | **Total** | | | | **27,000,000** | | ||
|
|
||
| **Message cost:** 27,000,000 × $2.50/M = **$67.50** | ||
|
|
||
| ## Connection and channel minutes <a id="minutes"/> | ||
|
|
||
| The following table shows how connection and channel minute costs are calculated in this example: | ||
|
|
||
| | Type | Calculation | Minutes | Cost | | ||
| |------|-------------|---------|------| | ||
| | Customer connections | 250,000 conversations × 20 mins | 5,000,000 | $5.00 | | ||
| | Agent connections | 300 agents × avg 80 mins/day × 22 days | 528,000 | $0.53 | | ||
| | Channel minutes | 250,000 conversations × 20 mins | 5,000,000 | $5.00 | | ||
|
|
||
| ### Consumption vs MAU comparison | ||
|
|
||
| Consumption-based pricing works better for support chat because customers connect briefly and infrequently, using far less than the Monthly Active User (MAU) allowances which are 20,000 messages and 2,000 connection minutes. | ||
|
|
||
| | Model | Calculation | Monthly cost | | ||
| |-------|-------------|--------------| | ||
| | Consumption-based | As above | ~$78 | | ||
| | MAU pricing | 50,000 MAU × $0.05 | $2,500 | | ||
|
|
||
|
|
||
| <Aside data-type='further-reading'> | ||
| Useful links for exploring this topic in more detail. | ||
| - [Talk with sales](https://ably.com/contact) to get a personalized quote. | ||
| - [Learn how HubSpot uses Ably to enable 128,000 businesses with live chat that just works](https://ably.com/case-studies/hubspot) | ||
| - [See how doxy.me turned realtime from a liability into a strategic asset](https://ably.com/case-studies/doxyme) | ||
| </Aside> |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.