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

Search posts

Live LinkedIn post search by keyword, hashtag, or author.

POSThttps://api.up2data.ai/v1/search/posts
1 credit per page (up to 25 posts)synchronous

Provide at least one of keywords, hashtags, author_url, or author_urn. Several keywords and hashtags match any of them. With an author, the search reads that profile's recent posts and applies keywords, hashtags, and posted_within to them; sort: top then orders by reactions. share_urn is the full URN (urn:li:share:... or urn:li:ugcPost:...); media is an extra field at the end of each post when it has images or video. meta.reason is success, or empty_result when nothing matched.

Info

Counts as 1 request against the 300/min per-key limit and 1 search against the 20/hour per-organization search quota. See Rate limits.

Info

Send many as batch operation items (operation search.posts); up to 500 posts per item, 1 credit per 25-row page. See the batch endpoint.

#Request

FieldTypeNotes
keywordsstring[]
hashtagsstring[]Without the leading #.
author_urlstringProfile URL or public identifier. Send author_url or author_urn, not both.
author_urnstringMember URN (ACoAA...).
posted_withinstringEnum: 24h, week, month, all. Default all.
sortstringEnum: recent, top, relevance. Default recent.
max_resultsintegerDefault 25. 1 to 100.

#Call it

cURL
curl -X POST "https://api.up2data.ai/v1/search/posts" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "keywords": [
    "ai agents"
  ],
  "posted_within": "week",
  "sort": "recent",
  "max_results": 25
}'

#Response

200
{
  "data": {
    "posts": [{ "url": "https://www.linkedin.com/posts/katykeim_gtm-teams-are-losing-track-of-their-ai-agents-activity-7509369170732507138-zjBG", "urn": "7509369170732507138", "share_urn": "urn:li:share:7509369169658908672", "author": { "name": "Katy Keim", "url": "https://www.linkedin.com/in/katykeim", "headline": "CEO, LeanData | CMO | Independent Board Member" }, "text": "MarTech's take on our latest LeanData research: What happens when your organization has so many agents at work that you start losing track of them?", "posted_at": "2026-09-25T21:49:51.000Z", "reactions_count": 0, "comments_count": 0, "reposts_count": 0, "scraped_at": "2026-09-25T21:52:56.000Z" }]
  },
  "meta": { "creditsUsed": 1, "creditsRemaining": 98418, "billed": true, "reason": "success", "requestId": "req_example", "latencyMs": 4700 }
}

#Errors

StatusTypeWhenBilled
400invalid_requestNone of keywords, hashtags, author_url, or author_urn, both author_url and author_urn, unknown field, or a bad enum value.No
401invalid_api_keyMissing, malformed, or revoked key.No
402insufficient_creditsBalance can't cover the page(s) requested.No
422unprocessable_targetThe author profile is not found, private, or unreachable. Billed as 1 credit.Yes
429rate_limitedOver the 300 requests/min limit, or the 20 searches/hour per-organization quota. Honor Retry-After.No
500upstream_errorLinkedIn rejected the search query, or something 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.