adwarp

Start with 1 prompt.

Paste it into Claude Code, Codex or Cursor. Your agent installs Adwarp, walks you through your LinkedIn app and checks the connection.

setup prompt
Set up Adwarp for me. It's the open-source ad agent for LinkedIn Ads and Google Ads: https://github.com/adwarp-dev/adwarp

1. Check that Node.js 20 or newer is installed.
2. Walk me through creating my own LinkedIn developer app with the Advertising API product: https://github.com/adwarp-dev/adwarp/blob/main/docs/linkedin-app.md
3. Save the app's client ID and secret to ~/.adwarp/config.json as clientId and clientSecret.
4. Run "npx -y adwarp auth login" and wait while I approve access in my browser.
5. Add Adwarp to the AI client I'm using right now as an MCP server that runs "npx -y adwarp mcp". In Claude Code that's: claude mcp add adwarp -- npx -y adwarp mcp
6. Check the connection by listing my ad accounts, then save the one I pick as defaultAccountId in ~/.adwarp/config.json.

Don't create or change anything in my ad accounts during setup. LinkedIn campaigns start as drafts, so nothing spends until I turn it on.
adwarp
GitHub

Start with 1 prompt.

Paste it into Claude Code, Codex or Cursor. Your agent installs Adwarp, walks you through your LinkedIn app and checks the connection.

setup prompt
Set up Adwarp for me. It's the open-source ad agent for LinkedIn Ads and Google Ads: https://github.com/adwarp-dev/adwarp

1. Check that Node.js 20 or newer is installed.
2. Walk me through creating my own LinkedIn developer app with the Advertising API product: https://github.com/adwarp-dev/adwarp/blob/main/docs/linkedin-app.md
3. Save the app's client ID and secret to ~/.adwarp/config.json as clientId and clientSecret.
4. Run "npx -y adwarp auth login" and wait while I approve access in my browser.
5. Add Adwarp to the AI client I'm using right now as an MCP server that runs "npx -y adwarp mcp". In Claude Code that's: claude mcp add adwarp -- npx -y adwarp mcp
6. Check the connection by listing my ad accounts, then save the one I pick as defaultAccountId in ~/.adwarp/config.json.

Don't create or change anything in my ad accounts during setup. LinkedIn campaigns start as drafts, so nothing spends until I turn it on.

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

Read the docs

terminal ~ from salesforce

$ 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 ~ salesforce

$ 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.

  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.

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.

04FAQ

Questions, answered. From setup to the details.

Ask on GitHub
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.

Which lists are worth building?
ListWhat it's for
Closed-lost dealsStay in front of buyers who said not yet
Open opportunitiesReach the buying group while the deal is open
ChampionsKeep your strongest contacts close
Target accountsFeed 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
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.

Which tools and commands does it use?
ToolWhat it does
audience_from_salesforceBuild a matched audience from a SOQL query
get_audience_statusCheck how the list is matching
update_campaignSwap 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.