v1.0 Production Ready

Declarative Infra
for Bidirectional Data Sync.

No complex setup. Run 'syncos link' on your CLI to keep Stripe, Salesforce, and HubSpot in sync. Bidirectional customers, contacts, and billing state, all defined in your terminal.

$syncos login
$syncos connect stripe
$syncos connect salesforce
$syncos link --plan
$syncos apply --plan
# observe
$syncos events list

End-to-end in under five minutes

$npm install -g syncos

Engineered for the modern B2B stack

Stripe|Salesforce|HubSpot
zsh — syncos link --plan
$ syncos link --plan
Pair:
  Source:        stripe
  Target:        salesforce
  Entity:        customer
  Bidirectional: true

Links:
  • salesforce|stripe|customer (exists)
  • stripe|salesforce|customer (exists)

Mapping:
  Fields:        4
  Reverse:       4
  Sample:
    - customer.email -> contact.Email
    - customer.firstname -> contact.FirstName
    - customer.lastname -> contact.LastName

Provisioning:
  • salesforce: manual_webhook_configuration_required
  • stripe: provision_webhook (/webhooks/stripe/:tenantId)

Warnings:
  • Entity not provided; defaulted to "customer" to match link-from-connections.

Local config
  Recommended: export SyncOSConfig.json so you can edit mappings and re-apply safely.
  You can also export later: syncos config export

Local files:
  • After execution, syncos link may prompt to export SyncOSConfig.json (default YES).
  • Use --no-write to skip writing the file.
  • Use --force to overwrite SyncOSConfig.json without prompting.

Apply these proposed changes? (y/N)
zsh — syncos apply --plan
$ syncos apply --plan
✔ Config loaded
Diff:
===================================================
--- SyncOSConfig.json (current)
+++ SyncOSConfig.json (proposed)
@@ -5,6 +5,10 @@
      "conflictPolicy": {
        "default": "last-write-wins"
      },
+      "filters": {
+        "sourceToTarget": [],
+        "targetToSource": []
+      },
      "mapping": {
        "fields": [
          {
            "bidirectional": true,
            "sourceField": "contact.LastName",
-            "status": "active",
+            "status": "deactivated",
            "targetField": "customer.lastname"
          },
          {

Summary:
  Links total:     1
  Links existing:  1
  Links missing:   0

Apply these proposed changes? (y/N) y
✔ Configuration applied successfully!
  Updated links: 2
  Config hash: 297b0de40485c0e7...

Tip: use `syncos status` to inspect link health.

01. Declarative Infra

Define your state in SyncOSConfig.json. We handle API diffing, rate limits, and provisioning. No more click-ops.

02. The "Zombie Guard"

Built-in distributed loop detection and delta filtering prevents the infinite sync loops that kill custom scripts.

03. GitOps Ready

Commit your config. Run syncos apply in CI/CD. Manage your data pipeline like you manage your code.

Declarative Sync. Defined in Code.

Define your sync once. SyncOS turns it into deterministic infrastructure.

This file is the source of truth. Change it, re-apply, and SyncOS reconciles the system safely.

SyncOSConfig.json
{
  "links": [
    {
      "source": { "system": "salesforce", "entity": "customer" },
      "target": { "system": "stripe", "entity": "customer" },
      "bidirectional": true,
      "conflictPolicy": { "default": "last-write-wins" },
      "mapping": {
        "fields": [
          { "sourceField": "contact.Email", "targetField": "customer.email" },
          { "sourceField": "contact.FirstName", "targetField": "customer.firstname" },
          { "sourceField": "contact.LastName", "targetField": "customer.lastname" }
        ]
      }
    }
  ]
}

Total Observability.

No black boxes. Inspect every webhook, retry, and sync operation in real-time. Verify your logic without leaving the terminal.

Runtime events — what actually happened.

syncos events list --limit 5
✔ Fetched 5 events

Events
────────────────────────────────────────────────────────────────────────────────────────
SOURCE      STATUS     RECEIVED_AT              TYPE              ID
stripe      received   2026-01-20T11:18:28Z     customer.updated  3f941137...
  Link           f8983b93-d4ef-4ce5...
  Entity         cus_TpHVPksH1PiRkX
  Attempts       0
  ProviderEventId evt_1Srcx4IvI2rLM1BRlPnHbpEo

stripe      processed  2026-01-20T11:17:48Z     customer.created  65ce9924...
  Link           f8983b93-d4ef-4ce5...
  Entity         cus_TpHVPksH1PiRkX
  Attempts       1
  ProviderEventId evt_1SrcwRIvI2rLM1BRinIC80QU

salesforce  received   2026-01-20T10:14:38Z     outbound_msg      5f3a2591...
  Link           5a087d3c-f95f-4bc5...
  Entity         003gK00000Nun41QAB
  Attempts       0
  ProviderEventId salesforce:om:04lgK000000DQUXQA4

stripe      processed  2026-01-20T10:14:34Z     customer.updated  c230980e...
  Link           f8983b93-d4ef-4ce5...
  Entity         cus_TouW4hCyWrmr38
  Attempts       1
  ProviderEventId evt_1SrbxFIvI2rLM1BR3WMNXEJM

Production Ready Adapters

stripeHubSpotsalesforce
SyncOS Assistant
S
Hello. I can help with CLI commands, configuration schema, or billing questions. What do you need?
AI can make mistakes. Check docs.