Marketing & analytics Available
Google Analytics 4
One GA4 property per client, linked on the client's own page. What comes out per day then lives in your own database, so every chart and every comparison with the same period last year is drawn without a call to Google.
What you need
- The Marketing module is enabled and licensed for this workspace (Instellingen → Modules)
- A Google Cloud project with an OAuth client, configured under Instellingen → Google Workspace
- In that same project, both the Google Analytics Admin API and the Google Analytics Data API are switched on
- A Google account with read access to the GA4 property, connected under Instellingen → Mijn account
- The marketing.link.manage permission, to be allowed to link accounts
- For the read surface of its own: the Google Analytics integration switched on under Instellingen → Integraties. It needs the Google connection, not the Marketing module
How to connect it
- 1 In the Google Cloud project your OAuth client belongs to, switch on both APIs: the Google Analytics Admin API and the Google Analytics Data API. Enabling only the Data API leaves the property picker dead while the rest of the module looks configured, because listing properties is an Admin API call.
- 2 Go to Instellingen → Mijn account (Settings → My account) and connect your Google account. One consent covers Analytics, Search Console and Ads together, so you walk through Google's consent screen once instead of three times.
- 3 Open Klanten → de klant (Clients → the client) and click edit on the Marketing panel.
- 4 Choose Account koppelen (Link account), set the source to
Analytics-propertyand pick this client's property from the list. - 5 If the client has more than one website, use Koppelen aan website (Link to website) to say which site the property measures. Leave it on Hele klant (Whole client) if the property covers everything.
- 6 That's it. The link immediately starts a backfill of roughly 13 months; while it runs the panel reads Eerste synchronisatie loopt (first sync in progress).
- 7 From then on the sync runs nightly and re-pulls the last seven days, so late or restated figures correct themselves.
What gets stored per day
Each linked property adds one small row per day to your database. From that, the panel, the tab and the cross-client overview draw their figures, their trend lines and their comparison, by default with the same period last year,, without calling Google. The property's own currency travels with it, so revenue is labelled in the currency the property reports in.
- Sessions, users and new users
- Key events, also shown under the name conversions
- Engagement and revenue
- Sessions split across the acquisition channels
Drill-downs are fetched live
Only the daily totals go into the database. Drill-downs are fetched from Google for the range you are looking at and kept for a day, and at night they are fetched ahead for every client for the periods the tab offers. Whoever opens the tab in the morning therefore does not wait for Google, and clicking a tile never grows your database with page paths. Every table also carries a link out to Google Analytics for the real analysis.
- Top pages and channels
- Devices
- Key events per event name
- Organic search engines, social platforms and referring sites, each on their own
You decide what the client sees
Per client you fix a layout: which tiles are visible, in what order, what they are called in Dutch and English, which drill-downs may be opened and which metric the chart defaults to. Key events can be switched off entirely for one client — they then disappear from the panel, the tab, the overview and the API response. The same layout is what a client with a portal login sees, and the monthly report's sections read from it.
A link belongs to a person
A link syncs through one colleague's Google connection, and the panel, the tab and the picker all name who that is. Without it the second employee sees a working link with no hint whose it is, connects Google again for data that is already flowing, and nobody learns that a client's numbers stop the day that person leaves. If the connection goes away the link goes dormant and asks to be reconnected. Unlinking deletes nothing: the link is deactivated and the synced history stays, including when you switch it back on later.
An integration of its own for the questions the dashboard does not ask
The dashboard reads GA4 for one purpose: a small daily total beside four other sources. Every other question (which pages, which sources, which events, is the property actually measuring what it should, what happened at two yesterday afternoon) needs the property's own vocabulary: its custom dimensions, its key events, its metadata. That is what the Google Analytics integration is for: seventeen read routes over the Admin API (what exists) and the Data API (what happened), which are also the MCP section /mcp/google-analytics and part of the growth bundle. It stores nothing, rides the same Google consent and does not need the Marketing module: whoever wants an assistant to answer Analytics questions does not have to switch on a dashboard for it. Nothing is ever written, so it stays readable on an expired licence.
- Properties, data streams, key events, custom dimensions and metrics, Ads and Firebase links and the retention window
- Overview, daily series, breakdown, real time and the property's metadata document
- A free-form report, a pivot and a compatibility check, behind a permission of their own
- A sampled or thresholded answer from Google is reported as one, because a sampled figure otherwise reads as a count
Permissions
Grant these to the role that manages this integration (Settings → Roles). Admin-only by default, and never to the client role.
-
marketing.metrics.readRead a client's marketing figures: the panel, the tab and the dashboard widget. Granted by default to admin, member and the client portal. -
marketing.link.manageLink and unlink properties, open the account picker and fix the per-client layout. Admin only by default. -
marketing.overview.readThe cross-client grid under Overzicht → Marketing, one row per linked client. Admin only by default. -
google_analytics.property.readThe read surface of its own: properties, their configuration and metadata, the overview, breakdowns, the daily series and real time. Admin and member by default, never the client role. -
google_analytics.report.runThe free-form report, the pivot and the compatibility check: any dimension crossed with any metric. Admin only by default.
What it deliberately does not do
- Nothing is written back to Google Analytics. The link only reads.
- Only daily totals are stored. Drill-downs are fetched per request, so you see whatever Google still serves at that moment.
- GA4 renamed conversions to key events. schakl. requests key events and shows them under both names; nothing is counted twice.
- Amounts are shown in the property's own currency and are never converted.
- Google Tag Manager is not a source with numbers of its own: a container has no daily totals, and the events it fires already arrive through GA4. You do attach it from the same picker, as a connection beside the sources.
- If your organisation has no OAuth client of its own under Instellingen → Google Workspace, you talk to Google through the installation operator's Cloud project — and enabling the APIs in your own project then changes nothing.
Where to find it Klanten → de klant → paneel Marketing (Clients → the client → Marketing panel), plus that client's Marketing tab and Overzicht → Marketing (Overview → Marketing). The read surface of its own is switched on under Instellingen → Integraties (Settings → Integrations).
Read the guide