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

Get profile activity

Get one profile's authored posts, comments, reactions, or reposts, one kind per call.

POSThttps://api.up2data.ai/v1/profiles/activity
2 credits per callsynchronous

Identify the profile with url or urn (preferred, when known). Exactly one kind per request: posts (published), comments (left on others' posts), reactions (given), or reposts. Comment and reaction results can be empty or truncated when the member hides activity, or LinkedIn's roughly 360-day visibility window applies.

Warning

Each kind is a separate LinkedIn scrape and a separate charge. There is no combined "all" mode.

Info

Send many as batch operation items (operation profiles.activity); up to 500 results per item, billed at the same per-25-row-page rate as the sync call. See the batch endpoint.

#Request

FieldTypeNotes
urlstringProfile URL. Provide url or urn.
urnstringLinkedIn member URN. Preferred when known. Provide url or urn.
kindrequiredstringOne of: posts, comments, reactions, reposts.
posted_withinstringDefault all. Enum: 24h, week, month, all. Applies when kind is posts.
pageintegerDefault 1. Up to the 100 most recent items are available across pages.
per_pageintegerDefault 25. 1 to 25. Up to the 100 most recent items are available across pages.
pagination_tokenstringRequired for pages after the first, when returned by a prior response.

#Call it

cURL
curl -X POST "https://api.up2data.ai/v1/profiles/activity" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://linkedin.com/in/janedoe",
  "kind": "posts",
  "posted_within": "month"
}'

#Response

200 - kind: posts
{
  "data": {
    "kind": "posts", "url": "https://www.linkedin.com/in/janedoe", "urn": "ACoAABOPHB8BM6example",
    "posts": [{ "url": "https://linkedin.com/posts/janedoe_launch-activity-7215", "urn": "7267273010393358336", "share_urn": "7315779815297421316", "author": {"name": "Jane Doe", "url": "https://linkedin.com/in/janedoe", "headline": "CEO at Example"}, "text": "Today we are launching a new way to run outbound on live profile data.", "posted_at": "2026-07-06T18:45:00Z", "reactions_count": 1204, "comments_count": 187, "reposts_count": 96, "scraped_at": "2026-07-08T12:00:00Z", "media": [{ "type": "image", "url": "https://media.licdn.com/dms/image/v2/D4E22AQExample/feedshare-shrink_2048_1536/0/launch" }] }],
    "pagination": {"page": 1, "per_page": 25, "returned": 1, "has_more": false, "total_estimate": 1}, "pagination_token": null, "scraped_at": "2026-07-08T12:00:00Z"
  },
  "meta": { "creditsUsed": 2, "creditsRemaining": 98417, "billed": true, "reason": "success", "requestId": "req_example", "latencyMs": 2100 }
}
200 - kind: comments
{
  "data": {
    "kind": "comments", "url": "https://www.linkedin.com/in/janedoe", "urn": "ACoAABOPHB8BM6example",
    "comments": [{ "text": "Congrats on the launch - this is the workflow our outbound team has been missing.", "posted_at": "2026-07-05T14:22:00Z", "replies_count": 0, "commenter": {"url": "https://www.linkedin.com/in/janedoe", "full_name": "Jane Doe", "headline": "VP Marketing at Acme Corp", "urn": "ACoAABOPHB8BM6example"}, "target_post": { "url": "https://linkedin.com/posts/acme_announcement-activity-7210", "urn": "7267273010393358000", "text_snippet": "We are thrilled to announce a new way to run outbound on live profile data.", "author": {"name": "Acme Corp", "url": "https://linkedin.com/company/acme", "headline": "B2B software"} } }],
    "pagination": {"page": 1, "per_page": 25, "returned": 25, "has_more": true, "total_estimate": 60}, "pagination_token": "eyJwYWdlIjoyfQ.signature", "scraped_at": "2026-07-08T12:00:00Z"
  },
  "meta": {"creditsUsed": 2, "creditsRemaining": 98417, "billed": true, "reason": "success", "requestId": "req_example", "latencyMs": 2400}
}
200 - kind: reactions
{
  "data": {
    "kind": "reactions", "url": "https://www.linkedin.com/in/janedoe", "urn": "ACoAABOPHB8BM6example",
    "reactions": [{ "reaction_type": "PRAISE", "reacted_at": "2026-07-06T09:12:00Z", "reactor": {"url": "https://www.linkedin.com/in/janedoe", "full_name": "Jane Doe", "headline": "VP Marketing at Acme Corp", "urn": "ACoAABOPHB8BM6example"}, "target_post": { "url": "https://linkedin.com/posts/acme_announcement-activity-7210", "urn": "7267273010393358000", "text_snippet": "We are thrilled to announce a new way to run outbound on live profile data.", "author": {"name": "Acme Corp", "url": "https://linkedin.com/company/acme", "headline": "B2B software"} } }],
    "pagination": {"page": 1, "per_page": 25, "returned": 25, "has_more": true, "total_estimate": 60}, "pagination_token": "eyJwYWdlIjoyfQ.signature", "scraped_at": "2026-07-08T12:00:00Z"
  },
  "meta": {"creditsUsed": 2, "creditsRemaining": 98417, "billed": true, "reason": "success", "requestId": "req_example", "latencyMs": 1900}
}
200 - kind: reposts
{
  "data": {
    "kind": "reposts", "url": "https://www.linkedin.com/in/janedoe", "urn": "ACoAABOPHB8BM6example",
    "reposts": [{ "url": "https://linkedin.com/posts/janedoe_share-activity-7218", "urn": "7267273010393358444", "share_urn": "7315779815297421444", "author": {"name": "Acme Corp", "url": "https://linkedin.com/company/acme", "headline": "B2B software"}, "text": "We are thrilled to announce a new way to run outbound on live profile data.", "posted_at": "2026-07-05T11:00:00Z", "reactions_count": 842, "comments_count": 63, "reposts_count": 41, "scraped_at": "2026-07-08T12:00:00Z", "media": [{ "type": "image", "url": "https://media.licdn.com/dms/image/v2/D4E22AQExample/feedshare-shrink_2048_1536/0/announce" }] }],
    "pagination": {"page": 1, "per_page": 25, "returned": 1, "has_more": false, "total_estimate": 1}, "pagination_token": null, "scraped_at": "2026-07-08T12:00:00Z"
  },
  "meta": {"creditsUsed": 2, "creditsRemaining": 98417, "billed": true, "reason": "success", "requestId": "req_example", "latencyMs": 1800}
}

#Errors

StatusTypeWhenBilled
400invalid_requestMalformed body, unknown field, or bad URL format.No
401invalid_api_keyMissing, malformed, or revoked key.No
402insufficient_creditsBalance can't cover the call.No
422unprocessable_targetTarget 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.