MindCase
Kritish Puri

How to Get LinkedIn Company Data for Account-Based Marketing

Pull firmographic and employee data for your whole target account list in one pass, then catch the moment one of them hires a decision-maker.

linkedinproduct
How to get LinkedIn company data for account-based marketing

An account-based marketing list is only as good as the data behind it. You already know which 20 or 50 companies you're targeting — the real question is whether you have current firmographic and contact data for all of them, or a spreadsheet someone built three months ago that's already wrong.

Below is how to pull company and employee data for a named account list in Mindcase, and how to catch the moment one of those accounts is worth re-engaging.

If you're an agent (or building one) reading this rather than a human, the full machine-readable schema for every endpoint below lives at mindcase.co/skills.md.

What makes LinkedIn company data useful for ABM?

  • Headcount band. A company that's grown past your target size is a company that's outgrown your pitch — or just became a better fit.
  • Industry match. Filtering by industry keeps a hand-built list from drifting off-ICP as accounts get added one at a time.
  • Role coverage. A target account with one contact isn't covered. You need both an economic buyer and a champion, and that only shows up once you've pulled the employee list, not the company page.
  • A recent hire in the right seat. Someone new to a role re-evaluates what their team already uses. That's a re-engagement trigger a static list can't tell you about on its own.

Why doesn't a hand-built account list stay accurate?

Someone on the team put it together at some point — pulled each company's LinkedIn page, copied headcount and industry into a spreadsheet, then went through the same process again to find contacts at each one. That's a reasonable one-time exercise. It's not something outbound should keep running on for the next two quarters.

Headcount bands shift. Contacts change roles or leave the company entirely. New target accounts get added to the list without ever going through the same research pass as the original set, so half the list is current and half isn't — and nothing on the spreadsheet tells you which half. Re-checking fifty companies by hand, on a recurring schedule, isn't a task anyone actually does. It's a task everyone means to get to.

The actual cost isn't the research time, though that adds up too. It's that outbound keeps running against contacts who left eighteen months ago, while the person who actually holds the budget now never enters the pipeline at all — a stale name on the list costs you response rate, and a missing one costs you a deal you never knew was in motion.

How do you pull data for your whole target account list at once?

Mindcase treats this as two calls: one for the accounts themselves, one for the people at each of them.

Say your ABM list includes Notion, Linear, Webflow, and Vercel.

What if your list is domains, not LinkedIn URLs?

Most target account lists start in a CRM as company websites, not LinkedIn company pages. Domain Lookup closes that gap before you touch either endpoint above:

curl -X POST "https://api.mindcase.co/v1/data/linkedin/domain-lookup/run?wait=true" \
-H "Authorization: Bearer $MINDCASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "params": {
    "domains": ["notion.so", "linear.app", "webflow.com", "vercel.com"]
  }
}'

# $0.004 per result

Each row comes back as a domain / linkedinUrl pair. Feed those URLs straight into the next two steps — a CRM export of websites becomes a usable input without anyone hand-searching LinkedIn for each account.

How do you get firmographic data for the whole list in one call?

curl -X POST "https://api.mindcase.co/v1/data/linkedin/companies/run?wait=true" \
-H "Authorization: Bearer $MINDCASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "params": {
    "companies": [
      "https://www.linkedin.com/company/notionhq",
      "https://www.linkedin.com/company/linear-app",
      "https://www.linkedin.com/company/webflow",
      "https://www.linkedin.com/company/vercel"
    ]
  }
}'

# $0.004 per company

Unlike Company Employees, Companies API takes an array — your whole named list in one call, not one request per account. Each row comes back with 27 fields: headcount, headcount band, industry, founded year, HQ location, follower count.

How do you map who works at each target account?

Company Employees takes one company URL per call, so you loop through your list — but you can filter for exactly the roles that matter to your ABM motion instead of pulling every employee at each company.

curl -X POST "https://api.mindcase.co/v1/data/linkedin/company-employees/run?wait=true" \
-H "Authorization: Bearer $MINDCASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "params": {
    "companies": "https://www.linkedin.com/company/linear-app",
    "jobTitles": ["Head of Growth", "VP Marketing"]
  }
}'

# $0.004 per profile returned

Each employee record returns 32 fields — headline, current role, tenure, experience history — enough to tell a champion from an economic buyer before anyone reaches out.

How do you catch a target account worth re-engaging?

Add recentlyChangedJobs: true to the same Company Employees call and you get only the people who just moved into their current role at that company — new to the seat, and more likely to be re-evaluating what their team already uses than someone who's held the role for three years. Run that filter against your account list on a schedule and you have a re-engagement trigger, instead of a list you re-read from memory once a quarter.

That's the difference between an account list and a working ABM system: the list tells you who to target once. Re-running the same filter weekly or monthly tells you when to come back — which target accounts just had a seat open up, without anyone manually re-checking fifty LinkedIn pages to find out.

What can't you get from Mindcase?

Two cases.

A company with no real LinkedIn presence. Coverage depends on the company having a public LinkedIn page in the first place. A very small or private company that never set one up has nothing to pull — there's no data behind it to begin with.

Anything gated behind a login. A connections-only post, a private employee directory — needs an authenticated session to see at all. That's outside what a public-data API returns, by design.

Which endpoint should you use for which job?

EndpointInputPriceBest for
Domain LookupA list of website domains$0.004 / resultTurning a CRM export of domains into LinkedIn company URLs
LinkedIn CompaniesA list of company URLs, or keywords/filters$0.004 / companyFirmographics for your whole target account list at once
Company EmployeesOne company URL$0.004 / profileMapping contacts at one named account

How do you use company and employee data responsibly?

The data itself is public profile and company information. What you do with it afterward matters more: honor opt-out requests immediately, don't hold onto contact data longer than your outbound cycle needs, and check your own legal team's read on outbound rules for wherever your target accounts' employees are based — those rules follow the recipient, not you.

FAQ

This covers pulling data for accounts you've already named. If you're starting from criteria instead of a list — industry, size, location — the Companies API supports that too, with query and filter params instead of company URLs.

No. Company Employees takes one company URL per call, so you loop through your list. Company firmographic data does accept a list of company URLs in a single call.

$0.004 per company and $0.004 per employee profile returned. A 20-account list with firmographics plus 5 contacts per account runs about $0.48 total.

Set recentlyChangedJobs to true on a Company Employees call for that account. It returns only people who recently moved into their current role there.