docs

Pricing and usage

Unhandled's plans, the free trial, how usage is metered per billing period, how long each kind of data is kept, and what the Plan and Usage tabs of Plan & usage show.

Unhandled charges by the amount of telemetry you send, not by seats, hosts or features. This page covers the two plans, the trial, retention for each kind of data, and the per-request limits on ingest. It is for whoever owns the bill and for anyone wondering how long data stays around.

Plans

StarterBusiness
Monthly price€25€79
Yearly price€250€790
Data included each month50 GB200 GB
Retention30 days90 days
Each extra GB€0.35€0.30
Uptime monitors50250

Both plans include every feature. They differ in how much data is included, how long it is kept, the price of each GB past the allowance, and how many uptime monitors an organization can hold.

Staff can also put an organization on the Unlimited plan from the admin console. It is not for sale and does not appear on the pricing page. It has no data allowance, overage, hard cap or monitor limit, keeps data for 3,650 days, and sends no usage or trial emails. Usage is still metered and shown on Plan & usage, which shows an Unlimited badge in place of the plan name.

Yearly billing charges 10 months for 12, about 17% less than paying monthly. On the pricing section of the home page, the Monthly and Yearly tabs switch the prices and nothing else: Starter shows €20.83 a month billed as €250 once a year, Business €65.83 a month billed as €790.

Free trial

Every new organization starts with a 14-day trial. It runs on Starter, or on Business when you start from the Business button on the pricing page. The trial begins when the organization is created, which happens when you sign up. You do not enter payment details to start.

While the trial runs, Plan & usage shows how many days are left and the end date. After that date it shows Trial ended with the date.

When the trial ends, nothing stops. Ingestion keeps running and your data is kept. Admins get an email three days before the end and one on the day it ends.

What counts as usage

Usage is the traces, logs, metrics and analytics events Unhandled ingests, measured as the size of each record as stored, in GB (1 GB is 10^9 bytes). The four signals add up to one number per organization. Every project, service and environment in the organization counts toward the same allowance.

Usage counts on the UTC day Unhandled receives it, not on the timestamp your SDK puts on the data. A batch an SDK buffered offline, a host whose clock runs behind or ahead, and data that waited in the ingest queue all count on the day it reached Unhandled.

An hourly job keeps one total per day, signal, project, environment and service. Each run recomputes every day that is still open, so re-running it, or two runs at once, give the same numbers. A day closes once Unhandled has finished storing everything it received up to the end of that day, usually a few minutes after midnight UTC, later if the ingest queue is behind. A closed day's total no longer changes. Usage recorded before Unhandled tracked projects and services appears as Unknown project and Unknown service.

Going over the allowance does not stop ingestion. Data keeps flowing and the overage rate of your plan applies past the allowance. Two safeguards protect you from a runaway SDK loop: a byte rate per organization (see ingest limits), and a hard cap at five times the allowance. Past the hard cap, ingestion pauses until the billing period ends, admins get a notice, and SDKs get a 429 that names the time ingestion resumes. Plans without an allowance have no hard cap. Overage is the usage above the allowance rounded up to a whole GB, times the plan's rate. During the trial no overage is charged.

Every member gets one email per billing period when usage reaches 80% of the allowance and one when it reaches 100%.

Billing periods

A billing period runs for one month from the day the organization was created: an organization created on 15 March has periods from the 15th to the 15th. Months without that day end on their last day. Usage starts from zero at the start of each period.

To send less, the usual levers are in the agent: lower samplingRatio, drop noisy jobs with a sampling callback, and add routes to http.ignoredUrls. See configuration and job sampling.

Retention

Retention depends on the kind of data and on your organization's settings:

DataKept for, at most
Traces, logs, metrics and exception occurrencesYour plan's retention: 30 days on Starter, 90 on Business
Analytics events90 days, or your plan's retention if longer
Uptime check results90 days, or your plan's retention if longer
IssuesDeleted after 90 days without a new occurrence, or the errors retention if longer, unless archived forever or triaged by a person: assigned, linked, commented on or changed in status

Admins can keep each kind of data for less under Settings > General. See data retention for the categories, what shortening and lengthening do, and when deleted projects are erased.

Unhandled writes the retention period onto each record when it arrives, and the database drops the record once it is older than that. Data drops off on a rolling basis; nothing is deleted in bulk at the end of a month. A shorter period, from a setting or a plan change, hides older data at once and deletes it overnight. A longer one applies to new data only.

