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.

Size and build LinkedIn audiences from your terminal.

Adwarp checks the size of any LinkedIn audience before you spend and uploads contact or company lists as matched audiences. Ask in plain words or run 1 command, and it cleans the file and hashes the emails.

$ claude mcp add adwarp -- npx -y adwarp mcp

Read the docs

claude ~ size check

$ claude

> Is this audience big enough to run?

adwarp.estimate_audience RevOps, VP + Director, Canada: 240 members

Under LinkedIn's 300 minimum, so it wouldn't serve.

Adding Manager seniority brings it to 610. Want that instead?

01What you can ask

What you can ask. Real requests, answered from your terminal.

claude ~ audience sizing

$ claude

> How many marketing ops leaders can we reach in the US, UK and Canada?

adwarp.estimate_audience Marketing Ops, all seniorities: 38,900

adwarp.estimate_audience + Director, VP, CXO: 6,410

adwarp.estimate_audience + software, 200 to 5,000 employees: 1,180

1,180 members. Above LinkedIn's 300 minimum, small enough to stay focused.

02How it works

How it works.

  1. Search

    Find the titles, seniorities, companies and regions you want by name.

  2. Size

    Check the count after every change until it lands in range, never under 300.

  3. Upload

    Turn a CSV, a Salesforce query or a HubSpot list into a matched audience, cleaned and hashed.

03Results

Why it gets better results.

  • Size before spend

    You see the count before any money moves, so budget never lands on an audience too broad to matter.

  • No dead ad groups

    Audiences under LinkedIn's 300-member floor get caught before launch instead of sitting unserved.

  • Cleaner matches

    Lists go up with the right columns and hashed emails instead of half matched.

In practice169 audience estimates in real use, narrowing by seniority and region until each count landed in range. LinkedIn's 300-member floor decided which ad groups could exist at all.

04FAQ

Questions, answered. From setup to the details.

Ask on GitHub
How long does matching take?

Up to 48 hours. Adwarp can check the status for you.

Should I upload contacts or companies?

Contacts when you know the people, companies when you want everyone in a role at those accounts. Adwarp detects which one your file is.

Is my contact data sent anywhere?

Emails are hashed with SHA-256 on your machine before upload and go only to LinkedIn.

What's the minimum size for a LinkedIn audience?

300 members. LinkedIn won't serve ads to anything smaller, and Adwarp flags it before launch. Above that, the right size depends on the job.

What's the minimum size for a LinkedIn audience?
JobRight size
1:1 account-based ads400 to 1,000 decision makers per account
A persona at target companiesA few thousand, narrowed by seniority and region
RetargetingAt least 300 matched members, ideally far more
Which columns should my list have?

These are the headers LinkedIn expects. Adwarp detects which kind of list you have and fixes the columns for you.

Contact list

  • email
  • firstname
  • lastname
  • jobtitle
  • employeecompany
  • country

Company list

  • companyname
  • companywebsite
  • companyemaildomain
  • linkedincompanypageurl
  • industry
  • companycountry
Which tools and commands does it use?

7 MCP tools and 4 CLI commands, with what each one does.

Which tools and commands does it use?
ToolWhat it does
estimate_audienceSize any combination of targeting facets
search_targetingFind titles, skills, companies and regions by name
list_facet_entitiesBrowse the values of a targeting facet
upload_audience_csvClean, hash and upload a contact or company list
audience_from_salesforceBuild a matched audience from a SOQL query
audience_from_hubspotBuild a matched audience from a HubSpot list or search
get_audience_statusCheck how a list is matching

CLI

  • npx adwarp targeting estimate <facet> <urns...>
  • npx adwarp audience upload -n <name> -f <csv> --dry-run
  • npx adwarp audience from-salesforce -n <name> -q "<SOQL>"
  • npx adwarp audience from-hubspot -n <name> --list <id> --dry-run
What are the limits?

3 things to know before you start.

  • Matching takes up to 48 hours after an upload.
  • List uploads need LinkedIn's Audiences product on your developer app.
  • CSV, Salesforce and HubSpot uploads run locally, not on the hosted endpoint.