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

# LinkedIn Smart Limits

> The per-identity quotas Edges enforces on each LinkedIn action, how they are tracked, and what to do when one is reached.

**Smart Limits** are the allowances Edges enforces on each LinkedIn action, per identity. We set them below what LinkedIn tolerates, so that an account working hard through Edges stays a working account.

<Note>These are **our** limits, not LinkedIn's. LinkedIn's own caps sit above them and are neither published nor stable — see [How Limits Work](/v1/limits/how-limits-work) for how the two relate.</Note>

<Tip>
  **What happens when a limit is reached?** In live mode the request fails with a limit error. In async and schedule modes the work is postponed and resumes automatically once the window frees up.
</Tip>

## How Smart Limits work

| Concept | What it means |
| - | - |
| **Per-action** | Reaching the limit on one action leaves every other action on that identity available |
| **Per-identity** | Each identity carries its own counter for each action |
| **Rolling windows** | A window frees up gradually as the calls that filled it age out, not all at once at midnight |

**Example.** If it's Wednesday at 2 PM, Edges looks at the trailing 24 hours. If the quota for an action is spent, async and schedule work for that action is postponed; by 3 PM some of it has aged out and the work resumes. Identity A reaching its connection-request limit does not stop Identity A from extracting profiles, and does not affect Identity B at all.

<Info>
  Edges counts only the actions performed through the platform. Activity done by hand on LinkedIn, or through another tool, is invisible to us and still counts against the account with LinkedIn.
</Info>

### New identities start lower

A newly connected identity does not receive its full allowance immediately — it builds up over the first days. This is the most common reason a limit is reached earlier than the tables below suggest.

<Card title="Identity Ramp-Up" icon="chart-line" href="/v1/limits/identity-ramp-up" horizontal>
  How capacity grows, how to check where an identity currently sits, and how to lift it.
</Card>

## Quotas

### Quotas by window

Each number is the cap for one rolling window, per identity. It applies to a LinkedIn account without a paid subscription. **LinkedIn Premium** and **Sales Navigator** are named in the cell when their cap differs. On a Sales Navigator limit, **0** is the cap for an account without Sales Navigator. InMail's long window is 31 days, in the Per 24 hours column.

In **Per minute / 15 min**, one number is the per-minute cap. Two numbers are the per-minute cap, then the per-15-minute cap.

| Limit | Per 24 hours | Per minute / 15 min | Per hour | Per 4 hours |
| - | - | - | - | - |
| Company enrichments | 10,000 | 15 (Sales Navigator 20) | — | — |
| Company search | 450 | 10 | — | — |
| Connection requests | 25 (LinkedIn Premium and Sales Navigator 30) | 10 (no cap on Sales Navigator) | — | — |
| Contact info lookups | 250 | — | — | — |
| Content search | 450 | 10 | — | — |
| Event invitations sent | 100 | 20 | — | — |
| InMails sent | 5 (LinkedIn Premium 15, Sales Navigator 50) / 31 d | 10 | — | — |
| Job enrichments | 2,000 | 10 / 40 | 100 | 400 |
| Messages sent | 250 | 10 | — | — |
| People comment activity | 650 | 10 / 50 | 150 | 350 |
| People connections | 5,000 | 18 / 75 | 300 | 900 |
| People post activity | 700 | 10 / 50 | 150 | 350 |
| People reaction activity | 700 | 10 / 50 | 150 | 350 |
| People search | 450 | 10 / 30 | 70 | 200 |
| Post commenters | 10,000 | 40 | — | — |
| Post likers | 4,400 | 15 / 75 | 240 | 750 |
| Post lookups | 10,000 | 40 | — | — |
| Post reposters | 10,000 | 40 | — | — |
| Profile components | 400 | 9 / 25 | 80 | — |
| Profile enrichments \* | 1,400 (Sales Navigator 2,100) | 8 (Sales Navigator 13) / 45 (Sales Navigator 70) | 115 (Sales Navigator 195) | 390 (Sales Navigator 640) |
| Profile handle and id lookups | 10,000 | 10 | — | — |
| Profile visits | 80 (Sales Navigator 500) | 10 | — | — |
| Sales Navigator company enrichments | 0 (Sales Navigator 2,000) | 0 (Sales Navigator 20) | — | — |
| Sales Navigator company search | 0 (Sales Navigator 950) | 0 (Sales Navigator 20) | — | — |
| Sales Navigator people search | 0 (Sales Navigator 950) | 0 (Sales Navigator 20) | — | 0 (Sales Navigator 950) |
| Sales Navigator profile enrichments | 0 (Sales Navigator 700) | 0 (Sales Navigator 5) / 0 (Sales Navigator 25) | 0 (Sales Navigator 80) | 0 (Sales Navigator 250) |
| Sales Navigator profile id lookups | 0 (Sales Navigator 50,000) | 0 (Sales Navigator 20) | — | — |
| Saved company search | 0 (Sales Navigator 5,000) | 0 (Sales Navigator 20) | — | — |
| Saved people search | 0 (Sales Navigator 5,000) | 0 (Sales Navigator 20) | — | — |
| Thread URL lookups | 700 | 10 / 50 | 180 | 350 |
| Unique people returned by search | 900 | 20 | — | — |

