Live data from Hacker News

Launch HN: Bracket (YC W22) – Two-Way Sync Between Salesforce and Postgres

news.ycombinator.com

1–10 of 82 posts

Launch HN: Bracket (YC W22) – Two-Way Sync Between Salesforce and Postgres

#1
Hey HN, I’m Ian, co-founder at Bracket (https://www.usebracket.com) along with Kunal and Vinesh. Bracket makes it easy to set up fast, bidirectional syncs between Salesforce and Postgres.

We have two main use cases: 1) building apps on top of Postgres instead of Salesforce, and 2) replacing existing Salesforce Postgres syncs (either Heroku Connect or in-house builds).

Postgres makes a bunch of things easy for developers: building responsive web apps, handling SSO and user access rules, and scaling large datasets like time-series data. But Sales, Customer Success, and Ops teams usually don’t have direct access to Postgres - instead, they rely on Salesforce as a type of database. These teams need up-to-date data on users, orders, and services, and they need to edit this data. As a result, in a lot of organizations there’s a sort of abyss between Postgres and Salesforce.

For example: say you're a car rental company. People rent cars via your web app built on Postgres, but your CX team uses Salesforce to track/update users, cars, and rentals. One of your users calls in to say that they were in an accident and the car is totaled. Your CX team (on the Salesforce side of the abyss) needs to manually update the status of the car - "Unavailable" - and reassign upcoming reservations to other cars. These edits made in Salesforce must sync to Postgres so that the user sees their updated reservation details.

We first came across this syncing problem when we were deep in pivot hell during YC W22. At the time, we were two weeks away from Demo Day and we had been pivoting for five weeks. We felt like failures every morning, and it seemed inevitable that we’d drop out. Then we talked to a founder who told us how hard it is to simply keep Airtable and MongoDB in sync with each other. He tried Zapier, he tried writing custom scripts, all to no avail. At last, we had 1) a technical problem 2) frustrating a smart founder 3) with a big potential market. We started to build, raised a conservative amount of money at Demo Day, and kept our burn extremely low.

After a year, we had a product keeping Airtable, Notion, and Google Sheet tables in sync with larger databases, but it still felt like a stop-gap: companies were often using us to stand up lightweight BI, avoid creating internal tools from scratch, or build quick admin dashboards. Once they felt the limitations of, say, Google Sheets, they moved off Bracket to a more permanent solution. Not only did this shrink the size of the market, but also left us feeling like we were creating a vitamin, not a painkiller.

Then we talked with companies who wanted to sync CRMs - specifically Salesforce - with Postgres. They either had high-maintenance in-house solutions for syncing, or they were using Heroku Connect, which enables two-way syncs between Salesforce and Heroku-hosted Postgres. They couldn’t get rid of Salesforce and they couldn’t allow the two systems to get out of sync, so they were stuck with Heroku Connect.

There are two major problems with Heroku Connect, though: 1) it's super expensive, and 2) it ties you to Heroku Enterprise as a hosting platform. These companies wanted something as reliable as Heroku Connect, but hosting-agnostic and priced competitively. We sensed an opportunity to build something useful here, so we got to it.

Bracket makes it easy (90 seconds of setup) to get a Salesforce object and Postgres table syncing with each other in near-real-time. Using our app, you connect your Salesforce via oauth, connect your Postgres via connection URI (with options for SSL protocols), and either have Bracket generate a Postgres table from scratch or map fields between Salesforce and an existing Postgres table.

Once connected, Bracket can sync two ways or one way at a cadence decided by the user. We offer two sync methods: polling (default) and streaming. Using the polling sync method, changes sync on average every 30-60 seconds. Using streaming, changes sync on average every 10-30 seconds. You can read about how each method works, and the APIs they use, here: https://docs.usebracket.com/polling

We offer a few monthly subscription plans based on the amount of data kept in sync, with a free starter plan. You can try us without a credit card at https://app.usebracket.com/. If you don’t have a Salesforce or Postgres already set up, you can see Bracket in action here: https://www.youtube.com/watch?v=sRkaAa667T0

We’re hoping to build the best two-way syncing tool possible. We’ve got tools like Hubspot and MySQL in beta, and we’d love your feedback on other integrations that would be useful, product experience, and anything else that comes to your mind. It’s all very much appreciated. Thank you!

Re: Launch HN: Bracket (YC W22) – Two-Way Sync Between Salesforce and Postgres

#4

Doesn't fivetran/hightouch do this?

Fivetran and Hightouch do ELT and reverse ETL, respectively, which are one-way syncs. While Bracket can handle one-way syncs, two-way syncs (in situations where you need writes from both Postgres and Salesforce to sync) are our bread and butter.

We’ve worked with some folks who were cobbling together ELT and rETL to achieve a type of two-way sync, but they faced three problems with this approach: most importantly, handling for infinite loops, where an insert in one data source triggers an insert in the other, which then gets picked up anew, etc. Second, it wasn’t clear how to handle merge conflicts when the same record is edited from both sides (we give priority to the primary source). Finally, it was frustrating to debug problems when having to log into two separate tools.

Re: Launch HN: Bracket (YC W22) – Two-Way Sync Between Salesforce and Postgres

#5

Doesn't fivetran/hightouch do this?

I don't know much about Bracket, but looking through their docs[1] it looks like they support streaming from Salesforce as an alternative to batch/scheduled jobs (which is what Fivetran does)

[1] https://docs.usebracket.com/streaming

Re: Launch HN: Bracket (YC W22) – Two-Way Sync Between Salesforce and Postgres

#6
post #5

Doesn't fivetran/hightouch do this?

I don't know much about Bracket, but looking through their docs[1] it looks like they support streaming from Salesforce as an alternative to batch/scheduled jobs (which is what Fivetran does) [1] https://docs.usebracket.com/streaming

Yup! We offer two ways of interacting with Salesforce: polling and streaming. The benefits of streaming are faster syncs and optimized Salesforce API usage.

Right now, we're focusing on use cases that require changes to be synced within a minute. Fivetran and its ilk are generally more focused on large data batches at less frequent intervals (e.g., to unlock 1-minute syncs at Fivetran, you must be on the Enterprise plan, whereas we offer that out of the gate with the Starter plan).

Re: Launch HN: Bracket (YC W22) – Two-Way Sync Between Salesforce and Postgres

#8
Nice i can see the need for this.

> With the polling method, Bracket stores an encrypted copy of your data as an intermediate source of truth. We mostly do this to prevent infinite event loops, but it also helps with merge conflict resolution.

I see you have an on-prem version, but i am still not convinced why you need to store it? Can it not just be stored in an extra table at the client's side?

Re: Launch HN: Bracket (YC W22) – Two-Way Sync Between Salesforce and Postgres

#9

Doesn't fivetran/hightouch do this?

Yea, but it's a pain to have multiple ETLs when one tool would do the job. I've always been surprised that fivetran/hightouch don't ever throw in a .reverse().

Yeah exactly. One-way data syncing is a big market, and these companies have plenty of use cases to tackle, which is why I think two-way syncing has not been a priority for them.

That’s one reason why people trying to stand up two-way syncs have been stuck with dated tech (Heroku Connect) or have had to build in-house.

Post reply on HN