Skip to main content
Both Async and Schedule modes support an optional incremental sync mechanism. Instead of retrieving the full dataset on every run, you can set sync_mode: "incremental" inside the parameters object to fetch only new data since the last retrieval.
Incremental sync is only available on engagement-free actions and requires an Engagement Identity (type: "engagement"). Standard identities cannot use this feature.

How It Works

  1. First run (initial full sync): When sync_mode is set to incremental and no previous data has been retrieved, the system performs a full sync limited by max_results (either the value you set or the action’s default).
  2. Subsequent runs (incremental): Once a first retrieval has been completed, the next runs automatically switch to incremental mode and return only newly available data.
With each continue or scheduled iteration, the system fetches up to max_results new items. If more new items were created than the max_results limit between two iterations, items beyond that limit will be lost and cannot be recovered.This happens because data is always fetched from the most recent to the oldest.To minimize this risk, choose a max_results value and schedule frequency that match your expected data volume.

Using Incremental Sync with Async Mode

In async mode, you trigger incremental updates manually by continuing a completed run:
Each call to POST /v1/runs/{run_uid}/continue resets the run and fetches up to max_results new items.
The launch response returns both run_id and run_uid. Keep the run_uid — that is what every subsequent call takes.

Example: Async Incremental Sync

Using Incremental Sync with Schedule Mode

In schedule mode, incremental sync is automatic: each scheduled iteration fetches only the new data since the last execution. No manual continue call is needed.
In scheduled mode, if the previous run is still in progress when the next iteration is triggered, that iteration will be skipped. The following iteration will trigger the update instead.

Example: Scheduled Incremental Sync

Supported Actions

The following actions currently support incremental sync:

Continuable Run Statuses

A run can only be continued if its status is one of:
  • BLOCKED
  • STOPPED
  • FAILED
  • PARTIAL_SUCCEEDED
  • SUCCEEDED
When continued, the run status and all related inputs are reset to SCHEDULED.

Limitations

  • Engagement Identities only. A standard identity cannot run incremental sync.
  • No backfill. Data is fetched newest-first, so anything that overflowed max_results between two iterations is not picked up later — see the warning above.
  • Schedules cannot be edited. Changing sync_mode on an existing schedule means cancelling and recreating it, which is what Part 2 below covers.
  • Overlapping executions are skipped. If the previous run is still going when the next is due, that iteration does not run.

Resume vs continue after a failed run

A run can be continued when its status is FAILED (among others listed above). That fetches the next delta — it does not retry what failed. Resume is the other option, but it accepts BLOCKED runs only; anything else returns 400. See Resume vs. continue.

Migrating existing schedules

This guide shows how to use the scheduled run endpoint for Extract LinkedIn Connections with incremental sync via Engagement Identities, and how to migrate existing schedules to incremental mode using the /actions/linkedin-extract-connections/run/schedule route. Incremental mode fetches only new data since the last retrieval instead of the full dataset on every run. It is available only on some engagement-free actions and requires an Engagement Identity.

Prerequisites

  • Engagement Identities enabled in your workspace and at least one Engagement Identity created with a connected LinkedIn account
  • API key with access to runs, schedules, and identities

Shared setup (reuse in your code)

The examples below use a single base URL and a small request helper so headers and error handling stay consistent. Define these once and reuse them across Part 1 and Part 2.

Part 1: Implementing Incremental Mode

1.1 Create a new scheduled run in incremental mode

To schedule Extract LinkedIn Connections in incremental mode, send sync_mode: "incremental" in the parameters object and use an Engagement Identity in identity_ids. Behavior:
  • First run: Full sync (capped by max_results).
  • Next runs: Only new connections since the last run. No need to call continue; each scheduled execution is automatically incremental.
In schedule mode, if the previous run is still in progress when the next iteration is due, that iteration is skipped. The following one will run the incremental update.
JavaScript example: create a scheduled incremental Extract Connections run

1.2 Async mode: continue an incremental run

If you use async instead of schedule, you trigger each incremental update by calling the continue endpoint after the previous run has finished. JavaScript example: run async and continue later (Extract Connections)

Part 2: Migrating full-mode schedules to incremental

Schedules cannot be edited in place — there is no update endpoint, only pause, resume and cancel. Switching an existing schedule to incremental means cancelling it and creating a replacement.
A schedule does not return everything needed to recreate it. GET /schedules/{scheduled_run_uid} returns cron, timezone, parameters, status and the scheduling timestamps — but not the inputs, the callback or the identity_ids the schedule runs with. Cancel first and that configuration is gone.Recover it before cancelling anything: inputs and callback come from a past run of the schedule, and the identity has to come from your own records.

2.1 What you can recover, and from where

Because the identity is not recoverable, a migration cannot be fully automatic. The script below collects everything it can, tells you what is missing, and only then migrates — with the identity mapping you provide.

2.2 List the schedules to migrate

Each schedule is identified by its uid. That is the value the endpoints below call scheduled_run_uid.
A schedule whose parameters.sync_mode is already incremental needs no migration — filter those out before you go any further.

2.3 Recover the inputs and callback from a past run

Runs carry the scheduled_run_uid that produced them, so the most recent run of a schedule is where its inputs and callback survive.
A schedule that has never executed has no run to recover from. Those have to be rebuilt from your own records, or recreated by hand.

2.4 Supply the identities

identity_ids is not returned anywhere, so map each schedule to the Engagement Identity it should run on. List your identities to get their UIDs:
Then build the mapping yourself — from your own database, or by hand for a small number of schedules:

2.5 Dry run, then migrate

Collect everything for every schedule and report on it before cancelling a single one. A schedule missing its inputs, callback or identity is skipped rather than recreated half-configured.
Review the plan. Only when every schedule you care about reads ready: true should you run the migration:
Set a low max_results on the first incremental schedule. The first execution is a full sync, so a large value there fetches history you probably don’t want, at full cost.
The migration runs sequentially on purpose. Cancelling and recreating schedules in parallel makes the identity-management rate limit the thing that fails, mid-migration, with some schedules cancelled and not yet recreated.

Summary

Continue a run

Endpoint reference for fetching the next delta.

Engagement Identities

What incremental sync requires, and how they are billed.

Schedules

Creating, pausing and cancelling scheduled runs.