Install the Up2Data skill

Teach Claude Code to integrate the Up2Data API. Installs once, then loads automatically whenever you ask it about Up2Data.

  1. Run this in your terminal
    bash
    mkdir -p ~/.claude/skills/up2data-api && curl -fsSL https://up2data.ai/docs/v1/skill.md -o ~/.claude/skills/up2data-api/SKILL.md
  2. Restart Claude CodeSo it picks up the new skill.
  3. Try it"Enrich these LinkedIn profiles with Up2Data and send results to my webhook"

Requires Claude Code. macOS, Linux, or WSL.

Prefer to read it first? View the skill file

Find custom headcount

Count employees at a company matching title, seniority, location, or keyword filters.

POSThttps://api.up2data.ai/v1/companies/headcount
1 creditsynchronous

Filters combine with AND. Several titles match any of them, and so do several seniorities or locations. filters is required but may be empty ({}), which counts every current employee. Seniority is matched on job titles (for example vp matches VP, Vice President, SVP, and EVP), and each location is resolved to LinkedIn's closest geo match.

Info

Send many as batch operation items (operation companies.headcount); 1 credit per item, free when the company is not found. See the batch endpoint.

#Request

FieldTypeNotes
urlrequiredstringCompany page URL or slug.
company_urlstringDeprecated alias of url, still accepted. Send url or company_url, not both.
filtersrequiredobjectMay be empty.
filters.titlesstring[]Job titles, matched against current titles.
filters.senioritiesstring[]Enum per item: owner, partner, cxo, vp, director, manager, senior, entry. titles and seniorities together allow at most 6 values.
filters.locationsstring[]Place names, e.g. United States or London. An unknown place answers 400.
filters.keywordsstringFree-text keywords matched anywhere on the profile.

#Call it

cURL
curl -X POST "https://api.up2data.ai/v1/companies/headcount" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://linkedin.com/company/anthropic",
  "filters": {
    "titles": [
      "Software Engineer"
    ],
    "locations": [
      "United States"
    ]
  }
}'

#Response

200
{
  "data": {
    "company_url": "https://linkedin.com/company/anthropic",
    "count": 142,
    "filters_applied": {"titles": ["Software Engineer"], "locations": ["United States"]},
    "scraped_at": "2026-07-08T12:00:00Z",
    "linkedin_id": "74126343"
  },
  "meta": { "creditsUsed": 1, "creditsRemaining": 98419, "billed": true, "reason": "success", "requestId": "req_example", "latencyMs": 2100 }
}

#Errors

StatusTypeWhenBilled
400invalid_requestMissing url or filters, both url and company_url sent, unknown field, bad seniority value, more than 6 titles and seniorities combined, or a location that matches no place.No
401invalid_api_keyMissing, malformed, or revoked key.No
402insufficient_creditsBalance can't cover the call.No
422unprocessable_targetCompany not found, private, deleted, or unreachable.Yes
429rate_limitedOver the 300 requests/min per-key limit. Honor Retry-After.No
500internal_errorSomething broke on the server side.No
504upstream_timeoutThe live scrape didn't complete in time.No

See the Errors guide for every error type this version can return.