DEV Community

Cover image for LinkedIn Company Scraper: How to Get Firmographics as JSON in 2026 (Python, n8n, MCP)
Truffle Pig Data
Truffle Pig Data

Posted on

LinkedIn Company Scraper: How to Get Firmographics as JSON in 2026 (Python, n8n, MCP)

Somewhere in your CRM right now there's an account record that says "software company, probably mid-size?" while the company's LinkedIn page states its industry, headcount band, headquarters, and specialties in plain text. That gap annoyed me enough to build the LinkedIn Company API on Apify: hand it a list of public company page URLs and it returns one clean JSON row of firmographics per company.

Disclosure: the Apify links in this post are affiliate links. If you run the Actor, I may earn a referral commission at no extra cost to you.

Can you get LinkedIn company data through an official API?

For most developers, no. LinkedIn's official company endpoints sit behind partner programs with an approval process aimed at established platforms, not at a developer who needs firmographics for 300 accounts this week. The public company pages, though, are exactly that: public. This Actor reads them without a login and packages the result like an API, which is what "linkedin company api" searches are really looking for.

What the LinkedIn Company API returns

The LinkedIn Company API returns one structured record per company page: name, industry, size, headquarters, follower count, specialties, locations, and the Crunchbase link when the page shows one.

Field Example Notes
Name Microsoft Company display name
Industry Software Development LinkedIn's industry label
Size 10,001+ employees Headcount band
Headquarters Redmond, Washington Primary location
Followers 22,000,000+ Reach and brand-weight signal
Specialties cloud computing, AI, ... Self-declared focus areas

The input is deliberately minimal: a companyUrls array, up to 1,000 pages per run, one batch in, one dataset out.

Who this is for

Account enrichment is the anchor use case: RevOps and sales teams stamping every CRM account with current size, industry, and location. Market researchers and investors use the same rows to map a sector, and agent builders wire it in so an AI can answer "what do we know about this company?" from live data rather than stale memory.

The manual way, and where it breaks

Everyone's first attempt is a requests call to a company page, and everyone's first result is an auth wall. LinkedIn is famously defensive: unauthenticated traffic gets challenged fast, markup shifts regularly, and the interesting fields sit in embedded structures that move around. The second attempt is usually copy-paste into a spreadsheet, which works and costs you an afternoon per hundred companies. I built this Actor after one too many of those afternoons.

The faster way: run the LinkedIn Company API

Apify Console

  1. Open the LinkedIn Company API and click Try for free.
  2. Paste your company page URLs into companyUrls.
  3. Run it and export the rows as JSON or CSV.

REST

curl -X POST "https://api.apify.com/v2/acts/johnvc~linkedin-company-api/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "companyUrls": ["https://www.linkedin.com/company/microsoft"] }'
Enter fullscreen mode Exit fullscreen mode

Run and dataset mechanics are documented in the Apify API docs.

Enrich a company list in Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("johnvc/linkedin-company-api").call(
    run_input={
        "companyUrls": [
            "https://www.linkedin.com/company/microsoft",
            "https://www.linkedin.com/company/apify",
        ]
    }
)

for company in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(company.get("name"), company.get("industry"), company.get("size"))
Enter fullscreen mode Exit fullscreen mode

A runnable version ships as the task LinkedIn company data API for Python.

Process a thousand companies in one batch

Bulk collect LinkedIn companies from a URL list is the volume pattern: paste the full account list, get the full firmographic sheet back.

Refresh your CRM's account data

Enrich accounts with LinkedIn company data frames the same run as an account enrichment job, the step that turns "probably mid-size?" into a filterable field.

Pull firmographics for market maps

Extract company firmographics from LinkedIn is the researcher's angle, and Scrape LinkedIn company data to structured JSON shows the exact output shape before you commit a single cent.

Automate it in n8n

Scrape LinkedIn companies in an n8n workflow drops the Actor into a no-code pipeline: new account created in the CRM, company URL in, firmographics written back automatically.

Company lookups from Claude via MCP

Connected through Apify's MCP server, the Actor is a tool that Claude, Claude Code, and Cursor can invoke, so "pull the LinkedIn firmographics for these five prospects" happens inside the conversation. The task Get LinkedIn company data in Claude via MCP covers setup, and there's more about Claude at claude.ai.

FAQ about the LinkedIn company scraper

What exactly does the company scraper collect?

Only what a logged-out visitor can see on a public company page: name, industry, size band, headquarters, followers, specialties, locations. No employee lists, no personal profiles, no login-gated content.

How much does the company scraper cost?

Half a cent per company returned. The full 1,000-URL batch runs about $5, and a new Apify account's free credit covers a few hundred companies before you pay anything.

Does the scraper work as an MCP tool for AI agents?

Yes. Over MCP it's callable from Claude, Claude Code, and Cursor, returning the same rows as a console run, which makes it a tidy building block for account-research agents.

Can I schedule the scraper to keep firmographics fresh?

Yes. Save your account list as a task, attach a monthly Apify schedule, and diff the runs; headcount-band changes and follower jumps are useful buying signals on their own. Start from the LinkedIn Company API.

Where does a company-page scraper hit its limits?

It knows only what the page declares. Employee size arrives as LinkedIn's band, not an exact number; revenue isn't published at all; and a stale page stays stale in your data. Treat it as the fastest first layer of enrichment, not the only one.

More from Truffle Pig Data

The rest of the LinkedIn set: the LinkedIn Jobs API for hiring signals on the same accounts, the LinkedIn Profile API for public people data, and the LinkedIn Posts API for what companies are publishing.

Wrapping up

Firmographics shouldn't be a research task; they should be a column. Run your account list through the LinkedIn Company API and close the gap between your CRM and reality.

Top comments (0)