Google Ads + SalesCrew
Spend, clicks and campaign performance collected into the same database as the leads they produced. Read-only, by design: nothing here touches a budget.
- Read-only collector
- Spend beside leads
- No agent touches a budget

The short answer
- The mechanism is a read-only collector into the marketing module. Campaign, cost and click data lands in your own Postgres project on a schedule.
- SalesCrew does not change bids, budgets or campaigns, and no agent can. Spend and anything outside the CRM is human-only under the default policy table, which is a deliberate line rather than a missing feature.
- What you get for it is channel economics: ad spend in the same tables as leads and deals, so cost per lead and cost per booked meeting by campaign is a query.
Mechanism
One direction only, and the second row is the important one.
| What | Mechanism | Direction | Objects | Status |
|---|---|---|---|---|
| Spend, clicks and campaign data | Read-only collector against the Google Ads API | Inbound | Marketing tables in your instance | Available |
| Changing bids, budgets or campaigns | Not built and not planned. Spend is human-only | None | None | By design |
| Channel economics | Spend joined to leads and deals in one database | Internal | Marketing tables, leads, deals | Available |
| Paid versus organic view | marketing_paid_organic over the collected rows | Internal | Marketing tables | Available |
| Cost-per-lead tile | Planned view over the same data | None | None | On the roadmap |
| Sending offline conversions to Google | Not built | None | None | Not available |
Mechanisms read from the SalesCrew integration table, September 2026. Google's own documentation is the authority on Ads API access levels and quotas.
Setup
Half an hour, most of it spent agreeing what a channel is called.
- 1
Grant read access
The collector needs read access to the Ads account. It asks for nothing that could change a campaign.
- 2
Store the credentials
In your instance's Supabase Vault, never displayed again after entry.
- 3
Backfill and schedule
marketing_pull runs a pull on demand; marketing_pull_status shows what happened on the last one.
- 4
Align campaign names and lead sources
This is the whole job. If the campaign name and the lead source do not share a vocabulary, the join is guesswork with a nice chart on top.
- 5
Set a sample floor before you judge anything
A campaign with a handful of clicks tells you nothing. Decide the minimum you will act on and write it down.
- 6
Read it from the explorer or an agent
marketing_breakdown, marketing_kpis and marketing_timeseries return the same rows the explorer shows.
Why an agent cannot spend your money
Questions
- Can SalesCrew optimise my campaigns?
- No, and it is not designed to. It reads the data. Changing a bid or a budget stays a human action in the Google Ads interface.
- Does it push offline conversions back?
- No. Sending conversions to Google is something you configure in your own tag and conversion setup.
- How do I get accurate cost per lead?
- Land the lead with its source, keep the campaign naming consistent, and join in the database. The mechanism is simple; the discipline about naming is the part people skip.
- Does Microsoft Ads work the same way?
- Yes. Bing and Microsoft Ads data is collected the same read-only way into the same marketing tables.
- Which tier includes this?
- The marketing module is on Agency at $1,200 a month. Seats are unlimited on every tier.
See spend and pipeline in one query
Read-only collection, consistent naming, and a budget no agent can touch.