Skip to the page

Usage reporting

Once a day, your team's Jelly sends us, the people who make Jelly, a short report about how it's being used: how much mail there is, what the team has set up, and which parts of Jelly people use. For example: the team has 5 people and 3 labels, 212 messages arrived since yesterday, and people searched 14 times. We use these figures to decide what to build next and what to leave alone.

This page starts with what is never in the report, then covers where it goes, what else we keep about a team we host, and how a team that runs its own Jelly turns it off. The complete list of what's sent is at the end.

What is never sent

  • No message, sent or received, and no subject line.
  • No name: not a person's or a contact's. The team's name isn't sent either, but your Jelly's web address is, and on Jelly's own hosting that usually contains it (acme.letsjelly.com).
  • No email address.
  • No note, draft, search, label name or rule.
  • Nothing anyone typed, and nothing that arrived in the mail.

If Jelly hosts your team, we also keep a short record of who the team is: see a team Jelly hosts. That record stays with us. It never goes to PostHog.

Where it goes

The report goes to PostHog, a service for counting how software is used, on its servers in the EU.

If your Jelly is connected to our service, it sends us the same report as well, so we can read it beside your team's plan. Every team Jelly hosts is connected. So is a self-hosted Jelly that has been connected for Google accounts, iPhone and Mac notifications, or support.

A team Jelly hosts

When Jelly hosts your team, the daily report is part of the service, and there's no switch for it. Settings → Housekeeping says so, in the place where a self-hosted team has its switch.

We also keep a short record of who your team is. We need it to run the team, and to help when you ask. It holds:

  • the team's name;
  • each member's name, email address and role, when they joined, and when they last used Jelly (see below);
  • each address the team sends and receives as, the kind of account that sends it (Gmail, your own mail server, or ours), and whether it's verified;
  • whether Google sign-in is switched on for the team (in the record, google_signin), so that the sign-in page at join.letsjelly.com knows whether to offer it.

The record is updated once a day, with the report. It's also updated whenever the team's membership changes (someone accepts an invitation, or is removed, restored or given another role) and whenever someone signs in. That update carries the record alone, and none of the report's figures.

"Last used Jelly" means the last time someone opened Jelly in a browser or in Jelly's phone app. Claude, the Jelly CLI and other apps your team connects don't count, because those are programs acting for the person. Jelly keeps this time on its own, so it doesn't reset when someone signs out. The record stays with us and never goes to PostHog. It holds nothing from the mail itself: no message, no subject, no contact and no note.

Each person's answer to Email from Jelly goes to our service too, with their address and when they gave it. That way one answer holds for every team they're on, and every email Jelly sends is checked against it. Our service keeps Jelly's newsletter list, at Buttondown, in step with it. None of it goes to PostHog.

When you choose a plan, cancel it, or your trial ends, our service notes the change of plan, with no names attached. If you cancel and choose a reason when Stripe asks, the reason goes with it. Anything you type in the box beside it is read by the people who make Jelly, and goes nowhere else.

Turning it off

A team that runs its own Jelly can turn the report off. A team Jelly hosts can't (see above).

Only Admins and the Owner can do this. Go to Settings → Housekeeping and, under Usage reporting, turn off Send usage figures once a day. It saves as you flip the switch, and Jelly says Usage reporting is off. Nothing more will be sent.

When you turn it off, your Jelly sends one last message saying so, so that we know the silence is on purpose. After that it sends nothing, to PostHog or to our service, connected or not. If you turn it back on, the daily report starts again.

If Housekeeping says This instance has nowhere to report usage to, your Jelly sends nothing, and there's no switch. A sandbox team is always one of these, wherever it runs.

What is sent

Almost every figure in the report is one of three kinds:

  • a count, such as how many labels the team has;
  • yes or no, such as whether an automatic BCC is set;
  • a word from a fixed list, such as person_address for the from-name format.

Many counts cover the time since the last report, usually a day.

Three values are ordinary text rather than a word from a fixed list:

  • origin_host: your Jelly's web address, without the https://. On Jelly's own hosting this is often your team's name followed by .letsjelly.com, so it can show your team's name.
  • release: the version of Jelly you're running.
  • environment: normally production. Whoever runs your server can set it to any word.

The report also carries your Jelly's instance id: a random code made when it was set up, so that one Jelly's reports can be told from another's. It's shown at the bottom of Settings → Housekeeping.

Every figure is listed below, in groups. The right-hand column gives each figure's name in the report itself, for anyone who wants to match them up.

About your Jelly

