Build real-time

sync with users’ 3rd party data

Build real-time

sync with users’ 3rd party data

Keep your users’ data synced in real-time with managed webhooks and high frequency polling mechanisms, powered by an enterprise-ready workflow engine.

Keep your users’ data synced in real-time with managed webhooks and high frequency polling mechanisms, powered by an enterprise-ready workflow engine.

How this works in Paragon

We give you full control over the configuration of the sync, which breaks down into 3 workflows.

Initial Sync

Real-time pull

Push

Automate 3rd party actions

Trigger workflows within your own application when events occur in users’ 3rd party apps

Trigger workflows when events occur in users’ 3rd party apps

Build high frequency CRON jobs to poll for changes in other apps

Learn more

const triggerStep = new IntegrationEnabledStep();


const getContactsStep = integration.actions.searchRecords(

{ recordType: 'Contact', filterFormula: undefined },

{

autoRetry: false,

continueWorkflowOnError: false,

description: 'Get Contacts',

},

);


const mapStep = new FanOutStep({

description: 'Fan out over Contacts',

iterator: getContactsStep.output.result.records,

});


const requestStep = new RequestStep({

autoRetry: false,

continueWorkflowOnError: false,

description: 'Send data to API',

url: `https://yourapp.com/api/v4/contacts`,

method: 'POST',

params: { ['']: '' },

headers: {},

body: {

email:`${context.getInput(sharedInputs.contact_field_mapping).field['Email']}`,


first_name:`${context.getInput(sharedInputs.contact_field_mapping).field['First Name']}`,


last_name:`${context.getInput(sharedInputs.contact_field_mapping).field['First Name']}`,

},

bodyType: 'json',

});


triggerStep.nextStep(getContactsStep).nextStep(mapStep.branch(requestStep));


/**

* Pass all steps used in the workflow to the `.register()`

* function. The keys used in this function must remain stable.

*/

return this.register({

triggerStep,

getContactsStep,

mapStep,

requestStep,

});

Initial Sync

Real-time pull

Push

Automate 3rd party actions

Trigger workflows within your own application when events occur in users’ 3rd party apps

Trigger workflows when events occur in users’ 3rd party apps

Build high frequency CRON jobs to poll for changes in other apps

Learn more

const triggerStep = new IntegrationEnabledStep();


const getContactsStep = integration.actions.searchRecords(

{ recordType: 'Contact', filterFormula: undefined },

{

autoRetry: false,

continueWorkflowOnError: false,

description: 'Get Contacts',

},

);


const mapStep = new FanOutStep({

description: 'Fan out over Contacts',

iterator: getContactsStep.output.result.records,

});


const requestStep = new RequestStep({

autoRetry: false,

continueWorkflowOnError: false,

description: 'Send data to API',

url: `https://yourapp.com/api/v4/contacts`,

method: 'POST',

params: { ['']: '' },

headers: {},

body: {

email:`${context.getInput(sharedInputs.contact_field_mapping).field['Email']}`,


first_name:`${context.getInput(sharedInputs.contact_field_mapping).field['First Name']}`,


last_name:`${context.getInput(sharedInputs.contact_field_mapping).field['First Name']}`,

},

bodyType: 'json',

});


triggerStep.nextStep(getContactsStep).nextStep(mapStep.branch(requestStep));


/**

* Pass all steps used in the workflow to the `.register()`

* function. The keys used in this function must remain stable.

*/

return this.register({

triggerStep,

getContactsStep,

mapStep,

requestStep,

});

Initial Sync

Real-time pull

Push

Automate 3rd party actions

Trigger workflows within your own application when events occur in users’ 3rd party apps

Trigger workflows when events occur in users’ 3rd party apps

Build high frequency CRON jobs to poll for changes in other apps

Learn more

const triggerStep = new IntegrationEnabledStep();


const getContactsStep = integration.actions.searchRecords(

{ recordType: 'Contact', filterFormula: undefined },

{

autoRetry: false,

continueWorkflowOnError: false,

description: 'Get Contacts',

},

);


const mapStep = new FanOutStep({

description: 'Fan out over Contacts',

iterator: getContactsStep.output.result.records,

});


const requestStep = new RequestStep({

autoRetry: false,

continueWorkflowOnError: false,

description: 'Send data to API',

url: `https://yourapp.com/api/v4/contacts`,

method: 'POST',

params: { ['']: '' },

headers: {},

body: {

email:`${context.getInput(sharedInputs.contact_field_mapping).field['Email']}`,


first_name:`${context.getInput(sharedInputs.contact_field_mapping).field['First Name']}`,


last_name:`${context.getInput(sharedInputs.contact_field_mapping).field['First Name']}`,

},

bodyType: 'json',

});


triggerStep.nextStep(getContactsStep).nextStep(mapStep.branch(requestStep));


/**

* Pass all steps used in the workflow to the `.register()`

* function. The keys used in this function must remain stable.

*/

return this.register({

triggerStep,

getContactsStep,

mapStep,

requestStep,

});

Initial Sync

Real-time pull

Push

Automate 3rd party actions

Trigger workflows within your own application when events occur in users’ 3rd party apps

Trigger workflows when events occur in users’ 3rd party apps

Build high frequency CRON jobs to poll for changes in other apps

