Meta - Sending story events to Google Analytics 4
Sending story events to Google Analytics 4
This article walks through connecting a story to Google Analytics 4, so you can see how many people started a story, where they dropped off, what they answered and how many clicked through.
Read Story events with Google Tag Manager first if you haven't — it explains the data layer events this article builds on.
Before you start
What you need | Looks like | Where to find it |
|---|---|---|
Tag Manager container ID |
| Tag Manager, top right of the workspace. Already pasted into Project settings. |
Analytics measurement ID |
| Analytics → Admin → Data streams → your web stream |
On the data stream screen you'll also see a Google tag ID starting with GT-. Both work, but take the one starting with G- — that's what the steps below expect.
If no Analytics property exists yet, create one first: Analytics → Admin → Create property, then add a Web data stream for web.intractive.app. Set the time zone and currency to the client's, not the default.
Step 1 — Add the Google tag
This is the tag that loads Analytics on the page. Everything else depends on it.
- In Tag Manager, go to Tags → New
- Tag type: Google tag
- Tag ID: your
G-XXXXXXXXXX - Trigger: Initialization - All Pages
- Name it
GA4 - Configand save
Step 2 — Create the variables
Variables pull the details out of each story event so you can use them. Create these under Variables → New → Data Layer Variable, leaving the version at its default.
Name it | Data layer variable name | What it gives you |
|---|---|---|
|
| Which story |
|
| Ties one visitor's run together |
|
| Percentage complete |
|
| Which block they're on |
|
| How long the story is |
|
| Which link was clicked |
The right-hand column must match the story's field names exactly, including capital letters. storyid will not work where storyId is expected. A variable that comes back empty in testing is almost always a capitalisation slip here.
To capture a specific answer, add one more Data Layer Variable per answer you care about, using the variable name from your story with variables. in front of it — for example variables.timeline for a story variable called timeline.
Step 3 — Create the triggers
Triggers decide when a tag fires. All of these are Custom Event triggers, created under Triggers → New.
Name it | Event name | Condition |
|---|---|---|
|
| All custom events |
|
|
|
|
|
|
|
|
|
|
| All custom events |
|
| All custom events |
Step 4 — Create the event tags
One tag per event you want in Analytics. All are type Google Analytics: GA4 Event, with the measurement ID set to your G- ID.
Event name to send | Details to include | Trigger | Once per page? |
|---|---|---|---|
| story_id, session_id, total_blocks |
| No |
| story_id, session_id, block_index, total_blocks, progress |
| No |
| story_id, session_id |
| Yes |
| story_id, session_id, total_blocks |
| Yes |
| story_id, session_id, plus the answers you chose |
| No |
| story_id, session_id, link_url |
| No |
Each detail is added under Event Parameters as a name and a value, where the value is the matching variable from step 2 — for example parameter |
intractive_block_view fires once per content block, so roughly 12 to 20 events for a completed story. That volume is what makes drop-off analysis possible — "we lose 40% of viewers at block 4" — and it's well inside Analytics' free limits. If a client's reports feel noisy, this is the first tag to switch off.
Step 5 — Register the details in Analytics
This step is easy to skip and nothing works properly without it. Analytics collects your extra details but will not report on them until you register each one by hand.
Go to Analytics → Admin → Custom definitions and add these, all event-scoped:
Register as | Name | Event parameter |
|---|---|---|
Custom dimension | Story ID |
|
Custom dimension | Session ID |
|
Custom dimension | Link URL |
|
Custom metric (integer) | Block index |
|
Custom metric (integer) | Total blocks |
|
Custom metric (integer) | Progress |
|
Then go to Admin → Events → Key events and mark intractive_story_complete as a key event, so it counts as a conversion and can be imported into Google Ads.
Step 6 — Test, then publish
- In Tag Manager click Preview and enter a published story link
- Tap through the story. You should see
intractiveStoryProgressonce per block, thenintractiveVariablesUpdatedwhen you answer, thenintractiveOutboundLinkif you click out - Click an event and check the Variables tab: your
DLV -variables should have values, notundefined - Finish the story and confirm the complete tag fired once, not once per remaining block
- In Analytics, open Admin → DebugView to watch the same events arrive with their details
- Back in Tag Manager, click Submit to publish. Nothing reaches real visitors until you do
Reading the results
With the events flowing, the two reports worth living in are:
- Reports → Engagement → Events for volumes per event
- Explore for a free-form drop-off view: put
block_indexagainst event count to see exactly which block loses people
That drop-off curve is the single most useful thing this setup gives you. The block where the curve flattens is the point where viewers commit — everyone past it tends to finish.
✅ Quick checklist
- Take the
G-ID, not theGT-one. - Data layer variable names are case-sensitive.
- Set Once per page on the halfway and complete tags.
- Register custom definitions in Analytics, or your details stay invisible.
- Mark the completion event as a key event.
- Test in Preview, then Submit. Allow 15 minutes for the cache.
Updated on: 24/09/2026
Thank you!