# Upstash QStash vs Temporal

Canonical: https://inetgeek.com/compare/qstash-vs-temporal/

Every value below is read from Upstash QStash's and Temporal's own documentation. See https://inetgeek.com/methodology/ for how.

## At a glance

| Criterion | Upstash QStash | Temporal |
| --- | --- | --- |
| Free tier | Yes | Yes |
| Pricing model | Per message rather than per operation, metered against a daily ceiling on the free plan and priced at $1 per 100,000 on Pay as You Go, with monthly bandwidth caps alongside — 50 GB on the smaller plans, 1 TB and 5 TB above. | Per Action, with storage billed separately and split between open and closed workflows. Plans buy SLA tier and support response rather than volume — Essentials is 99.9% with one business day P0 response, Business adds scale. An open-source self-hosted edition runs the same service on your own infrastructure. |
| Included per month | 1,000 messages a day on the free plan. Pay as You Go is $1 per 100,000 messages with no daily cap; fixed plans run $180 a month for 1M a day and $420 for 10M. | 1,000,000 Actions a month on Essentials and 2.5 million on Business. An Action is Temporal's own unit — a workflow operation — and is not comparable to a message, an operation or an execution elsewhere in this category. |
| Maximum message size | 1 MB on the free plan, 10 MB on Pay as You Go and 50 MB on the fixed plans. | 2 MB maximum payload per request (each Workflow/Activity argument or return value); 4 MB per Event History transaction, non-configurable. |
| Message retention | Dead letter queue retention of 3 days on the free plan, 7 days on Pay as You Go, 30 days and 3 months on the fixed plans. | Storage rather than a time window: 1 GB of active storage for open workflows and 40 GB retained for closed ones on Essentials, 2.5 GB active on Business. Temporal keeps workflow event history, so retention is bounded by bytes rather than by days — recorded without a magnitude because it is not the quantity this criterion ranks. |
| Maximum delay | 7 days on the free plan; 1 year on Pay as You Go and unlimited on the fixed plans. | Timers (durable sleeps) may run up to 100 years in Temporal Cloud. |

## Where they differ

### Pricing model

- Upstash QStash: Per message rather than per operation, metered against a daily ceiling on the free plan and priced at $1 per 100,000 on Pay as You Go, with monthly bandwidth caps alongside — 50 GB on the smaller plans, 1 TB and 5 TB above. ([source](https://upstash.com/pricing/qstash))
- Temporal: Per Action, with storage billed separately and split between open and closed workflows. Plans buy SLA tier and support response rather than volume — Essentials is 99.9% with one business day P0 response, Business adds scale. An open-source self-hosted edition runs the same service on your own infrastructure. ([source](https://temporal.io/pricing))

### Included per month

- Upstash QStash: 1,000 messages a day on the free plan. Pay as You Go is $1 per 100,000 messages with no daily cap; fixed plans run $180 a month for 1M a day and $420 for 10M. ([source](https://upstash.com/pricing/qstash))
- Temporal: 1,000,000 Actions a month on Essentials and 2.5 million on Business. An Action is Temporal's own unit — a workflow operation — and is not comparable to a message, an operation or an execution elsewhere in this category. ([source](https://temporal.io/pricing))

### Maximum message size

- Upstash QStash: 1 MB on the free plan, 10 MB on Pay as You Go and 50 MB on the fixed plans. ([source](https://upstash.com/pricing/qstash))
- Temporal: 2 MB maximum payload per request (each Workflow/Activity argument or return value); 4 MB per Event History transaction, non-configurable. ([source](https://docs.temporal.io/cloud/limits))

### Message retention

- Upstash QStash: Dead letter queue retention of 3 days on the free plan, 7 days on Pay as You Go, 30 days and 3 months on the fixed plans. ([source](https://upstash.com/pricing/qstash))
- Temporal: Storage rather than a time window: 1 GB of active storage for open workflows and 40 GB retained for closed ones on Essentials, 2.5 GB active on Business. Temporal keeps workflow event history, so retention is bounded by bytes rather than by days — recorded without a magnitude because it is not the quantity this criterion ranks. ([source](https://temporal.io/pricing))

### Maximum delay

- Upstash QStash: 7 days on the free plan; 1 year on Pay as You Go and unlimited on the fixed plans. ([source](https://upstash.com/pricing/qstash))
- Temporal: Timers (durable sleeps) may run up to 100 years in Temporal Cloud. ([source](https://docs.temporal.io/cloud/limits))

## Which should you choose?

Pick Upstash QStash if HTTP-first workloads that want scheduling and delay measured in months rather than a day, without running a consumer process.

Pick Temporal if Long-running, stateful workflows where losing execution history is the failure that matters — Temporal keeps event history as first-class storage rather than logs that expire.

Consider something else: Upstash QStash — The free plan is capped per day rather than per month, so a single burst can exhaust it while a monthly allowance elsewhere would absorb the same volume.

Consider something else: Temporal — Entry is $100 a month before any usage, and the unit is an Action, which does not map onto messages or task runs — budgeting requires modelling your workflows, not counting jobs.

## Documented by only one

- Entry paid plan: Temporal: $100/month for Essentials, including 1 million Actions, 1 GB active storage and 40 GB retained storage. Business starts at $500/month with 2.5 million Actions.
- Startup credit program: Temporal: Temporal Cloud startup credits: $6,000, for funded startups that have raised $30M or less.
- Regions: Temporal: 20 regions for Temporal Cloud Namespaces: 14 AWS regions and 6 Google Cloud regions, each with a PrivateLink or Private Service Connect endpoint.
- Concurrency: Temporal: 500 Actions per second per Namespace by default, auto-scaling above that with On-Demand Capacity; 20,000 Activity and 20,000 Workflow Task pollers per Namespace.
- Dead letter queue: Upstash QStash: Supported
- SOC 2: Temporal: SOC 2 Type II certified; trust center lists SOC 2 Type 2, GDPR, HIPAA and CCPA badges.
- HIPAA: Temporal: Temporal Cloud is stated to be compliant with HIPAA regulations; HIPAA listed among trust-center certifications.
- GDPR / data residency: Temporal: GDPR compliant with a DPA reflecting GDPR; Namespaces do not share data processing or storage across regional boundaries.
- Encryption at rest: Temporal: Persistence layer and Elasticsearch index encrypted at rest with AES-256-GCM; TLS 1.3 in transit.
- Customer-managed keys: Temporal: Client-side Data Converter encrypts payloads with your keys on your Workers before they reach Temporal Cloud, which cannot decrypt them; no server-side KMS option stated.
- Role-based access control: Temporal: Account-level roles (administrator, developer, read-only) plus Namespace-level permissions; custom roles, SAML and SCIM documented.
- Private networking / VPC: Temporal: AWS PrivateLink or GCP Private Service Connect to Namespaces, alongside the default public endpoints.

## Questions this comparison answers

**Should I choose Upstash QStash or Temporal?**

Pick Upstash QStash if HTTP-first workloads that want scheduling and delay measured in months rather than a day, without running a consumer process.
Pick Temporal if Long-running, stateful workflows where losing execution history is the failure that matters — Temporal keeps event history as first-class storage rather than logs that expire.
