Google Analytics 4 + Intercom Conversation Tags + Stripe Trial Status: Daily Activation Health Digest to Microsoft Teams via Pipedream
Every morning, pull GA4 activation events, Intercom onboarding conversations, and Stripe trial starts into one Teams card — so you stop confusing funnel activity with funnel results.
The stack in the order it runs — data flows from the source through to where it lands.
The silent killer for B2B SaaS: GA4 shows 40 activation events fired yesterday, but only 8 users started a Stripe trial. That 32-person gap is leaking somewhere between your product event and your billing flow. Intercom shows 15 onboarding conversations opened in the same window — meaning users hit a wall and asked for help. You need all three numbers together every morning, not in three separate tabs.
Pipedream handles this cleanly because it runs parallel HTTP branches — GA4 Data API, Intercom REST API, Stripe API — and merges them in a single code step. The GA4 Data API v1 (`runReport`) is more reliable than the old UA reporting API and returns filtered event counts without touching BigQuery. Intercom's conversation tag API filters by tag name, which is cleaner than full-text search.
Microsoft Teams Adaptive Cards support rich structured layouts. You can render a mini-table with three columns — Activation Events, Onboarding Convos, Trial Starts — and color-code the conversion rate cell. That's far more useful than a flat text message for a metric you're comparing day over day.
One hard stop before you build this: if you haven't instrumented a custom GA4 event for activation — first report run, first integration connected, first message sent, whatever it means for your product — this workflow returns empty data. Define and fire that event first. And if you have fewer than 10 daily active users, the numbers are too small to mean anything and will just generate anxiety.
The stack (5)
Web analytics most teams already run.
The Data API makes traffic a free input for weekly ops digests.
Chat + channels for Microsoft-365 shops.
If the company is on Outlook/365, Teams is where reports get read — push there, not a separate tool.
How it runs
- 1
Enable the GA4 Data API and create a service account
In Google Cloud Console, enable the Google Analytics Data API for your project. Create a Service Account with the 'Viewer' role on your GA4 property — go to GA4 Admin → Property Access Management → Add Users, paste the service account email. Download the JSON key file. In Pipedream, store the entire JSON key as an environment variable called `GA4_SERVICE_ACCOUNT_JSON`. You'll use this to generate a JWT access token inside the workflow. The GA4 Data API authenticates via OAuth2 service account auth, not API keys — there's no shortcut here.
- 2
Create the Pipedream workflow with a daily schedule
Create a new Pipedream workflow. Add a Schedule trigger set to Daily at 08:30 in your product team's timezone. In the first code step, generate a Google OAuth2 access token from your service account JSON using the `googleapis` npm package: `const auth = new google.auth.GoogleAuth({ credentials: JSON.parse(process.env.GA4_SERVICE_ACCOUNT_JSON), scopes: ['https://www.googleapis.com/auth/analytics.readonly'] })`. Store the token for all downstream HTTP calls. It expires in 1 hour — well inside your workflow runtime.
- 3
Query GA4 for activation event completions in the last 24 hours
Add an HTTP Request step: POST to `https://analyticsdata.googleapis.com/v1beta/properties/{GA4_PROPERTY_ID}:runReport`. Body: `{ dateRanges: [{ startDate: 'yesterday', endDate: 'today' }], metrics: [{ name: 'eventCount' }], dimensions: [{ name: 'eventName' }], dimensionFilter: { filter: { fieldName: 'eventName', stringFilter: { value: 'activation_complete', matchType: 'EXACT' } } } }`. Pull your count from `rows[0].metricValues[0].value` and store it as `activationEventCount`. If the filter returns no rows, set `activationEventCount = 0`.
- 4
Fetch Intercom conversations tagged as onboarding from the last 24 hours
Add an HTTP Request step: GET `https://api.intercom.io/conversations?tag_id={onboarding_tag_id}&created_after={yesterdayUnix}`. Headers: `Authorization: Bearer {INTERCOM_ACCESS_TOKEN}` and `Accept: application/json`. Find your `onboarding_tag_id` in Intercom → Settings → Tags — it's the numeric ID in the URL. Use `conversations.length` as your count. Extract user emails from `conversations[].contacts.contacts[0].id` for the Stripe correlation step. If `pages.next` exists in the response, paginate with `?page=2`.
- 5
Check Stripe trial starts for the same 24-hour window
Add an HTTP Request step: GET `https://api.stripe.com/v1/subscriptions?status=trialing&created[gte]={yesterdayUnix}&created[lte]={nowUnix}&limit=100`. Use Basic Auth with your Stripe secret key. Count the results as `trialStartCount`. For a tighter correlation, you can call the Stripe Customer API per email from the Intercom step and check for an active trial — but for a daily digest, the count comparison is enough. Flag the day if `trialStartCount / activationEventCount < 0.25`.
- 6
Compute the activation funnel ratios
Add a Node.js code step. Calculate `activationToTrialRate = (trialStartCount / activationEventCount * 100).toFixed(1) + '%'`. Calculate `onboardingConvoRate = (onboardingConvoCount / activationEventCount * 100).toFixed(1) + '%'`. Assign status labels: below 25% → '🔴 Low conversion', 25–50% → '🟡 Watch', above 50% → '🟢 Healthy'. For week-over-week context, store last week's activation count in Pipedream's data store using `this.$db.set('lastWeekActivations', value)` and retrieve it this run to compute the WoW delta.
- 7
Build the Microsoft Teams Adaptive Card
Add an HTTP POST step to your Teams Incoming Webhook URL. Build an Adaptive Card with a `ColumnSet` showing three columns: 'GA4 Activations: {{activationEventCount}}', 'Intercom Onboarding Convos: {{onboardingConvoCount}}', 'Stripe Trials Started: {{trialStartCount}}'. Add a second row for conversion rates. Add a `TextBlock` with the status label and a brief interpretation — if 🔴, include: 'Check for friction in your billing flow — high activation but low trial start suggests a paywall or onboarding drop-off between activation and trial creation.' Keep the card under 50KB.
- 8
Add 7-day trend context to the card
Retrieve the last 7 days of `activationEventCount` values from Pipedream's built-in data store using `this.$db.get('activationHistory')` — it returns an array. Append today's value and trim to 7 items. Display as a comma-separated trend line in the Teams card: 'Last 7 days: 12, 15, 11, 18, 14, 16, {{today}}'. This tells your product lead immediately whether today's number is an anomaly or part of a slide. Write the updated array back to the data store after posting.
- 9
Route alert severity to the right Teams channel
Add a conditional step: if status is '🔴 Low conversion', POST to both `#product-health` and `#growth` using two separate webhook URLs. If '🟡 Watch', post only to `#product-health`. If '🟢 Healthy', post a condensed one-liner to `#ops-digest` only: 'Activation Health: ✅ {{activationEventCount}} activations → {{trialStartCount}} trials ({{activationToTrialRate}})'. Don't ping the full team on green days. Alert fatigue kills the usefulness of these digests inside two weeks.
Want me to build this for you instead?
Product Audit and CTO Mode run out of this same thinking. If you’re reading this thinking “I want this, but in my product” — let’s talk.
See servicesMore like this
Google Analytics 4 + HubSpot Lifecycle Stage: Weekly Acquisition-Quality Digest to Slack via Pipedream with Claude Narrative
Stop reporting traffic numbers. Report whether the traffic you paid for last week actually became pipeline — with a one-paragraph executive summary written by Claude.
Gmail Thread Aging + Stripe Invoice Overdue: Unified AR Follow-Up Digest to Slack via Zapier
Surface overdue Stripe invoices and the exact age of your last Gmail thread with that customer — every morning at 8:30, automatically — so AR follow-up stops living in someone's head.
Outlook Calendar Load + HubSpot Deal Velocity: Weekly Ops Digest to Microsoft Teams
Every Monday at 07:30, your revenue team gets one Teams card: last week's deal pipeline movement next to each rep's actual meeting load — so you stop guessing whether low close rates are a pipeline problem or a capacity problem.