PostHog Connector
Connector-Status: Geplant Noch nicht gebaut. Tajo betreibt diesen Connector heute nicht.
Illustration · Beispieldaten
Sync-Beispiel
Quelle
PostHog
Connector-Status: Geplant
Ziel
Ihr anderes Tool
Connector-Status: Eigenes Tool
Feldzuordnung
| Quellfeld | Zielfeld | Beispielwert |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Entwerfen
- Einen Datensatz prüfen
- Diese Version freigeben
Der Status gilt für einzelne Connectoren und garantiert nicht, dass dieser Sync bereit ist. Felder zur Veranschaulichung. Prüfen Sie vor dem Sync das tatsächliche Schema und die Berechtigungen.
Verbinde PostHog über Tajo mit Brevo, um Produktanalyse-Daten, Nutzerverhaltens-Events und Cohort-Mitgliedschaften für datengetriebene Marketingkampagnen und personalisiertes Customer Engagement zu synchronisieren.
Überblick
| Eigenschaft | Wert |
|---|---|
| Plattform | PostHog |
| Kategorie | Product Analytics (Custom) |
| Einrichtungsaufwand | Mittel |
| Offizielle Integration | Nein |
| Synchronisierte Daten | Events, Persons, Feature Flags, Cohorts |
| Authentifizierung | Personal API Key / Project Token |
Funktionen
- Event-Synchronisation - Leite PostHog-Analyse-Events an Brevo für verhaltensbasiertes Targeting weiter
- Person-Profil-Synchronisation - Synchronisiere PostHog-Person-Eigenschaften als Brevo-Kontaktattribute
- Cohort-basierte Segmentierung - Mappe PostHog-Cohorts auf Brevo-Kontaktlisten
- Feature-Flag-Synchronisation - Segmentiere Kontakte nach aktivierten Feature Flags
- Funnel-Daten - Nutze Conversion-Funnel-Daten für zielgerichtetes Re-Engagement
- Session-Replay-Metadaten - Reichere Kontakte mit Session-Engagement-Metriken an
Voraussetzungen
Bevor du beginnst, stelle sicher, dass du Folgendes hast:
- Ein PostHog-Konto (Cloud oder selbst gehostet)
- Einen Personal API Key aus den PostHog-Einstellungen
- Deinen Project API Key (Token) aus den Projekt-Einstellungen
- Ein Brevo-Konto mit API-Zugriff
- Ein Tajo-Konto mit Connector-Berechtigungen
Authentifizierung
Personal API Key (Private Endpoints)
# Generate at https://app.posthog.com/settings/user-api-keysexport POSTHOG_PERSONAL_API_KEY=phx_your_personal_api_keyexport POSTHOG_PROJECT_TOKEN=phc_your_project_tokenexport POSTHOG_HOST=https://us.posthog.com # or https://eu.posthog.comexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_key// Private API endpoints use Bearer authenticationconst headers = { 'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}`, 'Content-Type': 'application/json'};
// Public endpoints use the project tokenconst publicHeaders = { 'Content-Type': 'application/json'};// Token is passed in the request body for public endpointsAPI-Schlüssel-Sicherheit
Personal API Keys bieten vollständigen Kontozugriff. Lege sie niemals in Client-seitigem Code offen. Nutze den Project API Key (Token) für öffentliche Endpoints wie Event-Capture und Feature-Flag-Evaluation.
Konfiguration
Grundeinrichtung
connectors: posthog: enabled: true host: "${POSTHOG_HOST}" personal_api_key: "${POSTHOG_PERSONAL_API_KEY}" project_token: "${POSTHOG_PROJECT_TOKEN}" project_id: "12345"
sync: persons: true events: true cohorts: true feature_flags: true schedule: "0 */3 * * *" # Every 3 hours
event_filters: - "$pageview" - "purchase_completed" - "signup_completed" - "feature_used"
lists: all_users: 25 active_users: 26 power_users: 27Feld-Mapping
field_mapping: email: email $name: FIRSTNAME $browser: BROWSER $os: OS $initial_referrer: REFERRAL_SOURCE total_events: EVENT_COUNT last_seen: LAST_ACTIVE_DATE signup_date: SIGNUP_DATE plan: SUBSCRIPTION_PLAN company: COMPANY cohort_names: POSTHOG_COHORTSAPI-Endpoints
| Endpoint | Methode | Beschreibung |
|---|---|---|
{host}/api/projects/{id}/persons/ | GET | Persons auflisten |
{host}/api/projects/{id}/events/ | GET | Events auflisten |
{host}/api/projects/{id}/cohorts/ | GET | Cohorts auflisten |
{host}/api/projects/{id}/feature_flags/ | GET | Feature Flags auflisten |
{host}/api/projects/{id}/feature_flags/evaluation/ | POST | Flags evaluieren |
{host}/api/projects/{id}/insights/ | GET | Gespeicherte Insights auflisten |
{host}/api/projects/{id}/query/ | POST | HogQL-Queries ausführen |
{host}/i/v0/e | POST | Events erfassen (öffentlich) |
{host}/decide/?v=3 | POST | Feature-Flag-Decisions (öffentlich) |
Code-Beispiele
Connector initialisieren
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
await tajo.connectors.connect('posthog', { host: process.env.POSTHOG_HOST, personalApiKey: process.env.POSTHOG_PERSONAL_API_KEY, projectToken: process.env.POSTHOG_PROJECT_TOKEN, projectId: '12345'});Persons mit Brevo synchronisieren
// Paginate through PostHog personslet nextUrl = `${posthogHost}/api/projects/${projectId}/persons/?` + new URLSearchParams({ limit: '100' });
while (nextUrl) { const response = await fetch(nextUrl, { headers: { 'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}` } });
const data = await response.json();
for (const person of data.results) { const email = person.properties.$email || person.properties.email; if (!email) continue;
await tajo.contacts.sync({ email, attributes: { FIRSTNAME: person.properties.$name || person.properties.name, LAST_ACTIVE_DATE: person.properties.$last_seen, SIGNUP_DATE: person.created_at, EVENT_COUNT: person.properties.$event_count, BROWSER: person.properties.$browser, OS: person.properties.$os, REFERRAL_SOURCE: person.properties.$initial_referrer }, listIds: [25] }); }
nextUrl = data.next;}Cohorts als Brevo-Listen synchronisieren
// Get PostHog cohorts and sync members to Brevo listsconst cohortsResponse = await fetch( `${posthogHost}/api/projects/${projectId}/cohorts/`, { headers: { 'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}` } });
const { results: cohorts } = await cohortsResponse.json();
for (const cohort of cohorts) { // Get persons in this cohort const personsResponse = await fetch( `${posthogHost}/api/projects/${projectId}/cohorts/${cohort.id}/persons/`, { headers: { 'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}` } } );
const { results: persons } = await personsResponse.json();
for (const person of persons) { const email = person.properties.$email || person.properties.email; if (email) { await tajo.contacts.update(email, { attributes: { POSTHOG_COHORTS: cohort.name } }); } }}HogQL-Queries für Analysen ausführen
// Use HogQL to query analytics dataconst queryResponse = await fetch( `${posthogHost}/api/projects/${projectId}/query/`, { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ query: { kind: 'HogQLQuery', query: ` SELECT properties.$email AS email, count() AS event_count, max(timestamp) AS last_event FROM events WHERE event = 'purchase_completed' AND timestamp > now() - interval 30 day GROUP BY email HAVING event_count > 3 ORDER BY event_count DESC LIMIT 1000 ` } }) });
const queryResult = await queryResponse.json();
for (const row of queryResult.results) { await tajo.contacts.update(row[0], { attributes: { PURCHASE_COUNT_30D: row[1], LAST_PURCHASE: row[2] } });}Rate Limits
| Endpoint-Kategorie | Limit | Hinweise |
|---|---|---|
| Analytics-Endpoints | 240/Min, 1.200/Std | GET persons, events, insights |
| Query-Endpoint | 2.400/Std | HogQL und Custom Queries |
| Feature-Flag-Evaluation | 600/Min | Lokaler Evaluation-Endpoint |
| CRUD-Endpoints | 480/Min, 4.800/Std | Create-, Update-, Delete-Operationen |
| Öffentliche Endpoints (Capture) | Unbegrenzt | Event-Capture, Flag-Decisions |
Batch Exports
Nutze für umfangreiche Event-Daten-Exporte das Batch-Export-Feature von PostHog statt der API. Batch Exports unterstützen S3, BigQuery, Snowflake und weitere Ziele.
Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
| 401 Unauthorized | Ungültiger API-Schlüssel | Personal API Key in den Einstellungen prüfen |
| 400 Invalid project | Falsche Projekt-ID | Projekt-ID in der PostHog-URL prüfen |
| Leere Persons-Liste | Keine identifizierten Nutzer:innen | Sicherstellen, dass posthog.identify() aufgerufen wird |
| Fehlende Properties | Properties nicht gesetzt | $set-Aufrufe im Client-SDK prüfen |
| Rate Limit 429 | Zu viele Anfragen | Backoff implementieren, Rate-Limit-Header prüfen |
Debug-Modus
connectors: posthog: debug: true log_level: verbose log_queries: true log_sync: trueBest Practices
- Nutzer:innen identifizieren - Rufe immer
posthog.identify()mit E-Mail auf, um Person-Synchronisation zu ermöglichen - Cohorts zur Segmentierung nutzen - Nutze die verhaltensbasierten Cohorts von PostHog für Brevo-Listen
- API-Anfragen bündeln - Nutze Pagination und Batch-Verarbeitung für große Datensätze
- HogQL für komplexe Queries nutzen - Extrahiere Custom Analytics mit SQL-ähnlichen Queries
- Batch Exports einrichten - Bei großen Datenmengen Batch Exports gegenüber API-Polling bevorzugen
- Relevante Events filtern - Synchronisiere nur marketingrelevante Events, um Rauschen zu reduzieren
Sicherheit
- Personal API Key - Gescoptes Bearer-Token zur Authentifizierung
- Project Token - Öffentlicher Token nur für Client-seitige Operationen
- Nur HTTPS - Alle Endpoints erfordern TLS-Verschlüsselung
- IP-Allowlisting - Verfügbar für selbst gehostete Instanzen
- Key-Scoping - Erstelle API-Schlüssel mit spezifischen Berechtigungs-Scopes
- GitHub Secret Scanning - PostHog arbeitet mit GitHub zur Erkennung durchgesickerter Schlüssel zusammen