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.
Want to see it first? Book a demo
- 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.
- 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.
| 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 |
| Budget guard | Spend sits in the human-only policy class, so bids and budgets stay with a person in Google Ads | None | Policy table | Available |
| 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 | Cost per lead by campaign, read from the same rows | Internal | Marketing tables, leads | 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
- 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.
Want to see it first? Book a demo