What it says In the report
The instance id distinct_id
Its web address, without https:// origin_host
The version it runs release, $lib_version
The name of the software, always jam (Jelly's internal name) $lib
Whether it's a live or a test instance environment
How many days old it is age_days
How many hours this report covers period_hours
Whether it's a development build, and whether it allows the development sign-in dev_tools, dev_signin
Whether this report was asked for by hand (development builds only) requested
Whether the setup checklist is finished setup_done
How many whole days since anyone on the team last used Jelly. Left out until someone has. Once it's there it stays, because that time never goes back last_seen_days

Which features are switched on

What it says In the report
Whether the team has a name (never the name) team_named
Which from-name format the team uses: person_address, person, address or other from_name_format
Whether an automatic BCC is set (never the address) auto_bcc
The undo-send window, in seconds send_delay_seconds
Whether the default autoresponder is on, and whether it has any words autoresponder, autoresponder_written
Whether relayed senders are set relay_senders
Whether Postmark is set up postmark
Whether a receiving domain is set up receiving_domain
Whether the server is set up for Google sign-in, Gmail, Gmail's instant delivery, Slack and Discord google_signin, gmail_ready, gmail_push, slack_ready, discord_ready

How many people are on the team

What it says In the report
How many people are on the team, how many are Admins or the Owner, and how many are former members members, members_admins, members_gone
How many invitations are waiting invitations_pending
How many people on the team used Jelly in the last day, week and month members_seen_1d, members_seen_7d, members_seen_30d
How many people have a password passwords
How many people have a second step at sign-in: an authenticator app or a passkey members_two_factor
How many people did anything, and how many replied to someone, since the last report and over the last week. These show whether one person answers everything or the work is shared members_acted_period, members_acted_7d, members_replied_period, members_replied_7d

Which preferences people chose

What it says In the report
How many people get email notifications, and how many hear about every new conversation profiles_notify_email, profiles_notify_new
How many load remote images automatically profiles_load_remote_images
How many use the 12-hour clock profiles_clock_12
How many put Send & archive first profiles_send_archive_first
How many put Forward & go back first profiles_forward_go_back_first
How many use the classic layout profiles_classic_layout
How many keep the conversation sidebar pinned open profiles_contact_pane_pinned
How many use the full width of the window profiles_full_width
How many changed their peek widths profiles_peek_widths
How many are set as away profiles_away
How many uploaded a picture profiles_with_picture
How many linked their Slack account profiles_slack_linked
How many labels people follow, in total label_follows
How many devices get pop-up notifications, and how many people they belong to push_devices_all, push_members_all

How much mail there is

What it says In the report
How many conversations are in the inbox, archived, snoozed, in spam, in the trash and in the vault conversations_inbox, conversations_archived, conversations_snoozed, conversations_spam, conversations_trash, conversations_vaulted
How many conversations began since the last report conversations_new
How many conversations were split off from another, or imported from the older Jelly conversations_split, conversations_imported
How many messages came in and went out: ever, since the last report, and in the last 30 days messages_in, messages_out, messages_period_in, messages_period_out, messages_30d_in, messages_30d_out
How many messages the team has sent since this Jelly was set up, leaving out autoresponder replies and mail imported from the older Jelly messages_out_native
How many files are attached to mail, and to notes attachments, note_attachments
How many contacts there are, and how many are blocked contacts, contacts_blocked
How many drafts there are, and how many are scheduled drafts, drafts_scheduled
How many notes and reactions there are notes, reactions
How many notifications Jelly made since the last report notifications_period

What the team has set up

What it says In the report
How many addresses, how many are verified, and how many send through Postmark, Gmail and SMTP addresses_all, addresses_verified, addresses_by_postmark, addresses_by_gmail, addresses_by_smtp
How many Gmail accounts, IMAP accounts and SMTP servers are connected gmail_connections, imap_accounts, smtp_servers
Whether an IMAP account copies sent mail to its Sent folder imap_sent_sync
How many mailboxes, how many of them the team added, and how many labels and saved replies mailboxes, mailboxes_custom, labels, saved_replies
How many autoresponders, and how many are on autoresponders, autoresponders_enabled
How many rules, how many are on, and how many match any one condition rules_all, rules_active, rules_any
How many rules that are on have more than one condition, or match a pattern rules_advanced
How many rule actions of each kind: label, assign, archive, spam, spam and block, forward, mailbox, autoresponder rule_actions_label, rule_actions_assign, rule_actions_archive, rule_actions_spam, rule_actions_spam_block, rule_actions_forward, rule_actions_mailbox, rule_actions_autoresponder
How many rule conditions look at each part of a message: From address, To address, Cc/Bcc address, Any address, Forwarding address, Received at, Subject, Body and Anywhere rule_fields_from, rule_fields_to, rule_fields_cc, rule_fields_any, rule_fields_forwarding, rule_fields_address, rule_fields_subject, rule_fields_body, rule_fields_anywhere
How many rule conditions match words, and how many match patterns rule_modes_contains, rule_modes_regex
How many API tokens are live, and how many apps (such as Jelly for iOS) are signed in api_tokens, app_grants
How many apps the team has registered, and how many sign-ins they hold app_clients, app_client_grants
How many webhooks, how many are on, and how many deliveries they made since the last report webhooks_all, webhooks_active, webhook_deliveries_period
How many Slack and Discord connections, and how many of the Discord ones are still on slack, discord, discord_active
How many imports from the older Jelly have finished jelly_imports_done

When the team first did things

Each of these is a number of whole days after your Jelly was set up: 0 is the first day. A figure is left out until the thing has happened. None of them is a date or a time.

What it counts In the report
The first verified address first_address_days
The first teammate: the first invitation, or the second person to join, whichever came first first_invite_days
The first message the team sent, leaving out the autoresponder first_reply_days
The first conversation assigned, or taken with I got this first_assignment_days
The first note first_comment_days
The first rule first_rule_days
The first saved reply first_saved_reply_days

Mail, notes and assignments imported from the older Jelly don't count here. Rules, saved replies and addresses that came with an import count as day 0.

What people did since the last report

Each of these is a count of how many times it happened, from the activity record. Every name starts with did_.

What it counts In the report
Messages received and sent did_received, did_sent
Notes written did_commented
Assigning, unassigning and I got this did_assigned, did_unassigned, did_claimed
Labels added and removed, and labels deleted did_labelled, did_unlabelled, did_label_deleted
Archiving and unarchiving did_archived, did_unarchived
Snoozing and unsnoozing did_snoozed, did_unsnoozed
Marking as spam and not spam did_spam, did_unspam
Moving to the trash and back did_trashed, did_restored
Moving to the vault and back out did_vaulted, did_unvaulted
Setting a conversation aside did_ignored
Adding to, moving between, taking out of and setting mailboxes did_mailbox_add, did_mailbox_move, did_mailbox_remove, did_mailbox_set
Setting or clearing a conversation field did_field_set
Changing a subject did_renamed
Splitting a conversation did_split, did_split_off
Unwrapping a forwarded email, and putting it back did_unwrapped, did_rewrapped
Reporting a problem with a message, and what happened to the report did_reported, did_report_withdrawn, did_report_answered, did_report_closed
Autoresponder replies sent did_autoresponded
Conversations forwarded did_forwarded
Following and unfollowing did_followed, did_unfollowed
Taking over a colleague's draft did_draft_editing_taken_over
Everything above that a rule or the autoresponder did did_by_rule_all

Which parts of Jelly people used since the last report

Each of these counts how many times something was used. Every name starts with used_. Each one is sent as 0 when nobody used it, except the lists in the last row, which are left out instead.

What it counts In the report
Searches, and searches sorted newest first used_search, used_search_recent
Actions on several conversations at once, and undoing them used_bulk, used_bulk_undo
Undoing a send used_undo_send
Scheduling a reply to go out later used_send_later
Opening a row's menu used_row_menu
Opening New message used_compose
Viewing a message's original source used_message_source
Opening the activity, contacts and notifications pages used_activity, used_contacts, used_notifications
Pressing Got it on a hint used_hint_dismissed
Pressing Run the sweep now used_sweep_now
Searching the attachments page used_attachments_search
Opening each list: the inbox, all mail, archived, snoozed, spam, trash, sent, drafts, scheduled, bookmarks, attachments, and any label's list (all labels count as one; never which label) used_view_inbox, used_view_all, used_view_archived, used_view_snoozed, used_view_spam, used_view_trash, used_view_sent, used_view_drafts, used_view_scheduled, used_view_bookmarks, used_view_attachments, used_view_label

When reporting is turned off

The last message, sent once when an Admin turns reporting off, is called usage reporting. It carries the instance id, $lib, the version and environment described above, and on: false. Nothing else.

Advanced: for whoever runs the server

These settings in the server's environment change what your Jelly reports:

  • JAM_USAGE_REPORTING=off stops all reporting, whatever the switch on Housekeeping says.
  • JAM_POSTHOG_KEY replaces the PostHog key built into a release.
  • JAM_POSTHOG_HOST sends the report to a different address, such as your own domain in front of PostHog. It must be an http or https address, or Jelly won't start.
  • JAM_SENTRY_ENVIRONMENT sets the environment word.

A copy of Jelly built from source without a PostHog key reports nothing.

Connecting a self-hosted Jelly