\* These quotas are tuned per platform configuration and can differ from the value shown. [Get Identity Limits](/v1/api/identities/limits) always returns the number that actually applies.

<Note>
  Every window is its own cap. A shorter window stops a burst while the 24-hour quota still has room. A blank cell means that window has no separate cap.
</Note>

### Which limits each action consumes

Several actions draw on more than one limit, and hitting any one of them stops the action. 33 documented actions consume no per-action quota at all — they remain subject to the identity-wide caps and to LinkedIn itself.

| Action | Consumes |
| - | - |
| [`linkedin-connect-profile`](/v1/api/actions/linkedin-connect-profile) | Connection requests, Contact info lookups |
| [`linkedin-extract-company`](/v1/api/actions/linkedin-extract-company) | Company enrichments |
| [`linkedin-extract-company-affiliates`](/v1/api/actions/linkedin-extract-company-affiliates) | Company enrichments |
| [`linkedin-extract-company-employees-insights`](/v1/api/actions/linkedin-extract-company-employees-insights) | Company enrichments |
| [`linkedin-extract-connections`](/v1/api/actions/linkedin-extract-connections) | People connections |
| [`linkedin-extract-contact`](/v1/api/actions/linkedin-extract-contact) | Contact info lookups |
| [`linkedin-extract-job`](/v1/api/actions/linkedin-extract-job) | Job enrichments |
| [`linkedin-extract-linkedin-profile-handle`](/v1/api/actions/linkedin-extract-linkedin-profile-handle) | Profile handle and id lookups |
| [`linkedin-extract-page-followers`](/v1/api/actions/linkedin-extract-page-followers) | Company enrichments |
| [`linkedin-extract-people`](/v1/api/actions/linkedin-extract-people) | Profile enrichments |
| [`linkedin-extract-people-comment-activity`](/v1/api/actions/linkedin-extract-people-comment-activity) | People comment activity |
| [`linkedin-extract-people-educations`](/v1/api/actions/linkedin-extract-people-educations) | Profile components |
| [`linkedin-extract-people-experiences`](/v1/api/actions/linkedin-extract-people-experiences) | Profile components |
| [`linkedin-extract-people-post-activity`](/v1/api/actions/linkedin-extract-people-post-activity) | People post activity |
| [`linkedin-extract-people-reaction-activity`](/v1/api/actions/linkedin-extract-people-reaction-activity) | People reaction activity |
| [`linkedin-extract-people-skills`](/v1/api/actions/linkedin-extract-people-skills) | Profile components |
| [`linkedin-extract-post`](/v1/api/actions/linkedin-extract-post) | Post lookups |
| [`linkedin-extract-post-commenters`](/v1/api/actions/linkedin-extract-post-commenters) | Post commenters |
| [`linkedin-extract-post-likers`](/v1/api/actions/linkedin-extract-post-likers) | Post likers |
| [`linkedin-extract-post-reposters`](/v1/api/actions/linkedin-extract-post-reposters) | Post reposters |
| [`linkedin-extract-salesnavigator-profile-id`](/v1/api/actions/linkedin-extract-salesnavigator-profile-id) | Sales Navigator profile id lookups |
| [`linkedin-extract-school-alumnis`](/v1/api/actions/linkedin-extract-school-alumnis) | Company enrichments |
| [`linkedin-extract-similar-companies`](/v1/api/actions/linkedin-extract-similar-companies) | Company enrichments |
| [`linkedin-follow-profile`](/v1/api/actions/linkedin-follow-profile) | Profile enrichments |
| [`linkedin-get-thread-url`](/v1/api/actions/linkedin-get-thread-url) | Thread URL lookups |
| [`linkedin-inmail-profile`](/v1/api/actions/linkedin-inmail-profile) | Profile enrichments |
| [`linkedin-invite-event`](/v1/api/actions/linkedin-invite-event) | Event invitations sent |
| [`linkedin-message-profile`](/v1/api/actions/linkedin-message-profile) | Contact info lookups, Messages sent, Profile enrichments |
| [`linkedin-search-companies`](/v1/api/actions/linkedin-search-companies) | Company search |
| [`linkedin-search-company-employees`](/v1/api/actions/linkedin-search-company-employees) | People search |
| [`linkedin-search-content`](/v1/api/actions/linkedin-search-content) | Content search |
| [`linkedin-search-people`](/v1/api/actions/linkedin-search-people) | People search, Unique people returned by search |
| [`linkedin-visit-company`](/v1/api/actions/linkedin-visit-company) | Company enrichments, Profile visits |
| [`linkedin-visit-profile`](/v1/api/actions/linkedin-visit-profile) | Contact info lookups, Profile enrichments, Profile visits |
| [`salesnavigator-connect-profile`](/v1/api/actions/salesnavigator-connect-profile) | Connection requests |
| [`salesnavigator-extract-accounts-list`](/v1/api/actions/salesnavigator-extract-accounts-list) | Sales Navigator company search |
| [`salesnavigator-extract-company`](/v1/api/actions/salesnavigator-extract-company) | Sales Navigator company enrichments |
| [`salesnavigator-extract-leads-list`](/v1/api/actions/salesnavigator-extract-leads-list) | Sales Navigator people search |
| [`salesnavigator-extract-people`](/v1/api/actions/salesnavigator-extract-people) | Sales Navigator profile enrichments |
| [`salesnavigator-inmail-profile`](/v1/api/actions/salesnavigator-inmail-profile) | InMails sent |
| [`salesnavigator-search-companies`](/v1/api/actions/salesnavigator-search-companies) | Sales Navigator company search |
| [`salesnavigator-search-company-employees`](/v1/api/actions/salesnavigator-search-company-employees) | Sales Navigator people search |
| [`salesnavigator-search-company-metrics`](/v1/api/actions/salesnavigator-search-company-metrics) | Sales Navigator company search |
| [`salesnavigator-search-people`](/v1/api/actions/salesnavigator-search-people) | Sales Navigator people search |
| [`salesnavigator-search-people-metrics`](/v1/api/actions/salesnavigator-search-people-metrics) | Saved people search |
| [`salesnavigator-search-saved-companies`](/v1/api/actions/salesnavigator-search-saved-companies) | Saved company search |
| [`salesnavigator-search-saved-people`](/v1/api/actions/salesnavigator-search-saved-people) | Saved people search |
| [`salesnavigator-visit-profile`](/v1/api/actions/salesnavigator-visit-profile) | Profile enrichments, Profile visits |

