Transparency
Every event we record.
Sahnga runs first-party product analytics on our own BigQuery warehouse — no PostHog, no third-party trackers, and no analytics code running in your browser on the marketing pages you’re reading right now. On these pages we count visits on our own server — which page, which site linked here, whether you're on a phone or a laptop, which country, and whether you look like a person or a robot. No cookies, no scripts, and nothing that could tell us it was you. This page lists that count in full, and every event the product app can emit (schema v1).
This page
8On these pages we count visits on our own server — which page, which site linked here, whether you're on a phone or a laptop, which country, and whether you look like a person or a robot. No cookies, no scripts, and nothing that could tell us it was you. The counting happens on our server while it answers the request, so there is no analytics code in these pages at all — nothing to load, nothing to block, nothing to consent to. One visit writes one row, and the whole row is this:
pathWhich marketing page was asked for, matched against a fixed list of our own routes. Anything not on that list — a scanner probing for /wp-admin, a stale link — is stored as the single value /__other. Query strings are dropped before the row is built.
referrer_hostThe host of the site that linked here, and only the host: news.ycombinator.com, not the full address. Search terms live in the query string of a referring URL, so the query string never arrives.
deviceOne of four words: mobile, tablet, desktop, unknown. Worked out from the request and then the input is thrown away.
is_botWhether the request looked like a crawler or a script rather than a person, so charts can exclude it.
countryA two-letter country code, and only when the platform serving the page has already resolved one. We never look at the address it came from. Often empty.
tsWhen the page was requested. The table is partitioned by this date and rows are deleted automatically after 400 days.
event_idA random number for this row, used once to discard duplicates if a row is delivered twice. It is not linked to you or to any other row.
schema_version / envWhich version of this table's shape the row was written against, and whether it came from production or a developer's laptop.
And here is the more important list — the columns this table does not have. There is no version of it that can be joined back to a person, because the fields you would need to do that were never collected:
ipYour address arrives with the request, the way it does with every web request ever made, and is used to send the page back. It is never written down here — not stored, not hashed, not bucketed.
user_agentThe raw browser string is read once to answer phone-or-laptop and person-or-robot, then dropped. It is a fingerprint, so it is never stored.
cookieNothing is set and nothing is read. There is no cookie banner on this site because there is nothing to ask you about.
session_id / visitor_idThere is no way to tell whether two rows are the same person, which is why we can tell you how many pages were read and can never tell you how many people read them.
fingerprintNo canvas, no fonts, no screen size, no timing — no client-side code of any kind runs on these pages, so there is nothing to fingerprint with.
Account
4auth_sign_upA new account was created (email or Google).
auth_sign_inAn existing account signed in.
auth_sign_outA session ended (user-initiated sign-out).
auth_email_verifiedAn account confirmed its email address.
Workspace
6ws_createdA workspace was created.
ws_switchedThe active workspace changed for a session.
ws_invite_sentA member or guest invite was sent.
ws_invite_acceptedAn invite was accepted, joining a workspace.
ws_member_role_changedA member's role or status changed.
ws_theme_changedA workspace's appearance theme was changed.
Tasks
12task_createdA task was created.
task_updatedA task's fields were edited.
task_completedA task's status moved to done.
task_deletedA task was soft-deleted.
task_subtask_createdA subtask was added under a parent task.
task_dependency_addedA task was marked as depending on another task.
task_label_appliedA label was assigned to a task.
task_watcher_toggledA task's watch state was toggled for a member.
task_multi_assignee_setA task's assignees were changed via the assignee picker.
task_date_setA task's start or due date was set.
task_filter_appliedA list-view filter was applied to a project's tasks.
task_shared_to_chatA task was shared into a chat channel.
Attachments
2attachment_addedA file was attached to a task or a chat message.
attachment_scan_completedAn uploaded file finished malware scanning — the verdict, the surface it was uploaded to, a size bucket and how long the scan took. Never the filename, and never the engine's signature name.
Roadmap
7roadmap_goal_createdA roadmap goal was created.
roadmap_goal_editedA roadmap goal's title, colour or dates were changed (which fields, never their values).
roadmap_goal_linkedA task was linked to a roadmap goal.
roadmap_goal_status_changedA roadmap goal's status changed.
roadmap_gantt_rescheduledA task's dates were changed from the Gantt view.
roadmap_share_enabledA public roadmap share link was turned on.
roadmap_share_revokedA public roadmap share link was revoked.
Projects
5project_createdA project was created.
project_archivedA project was archived.
project_view_openedA project view (list/board/calendar/roadmap/gantt) was opened.
project_guest_invitedA guest was invited to a project.
project_share_openedThe project share/guests dialog was opened.
My Tasks
1my_tasks_openedThe My Tasks page was viewed, by tab.
Command palette
1command_palette_usedA command was run from the command palette.
Keyboard shortcuts
1shortcut_usedA keyboard shortcut was used.
Collaboration
2collab_comment_createdA comment was posted on a task.
collab_mentionA comment mentioned a teammate.
Billing
5billing_checkout_startedA band checkout session was started.
billing_checkout_completedA Stripe checkout completed and a band activated.
billing_portal_openedThe Stripe customer portal was opened.
billing_band_changedA workspace's band changed (upgrade/downgrade).
billing_auto_downshift_keptAn owner canceled a scheduled auto-downshift (M4-07) to keep their current band.
Import
2import_startedA Trello import job started.
import_completedA Trello import job finished.
Export
2export_startedA workspace export job started.
export_completedA workspace export job finished.
App
1app_openedThe app shell loaded for a session.
Onboarding
1onboarding_stepAn onboarding checklist step was reached.
Account deletion
2account_deletion_requestedA user requested account deletion.
account_deletion_canceledA user canceled a pending deletion request.
Abuse reports
1abuse_report_submittedA user submitted an abuse report.
Chat
7chat_channel_createdA chat channel was created.
chat_message_sentA message was sent in a channel or DM.
chat_dm_startedA 1:1 direct message conversation was started.
chat_reaction_addedAn emoji reaction was added to a message.
chat_thread_repliedA threaded reply was posted.
chat_notify_changedA channel's notification preference was changed.
chat_sound_toggledChat notification sounds were turned on or off.
Calls
2call_joinedA voice call was joined.
call_leftA voice call was left.
Forms
4form_createdAn intake form was created for a project.
form_enabled_changedAn intake form was turned on or off.
form_token_regeneratedAn intake form's public link was regenerated.
form_submittedA public intake form received a submission.
Search
2search_performedA workspace-wide task search was run.
search_result_openedA search result was opened.
Reminders
2reminder_setA personal reminder was set on a task.
reminder_clearedA personal reminder was cleared.
Countdowns
1countdown_createdA countdown was added to a project overview.
template
1template_appliedA task template was applied to create a task.
Questions about a specific event or want your data deleted? See our privacy policy or the promises.