Skip to main content

What is synchronized when?

One of the primary features of iCL Filler is, that it can work completely offline. To achieve this, we need to synchronize all data necessary to conduct inspections to the device. As you are using the system and the number of users grows, the amount of data that needs to be synchronized grows as well. To avoid running into limitations, iCL provides various ways to partition and filter the data that is synchronized.

This article explains in detail what is synchronized and when.

1. Full vs incremental synchronization​

To avoid unnecessary load on the database and network congestion, iCL Filler uses incremental synchronization to keep its local data up to date. Incremental means, that only the data that has changed since the last synchronization is synchronized. This is in contrast to full synchronization, where all data is synchronized every time.

A full synchronization is performed

  1. when the user logs in to the system.

  2. Also, if the app is not connected to iCL Portal for a while, it may run into the "max disconnected days" timeout. In this case, a full synchronization is performed the next time the app synchronizes. This is necessary, as for the incremental synchronization to work, iCL Portal needs to keep the history of the data changes. This can mean a lot of data, which has a negative impact on disk and sql query performance. For this reason, incremental synchronizations are only allowed for a limited time. The default is 30 days, but this can be configured in the iCL Portal settings.

  3. In cases where you explicitly want all your users to re-synchronize, you can use the settings Reinitialize if synched before

  4. Finally, if a new iCL Filler app version is released which introduces changes to the data that is being synchronized, it will detect this fact and automatically re-synchronize all data once if necessary.

2. When does the app synchronize?​

At various points, the app will automatically kick of the synchronization process:

  • when the user starts the app
  • when the user completes an inspection (app synchronizes and creates reports)
  • when the user accepts a task (given this is enabled in the apps settings)
  • when some deep-link is opened (e.g. re-synchronize, opentask, etc.)
  • there are also background syncs but they are different on each platform. On iOS for example, the sync is triggered by the Operating System which uses artificial intelligence to determine when to run our sync logic. (So we don’t have any way to influence that)

3. What is synchronized?​

Basically, data is synchronized per team: If the user is inspector in a team, (s)he will receive

  • all the team's workbooks
  • and all the published, self-assignable and not yet completed or cancelled tasks of that team

Additionally, any user will receive all published, not completed tasks that are directly assigned to him/her. This ensures that a user can still complete his/her tasks, even if (s)he is removed from the team.

Along with the tasks, iCL Portal determines all required additional data (images, content items) to be synchronized.


By default content items are not filtered during synchronization. So by default all items of a content type are synchronized to every device.

In case you are using content types a lot, this can lead to a lot of data being synchronized. To avoid this, you can configure the content type to use filtered synchronization.

Images are not downloaded eagerly

While iCL Filler downloads all the data, it does not download images by default. This is only done once the image is requested by a user - for example, if the user scrolls through a checklist where the image should be shown. This is the case as images can be quite large and we want to avoid unnecessary network traffic.

4. Best practices for synchronization​

To avoid running into limitations, we recommend to follow these best practices:

  1. Split your users into smaller teams so they only get a subset of the workbooks and self-assignable tasks. However, do not overdo this - a maximum of 1000 teams is recommended.

A user can be a member of multiple teams.

  1. Use filtered synchronization where possible.

  2. Keep the number of synchronized tasks low. (Tasks are synchronized if they are not completed and already published.)

  3. So do not add and publish tasks for the next year or all of them will be synchronized.

  4. Keep completed/cancelled tasks on users' devices for as little time as possible. This can be configured in iCL Portal. The same is true for inspections: Compelted inspections remain on the user's device until the Inspections retention time is reached. After that, they are deleted from the users device, but remain in iCL Portal.

  5. Reduce the Max disconnected days, which is 30 days by default. If a device is disconnected for longer than that, it does a re-sync which is a full synchronization.