Two way synchronisation between two systems

Hey there,

i try to implementent a fully functional and failure safe two way sync between the systems rentman and pipedrive for contacts, calendars, tasks and projects.

I know that there is a blog about this:

This is to be honest just a rough starting point to get a fully functional setup. I try to sync the systems in real time or at least near-time.

Option 1: Near-time full sync

Following the blog, if I setup a sync for example for the tasks and I do this every 5 minutes this is roughly 9k executions every month. My customer is willing to pay for n8n-cloud and this settup scratches the 10 executions for the pro plan just for sync one entity in near-time. I know it is possible to trick around with cron expressions and just sync that often in working hours and so on. But to be honest, all of this sounds hacky.

And there is a big big problem with this approach: What about deleted data?! I am wondering that this crucial part is not part of the article or any discussions here in this forum when speaking about two way sync.
If I get a full data scan from both systems I only get the active tasks or conacts. I did not get information about the deleted ones.
There would be a hack to store all ids of the found tasks somewhere and then check in the next execution if some ids are missing in the new found tasks list.
This is also kind of cumbersome.

Also what happens if the data gets more and more? There is an execution timeout which could get a problem with big databases.

Option 2: Real-time sync

Luckily these both systems have the ability to send webhooks for events happening. Pipedrive also has native triggers build into n8n where I can react to exactly what I want. For example for the event contact_created.
Rentman sends every event happening in the system to the configured webhook. In n8n-cloud plans this is kind of a problem because every webhook call is a new execution even if I am not interessted i this particular event. I can filter the event afterwards but the execution counts against the quota.
There are also other known event-webhooks having the same problem.
Like the Slack-Event-Webhook:

Also there is another problem with infinity loops for updating for example tasks. If the task is changed within rentman, n8n gets a webhook call and triggers the workflow to update the task in pipedrive. Because the task in pipedrive is changed, pipedrive sends a webhook call to n8n again to trigger the workflow that a task in pipedrive is changed. Even if I check if the update is needed in the system within the workflow, one update costs two executions, because both workflows get triggered once.

In Zapier there is a trigger filter available in the pro plan. Something like this in n8n would solve problems with noisy webhook-callers like rentman or slack for the paying customers.


Both Options have their drawbacks espacially because of unnecessary executions. I wonder if there is a better third option you are aware of to create a two-way-sync which is working solid in n8n.


Information on your n8n setup

  • n8n version: 1.16.0
  • Database (default: SQLite):
  • n8n EXECUTIONS_PROCESS setting (default: own, main): main
  • Running n8n via (Docker, npm, n8n cloud, desktop app): docker
  • Operating system: ubuntu

Hi @nico-kow

The amount of executions you cannot really bring down for these webhooks sadly.
It simply is an execution, so that is what it is.

Checking if you need to act on the event is of course possible in multiple ways.
You can log them yourself or for example find the last person who updated the task if this is logged and connected to n8n for example. All depends on the specifics.

You can of course do a hybrid of the 2. Where if something gets deleted you use that event and for the rest you use option1.

1 Like

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.