Microsoft Ads spend, measured against real deals
A read-only collector brings your Microsoft Advertising spend and clicks into SalesCrew, where your leads and meetings already live.
- Read-only collector
- Spend beside deals
- Budgets stay with you

The short answer
- SalesCrew connects to Microsoft Ads with a read-only collector into the marketing module. It reads daily spend and clicks for your account and writes them into your own database.
- The payoff is the join. With spend in the same Postgres project as your pipeline, cost per meeting and cost per deal by channel come from channel economics instead of a spreadsheet.
- Your campaigns are untouched. The collector never edits a bid or a budget, and SalesCrew's policy table keeps any ad spend a human-only action.
Mechanism
What the collector reads and what you can do with it once it lands.
| What | Mechanism | Direction | Objects | Status |
|---|---|---|---|---|
| Spend and clicks | Read-only collector against the Microsoft Advertising API | Inbound | Marketing ad tables | Available |
| Credentials | One JSON bundle in your instance's Supabase Vault | None | Integration keys | Available |
| Paid beside organic | marketing_paid_organic and the marketing explorer | Internal | Marketing tables | Available |
| Channel economics | Cost beside work items, meetings and deals per channel | Internal | Marketing tables, deals, meetings | Available |
| Cost-per-lead tile | Cost per lead by channel from the same rows | Internal | Marketing tables, leads | Available |
| Agent access | marketing_kpis and channel_economics over MCP | Outbound | Marketing tables | Available |
Mechanisms read from the SalesCrew integration table, September 2026. Microsoft Advertising's own documentation is the authority on developer token approval and API access.
Setup
The longest setup of the collectors, because Microsoft asks for four things.
- 1
Register an app in Microsoft Entra
In the Azure portal, open Entra ID → App registrations → New registration. Copy the application (client) id and create a client secret.
- 2
Request a developer token
In Microsoft Advertising, open Tools → Developer token → Request, and copy it once it's granted.
- 3
Get a refresh token
Authorize the app with the msads.manage and offline_access scopes, then exchange the code for tokens. Without offline_access the refresh token fails with invalid_grant.
- 4
Note your customer id and account id
Both sit under Settings → Accounts in Microsoft Advertising.
- 5
Save the bundle in SalesCrew
Settings → Other keys → Microsoft Ads → Set key. Paste the six values as one JSON bundle, save, and run Test. It returns yesterday's spend and clicks.
Match the channel names before you trust the numbers
Questions
- Will the collector touch my campaigns or budgets?
- Your campaigns stay exactly as you run them, because the collector reads spend and clicks and writes nothing back. Budgets, bids and campaign edits stay in Microsoft Advertising, and any spend sits in the human-only class of the SalesCrew policy table.
- What credentials does the collector need?
- Six values in one JSON bundle: client id, client secret, refresh token, developer token, customer id and account id. They're stored in your instance's Supabase Vault and never shown after you save them.
- How do I see cost per lead from Microsoft Ads?
- Spend lands in the same database as your leads, deals and meetings. Channel economics puts cost beside meetings and deals for each channel, and the cost-per-lead tile reads from the same rows.
- Which plan includes it?
- Agency, at $1,200 a month, includes the marketing module with every collector, plus marketplaces, data sources and every agent. Seats are unlimited on every tier.
Know what a Microsoft Ads deal really cost
Spend and clicks in your own database, joined to the meetings and deals they produced.