Usage / Billing Metrics FAQs
Where can I review my PowerSync Service usage?
Where can I review my PowerSync Service usage?
You can track usage in two ways:
- Individual instances: Visit the Usage metrics workspace in the PowerSync Dashboard.
- Organization-wide usage: Check the Subscriptions tab in the Admin Portal for aggregated metrics across all instances in your current billing cycle.
What are sync operations?
What are sync operations?
A sync operation occurs when a single row is synced from the PowerSync Service to a user device.The PowerSync Service maintains a history of operations for each row to ensure efficient streaming and data integrity. This means:
- Every change to a row (insert, update, delete) creates a new operation
- The history of operations builds up over time
- New clients need to download this entire history when they first sync
- Existing clients only download new operations since their last sync
- Daily automatic compacting (built into PowerSync Cloud)
- Regular defragmentation (recommended for frequently updated data)
What are concurrent connections?
What are concurrent connections?
A concurrent connection represents one client actively connected to the PowerSync Service. When a user device runs an app using PowerSync and calls
.connect()
, it establishes one long-lived connection for streaming real-time updates.Some key points about concurrent connections:- Billing is based on peak concurrent connections (highest number of simultaneous connections) during the billing cycle.
- Billing (Pro/Team): 1,000 included, then $30 per 1,000 over the included amount
- The PowerSync Cloud Pro plan is limited to 3,000 concurrent connections, and the PowerSync Cloud Team plan is limited to 10,000 concurrent connections by default
- PowerSync Cloud Free plans are limited to 50 peak concurrent connections
- When connection limits are reached, new connection attempts receive a 429 HTTP response while existing connections continue syncing. The client will continuously retry failed connection attempts, after a delay. Clients should eventually be connected once connection capacity is available.
What is data synced?
What is data synced?
Data synced is now the only metric we use to measure data throughput for billing in our updated Cloud pricing model.It measures the total uncompressed size of data synced from PowerSync Service instances to client devices. If the same data is synced by multiple users, each transfer counts toward the total volume.Billing (Pro/Team): 30 GB included, then $1.00 per GB over the included amount.
What is data hosted?
What is data hosted?
The PowerSync Service hosts:
- A current copy of the data, which should be roughly equal to the subset of your source data that is covered by your sync rules configuration;
- A history of all operations on data in buckets. This can be bigger than the source, since it includes the history, and one row can be in multiple buckets; and
- Data for parameter lookups. This should be fairly small in most cases.
What comprises data processing (legacy)?
What comprises data processing (legacy)?
Note that the data processing billing metric has been removed in our updated Cloud pricing model.Data processing was calculated as the total uncompressed size of:
- Data replicated from your source database(s) to PowerSync Service instances
- Data synced from PowerSync Service instances to user devices
What is the difference between data replicated vs data synced?
What is the difference between data replicated vs data synced?
Data replicated refers to activity from your backend database (Postgres/MongoDB or MySQL database) to the PowerSync Service — this is not billed.Data synced refers to data streamed from the PowerSync Service to client devices — this is used for billing.
Billing FAQs
Where can I see details about my current billing cycle?
Where can I see details about my current billing cycle?
Head over to the Subscriptions tab of the Admin Portal. Here you can view your total usage (aggregated across all projects in your organization) and upcoming invoice total for your current billing cycle. Data in this view updates once a day.
Where can I update my billing details, e.g. the email that receives billing receipts?
Where can I update my billing details, e.g. the email that receives billing receipts?
You can update your billing details in the Billing tab of the Admin Portal.
Can I view my historic invoices?
Can I view my historic invoices?
You can review your historic invoices directly in the Stripe Customer Portal, by signing in with your billing email here. We may surface these in the Admin Portal in the future.
Which usage metrics are billed under the new pricing model?
Which usage metrics are billed under the new pricing model?
Under the updated pricing for Pro and Team plans:
- Data synced: 30 GB included, then $1.00 per GB
- Peak concurrent connections: 1,000 included, then $30 per 1,000
- Data hosted: 10 GB included, then $1.00 per GB (unchanged)
- Replication operations (count)
- Data replicated (per GB)
- Sync operations (count)
Usage Troubleshooting
If you’re seeing unexpected spikes in your usage metrics, here’s how to diagnose and fix common issues:Concurrent connections
The most common cause of seeing excessive concurrent connections is opening multiple copies ofPowerSyncDatabase
, and calling .connect()
on each. Debug your connection handling by reviewing your code and Instance logs. Make sure you’re only opening one connection per user/session.
Sync operations
Sync operations are not billed in our updated pricing model. They can still be useful to diagnose spikes in data synced and to understand how your data mutations affect usage. While sync operations typically correspond to data mutations on synced rows (those in your Sync Rules), there are several scenarios that can affect your operation count:Key Scenarios to Watch For
-
New App Installations:
When a new user installs your app, PowerSync needs to sync the complete operations history. We help manage this by:
- Running automatic daily compacting on Cloud instances
- Providing manual defragmentation options (in the PowerSync Dashboard)
-
Existing Users:
While compacting and defragmenting reduces the operations history, they trigger additional sync operations for existing users.
- Want to optimize this? Check out our defragmenting guide
-
Sync Rule Deployments:
When you deploy changes to Sync Rules, PowerSync recreates the sync buckets from scratch. This has two effects:
- New app installations will sync fewer operations since the operations history is reset.
- Existing users will temporarily experience increased sync operations as they need to re-sync the updated buckets.
-
Unsynced Columns:
Any row update triggers a new operation in the logical replication stream, regardless of which columns changed. In other words, PowerSync tracks changes at the row level, not the column level. This means:
- Updates to columns not included in your Sync Rules still create sync operations.
- Even a no-op update like
UPDATE mytable SET id = id
generates a new operation for each affected row.
Data synced
Data synced measures the total uncompressed bytes streamed from the PowerSync Service to clients. Spikes typically come from either lots of operations (high churn) or large rows (wide payloads), and can also occur during first-time syncs, defragmentation, or Sync Rule changes.Diagnose High Data Synced
- Pinpoint when it spiked
- Use Usage Metrics to find the exact hour/day of the spike.
- Inspect instance logs for size
- In Instance Logs, enable Metadata and search for “Sync stream complete” to see the size of data transferred and operations synced per stream.
Example of 'Sync stream complete' logs
- Compare operations vs row sizes
- If operations are high and size scales with it, you likely have tables that are being updated frequently.
- Alternatively, a large operations history built up in your database. See our defragmenting guide.
- If operations are moderate but size is large, your rows are likely wide (e.g. large big JSON columns).
- If operations are high and size scales with it, you likely have tables that are being updated frequently.
- Identify large payloads in your DB
- Check typical row sizes for frequently updated tables and look for large columns (e.g. long TEXT/JSON fields, embedded files).
- Consider recent maintenance and app changes
- Defragmentation and Sync Rule deploys cause existing clients to re-sync content, temporarily increasing data synced.
- New app installs trigger initial full sync; expect higher usage when onboarding new of users.
Data hosted
Your hosted data size may be larger than your source database size, because it also includes the history of all operations on data in buckets. This can be bigger than the source, since it includes the history, and one row can be in multiple buckets. Data hosted can temporarily spike during Sync Rule deployments and defragmentation, because buckets are reprocessed. During this window, both the previous and new bucket data may exist concurrently.Troubleshooting Strategies
1. Identify Timing
- Use Usage Metrics to pinpoint usage spikes.
2. Review Logs
- Use Instance Logs to review sync service logs during the spike(s).
- Enable the Metadata option.
-
Search for “Sync stream complete” entries (use your browser’s search function) to review:
- How many operations synced
- The size of data transferred
- Which clients/users were involved
Example of 'Sync stream complete' logs
3. Compare Metrics
Use the Diagnostics app to compare total rows vs. operations synced to the user device. If you are seeing a much higher number of operations, you might benefit from defragmentation.4. Detailed Sync Operations
-
Use the test-client’s
fetch-operations
command with the--raw
flag:This returns the individual operations for a user in JSON. Example response: