Meta Ads + SalesCrew
Spend and campaign performance from the Meta Ads API, collected read-only into the database that holds your leads. Leads arrive through your forms or the inbound endpoint, with their source recorded.
Want to see it first? Book a demo
- Read-only collector
- Spend beside leads
- Source recorded on every lead

The short answer
- A read-only collector pulls Meta Ads spend and campaign data into the marketing tables in your own Postgres project.
- Meta lead form submissions sync into SalesCrew as leads with their source recorded, or you post them through a webhook or an automation tool into your instance's inbound endpoint.
- Instagram and Facebook direct messages land as threads in the unified inbox, next to email, so a reply to an ad sits on the same contact record.
Mechanism
What the collector does, how leads arrive, and where messages land.
| What | Mechanism | Direction | Objects | Status |
|---|---|---|---|---|
| Spend and campaign data | Read-only collector against the Meta Ads API | Inbound | Marketing tables in your instance | Available |
| Channel economics | Spend joined to leads and deals in one database | Internal | Marketing tables, leads, deals | Available |
| Leads through the inbound endpoint | Webhook or automation tool into the inbound endpoint | Inbound | Leads, contacts | Available |
| Meta lead forms | Lead form sync with the source recorded | Inbound | Leads, contacts | Available |
| Instagram and Facebook direct messages | Messages in the unified inbox | Two-way | Threads | Available |
| Budget guard | Spend sits in the human-only policy class, so budgets and campaigns stay with a person in Meta | None | Policy table | Available |
Mechanisms read from the SalesCrew integration table, September 2026. Meta's own documentation is the authority on Marketing API access and permissions.
Setup
The collector is quick. Getting leads in takes the thought.
- 1
Grant read access to the ad account
The collector reads spend and campaign performance. It cannot change a campaign, and no agent can either.
- 2
Store the credentials
They go into your instance's Supabase Vault and are never shown again after entry.
- 3
Backfill, then schedule
marketing_pull runs one on demand; the scheduled pulls keep the tables current.
- 4
Decide how leads arrive
Turn on lead form sync, or route leads through your website form, a webhook, or an automation tool calling the inbound endpoint.
- 5
Record the source on every lead
Without a source, spend and leads sit in the same database and still cannot be joined. This is the step that makes the collector worth having.
- 6
Set a sample floor
Agree the minimum spend or clicks you will judge a campaign on, and write it down before the first review rather than during an argument.
Questions
- How do Meta lead form submissions reach SalesCrew?
- Lead form sync brings each submission in as a lead, or you post them through a webhook or an automation tool such as Zapier, Make or n8n. Each lead lands on the inbound channel with its source recorded.
- Can an agent pause a campaign that is wasting money?
- No. Every action that spends money is human-only under the default policy. An agent can show you the numbers and can create a task about it.
- Does it collect Instagram ad spend?
- Ad spend collected from the Meta Ads API covers the placements that account reports on. Google Ads, Microsoft Ads and PostHog are collected the same way into the same tables.
- Which tier has the marketing module?
- Agency at $1,200 a month, with unlimited seats.
Put Meta spend beside the leads it bought
Read-only campaign data in your own database, joined to leads and deals by source.
Want to see it first? Book a demo