Skip to main content
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.
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.

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).