Learn more

const triggerStep = new IntegrationEnabledStep();


const getContactsStep = integration.actions.searchRecords(

{ recordType: 'Contact', filterFormula: undefined },

{

autoRetry: false,

continueWorkflowOnError: false,

description: 'Get Contacts',

},

);


const mapStep = new FanOutStep({

description: 'Fan out over Contacts',

iterator: getContactsStep.output.result.records,

});


const requestStep = new RequestStep({

autoRetry: false,

continueWorkflowOnError: false,

description: 'Send data to API',

url: `https://yourapp.com/api/v4/contacts`,

method: 'POST',

params: { ['']: '' },

headers: {},

body: {

email:`${context.getInput(sharedInputs.contact_field_mapping).field['Email']}`,


first_name:`${context.getInput(sharedInputs.contact_field_mapping).field['First Name']}`,


last_name:`${context.getInput(sharedInputs.contact_field_mapping).field['First Name']}`,

},

bodyType: 'json',

});


triggerStep.nextStep(getContactsStep).nextStep(mapStep.branch(requestStep));


/**

* Pass all steps used in the workflow to the `.register()`

* function. The keys used in this function must remain stable.

*/

return this.register({

triggerStep,

getContactsStep,

mapStep,

requestStep,

});

Configure schema mappings

Let your users define their own object and field mappings, or pre-define schema mappings for standard use cases.

Surface field mapping configurations

The embeddable Connect Portal provides out-of-the-box field mapping so you won’t need to maintain schema mappings across every tenant.

Surface field mapping configurations

The embeddable Connect Portal provides out-of-the-box field mapping so you won’t need to maintain schema mappings across every tenant.

Surface field mapping configurations

The embeddable Connect Portal provides out-of-the-box field mapping so you won’t need to maintain schema mappings across every tenant.

Surface field mapping configurations

The embeddable Connect Portal provides out-of-the-box field mapping so you won’t need to maintain schema mappings across every tenant.

Pre-define mappings

Transform and map data from the 3rd party apps the same way for all of your users with custom functions and integration actions.

Pre-define mappings

Transform and map data from the 3rd party apps the same way for all of your users with custom functions and integration actions.

Pre-define mappings

Transform and map data from the 3rd party apps the same way for all of your users with custom functions and integration actions.

Pre-define mappings

Transform and map data from the 3rd party apps the same way for all of your users with custom functions and integration actions.

Purpose built for high volume sync

Purpose built for high
volume sync

Whether you’re syncing millions of records or terrabytes of data, Paragon’s serverless workflow engine can handle it.

1,600

Requests per second

2TB

Data per day

Workflow engine

Run syncs and automations at scale on our Workflow Engine. Workflows can retry from errors automatically, replay from the original request payload, and show input and output for every running step.

1,600

Requests per second

2TB

Data per day

Workflow engine

Run syncs and automations at scale on our Workflow Engine. Workflows can retry from errors automatically, replay from the original request payload, and show input and output for every running step.

1,600

Requests per second

2TB

Data per day

Workflow engine

Run syncs and automations at scale on our Workflow Engine. Workflows can retry from errors automatically, replay from the original request payload, and show input and output for every running step.

Smart rate limits

Smart rate limits

Smart rate limits

Horizontal scaling

Use Git to version-control and introduce code review to your workflows and integration config.

Horizontal scaling

Use Git to version-control and introduce code review to your workflows and integration config.

Horizontal scaling

Use Git to version-control and introduce code review to your workflows and integration config.

Standalone queue

Main queue

Data sync

Dedicated queues

Install the Paragon SDK from npm and embed any integration into your app. Fully compatible with Next.js, React, and Vue apps.

Standalone queue

Main queue

Data sync

Dedicated queues

Install the Paragon SDK from npm and embed any integration into your app. Fully compatible with Next.js, React, and Vue apps.

Standalone queue

Main queue

Data sync

Dedicated queues

Install the Paragon SDK from npm and embed any integration into your app. Fully compatible with Next.js, React, and Vue apps.

Implement sync via your APIs or databases

Receive and sync 3rd party data via your APIs or directly into your database.

Implement sync via your APIs or databases

Receive and sync 3rd party data via your APIs or directly into your database.

Implement sync via your APIs or databases

Receive and sync 3rd party data via your APIs or directly into your database.

Implement sync via your APIs or databases

Receive and sync 3rd party data via your APIs or directly into your database.

Monitor every sync job

Monitor every sync job

Unlike ETL products which provide sync jobs that run in a black box, Paragon provides full observability into every update.

Unlike ETL products which provide sync jobs that run in a black box, Paragon provides full observability into every update.

Detailed view of every workflow run

Stream errors in real-time to your own monitoring platform 

(ie. Sentry, Datadog, etc.)

Customer dashboard for monitoring sync job statuses for

each of your customers

Build real-time sync in minutes

Join 100+ SaaS companies that are scaling their integration roadmaps with Paragon.

Build real-time sync in minutes

Join 100+ SaaS companies that are scaling their integration roadmaps with Paragon.

Build real-time sync in minutes

Join 100+ SaaS companies that are scaling their integration roadmaps with Paragon.

Build real-time sync in minutes

Join 100+ SaaS companies that are scaling their integration roadmaps with Paragon.