GA4 + SalesCrew
A read-only collector pulls your Google Analytics 4 data into the same Postgres project that holds your leads and deals. Nothing is written back to GA4.
- Read-only collector
- Lands in your own database
- Joins to leads and deals

The short answer
- The mechanism is a read-only collector into the marketing module. SalesCrew reads from the GA4 Data API on a schedule and writes rows into your instance. It never writes to GA4 and never changes your property.
- The reason to bother is the join. Sessions and channels sitting in the same database as leads and deals turn cost per lead by channel into a query instead of a spreadsheet built from two dashboards.
- Analytics is a tab in SalesCrew, not the product. GA4 stays the source of truth for web behaviour; SalesCrew is where that data meets a pipeline.
Mechanism
One direction, on a schedule, into tables you own.
| What | Mechanism | Direction | Objects | Status |
|---|---|---|---|---|
| Sessions and channel data | Read-only collector against the GA4 Data API | Inbound | Marketing tables in your instance | Available |
| Where it lands | Your own Supabase Postgres project | None | Marketing tables | Available |
| The explorer | Query, filter and drill in the marketing module | Internal | Marketing tables | Available |
| Niche scoreboard and KPI scorecard | Built on the collected rows | Internal | Marketing tables | Available |
| Channel economics | Spend beside leads and deals in one query | Internal | Marketing tables, leads, deals | Available |
| Cost-per-lead tile | Planned view over the same data | None | None | On the roadmap |
| Writing events or conversions into GA4 | Not built. The collector is read-only | None | None | Not available |
Mechanisms read from the SalesCrew integration table, September 2026. Google's own documentation is the authority on GA4 Data API quotas and on data sampling.
Setup
Twenty minutes, and one decision worth making carefully.
- 1
Create read access
Give the collector read access to the GA4 property. Read-only is enough because that is all it does.
- 2
Store the credentials
They go into your instance's Supabase Vault and are not displayed again. integration_set_key is the MCP twin.
- 3
Pick the property and the date range
The first pull backfills, the scheduled pulls keep it current. marketing_pull runs one on demand and marketing_pull_status shows how it went.
- 4
Agree the channel names
This is the decision that matters. GA4's channel grouping and your own lead source values have to line up, or the join gives you two vocabularies for the same traffic.
- 5
Check freshness before you trust a number
marketing_freshness says how current each source is. Search Console in particular lags by a couple of days, so a fresh dashboard is not the same as a complete one.
- 6
Read it from the explorer or from an agent
The marketing_* tools return the same rows the explorer shows, so an agent can answer a question about spend without a screenshot.
Questions
- Does this replace GA4?
- No, and it should not. GA4 stays your web analytics tool. The collector copies what you need into the database where the pipeline lives so the two can be joined.
- Does SalesCrew send conversions back to Google?
- No. The collector is read-only. Sending conversions into Google Ads is something you set up in your own tag configuration.
- How current is the data?
- It depends on the source, which is why freshness is a visible field rather than an assumption. Check marketing_freshness before quoting a number in a meeting.
- Which tier has the marketing module?
- Agency at $1,200 a month carries the marketing module along with marketplaces, data sources and all agents. Seats are unlimited on every tier.
- Can an agent analyse it for me?
- It can read the same rows through the marketing tools. Treat the answer as analysis over your data rather than as a separate source of truth.
Put sessions next to deals in one database
One collector, one schema, and a cost-per-lead question you can answer with SQL.