DRAFT tutorial. Not indexed by search engines. Not yet listed on the tutorials hub. Review + iterate in the Claude Code session, then merge the "Publish tutorial" PR to make it public.

How to Scrape LinkedIn Company Data Without a Login

Enrich any list of companies with LinkedIn data: employee count, industry, headquarters, description, specialties, website, and top employee profiles. No LinkedIn account, no cookies, no browser automation. HTTP-only, so runs are fast and cost about $0.005 per company.

Apify dataset table showing LinkedIn company data with columns for company name, employee count, industry, headquarters, and description
One row per company. The actor returns employee count, industry, HQ, description, specialties, and optional employee profiles.
Difficulty: Beginner
Time: 10 minutes
Cost: $0.005 per company (free tier covers ~999 companies/month)
Tools: Apify
Try the LinkedIn Company Scraper free Browse all NanoScrape actors

In this tutorial

  1. What data you get
  2. Prerequisites
  3. Step 1: Open the actor and sign up
  4. Step 2: Build your company list
  5. Step 3: Run the actor
  6. Step 4: Export your results
  7. Automate with n8n
  8. Common use cases
  9. What it costs

What data you get

Each run returns one dataset row per company. Fields come from LinkedIn's public guest company page, which does not require a login. The actor uses plain HTTP requests with no browser, so it processes each company in about one to two seconds.

{
  "company_id": "lead-001",
  "company_name": "Acme Corp",
  "linkedin_url": "https://www.linkedin.com/company/acme-corp",
  "employee_count": 5000,
  "employee_count_range": "1,001-5,000",
  "industry": "Software Development",
  "headquarters": "Munich, Bavaria",
  "description": "Acme Corp builds enterprise software for the manufacturing sector.",
  "specialties": ["ERP Integration", "Supply Chain Analytics"],
  "website": "https://www.acme-corp.example",
  "founded": "2015",
  "company_type": "Privately Held",
  "follower_count": 14200,
  "address": null,
  "employees": [],
  "posts": [],
  "error": null
}

Available fields

What the actor does not return: private LinkedIn data (direct messages, connection counts, InMail limits) and any content that requires a login to view. The guest page is the data source; what LinkedIn shows an anonymous visitor is what you get.

Prerequisites

STEP 1

Open the actor and sign up

  1. Go to the NanoScrape LinkedIn Company Scraper on Apify.
  2. Click Try for free. Sign up with Google or email. It takes about a minute.
  3. Once signed in, the actor opens in Apify Console with the Input tab active.
Apify actor page for the NanoScrape LinkedIn Company Scraper showing title, description, pricing events, and a Try for free button
The LinkedIn Company Scraper actor page on Apify. Click Try for free to open the input editor.
Already have an Apify account? Just open the actor link and it drops you straight into the input editor.
STEP 2

Build your company list

In the Input tab, click JSON editor at the top right. Paste your list of companies in the format below. Each entry needs a company_id (your own key), a company_name, and either a linkedin_url or a website_domain:

{
  "companies": [
    {
      "company_id": "lead-001",
      "company_name": "Contoso Ltd",
      "linkedin_url": "https://www.linkedin.com/company/contoso"
    },
    {
      "company_id": "lead-002",
      "company_name": "Northwind Traders",
      "website_domain": "northwindtraders.example"
    }
  ],
  "includeEmployees": false
}

Tips for building the list:

Apify Console Input tab showing the JSON editor with a companies array containing company_id, company_name, and linkedin_url fields
Paste your companies list in JSON editor mode. Each entry needs company_id, company_name, and either linkedin_url or website_domain.

Optional: include employee profiles

Set includeEmployees: true to also scrape the top visible employees from each company's People page. Use maxEmployeesPerCompany (1 to 50) and employeeTitleFilters to target specific roles:

{
  "companies": [
    {"company_id": "lead-001", "company_name": "Contoso", "linkedin_url": "https://www.linkedin.com/company/contoso"}
  ],
  "includeEmployees": true,
  "maxEmployeesPerCompany": 10,
  "employeeTitleFilters": ["CEO", "CTO", "Head of Engineering"]
}
Visibility note: LinkedIn shows a limited set of employees on the public guest People page, typically 5 to 10 profiles per company. The actor returns whatever LinkedIn exposes to an anonymous visitor. Employees with private profiles or who are not visible without a login will not appear.
STEP 3

Run the actor

Click Start at the top right. The actor processes companies in sequence. Each company takes about one to two seconds. A list of 100 companies typically completes in two to three minutes. Progress appears in the live log as each company resolves.

Apify Console run log for LinkedIn Company Scraper showing company names being processed with status messages and a running item count
The live run log. Each company appears as it resolves, with a running item count at the top of the page.

When the run finishes, the status changes to Succeeded. Click Results to preview the dataset. Each row represents one company. Rows with error: null resolved successfully; rows with an error value were not resolved and are not charged.

Running large batches: for batches of 1,000 or more companies, set requestDelay to 3000 or higher to avoid rate limiting. The default of 2000 ms works well for batches up to a few hundred companies.
STEP 4

Export your results

