PostHog-connector
Connectorstatus: Gepland Nog niet gebouwd. Tajo draait deze connector vandaag niet.
Illustratie · voorbeelddata
Voorbeeld van synchronisatie
Bron
PostHog
Connectorstatus: Gepland
Bestemming
Je andere tool
Connectorstatus: Eigen tool
Veldtoewijzing
| Bronveld | Doelveld | Voorbeeldwaarde |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Opstellen
- Eén record controleren
- Deze versie goedkeuren
Statussen gelden per connector en garanderen niet dat deze synchronisatie klaar is. De velden zijn illustratief. Controleer het echte schema en de rechten voordat een synchronisatie draait.
Verbind PostHog met Brevo via Tajo om product-analyticsdata, gebruikersgedragsevents en cohort-lidmaatschappen te synchroniseren voor datagedreven marketingcampagnes en gepersonaliseerde klantbetrokkenheid.
Overzicht
| Eigenschap | Waarde |
|---|---|
| Platform | PostHog |
| Categorie | Product Analytics (Custom) |
| Setupcomplexiteit | Gemiddeld |
| Officiële integratie | Nee |
| Gesynchroniseerde data | Events, Persons, Feature Flags, Cohorts |
| Auth-methode | Personal API Key / Project Token |
Functies
- Eventsynchronisatie - Stuur PostHog-analytics-events door naar Brevo voor gedragstargeting
- Person-profielsynchronisatie - Synchroniseer PostHog person-properties naar Brevo-contactattributen
- Cohort-gebaseerde segmentatie - Map PostHog-cohorts naar Brevo-contactlijsten
- Feature flag-synchronisatie - Segmenteer contacten op basis van geactiveerde feature flags
- Funneldata - Gebruik conversiefunneldata voor gerichte heractivering
- Session replay-metadata - Verrijk contacten met sessiebetrokkenheidsmetrics
Vereisten
Voordat je begint, zorg dat je beschikt over:
- Een PostHog-account (Cloud of self-hosted)
- Een Personal API Key uit PostHog Settings
- Je Project API Key (token) uit Project Settings
- Een Brevo-account met API-toegang
- Een Tajo-account met connector-rechten
Authenticatie
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 key-beveiliging
Personal API keys geven volledige accounttoegang. Stel ze nooit bloot in client-side code. Gebruik de Project API Key (token) voor publieke endpoints zoals event-capture en feature flag-evaluatie.
Configuratie
Basisinstelling
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: 27Veldmapping
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 | Method | Beschrijving |
|---|---|---|
{host}/api/projects/{id}/persons/ | GET | Personen opvragen |
{host}/api/projects/{id}/events/ | GET | Events opvragen |
{host}/api/projects/{id}/cohorts/ | GET | Cohorten opvragen |
{host}/api/projects/{id}/feature_flags/ | GET | Feature flags opvragen |
{host}/api/projects/{id}/feature_flags/evaluation/ | POST | Flags evalueren |
{host}/api/projects/{id}/insights/ | GET | Opgeslagen insights opvragen |
{host}/api/projects/{id}/query/ | POST | HogQL-queries uitvoeren |
{host}/i/v0/e | POST | Events capturen (publiek) |
{host}/decide/?v=3 | POST | Feature flag-decisions (publiek) |
Codevoorbeelden
Connector initialiseren
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'});Personen synchroniseren naar Brevo
// 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;}Cohorten synchroniseren als Brevo-lijsten
// 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 uitvoeren voor analytics
// 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-categorie | Limiet | Opmerkingen |
|---|---|---|
| Analytics-endpoints | 240/min, 1.200/uur | GET persons, events, insights |
| Query-endpoint | 2.400/uur | HogQL en custom queries |
| Feature flag-evaluatie | 600/min | Local evaluation-endpoint |
| CRUD-endpoints | 480/min, 4.800/uur | Create-, update- en delete-operaties |
| Publieke endpoints (capture) | Onbeperkt | Event-capture, flag-decisions |
Batch Exports
Voor grootschalige eventdata-exports kun je beter PostHog’s batch exports-functie gebruiken in plaats van de API. Batch exports ondersteunen S3, BigQuery, Snowflake en andere bestemmingen.
Probleemoplossing
| Probleem | Oorzaak | Oplossing |
|---|---|---|
| 401 Unauthorized | Ongeldige API key | Verifieer Personal API Key in settings |
| 400 Invalid project | Verkeerd project-ID | Controleer project-ID in PostHog-URL |
| Lege personenlijst | Geen geïdentificeerde gebruikers | Zorg dat posthog.identify() wordt aangeroepen |
| Properties ontbreken | Properties niet gezet | Verifieer $set-calls in client SDK |
| Rate limit 429 | Te veel requests | Implementeer backoff, controleer rate limit-headers |
Debugmodus
connectors: posthog: debug: true log_level: verbose log_queries: true log_sync: trueBest practices
- Identificeer gebruikers - Roep altijd
posthog.identify()aan met email om person-sync mogelijk te maken - Gebruik cohorten voor segmentatie - Maak gebruik van PostHog’s gedragscohorten voor Brevo-lijsten
- Batch API-requests - Gebruik paginering en batch-verwerking voor grote datasets
- Gebruik HogQL voor complexe queries - Extracteer custom analytics met SQL-achtige queries
- Stel batch exports in - Geef voor grote datavolumes voorkeur aan batch exports boven API-polling
- Filter relevante events - Synchroniseer alleen marketingrelevante events om ruis te verminderen
Beveiliging
- Personal API Key - Gescoopte Bearer-token-authenticatie
- Project token - Publiek token alleen voor client-side operaties
- Alleen HTTPS - Alle endpoints vereisen TLS-encryptie
- IP-allowlisting - Beschikbaar voor self-hosted instances
- Key-scoping - Maak API keys aan met specifieke permission scopes
- GitHub secret scanning - PostHog werkt samen met GitHub voor detectie van gelekte keys