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

## What you can ask.

Real requests, answered from your terminal.

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

```text
> 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.
```

### Is this audience big enough to run?

```text
> 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?
```

### Upload closed-lost.csv as a matched audience.

```text
$ npx adwarp audience upload --csv closed-lost.csv --name "Closed lost" --dry-run
contact list detected, 1,204 rows
2 columns renamed to LinkedIn's template, 3 extra columns dropped
emails will be hashed with SHA-256 before upload
Dry run only. Remove --dry-run to upload.
```

### 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.
```

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

## 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 practice: 169 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.

## Questions, answered.

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

| Job | Right size |
| --- | --- |
| 1:1 account-based ads | 400 to 1,000 decision makers per account |
| A persona at target companies | A few thousand, narrowed by seniority and region |
| Retargeting | At 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 columns: `email`, `firstname`, `lastname`, `jobtitle`, `employeecompany`, `country`

Company list columns: `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.

| Tool | What it does |
| --- | --- |
| `estimate_audience` | Size any combination of targeting facets |
| `search_targeting` | Find titles, skills, companies and regions by name |
| `list_facet_entities` | Browse the values of a targeting facet |
| `upload_audience_csv` | Clean, hash and upload a contact or company list |
| `audience_from_salesforce` | Build a matched audience from a SOQL query |
| `audience_from_hubspot` | Build a matched audience from a HubSpot list or search |
| `get_audience_status` | Check how a list is matching |

CLI:

```bash
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.

## Related

- [Salesforce audiences](https://adwarp.dev/integrations/salesforce): Build an audience from a SOQL query
- [Retargeting](https://adwarp.dev/linkedin-ads/retargeting): Target the people who already know you
- [Account-based ads](https://adwarp.dev/linkedin-ads/abm): 1 audience per target account

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

Canonical page: https://adwarp.dev/linkedin-ads/audiences
Last updated: 2026-10-18
