# Salesforce to LinkedIn Ads, from your terminal.

Adwarp is an open-source MCP server and CLI that turns a Salesforce SOQL query into a LinkedIn matched audience. Write the query or ask in plain words, and it hashes the emails on your machine and uploads them, with no export step.

## What you can ask.

Real requests, answered from your terminal.

### Build an audience from our closed-lost deals in Salesforce.

```text
> Build an audience from our closed-lost deals in Salesforce.
adwarp.audience_from_salesforce Closed Lost contacts: 1,204 contacts
Emails hashed with SHA-256 before upload
Matching now. Ready to target in up to 48 hours.
```

### Turn a SOQL query into a matched audience.

```text
$ npx adwarp audience from-salesforce -n "Q3 target accounts" -q "SELECT Email FROM Contact WHERE Account.Target_List__c = true AND Email != null"
query run through your signed-in Salesforce CLI, read-only
emails hashed with SHA-256, uploaded as a contact list
Matching takes up to 48 hours.
```

### Is the champions audience ready yet?

```text
> Is the champions audience ready yet?
adwarp.get_audience_status "Champions": matching
Matching takes up to 48 hours after an upload
I'll check again in a few hours and tell you when it clears 300 members.
```

### Refresh the closed-lost audience from Salesforce.

```text
> Refresh the closed-lost audience from Salesforce.
adwarp.audience_from_salesforce same query, new audience: contact list
Emails hashed with SHA-256 before upload
Fresh audience matching now. I'll swap it into targeting once it's ready.
```

## How it works.

1. Query. Write a SOQL query that selects an email column, or describe the list in plain words.
2. Hash and upload. Your signed-in Salesforce CLI runs the query. Adwarp hashes the emails and uploads them as a contact list.
3. Match. LinkedIn matches the list within 48 hours, and it serves once it clears 300 members.

## Why it gets better results.

### Current on launch day

Audiences come straight from Salesforce, so they match your pipeline the day you launch.

### Fresh on a schedule

A scheduled rerun rebuilds the audience, so it keeps up as deals move.

### No export step

No report export, no CSV cleanup and no file left in your downloads folder.

## Questions, answered.

### Does it keep the audience in sync?

Not on its own. Rerun the query on a schedule, with cron or a scheduled agent, and Adwarp builds a fresh audience you swap into targeting.

### Is my data sent anywhere?

Only to LinkedIn. The query runs on your machine through the Salesforce CLI, and emails are hashed with SHA-256 before upload.

### Which Salesforce permissions do I need?

Read access to the records in your query, through your own signed-in Salesforce CLI. Adwarp only reads and needs no new Salesforce credentials.

### Does it work on the hosted endpoint?

No. It needs your local Salesforce CLI, so run it through the local MCP server or the CLI.

### Which lists are worth building?

Closed-lost deals, open opportunities, champions, and account lists for account-based ads.

| List | What it's for |
| --- | --- |
| Closed-lost deals | Stay in front of buyers who said not yet |
| Open opportunities | Reach the buying group while the deal is open |
| Champions | Keep your strongest contacts close |
| Target accounts | Feed 1:1 account-based ads |

### What does a query look like?

Any SOQL that selects an email column works. Pass --email-field if yours isn't named Email.

terminal:

```text
npx adwarp audience from-salesforce -n "Q3 target accounts" \
  -q "SELECT Email FROM Contact WHERE Account.Target_List__c = true AND Email != null"
```

### Which tools and commands does it use?

3 MCP tools and 2 CLI commands, with what each one does.

| Tool | What it does |
| --- | --- |
| `audience_from_salesforce` | Build a matched audience from a SOQL query |
| `get_audience_status` | Check how the list is matching |
| `update_campaign` | Swap a fresh audience into an ad group's targeting |

CLI:

```bash
npx adwarp audience from-salesforce -n <name> -q "<SOQL>"
npx adwarp audience status <segmentId>
```

### What are the limits?

4 things to know before you start.

- Runs locally with the Salesforce CLI signed in, not on the hosted endpoint.
- Emails only: the query has to select an email column.
- LinkedIn needs about 300 matched members before an audience serves.
- Uploads need LinkedIn's Audiences product on your developer app.

## Related

- [HubSpot audiences](https://adwarp.dev/integrations/hubspot): Build an audience from a HubSpot list
- [Account-based ads](https://adwarp.dev/linkedin-ads/abm): 1 audience per target account
- [Audiences](https://adwarp.dev/linkedin-ads/audiences): Size before you spend

Unofficial. Not affiliated with or endorsed by LinkedIn or Google.

Canonical page: https://adwarp.dev/integrations/salesforce
Last updated: 2026-10-18