Custom time ranges in the dashboard span at most 90 days.

Ingest limits

These apply to every plan and every SDK:

LimitValue
Request body10 MB
Body after gzip decompression16 MB
Items per request10,000 spans, log records or metric data points per table
Attributes per span, log record, data point or resource128
Attribute value length16 KB. Stack traces, exception frames and AI prompt or response text get 256 KB
Nesting depth of array and map values8 levels
Events and links per span128 each
Metric and span names, metric units, instrumentation scope names and versions256 characters. A longer one keeps its first 255 and ends in …
Metric descriptions and span status messages1,024 characters, cut the same way
Nesting depth of a JSON body127 levels
Requests per service500 per second for each ingest process, with bursts up to 1,000
Bytes per organization50 times the plan's monthly allowance spread over the month (about 1 MB/s on Starter, 3.9 MB/s on Business), with a 60-second burst
Items per Sentry envelope100
Sentry envelope header64 KB, when the key is only in the envelope's dsn
TimestampsUp to 60 seconds in the future and back to the plan's retention, at least 7 days and at most 90. Anything outside, or missing, is stored at the time Unhandled received it, with the original in unhandled.original_timestamp
Content typesapplication/json, application/x-protobuf
Content encodingsgzip or none
Environmentsproduction, staging, development

The attribute, event and link limits follow OpenTelemetry's own SDK limits, and a request that crosses them is still accepted:

  • Attributes past the 128th are dropped. The record gets unhandled.dropped_attributes_count with how many.
  • Longer values are cut to the limit.
  • Values nested deeper than 8 levels become null.
  • Events and links past the 128th are dropped and counted in unhandled.dropped_events_count and unhandled.dropped_links_count.
  • Items past 10,000 in one request are rejected through OTLP partial success, so the response says how many were not stored.

A request over a size limit gets a 413. A service over its request rate, or an organization over its byte rate, gets a 429 with a retry-after header, before Unhandled reads the body. Sentry SDKs also get X-Sentry-Rate-Limits, so they back off instead of dropping events. Self-hosted instances set the rates with INGEST_RATE_LIMIT and INGEST_ORG_RATE_MULTIPLIER. Requests that carry an Origin header, which is how browser SDKs send, have their own larger bucket set with INGEST_BROWSER_RATE_LIMIT (5,000 by default), because one browser key serves every visitor. The AdonisJS agent sends at most 512 items per batch by default, well under these limits. See troubleshooting for every ingest response.

The Plan & usage page

Open Settings, then Plan & usage under Organization (/o/:org/settings/billing). Every member of the organization can see it. The page has two tabs, Plan and Usage. The Plan tab shows:

  • the plan name, with the days left in the trial or the date it ended,
  • what happens when the trial ends, with Compare plans and Ask about a plan, which opens a new issue on the Unhandled GitHub project,
  • four cards: Price per month, Included data in GB per month, Retention in days, and Overage per GB,
  • a Usage this period panel with the GB ingested, the share of the allowance and a total for each signal, plus a Usage details link to the Usage tab.

On the Unlimited plan, the trial notice is hidden, Price shows Custom, Included data shows Unlimited and Overage shows None.

The Usage tab

Open the Usage tab of Plan & usage (/o/:org/settings/usage). Every member can see it. Totals cover the whole organization; the breakdown names only the projects and services you can open, and groups the rest as Projects you cannot access.

  • Period. The arrows step through billing periods, up to 24 back and never before the organization was created.
  • Summary. The volume billed so far, its share of the allowance, a projection for the end of the running period at the daily rate so far, and the previous period over the same number of days (or in full, for a closed period). The overage card estimates the charge from the projection, or from the final volume for a closed period, and shows no charge while the trial runs. Each signal has its own tile with size and event count. The retention of the plan is listed under the meter.
  • Daily usage. A stacked bar per UTC day. By groups the bars by signal, project, environment or service, and Size or Events switches the unit.
  • Table. Projects, environments or services, heaviest first, with each signal, the total and the share. Click a project or an environment to list its services; All projects clears the filter.
  • Ask your agent. Copies a prompt with the period's usage, the heaviest services, span names, log sources, metrics and exceptions, and asks your coding agent to propose three to five changes with their savings and wait for your choice before editing. The menu next to it opens the same prompt in Cursor or Claude.

Unhandled does not offer self-serve billing yet. There is no page to switch between Starter and Business, add a payment method, or download invoices. To change plans, use Ask about a plan on Plan & usage.