Integrations
Segment and RudderStack bring in your product events. Tracked links, GitHub, Discord, Discourse, Luma, Eventbrite, event lists and YouTube add the community activity that comes before a signup. Owners and admins set them up in the dashboard.
Segment, RudderStack, PostHog and Mixpanel
One event mapping, in Settings → Product analytics, applies to all four: which of your event names are a signup, a first API call and going live. “Signed Up” is a signup by default. Names match in any case. Other events are ignored.
Segment and RudderStack
If your product already sends events to Segment or RudderStack, Tamari can read them instead of you calling the HTTP API.
- In Segment, add the Webhooks (Actions) destination; in RudderStack, the Webhook destination.
- Set the URL to
<your Tamari address>/api/v1/segment, method POST, and add the headerAuthorization: Bearer <write key>. If you turn on batching, use a batch size of 500 or fewer. - In Tamari, Settings → Segment and RudderStack, list which event names are a signup, a first API call and going live. “Signed Up” is a signup by default.
identifycalls link the user ID, email (from traits), anonymous ID and a GitHub username (traitsgithub_login) when at least two are present.trackcalls you mapped become conversions; theirmessageIdstops duplicates, andproperties.heard_aboutis recorded as the self-reported source. Other events are ignored.pagecalls become page views only if you turn that on. Leave it off if your docs also have the Tamari snippet, or each visit counts twice. Query strings are removed.- Segment's anonymous ID is not the Tamari snippet's, so identify calls from your app are what link the two.
PostHog
- In PostHog, open Data pipelines, choose New → Destination, and pick the HTTP Webhook.
- Set the URL to
<your Tamari address>/api/v1/posthog, keep the default body, and add the headerAuthorization: Bearer <write key>. - Filter the destination to your mapped events and $identify, so PostHog does not send everything else.
Mapped events become conversions, deduplicated by the event's id. $identify links the person's id, the anonymous id it replaced, and their email. $pageview becomes a page view only if you turn page views on.
Mixpanel
Mixpanel cannot send events out, so Tamari reads them. Create a service account in Mixpanel (Organization settings → Service accounts) with access to your project, then connect it in Settings → Product analytics with its username, secret, project id and data residency. Tamari reads your mapped events every hour, through Mixpanel's export API; the first read covers your attribution window, up to 90 days. Events carry the Mixpanel distinct id as the user id, so it must match the user id your product sends elsewhere.
Discourse
- In Tamari, Settings → Discourse, enter your forum's address. Tamari shows a payload URL and a secret, once.
- In Discourse's admin, search the sidebar for Webhooks and choose + Add Webhook. Paste the URL and secret, choose content type application/json, and the events
post_createdanduser_created.
- A member signing up is a forum join, linked to the email they signed up with.
- Starting a topic, and replying in one, are recorded once per member, topic and day. Topics appear on Content, so threads can be credited like docs pages.
- Tamari never stores what anyone writes. System users and staged users are skipped.
- Every webhook is checked against the secret. Members who joined before you connected are recorded when they next post, but linked to an email only if they also sign up for your product with it.
Luma and Eventbrite
Connect an event platform to import registrations and check-ins without uploading attendee lists.
- Get a key. Luma: create one at
luma.com/calendar/manage/api-keysfor the calendar your events are on (the Luma API needs Luma Plus). Eventbrite: Account Settings → Developer Links → API Keys, then copy the private token. - In Tamari, Settings → Event platforms, paste it. Tamari checks the key before saving it, and stores it encrypted.
- Events that started within your attribution window, or start in the next 90 days, become programs under Events. Each program keeps the event's name, date and city.
- Luma guests count when approved, and as attended when checked in. Eventbrite attendees count unless cancelled or refunded, and as attended when checked in, at the time their ticket was scanned.
- Tamari checks for new guests every 6 hours; Sync now runs it at once. Syncing again never counts anyone twice.
- If the platform rejects the key, syncing stops and Settings says so. Disconnecting keeps what was imported.
YouTube
In Settings → YouTube, enter your channel's address, @handle or channel id. Content then shows your 200 most recent videos with their public views, likes and comments, refreshed daily. YouTube does not say who watched a video, so these counts are context and earn no credit. Put a tracked link in each video's description: its clicks show next to the video, and they are credited with signups like any other touch.
Tracked links
Create a short link under Tracked links for each talk, video, post or newsletter, and use it wherever you share that piece: on a slide, in a video description, in a post. Each link redirects to the address you choose and adds utm_source (where it was shared), utm_medium=link, utm_campaign and tm_click.
- Each click is recorded and credited to what the link is for, which appears on Content with its signups.
- When the destination page has the Tamari snippet, the click is linked to that visitor, and to their signup once they are identified. Without the snippet there, clicks are counted but cannot be credited with signups.
- Link previews from Slack, X, LinkedIn, Discord and similar services are not counted as clicks.
- You can change where a link goes and what it is called. Its address cannot change, because it may already be printed.
- Deleting a link stops it redirecting. Its past clicks and credit stay.
GitHub
- Choose Connect GitHub, then install the Tamari app on your account or organization and pick the repositories.
- GitHub asks you to authorize the app as well. That proves you can manage the installation you just made.
The app has read-only access. From then on, Tamari records as they happen:
- stars and forks;
- issues and pull requests opened, and pull requests merged;
- discussions started;
- releases, which become content items.
Credit goes to the author of an issue, pull request or discussion, not to the maintainer who merged or answered it. Bots are skipped.
Past activity
On connecting, Tamari imports every fork, and the issues and pull requests opened within your attribution window. GitHub shows past stargazers only to repository admins and collaborators, so past stars need one more step: Settings → GitHub → Import past stars. It runs with your own GitHub authorization, for up to about 8 hours, and skips repositories where you are not an admin or collaborator. Past discussions are not imported.
Linking GitHub activity to signups
Send github_login with a track or identify call, or let developers link their GitHub account through Discord's /connect. Without a link, their GitHub activity still counts as engagement, but cannot be credited with their signup.
Discord
- Choose Connect Discord and add the Tamari bot to your server. Discord requires the Manage Server permission for this.
- The bot asks for one permission: View Channels.
Tamari records:
- when a member joins the server;
- which channels a member posts in, once per channel per day.
Tamari never stores what anyone writes. The bot does not ask Discord for message text, and has no access to direct messages or voice. Bots and webhooks are skipped. Activity from before the bot joined is not imported.
/connect
A member who types /connect in your server gets a private link. Through it they can share their verified email address and their verified GitHub account, so their Discord activity is credited with their signup. They need no Tamari account. The link works for 15 minutes, only for the member who asked for it.
Removing the bot from your server disconnects it.
Event attendee lists
- Under Events, create the event: name, kind, date and, optionally, location.
- Choose Import attendees and pick a CSV file, such as a Luma or Eventbrite export.
- Map the columns: the email column is required. Registration date is optional; without it, the event date is used.
- Choose how attendance is read: from a column (yes, true, 1 or a check-in time count as attended), everyone, or no one.
- Check the preview, then import.
- Files can have up to 10,000 rows and 4 MB.
- Dates must be written like
2026-10-01or2026-10-01T18:30:00+01:00; dates such as01/10/2026are refused because they mean different days in different countries. Times without a zone are read as UTC. - Importing the same file again adds nothing. A later file can add attendance to earlier registrations.
- Names are not imported. Rows that cannot be read are listed, and you can download them as a CSV to fix.