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.

An admin approves every new account by hand. Nothing is created until then. We reply by email; no newsletter, no sequence.

Want to see it first? Book a demo

  • Read-only collector
  • Spend beside leads
  • No agent touches a budget
app.salescrew.io/settings
Settings: MCP tokens, integrations and the audit log

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.
  • Bids, budgets and campaigns stay with a person in Google Ads, and no agent can move them. Spend and anything outside the CRM is human-only under the default policy table, a deliberate line that keeps your budget yours.
  • 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

Read-only by design, and the second row is the important one.

WhatMechanismDirectionObjectsStatus
Spend, clicks and campaign dataRead-only collector against the Google Ads APIInboundMarketing tables in your instanceAvailable
Budget guardSpend sits in the human-only policy class, so bids and budgets stay with a person in Google AdsNonePolicy tableAvailable
Channel economicsSpend joined to leads and deals in one databaseInternalMarketing tables, leads, dealsAvailable
Paid versus organic viewmarketing_paid_organic over the collected rowsInternalMarketing tablesAvailable
Cost-per-lead tileCost per lead by campaign, read from the same rowsInternalMarketing tables, leadsAvailable

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. 1

    Grant read access

    The collector needs read access to the Ads account. It asks for nothing that could change a campaign.

  2. 2

    Store the credentials

    In your instance's Supabase Vault, never displayed again after entry.

  3. 3

    Backfill and schedule

    marketing_pull runs a pull on demand; marketing_pull_status shows what happened on the last one.

  4. 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. 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. 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

The default policy table puts every action that spends money, including ad budgets and credits, in the human-only class. An agent that can read the data and cannot move the budget is the correct arrangement, and it stays that way.

Questions

Who changes bids and budgets?
A person, in the Google Ads interface. SalesCrew reads the data and shows cost per lead by campaign, so that person decides with the numbers in front of them.
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.

An admin approves every new account by hand. Nothing is created until then. We reply by email; no newsletter, no sequence.

Want to see it first? Book a demo