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.
$ claude mcp add adwarp -- npx -y adwarp mcp$ 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.
01What you can ask
What you can ask. Real requests, answered from your terminal.
$ claude
> 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.
02How it works
How it works.
Query
Write a SOQL query that selects an email column, or describe the list in plain words.
Hash and upload
Your signed-in Salesforce CLI runs the query. Adwarp hashes the emails and uploads them as a contact list.
Match
LinkedIn matches the list within 48 hours, and it serves once it clears 300 members.
03Results
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.
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.
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_ | Build a matched audience from a SOQL query |
get_ | Check how the list is matching |
update_ | Swap a fresh audience into an ad group's targeting |
CLI
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.