<Info>
  Profile enrichment is served by several internal paths, each metered separately. The ceiling that applies to a given identity at a given moment is the one [Get Identity Limits](/v1/api/identities/limits) returns — not the table above.
</Info>

### Identity-wide throughput

Separate from the per-action quotas above, each identity also has a ceiling across **all** actions combined:

| Window | Cap |
| - | -: |
| Per second | 5 |
| Per minute | 50 |
| Per 15 minutes | 500 |
| Per 4 hours | 2,500 |
| Per 24 hours | 15,000 |

See [How Limits Work](/v1/limits/how-limits-work#identity-throughput) for how this relates to the other systems. Ramp-up does not change these caps.

## Checking an identity's real numbers

The tables above show full capacity. The [Get Identity Limits](/v1/api/identities/limits) endpoint returns what actually applies to one identity right now — ramp-up and any custom configuration included.

```bash theme={null}
GET /v1/identities/{identity_uid}/actions/{action_slug}/limits
```

```bash theme={null}
curl -X GET "https://api.edges.run/v1/identities/your-identity-uid/actions/linkedin-connect-profile/limits" \
  -H "X-API-Key: your-api-key"
```

<Tip>
  Evaluating limits in real time is expensive, and the call is rate limited alongside other identity operations. Query it when a limit surprises you — don't poll it.
</Tip>

## When every identity is exhausted

With `identity_mode=auto`, Edges spreads work across the identities available for the action. If **all** of them have reached their limit for that action, the run is postponed rather than failed:

```json theme={null}
{
  "label": "LIMIT_REACHED",
  "message": "Daily limit reached for linkedin.",
  "error": "all integration identities are exhausted",
  "postponed_until": "2025-12-23T15:15:42.523Z"
}
```

Other actions on the same identities may still be running normally — limits are per action. Your options are to add identities, switch to `identity_mode=managed` and let Edges supply the capacity, or wait for `postponed_until`.

## Avoiding LinkedIn restrictions

Smart Limits protect the account from volume. Two things outside our control matter just as much.

### Don't run other automation alongside Edges

Many tools handle IP addresses poorly. Running several at once means LinkedIn sees the same account acting from different places, which is one of the strongest signals it has for flagging automation. If a client's account is restricted, this is the first thing to check.

### Keep the timezone honest

The `timezone` on an Edges identity provisions a proxy IP in that country. If it doesn't match where the person actually logs into LinkedIn — including their VPN, when they use one — LinkedIn sees an account logging in from two countries. Either match the timezone to the VPN, or have them disconnect the VPN for LinkedIn.

<Tip>
  Restrictions are usually temporary. Work through the two checks above before assuming volume was the cause.
</Tip>

## When a limit is reached

Every limit rejection carries a label saying which window was exhausted, so you can wait the right amount of time rather than backing off blindly.

<CardGroup cols={2}>
  <Card title="Which limit was hit" icon="circle-exclamation" href="/v1/error-reference#which-limit-was-hit">
    Every label, its origin, and the right retry for each.
  </Card>

  <Card title="Recover a blocked run" icon="rotate-right" href="/v1/runs/recover-blocked-run">
    Picking work back up after a run stopped.
  </Card>
</CardGroup>

## Related

<CardGroup cols={3}>
  <Card title="How Limits Work" icon="layer-group" href="/v1/limits/how-limits-work">
    The five systems, and which ones you have to plan around.
  </Card>

  <Card title="Get Identity Limits" icon="gauge-high" href="/v1/api/identities/limits">
    The effective numbers for one identity.
  </Card>

  <Card title="Live Mode Safety" icon="gauge-high" href="/v1/runs/live-mode-safe-practices">
    Pacing live calls, which the quotas alone won't do for you.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.