# Which companies your LinkedIn ads reach, matched to your CRM

> Open one board to see every company your LinkedIn ads reached, whether they are already in HubSpot, and hand the best ones straight to a rep.

- Workflow type: app
- Services: LinkedIn Ads, HubSpot, Slack Bot
- Categories: Marketing, Sales
- Published: 2026-08-31

## What it does

- Pulls company level engagement from your LinkedIn ad account for any date range you pick, so you see impressions, clicks, click through rate and spend per company instead of per campaign.
- Matches every company against HubSpot and labels the row as not in your CRM, an open deal with its stage and value, an existing customer, or closed lost.
- Filters for companies above a click threshold, companies with no CRM record at all, and companies with a deal already open, so a rep can work the list like a queue.
- From any row, add the company to HubSpot, file the engagement as a note, create a follow up task for the owning rep, or push a shortlist to your sales channel in Slack.
- A Research this account button sends an assistant off to pull the full engagement history, read what HubSpot already knows, search the web, and write a short brief back onto the row and into HubSpot.

## What you'll need

- A LinkedIn Ads account with campaigns that have delivered enough impressions to report on, and admin access to it in Campaign Manager
- A HubSpot login that can read companies and deals and create companies, notes and tasks
- Website domains filled in on your HubSpot company records, since that is what the matching leans on
- A Slack workspace, if you want to push shortlists to a sales channel

## Prompt

Build me an app that my demand generation team and the SDRs they hand accounts to can open to see which companies our LinkedIn ads are actually reaching, and whether any of those companies are in our CRM yet. This is a browsing and working surface rather than a scheduled report: a person opens it, picks a date range, and works the resulting list of companies like a queue.

The main view is a single board. At the top let me pick the LinkedIn ad account (use Search Ad Accounts to populate that picker) and a date range, defaulting to the last 30 days. When I apply it, pull company level engagement from LinkedIn Ads using Get Ad Analytics pivoted by member company, covering the whole date range in one request with timeGranularity rather than looping day by day. LinkedIn throttles its analytics endpoints far more aggressively than its regular CRUD endpoints, so batch the range into a single call and back off and retry on 429 responses.

List one row per company showing impressions, clicks, click through rate calculated from those two, and attributed spend for the period. Sort by clicks descending by default and let me sort on any column. Use Search Campaigns to resolve which campaigns are running on the account so the board can show which campaigns the engagement and spend came from.

Match every row against HubSpot. For each company use Search Companies to look for an existing record, matching on website domain wherever a domain is available, because company name variants (Acme, Acme Inc, Acme Corporation) will not line up cleanly and name only matching produces false positives. Then use Search Deals to find deals on the matched company. Label each row with one of four states: not in the CRM at all, open deal (show the stage name and the deal amount), existing customer (a closed won deal exists), or closed lost. When a match is uncertain, prefer labeling the row as not in the CRM and let the user decide, rather than silently attaching engagement to the wrong account.

Give me three filters I can toggle: companies above a click threshold I can set myself, companies with no CRM record at all, and companies with an open deal. These filters are how a rep turns the board into a work queue, so make them prominent and combinable, and update the visible row count as they change.

From any row I want to act without leaving the board. Add the company to HubSpot with Create Company, filling name and domain from the row. File the engagement as a note on the company record with Create Note, capturing impressions, clicks, click through rate, spend and the date range so the CRM record shows why that account surfaced. Create a follow up task for the owning rep with Create Task, using List Owners to choose the assignee and defaulting to the existing company owner where there is one. And let me select several rows and push a shortlist to our sales channel using the Slack Bot Send a Message operation, formatted as a readable list with the engagement numbers and CRM status for each company.

Add a Research this account button on each row that starts a background agent. The agent should pull that single company's fuller engagement history from LinkedIn Ads with Get Ad Analytics over a wider date range than the board is showing, pivoted so it can see which campaigns and creatives the company touched, using Search Campaigns and Search Creatives to turn IDs into readable names. It should then read whatever history already exists in HubSpot (Get Company for the record, Search Deals for past and present deals, and List Notes for prior activity), research the company on the open web using built in research, and write a short brief covering what the company does, which campaigns and creatives they engaged with, and the specific angle a rep should lead with. Write that brief back onto the row so the board shows it inline, and also file it into HubSpot as a note on the company record with Create Note. Persist the brief so it survives a reload and so the rest of the team sees it too, show a clear pending state while the research runs, and let the person navigate away and come back to find it finished.

Be explicit in the interface about what this data is and is not. LinkedIn suppresses audience counts below 300 members to protect privacy and returns them as zero, so smaller companies are missing or under reported by design. Put a short, plainly worded note on screen saying the company list is directional rather than a complete lead list, and that it shows which companies our ads reached, not which individuals clicked. Do not design the app in a way that implies it is an exhaustive account list or a list of identified people.

## How to customize

- Change the default date range and the click threshold that decides which companies count as genuinely engaged
- Point the shortlist at whichever Slack channel your reps actually watch, and change who follow up tasks get assigned to
- Adjust which of your deal stages count as an existing customer versus a closed lost account

## FAQ

### Why do some companies show nothing, or not appear at all?

LinkedIn hides audience counts below 300 members to protect privacy, and reports them as zero. That means smaller companies are missing or under reported by design. The board says so on screen, because the list is a directional read on the kinds of accounts your ads are landing with, not a complete list.

### Is this a lead list I can hand to sales for cold outreach?

Not quite. It tells you which companies your ads reached, not which individual people clicked, because LinkedIn never exposes that. Treat it as an account prioritization signal that tells a rep which companies already have some familiarity with you.

### How does it know which HubSpot company a row belongs to?

It matches on website domain first, because company name variants like Acme, Acme Inc and Acme Corporation rarely line up cleanly and name matching alone creates false positives. Anything it cannot match confidently is labeled as not in your CRM so you can decide yourself.

### Will this work on HubSpot Free?

Yes for everything the board does. Reading companies and deals, and creating companies, notes and tasks, are all available on free and starter plans.

### Do I have to keep the page open while an account is being researched?

No. The research runs in the background, so you can carry on working the list or close the tab. The brief appears on the row when it is finished, and it is also filed as a note on the HubSpot company record.

Use this prompt in General Input: https://www.generalinput.com/prompts/which-companies-your-linkedin-ads-reach-matched-to-your-crm