> ## Documentation Index
> Fetch the complete documentation index at: https://docs.up2data.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Get profile activity

> Outbound profile activity — authored posts, comments, reactions, or reposts. One `kind` parameter per request; each kind is a separate scrape.

**Cost: 2 credits per page (up to 25 items) · empty pages free · one `kind` per request**

Outbound activity for a profile — what they **published**, **commented on**, **reacted to**, or **reposted**. Pass exactly **one** `kind` per call. Each kind hits a different LinkedIn tab and is billed as its own scrape — there is no combined `all` mode.

This is the mirror of [post engagement](/api-reference/posts/engagement/comments) (inbound on a single post). For company-authored posts only, use [company posts](/api-reference/companies/posts).

| `kind`      | What you get                               |
| ----------- | ------------------------------------------ |
| `posts`     | Posts the profile published                |
| `comments`  | Comments the profile left on others' posts |
| `reactions` | Reactions/likes the profile gave           |
| `reposts`   | Posts the profile reposted                 |

Comment/reaction tabs may be empty or truncated when the member hides activity or LinkedIn's \~360-day visibility window applies.

<ParamField body="url" type="string">
  Profile URL or public identifier (e.g. `satyanadella`). Provide `url` or `urn`.
</ParamField>

<ParamField body="urn" type="string">
  LinkedIn member URN (e.g. `ACoAAB…`). Preferred when you already have it from search or engagement endpoints.
</ParamField>

<ParamField body="kind" type="string" required>
  `posts` | `comments` | `reactions` | `reposts` — **one per request**.
</ParamField>

<ParamField body="posted_within" type="string" default="all">
  `24h` | `week` | `month` | `all` — applies when `kind` is `posts`.
</ParamField>

<ParamField body="page" type="integer" default="1" />

<ParamField body="per_page" type="integer" default="25">1–25.</ParamField>
<ParamField body="pagination_token" type="string">Required for pages after the first when returned by a prior response.</ParamField>

### Response

<ResponseField name="data.kind" type="string">Echo of the requested activity kind.</ResponseField>
<ResponseField name="data.posts" type="object[]">When `kind` is `posts` — same shape as [posts enrich](/api-reference/posts/enrich).</ResponseField>
<ResponseField name="data.comments" type="object[]">When `kind` is `comments` — `text`, `posted_at`, `target_post`.</ResponseField>
<ResponseField name="data.reactions" type="object[]">When `kind` is `reactions` — `reaction_type`, `reacted_at`, `target_post`.</ResponseField>
<ResponseField name="data.reposts" type="object[]">When `kind` is `reposts` — repost entries with original post metadata.</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  # Authored posts (2 credits)
  curl -X POST https://api.uptodata.io/v1/profiles/activity \
    -H "X-API-Key: $UP2DATA_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"url": "https://linkedin.com/in/janedoe", "kind": "posts", "posted_within": "month"}'

  # Comments tab — separate scrape (2 credits)
  curl -X POST https://api.uptodata.io/v1/profiles/activity \
    -H "X-API-Key: $UP2DATA_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"url": "https://linkedin.com/in/janedoe", "kind": "comments", "page": 1}'
  ```

  ```python Python theme={null}
  import requests

  # Each kind = separate request = separate scrape
  for kind in ("posts", "comments", "reactions"):
      resp = requests.post(
          "https://api.uptodata.io/v1/profiles/activity",
          headers={"X-API-Key": UP2DATA_API_KEY},
          json={"url": "https://linkedin.com/in/janedoe", "kind": kind, "page": 1},
      )
      data = resp.json()["data"]
  ```
</RequestExample>

<ResponseExample>
  ```json 200 — kind posts theme={null}
  {
    "data": {
      "kind": "posts",
      "url": "https://linkedin.com/in/janedoe",
      "urn": "ACoAA…",
      "posts": [{
        "url": "https://linkedin.com/posts/janedoe_launch-activity-7215",
        "urn": "7267273010393358336",
        "author": {"name": "Jane Doe", "url": "https://linkedin.com/in/janedoe", "headline": "CEO at Example"},
        "text": "Today we are launching…",
        "posted_at": "2026-07-06T18:45:00Z",
        "reactions_count": 1204,
        "comments_count": 187,
        "reposts_count": 96,
        "scraped_at": "2026-07-08T12:00:00Z"
      }],
      "pagination": {"page": 1, "per_page": 25, "has_more": false},
      "pagination_token": null,
      "scraped_at": "2026-07-08T12:00:00Z"
    },
    "meta": {
      "creditsUsed": 2,
      "creditsRemaining": 98417,
      "billed": true,
      "reason": "success",
      "requestId": "req_example",
      "latencyMs": 2100
    }
  }
  ```

  ```json 200 — kind comments theme={null}
  {
    "data": {
      "kind": "comments",
      "url": "https://linkedin.com/in/janedoe",
      "comments": [{
        "text": "Congrats on the launch!",
        "posted_at": "2026-07-05T14:22:00Z",
        "target_post": {
          "url": "https://linkedin.com/posts/acme_announcement-activity-7210",
          "urn": "7267273010393358000",
          "text_snippet": "We are thrilled to announce…",
          "author": {"name": "Acme Corp", "url": "https://linkedin.com/company/acme"}
        }
      }],
      "pagination": {"page": 1, "per_page": 25, "has_more": true},
      "scraped_at": "2026-07-08T12:00:00Z"
    },
    "meta": {"creditsUsed": 2, "billed": true, "reason": "success", "requestId": "req_example", "latencyMs": 2400}
  }
  ```
</ResponseExample>

**Rate limit:** counts as 1 request against your [tier limit](/rate-limits).
