HTTP 999 from LinkedIn: what the non-standard status means

LinkedIn answers some scripted page requests with status 999, a code outside the HTTP standard. What it signals, what LinkedIn's terms say and what the official API does offer.

HTTP/1.1 999

Short answer

LinkedIn's 999 response is a site-specific status outside the standard HTTP range, and LinkedIn does not document its meaning. Treat it as an undocumented response to the scripted request, while recognizing that the official API uses a separate documented status for rate limiting.

Diagnosis checked 2026-11-12; sources below.

Why it happens

999 is not a standard HTTP status: RFC 9110 keeps valid codes within 100 to 599, and LinkedIn does not document it. Its User Agreement bans software, scripts and crawlers that scrape or copy the Services. Source: RFC 9110, section 15.

Do this now

  1. For public company and profile pages at volume, run a hosted route instead of patching your own requests: LinkedIn Company Pages with Funding & Affiliates. The request below runs it with its published example input through the Apify API (your token, billed at the Store price).
  2. Compare every route, with fields and prices, on the LinkedIn page.

Python

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
# Also set cookie (required, no default).
run_input = {
    "companyUrls": [
        "https://www.linkedin.com/company/hubspot/"
    ],
    "includeAffiliates": False,
    "includeShowcases": False,
    "includeFundingDetails": True,
    "language": "en"
}

run = client.actor("nimbryxo-studio/linkedin-company-pages-with-funding-and-affiliates").call(run_input=run_input)
if run is None:
    raise RuntimeError("The Actor run was not found.")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

pip install apify-client

JavaScript

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });
// Also set cookie (required, no default).
const input = {
    "companyUrls": [
        "https://www.linkedin.com/company/hubspot/"
    ],
    "includeAffiliates": false,
    "includeShowcases": false,
    "includeFundingDetails": true,
    "language": "en"
};

const run = await client.actor("nimbryxo-studio/linkedin-company-pages-with-funding-and-affiliates").call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

npm install apify-client

cURL

# Also set cookie (required, no default).
curl -X POST "https://api.apify.com/v2/actors/nimbryxo-studio~linkedin-company-pages-with-funding-and-affiliates/run-sync-get-dataset-items"   -H "Authorization: Bearer $APIFY_TOKEN"   -H "Content-Type: application/json"   -d '{"companyUrls":["https://www.linkedin.com/company/hubspot/"],"includeAffiliates":false,"includeShowcases":false,"includeFundingDetails":true,"language":"en"}'

Waits for the run and returns the dataset items (runs over 300 seconds return HTTP 408; start an async run instead).

MCP (AI agents)

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=nimbryxo-studio/linkedin-company-pages-with-funding-and-affiliates",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_TOKEN>"
      }
    }
  }
}

Adds this Actor as a tool in an MCP client that takes a remote server URL (Cursor, VS Code, Claude Code) through Apify's hosted MCP server. OAuth sign-in also works without the header. Clients that only start local servers can wrap the URL with npx mcp-remote.

Open LinkedIn Company Pages with Funding & Affiliates in Apify Store

Routes that work for LinkedIn data

The official route first, then the catalogue Actors that fit this problem (public company and profile pages), by their published fields. Store figures are the publisher's public numbers.

Routes for LinkedIn data
RouteCore fieldsPrice / 1KSuccess, 30 daysLink
Partner onlyLinkedIn APIs (partner programs)not comparedbelowOfficial docs
LinkedIn Company Pages with Funding & Affiliates3/8$0.99no public runsOpen in Apify Store
LinkedIn Company Headcount & Team Directory Scraper4/8$0.9918 runs, too few to rateOpen in Apify Store
LinkedIn Guest-View Profile Data Extractor6/8$0.99100% of 30 runsOpen in Apify Store

Official price: Partner pricing is not published as a self-serve rate card. Compare all 27 LinkedIn routes.

Routes that work for LinkedIn Jobs data

The official route first, then the catalogue Actors that fit this problem (public company and profile pages), by their published fields. Store figures are the publisher's public numbers.

Routes for LinkedIn Jobs data
RouteCore fieldsPrice / 1KSuccess, 30 daysLink
Partner onlyLinkedIn Talent APIsnot comparedbelowOfficial docs
LinkedIn Jobs Scraper with Salary & Company Enrichment6/7$0.994 runs, too few to rateOpen in Apify Store

Official price: Partner arrangements only; pricing is not public. Compare all 9 LinkedIn Jobs routes.

The facts behind the error

FactValue
Not a standard codeRFC 9110 says all valid HTTP status codes are within 100 to 599, so 999 is LinkedIn-specific
Official documentationLinkedIn does not document 999; its API returns 429 when a rate limit is hit
TermsLinkedIn's User Agreement (section 8.2) bans software, scripts, robots and crawlers that scrape or copy the Services
Account riskLinkedIn says members using prohibited software risk having accounts restricted or shut down
Official API scopeOpen permissions cover only the signed-in member's own name, headline, photo and email, plus posting as that member

Keep the diagnosis limited to what is documented

The HTTP standard does not include 999 as a valid status, and LinkedIn offers no official explanation for it. Record the response without assigning it a specific cause such as a rate limit.

Separate page requests from API rate limits

LinkedIn documents 429 for rate limiting in its API. A scripted page request returning 999 gives no documented API rate-limit diagnosis, so API retry guidance cannot explain that response.

Match the API to the collection job

Open API permissions cover the signed-in member's own name, headline, photo and email, plus posting as that member. Compare that scope with the intended job before replacing a public company or profile collection process with an API integration.

When to stop fighting the error

Repeated request changes cannot resolve the lack of a documented meaning for 999 or change LinkedIn's stated scraping restrictions. Use the official API when the job fits its open permissions; for broader company or profile collection, seek a permitted source or access arrangement that covers the required information.

Questions people ask

Is 999 a standard HTTP status?

It falls outside the valid range defined by the HTTP standard. LinkedIn uses it as a site-specific response.

Does the response prove that a rate limit was reached?

LinkedIn does not document what 999 means. Its official API documents 429 for rate-limit responses.

Can open API permissions retrieve arbitrary public profiles?

Open permissions cover the signed-in member's own specified profile information and posting as that member. Choose an integration based on that scope when assessing profile collection needs.

Can prohibited scraping software affect a LinkedIn account?

LinkedIn says members using prohibited software risk account restrictions or closure. Review its User Agreement and prohibited-software guidance before continuing a scripted collection process.

Sources

Every dated claim on this page comes from the public sources below. Check the source before you make a business decision on it.

Content updated 2026-11-12Data checked 2026-11-12

Get LinkedIn data with a catalogue Actor

LinkedIn Company Headcount & Team Directory Scraper returns 4 of 8 core LinkedIn fields at $0.99 per 1,000 results. Compare all 27 LinkedIn routes, or see LinkedIn Jobs.

Open in Apify Store