From the Results tab, click Export to download the dataset as JSON, CSV, or Excel. For live destinations, use the Integrations panel:

Automate with n8n

To enrich a CRM export on a schedule (for example, enriching all new leads added each week), connect the actor to n8n using the verified Apify n8n node.

  1. Open n8n and create a new workflow.
  2. Add a Schedule Trigger node. Set the interval to once a week or another cadence that matches your CRM update frequency.
  3. Add a Google Sheets (or CRM) node to read the current list of new companies.
  4. Add an Apify node. Set Operation to Run an Actor and get dataset. Set Actor ID to santamaria-automations/linkedin-company-scraper.
  5. In the Input JSON field, build the companies array dynamically from the previous node's output.
  6. Add another Google Sheets node (or a CRM node) to write the enriched rows back.
  7. Save and activate the workflow.
{
  "companies": [
    {
      "company_id": "{{ $json.crm_id }}",
      "company_name": "{{ $json.company_name }}",
      "linkedin_url": "{{ $json.linkedin_url }}"
    }
  ],
  "includeEmployees": false
}

This workflow runs weekly, reads new companies from a Google Sheet, enriches each one with LinkedIn data, and writes the results back. At $0.005 per company, enriching 200 new leads per week costs about $1 per week ($4 per month).

New to n8n? n8n Cloud has a free trial and includes the Apify node pre-installed. On self-hosted or n8n Desktop, install it from Settings › Community Nodes with package name @apify/n8n-nodes-apify.

Common use cases

B2B lead enrichment

Your CRM has a company name and website but no LinkedIn data. Run a batch enrichment to fill in employee count, industry, and HQ for every row. Sort by employee count to focus outreach on companies in your target size range. The company_id field lets you match results back to your CRM records without manual lookups.

Sales intelligence: finding decision makers

Enable includeEmployees: true with title filters like ["VP Sales", "Head of Procurement", "CFO"]. The actor returns each matching employee's name, title, and LinkedIn profile URL. Route these directly into a sales sequence or cold-outreach tool.

Market research: segmenting by industry and size

Pull the LinkedIn profile for every company in a geographic area or sector, then group by industry and employee_count_range. This gives you a market map without a data subscription. Combine with Google Maps Scraper to add location density and contact info.

Competitive tracking

Track follower count and recent posts for a set of competitors over time. Run the actor weekly, store results in a spreadsheet, and chart follower_count over time. The posts field returns up to five recent company updates per run, so you can monitor what competitors are communicating publicly without checking their profiles manually.

What it costs

10 companies                        = $0.051  ($0.001 start + $0.050)
100 companies                       = $0.501  ($0.001 + $0.500)
1,000 companies                     = $5.001  ($0.001 + $5.000)
Weekly enrichment, 200 leads/week   ~ $4.16/month

The Apify free tier includes $5 of usage credit each month. That covers up to 999 company lookups per month at no charge. Companies that fail to resolve (returned with an error value) are not charged.

Proxy cost: the actor uses RESIDENTIAL proxy, which adds a small traffic-based cost on top of the per-result price. The run page in Apify Console shows the full compute and proxy breakdown after each run.

FAQ

Does this require a LinkedIn account?

No. The actor scrapes LinkedIn's public guest company page (organization-guest/company/{slug}), which does not require a login. All data returned is visible to any anonymous visitor.

What if I only have a company name and no LinkedIn URL?

Set company_name and optionally website_domain. The actor searches Google using the GOOGLE_SERP proxy to find the company's LinkedIn page. Adding the website domain improves accuracy when the company name is common. If it finds the page, it scrapes normally. If it cannot find a match, the row comes back with error: "not_found" and no charge is applied.

Why does a numeric LinkedIn company ID return an error?

LinkedIn requires login to view numeric-ID company URLs (for example https://www.linkedin.com/company/19051). The actor tries a set of candidate slugs derived from the company name and domain. If none match, the row is returned with error: "numeric_id_unresolvable" and no charge is applied. To fix this: find the slug-based URL on LinkedIn (for example https://www.linkedin.com/company/acme-corp) and use that instead.

How many employees can I get per company?

LinkedIn exposes a limited set of employees on the public guest People page, typically 5 to 10 profiles. Use maxEmployeesPerCompany (1 to 50) and employeeTitleFilters to control which profiles are returned. Employees who have set their profiles to private or who are not visible without a login will not appear.

Is the employee count on LinkedIn accurate?

LinkedIn shows a range (for example "1,001-5,000") based on self-reported headcount and member profiles. The actor returns both the raw range as employee_count_range and the upper bound of that range as employee_count. For companies that keep headcount private or have not filled in their profile, this field may be missing.

Is scraping LinkedIn legal?

The actor only accesses data publicly visible on LinkedIn without logging in. The hiQ Labs v. LinkedIn ruling in the US established that scraping public data is not a violation of the Computer Fraud and Abuse Act. LinkedIn's terms of service restrict automated access, so you take on responsibility for your own use case. Consult a lawyer for specific compliance questions.

Related resources

Try the LinkedIn Company Scraper free Browse all NanoScrape actors