LinkedIn is the largest pool of professional intent data on the internet. Most teams still use it badly for lead gen. They buy a stale list from a broker, or they scrape it themselves until an account gets restricted. There's a third option: pull exactly the profiles that match your ICP, and read what those people are posting, on demand.
Below is what LinkedIn data is genuinely good for, where every vendor hits the same limits, and how to get it through an API rather than a scraper you'll be maintaining forever.
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 data useful for lead gen?
Some fields on a profile matter more than others for lead gen. These are the signals that change whether an outbound message lands:
- Seniority. Are you messaging a buyer, or someone who'll forward it to one?
- Tenure. Someone three months into a role reacts differently than someone three years in.
- Headcount trend. A company that's hiring fast is a company re-evaluating tools.
- Recent job change. People who just started a new role are more likely to re-evaluate what their team already uses.
- Recent posts. Someone posting about a problem your product solves, or engaging with a competitor's post, is about as close to a raised hand as LinkedIn gets.
Most "LinkedIn lead gen" advice stops at name, title, company. That's enough to find someone. It doesn't tell you whether this is a good time to message them.
Why doesn't scraping LinkedIn yourself scale?
It looks cheap right up until you try running it at real volume. A single account or IP range gets flagged quickly, no matter how you throttle it. The session cookie you're depending on expires, and gets invalidated faster once it looks automated. Frontend changes break a brittle scraper with no warning, so you find out when a campaign quietly comes back empty. Getting an account restricted mid-campaign costs you the account you were prospecting from, too.
None of this is a one-time cost. It's upkeep on infrastructure that isn't your product, and never should have to be.
How do you find and qualify leads at scale?
Mindcase runs this as four steps: find companies that fit your criteria, get the people at them, cut the raw list down to a shortlist, and — optionally — check who's actually posting before you reach out.
To make it concrete: say you're prospecting brand managers at D2C companies in New York.
How do you find companies that match your criteria?
Start from a description, not a list you already had to build by hand.
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": {
"query": "D2C consumer brand",
"locations": ["New York"],
"companySize": ["51-200", "201-500"],
"maxResults": 50
}
}'
# $0.004 per companyEach row is a full company profile — 27 fields, including employee count, industry, HQ location, and founded year — with a company URL you'll feed into the next step.
How do you pull everyone at one company?
If you already know the company, Company Employees API takes one company URL per call and returns every employee matching your filters.
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/glossier",
"jobTitles": ["Brand Manager", "Brand Marketing Manager"]
}
}'
# $0.004 per profile returnedA single profile returns 32 fields — enough to know who someone is and what they do. It's one call per company, so this is the right tool once you're targeting a specific account, not when you're working through the whole list from step one.
How do you search for people across many companies at once?
That's what Profiles API is for: pass a list of company names in one call instead of looping Company Employees once per company.
curl -X POST "https://api.mindcase.co/v1/data/linkedin/profiles/run?wait=true" \
-H "Authorization: Bearer $MINDCASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"params": {
"currentJobTitles": ["Brand Manager", "Brand Marketing Manager"],
"currentCompanies": ["Glossier", "Chubbies", "Allbirds"],
"locations": ["New York"],
"maxProfiles": 75
}
}'
# $0.10 per search page (25 profiles) + $0.004 per enriched profileSame profile record, but 34 fields this time — Profiles returns two more
than Company Employees (an openProfile flag and a creator flag). Use
this path once your target list spans more than a company or two.
How do you turn a raw list into a shortlist?
Don't message every row. Pipe the JSON into an LLM with the fields you already have — headline, current title, experience — and have it tag each one before you act on any of them:
For each profile, using only the headline and current experience entry:
tag "qualified" if the title matches Brand Manager or Brand Marketing
Manager at a consumer products company, "maybe" if the title is adjacent
(e.g. Marketing Manager, Growth Manager), otherwise "skip". Return one tag
per profile, no explanation.
That one filtering pass is the difference between "we pulled 300 profiles" and "we found 40 people worth messaging." Retrieval is cheap; deciding who's actually a fit isn't — and it's not something an API should try to do for you.
How do you refine further with posting activity?
This part is optional. Once you have a shortlist, checking who's actually active on LinkedIn before you reach out is worth doing — but it's a refinement on top of the shortlist, not a required step. Feed the shortlisted profile URLs into Posts API:
curl -X POST "https://api.mindcase.co/v1/data/linkedin/posts/run?wait=true" \
-H "Authorization: Bearer $MINDCASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"params": {
"authors": [
"https://www.linkedin.com/in/jane-doe",
"https://www.linkedin.com/in/john-smith"
]
}
}'
# $0.002 per post returnedWhat can't you get from Mindcase?
Two cases.
Private or connections-only fields. Anything behind a login — a connections-only post, a gated field on a profile — needs an authenticated session to see at all. That's outside what a public-data API returns, by design, not a gap Mindcase happens to have.
Someone who isn't active generates nothing to find. Coverage depends entirely on what the person actually does on LinkedIn. Somebody who never posts, reacts, or comments has no signal to pull, no matter which vendor you use — there's no data there to begin with.
Which endpoint should you use for which job?
| Endpoint | Input | Price | Best for |
|---|---|---|---|
| LinkedIn Companies | Keywords/filters, or company URLs | $0.004 / company | Finding companies that fit your ICP |
| LinkedIn Profiles | Profile URL, or ICP filters | $0.004 / profile (+ $0.10 / search page when searching by filters) | Finding people across many companies at once |
| Company Employees | One company URL | $0.004 / profile | Account-based outbound into one company |
| LinkedIn Posts | Profile/company URL, or a keyword search | $0.002 / post | Reading intent before you reach out |
| Post Reactions | A post URL | $0.002 / reaction | Finding people already engaged with one topic |
| Post Comments | A post URL | $0.002 / comment | Same, with more context from what they wrote |
How do you use LinkedIn data responsibly?
The data itself is public profile information. What matters more is what you do with it afterward. A few practices worth following wherever you're prospecting: honor opt-out and do-not-contact requests immediately, don't hold onto personal data longer than your outreach needs, and check with your own legal team on outbound rules for the regions your leads are based in, since those rules vary by where the recipient is, not where you are.
What's the bottom line?
You don't need to build and maintain your own scraper for this — the list you get isn't stale before you've even opened it. Find the people who match your ICP, cut that list down to who's worth messaging, and spend your time on the outreach, not the setup. Turning a shortlist into verified work emails is worth its own post. This one's about finding the right people first.
FAQ
No. There's no login and no connection request required. Requests run against public profile and post data.
Company and profile lookups are $0.004 per row. Searching profiles by filters instead of a direct URL adds $0.10 per search page on top. Posts, reactions, and comments are $0.002 each. Full breakdown is in the pricing table above.
Yes. The Company Employees API takes a company URL and returns the people inside it.
Yes. Pass a keyword through the same endpoint instead of a list of profile or company URLs.
