Skip to main content

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.

Live mode talks to LinkedIn directly and synchronously for each call. Unlike async or schedule, Edges does not apply the same built-in pacing, batching, or orchestration on your behalf. At scale, careless live usage can look like automation and trigger throttling, checkpoints, or account risk. Goal: mimic human-like usage—similar in spirit to what Edges does in async—by spacing work, avoiding parallelism, and adding randomness.
Using live mode unsafely puts your account at serious risk—you may be temporarily rate limited or even banned from LinkedIn. Having your account blocked due to unsafe usage is not a possibility, it’s only a matter of time.
Treat live mode as your responsibility to rate-limit and sequence. If you need guardrails by default, prefer async or schedule.

Rules of thumb 👍

  • Spread actions over time — never fire everything at once.
  • Invitations — respect a daily cap and space each attempt by tens of seconds to minutes, with randomized gaps.
  • Profile visits — distribute across the day; delay between each live call.
  • Search / pagination — always wait between each page (each follow-up request using X-Pagination-Next or the next cursor).
  • No parallel live calls for the same identity on risky outreach—keep the pipeline sequential (one in flight, then the next).
  • Random + jitter — add variability to every delay so intervals are not perfectly periodic.

Cold Account

A cold account is one with little recent LinkedIn activity: new identity, long idle period, or a profile that rarely browses, searches, or messages. LinkedIn’s systems weigh sudden spikes more heavily than steady habits—going from near-zero to high-volume live API traffic in a day is one of the riskiest patterns. Ramp up over several days instead of jumping to your target throughput immediately:
  1. Days 1–2 — Keep volume very low (a handful of benign actions if you must: light reads, spaced visits, minimal outreach). Use generous gaps between calls—often longer than the suggested minimum spacing table—and no parallelism for the same identity.
  2. Days 3–5 — Gradually increase daily call count and breadth (more pages, more profiles), still with jitter and sequential execution. If you see 429, checkpoints, or unusual friction, slow down and extend the ramp.
  3. After ~a week of stable, human-like patterns — You can approach your intended steady-state spacing and volume, still respecting daily caps, invitation limits, and the Rules of thumb guidance above.
There is no single “correct” curve: align ramp length with how warm the account already is and how aggressive your actions are (visits vs. InMail vs. connect). When in doubt, stretch the ramp and favor async or schedule until the account has a believable baseline of activity.

Suggested minimum spacing (live)

These are starting points for time between successive live calls of the same type for the same identity. Adjust per account and monitoring; when in doubt, ~60 s is a reasonable default.
ActionRecommended gap between calls
linkedin-inmail-profile~30 s
linkedin-message-profile~60 s
linkedin-visit-profile~30 s
linkedin-connect-profile~60 s (avoid bursts; small batches spaced apart)
salesnavigator-inmail-profile~30 s
General (other live actions)~60 s
Combine these delays with jitter (see example below), not fixed sleep only.

Simple Safe pattern: sleep + jitter (JavaScript)

After each live POST completes, wait base delay + random jitter before the next call:
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

/** baseMs = minimum gap; adds 0..jitterMaxMs random extra */
async function waitBetweenLiveCalls(baseMs, jitterMaxMs = 15_000) {
  const jitter = Math.floor(Math.random() * (jitterMaxMs + 1));
  await sleep(baseMs + jitter);
}

// Example: linkedin-visit-profile — ~30s base, up to +15s jitter
await fetch("https://api.edges.run/v1/actions/linkedin-visit-profile/run/live", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.EDGES_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ /* inputs, identity_mode, … */ }),
});
await waitBetweenLiveCalls(30_000);
// next live call…
For pagination, call waitBetweenLiveCalls with a minimum timeframe after every page (after each response before following X-Pagination-Next).

LinkedIn Commercial Limits

Keep in mind that LinkedIn has multiple mechanisms in place to detect and flag activity that doesn’t appear human. These safeguards are why we enforce daily limits on async and scheduled runs—to ensure security and reduce the risk of triggering LinkedIn’s automated protections.
A single limit may be consumed by multiple actions. Use the Get Identity Limits endpoint to see all limits that apply to a specific action.

How Account Limits Work

Each limit defines how many times a specific type of action can be executed within a defined time window.

Limit Fields Explained

FieldMeaning
limit_valueMaximum number of executions allowed during the defined period. Once reached, related actions are blocked until reset.
limit_periodQuota window duration in minutes. 1440 = 24 hours; 44640 ≈ 31 days. The counter resets automatically after this period.
limit_max_per_minute(Optional) Additional per-minute rate limit. Even if the global quota is not exhausted, this minute-level cap cannot be exceeded. If omitted in the action config, the default limits below apply for that window.

Default limits

WindowDefault cap
Per second5
Per minute30
Per 15 minutes300
Per 4 hours1,200
Per 24 hours7,000

Limit ↔ Actions & Quotas

Some limits vary depending on the account level: default, CLASSIC, or SALES_NAV.
Most quotas use a 24-hour sliding window, meaning they reset every 24 hours. InMail uses ~31 days .
Limit NameValue LinkedIn/Sales NavigatorPer-minute cap
Max profile visitsdefault & CLASSIC: 80 / 24 h · SALES_NAV: 500 / 24 h10
Max messages sentdefault, CLASSIC & SALES_NAV: 250 / 24 h10
Max connection requestsdefault: 25 / 24 h · CLASSIC & SALES_NAV: 30 / 24 h10 (default & CLASSIC only)
Max profile enrichments10,000 / 24 h15
Max profile components200,000 / 24 h (experiences, educations, skills)60
Max contact infodefault, CLASSIC & SALES_NAV: 250 / 24 h
Max event invitations sent100 / 24 h20
Max linkedin search peopledefault & SALES_NAV: 450 / 24 h10
Max salesnavigator search peopledefault & SALES_NAV: 950 / 24 h20
Max linkedin search companydefault & SALES_NAV: 450 / 24 h10
Max salesnavigator search companydefault & SALES_NAV: 950 / 24 h20
Max search saved peopledefault & SALES_NAV: 5,000 / 24 h20
Max search saved companydefault & SALES_NAV: 5,000 / 24 h20
Max company enrichments10,000 / 24 h20
Max InMail sentdefault: 5 / ~31 d · CLASSIC: 15 / ~31 d · SALES_NAV: 50 / ~31 d10
Max get post10,000 / 24 h40
Max get post commenters10,000 / 24 h40
Max get post likers10,000 / 24 h40
Max get post reposters10,000 / 24 h40
Max get people post activity10,000 / 24 h30
Max get people comment activity10,000 / 24 h30
Max get people reaction activity10,000 / 24 h30

Important Operational Notes

  • Limits are rolling windows, not calendar-based.
  • Per-minute caps apply even if the daily quota is not exhausted.
  • Some actions consume multiple limits simultaneously (e.g., visit + enrichment).
  • Sales Navigator accounts have significantly higher visit/search quotas.
  • InMail limit works on a ~31-day window, not daily.
  • When limit_max_per_minute is omitted in action config, the default limits table above applies for rate caps; per-action quotas in this table still apply for limit_value.