Understanding QueueSaaS Pricing
Learn about QueueSaaS pricing plans, usage limits, and how to choose the right plan for your needs. Understand pay-as-you-go pricing and cost optimization.
Understanding QueueSaaS Pricing
QueueSaaS offers flexible pricing plans designed to scale with your needs. Whether you’re just getting started or running a high-volume production system, we have a plan that fits. This guide will help you understand our pricing structure and choose the right plan.
Pricing Plans
Free Plan
Perfect for: Testing, prototypes, and small projects
Price: $0/month
Limits:
- 1,000 messages per day
- 30,000 messages per month
- 50 GB monthly bandwidth
- 3 retries per message
- 1 MB max message size
- 15-minute HTTP timeout
Features:
- ✅ Message deduplication
- ✅ Basic analytics
- ❌ Custom headers
- ❌ URL Groups
- ❌ CRON scheduling
- ❌ Success/failure callbacks
Pay as You Go
Perfect for: Growing teams and production applications
Price: $1 per 100,000 messages (no base fee)
Limits:
- Unlimited messages per day
- Unlimited messages per month
- 50 GB monthly bandwidth
- 5 retries per message
- 10 MB max message size
- 2-hour HTTP timeout
Features:
- ✅ All Free plan features
- ✅ Full analytics
- ✅ Custom headers
- ✅ URL Groups (fan-out messaging)
- ✅ CRON scheduling
- ✅ Success/failure callbacks
Enterprise
Perfect for: Large organizations with custom needs
Price: Custom pricing (contact sales)
Limits:
- Unlimited everything
- Unlimited bandwidth
- 10 retries per message
- 100 MB max message size
- 24-hour HTTP timeout
Features:
- ✅ All features
- ✅ Priority support
- ✅ Custom SLAs
- ✅ Dedicated infrastructure (optional)
Understanding Usage
What Counts as a Message?
A message is counted when you publish it to QueueSaaS, regardless of:
- Whether it’s delivered successfully
- How many retries it takes
- The message size (within limits)
Bandwidth Calculation
Bandwidth is calculated based on:
- Request body size
- Response body size (if callbacks are enabled)
- Headers (minimal)
Rate Limits
Each plan has different rate limits:
Free Plan:
- 60 requests/minute
- 1,000 requests/hour
Pay as You Go:
- 1,000 requests/minute
- 50,000 requests/hour
Enterprise:
- Unlimited
Cost Examples
Example 1: Small Startup
Usage:
- 5,000 messages/day
- 150,000 messages/month
Cost on Pay as You Go:
- 150,000 messages ÷ 100,000 = 1.5 units
- Cost: 1.5 × $1 = $1.50/month
Example 2: Growing SaaS
Usage:
- 50,000 messages/day
- 1,500,000 messages/month
Cost on Pay as You Go:
- 1,500,000 messages ÷ 100,000 = 15 units
- Cost: 15 × $1 = $15/month
Example 3: High-Volume Application
Usage:
- 500,000 messages/day
- 15,000,000 messages/month
Cost on Pay as You Go:
- 15,000,000 messages ÷ 100,000 = 150 units
- Cost: 150 × $1 = $150/month
Cost Optimization Tips
1. Use Message Deduplication
Prevent duplicate messages from being processed:
await client.messages.publish({
url: 'https://api.example.com/webhook',
body: { event: 'user.created', userId: '123' },
deduplicationId: `user-created-123`, // Prevents duplicates
});
2. Batch Messages When Possible
Instead of sending individual messages, batch them:
// ❌ Inefficient: 10 API calls
for (const user of users) {
await client.messages.publish({ /* ... */ });
}
// ✅ Efficient: 1 API call with batch
await client.messages.publishBatch(
users.map(user => ({
url: 'https://api.example.com/webhook',
body: { event: 'user.created', userId: user.id },
}))
);
3. Optimize Message Size
Keep messages small - only include necessary data:
// ❌ Large message
await client.messages.publish({
body: {
userId: '123',
fullUserObject: { /* 50KB of data */ },
relatedData: { /* more data */ },
},
});
// ✅ Optimized message
await client.messages.publish({
body: {
userId: '123',
// Store full data in database, reference it in message
},
});
4. Use Appropriate Retry Counts
Don’t set retry counts higher than necessary:
// For critical messages
await client.messages.publish({
url: 'https://critical-service.com/webhook',
retries: 5, // Pay as You Go max
});
// For non-critical messages
await client.messages.publish({
url: 'https://optional-service.com/webhook',
retries: 2, // Fewer retries = fewer attempts = lower cost
});
Monitoring Your Usage
Check Current Usage
const usage = await client.billing.getUsage();
console.log('Current Usage:', {
messagesToday: usage.data.usage.messagesToday,
messagesThisMonth: usage.data.usage.messagesThisMonth,
remaining: usage.data.remaining,
});
Estimate Monthly Cost
const estimate = await client.billing.getCostEstimate();
console.log('Estimated Cost:', {
messagesUsed: estimate.data.currentMonth.messagesUsed,
estimatedCost: `$${estimate.data.currentMonth.estimatedCost}`,
perMessageRate: `$${estimate.data.breakdown.perMessageRate}`,
});
Set Up Usage Alerts
await client.notifications.updatePreferences({
quotaAlertThresholds: [50, 75, 90, 100],
emailRecipients: ['billing@example.com'],
});
When to Upgrade
Upgrade from Free to Pay as You Go When:
- You exceed 1,000 messages/day
- You need CRON scheduling
- You need URL Groups
- You need custom headers
- You need longer timeouts
Upgrade to Enterprise When:
- You need > 10 MB message size
- You need > 2-hour timeouts
- You need > 5 retries
- You need priority support
- You need custom SLAs
Billing FAQ
How is billing calculated?
Billing is calculated based on the number of messages published, regardless of delivery status. You’re charged at the end of each month.
What happens if I exceed my plan limits?
Free plan: Messages will be rejected with a 429 status code. You’ll need to upgrade to continue.
Pay as You Go: No hard limits - you pay for what you use.
Can I change plans mid-month?
Yes! Plan changes take effect immediately. You’ll be charged prorated amounts.
Do retries count as additional messages?
No. Retries are included in the original message cost.
Is there a minimum charge?
No. Pay as You Go has no minimum charge. You only pay for what you use.
Next Steps
- Sign up for free and start with the Free plan
- View pricing page for detailed comparison
- Contact sales for Enterprise pricing
Choose the plan that fits your needs and scale as you grow! 💰