TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

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

92 pointsby ianyanuskoover 1 year ago
Hey HN, I’m Ian, co-founder at Bracket (<a href="https:&#x2F;&#x2F;www.usebracket.com">https:&#x2F;&#x2F;www.usebracket.com</a>) along with Kunal and Vinesh. Bracket makes it easy to set up fast, bidirectional syncs between Salesforce and Postgres.<p>We have two main use cases: 1) building apps on top of Postgres instead of Salesforce, and 2) replacing existing Salesforce &lt;&gt; Postgres syncs (either Heroku Connect or in-house builds).<p>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.<p>For example: say you&#x27;re a car rental company. People rent cars via your web app built on Postgres, but your CX team uses Salesforce to track&#x2F;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 - &quot;Unavailable&quot; - 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.<p>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.<p>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.<p>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.<p>There are two major problems with Heroku Connect, though: 1) it&#x27;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.<p>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.<p>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: <a href="https:&#x2F;&#x2F;docs.usebracket.com&#x2F;polling">https:&#x2F;&#x2F;docs.usebracket.com&#x2F;polling</a><p>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 <a href="https:&#x2F;&#x2F;app.usebracket.com&#x2F;">https:&#x2F;&#x2F;app.usebracket.com&#x2F;</a>. If you don’t have a Salesforce or Postgres already set up, you can see Bracket in action here: <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=sRkaAa667T0" rel="nofollow noreferrer">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=sRkaAa667T0</a><p>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!

22 comments

atraacover 1 year ago
We&#x27;ve built similar thing to sync certain Salesforce objects to our .NET backend but Salesforce has their streaming all built around CometD which uses something I believe an insane person came up with - Bayeux Protocol. It&#x27;s essentially an HTTP streaming, you shoot a GET call to an API and it starts streaming bytes of data. If it stops or timeouts, you&#x27;re supposed to shoot another GET to continue streaming bytes, if nothing comes back you timeout and retry.<p>It&#x27;s an absolute hell, most community frameworks barely work, there&#x27;s zero good solutions to error handling, we had our Azure Application Insights constantly red because of timed-out requests that are in fact good, because they just mean there were no events to transmit.<p>I refuse to believe that multi-billion dollar company that is Salesforce couldn&#x27;t come up with a RabbitMQ sink or virtually any better solution to that problem, especially that they could gate it behind a subscription most companies would pay for since they spend millions on SF either way...
评论 #38628412 未加载
评论 #38630012 未加载
评论 #38625561 未加载
salesforcequitover 1 year ago
I tried to build this a few years ago using Salesforce’s webhooks and discovered that low-value tenants are on shared infrastructure where things like scheduled jobs can run instantly… or 10 minutes later, and Salesforce make no guarantees about when things will happen — making any attempt to use Salesforce as a source of truth unreliable.<p>The polling solution is neat but I am imagining it’ll run into issues with API limits and performance, especially for tenants on shared infrastructure: have you encountered that? Are you limited to working with customers that are paying Salesforce enough to have fast&#x2F;reliable infrastructure?<p>(I don’t think it’s a problem for your success as your product is most valuable to those paying Salesforce for reliability, I’m just curious how you are thinking about the problems I gave up on! Maybe things with Salesforce have changed in the last 5 years.)
评论 #38617455 未加载
teejover 1 year ago
Salesforce reps don&#x27;t even know what Heroku Connect is. I couldn&#x27;t get someone to sell it to me! I think the idea is great, glad to see someone picking it up.
评论 #38617174 未加载
评论 #38621256 未加载
quickthrower2over 1 year ago
As a developer I love the idea. Choosing Postgres over say a GraphQL API is bold, but it makes sense. The customer can then scale up their Postgres instance as they hammer it more and more, and they might already being using this for their app, so developers can add it to their ORM. Or they could wrap this in a microservice.<p>I also liked the submission recently about a git client that uses SQL. I like the idea that more things can be exposed as SQL (either directly or by syncing with a RDBMS). There is a lot of good tooling around it and despite the S not meaning Standard, the dialects are close enough that it isn&#x27;t a problem.
评论 #38618966 未加载
motrmover 1 year ago
This is very cool! I built a similar tool for a project with the need for two-way data syncing between Salesforce and MySQL via Laravel.<p>Salesforce objects map quite nicely onto Laravel’s Eloquent models (and booleans work fine! ref @ianyanusko in a sibling thread)<p>On the Salesforce side we use triggers to send a summary of field changes to Laravel to apply to its MySQL database. These are very cheap in terms of Salesforce limits and consumption!<p>Changes originating from the Laravel side use Salesforce’s REST API. It’s handy taking the round trip through Salesforce when saving changes as it lets flows&#x2F;processes run and formulas to do their thing before data is persisted in MySQL.<p>Syncing data from Salesforce (to seed a database for example) is done via REST too. It works OK.<p>I considered productising it at one point, but ideas are a dime a dozen, it’s a lot harder to execute well and Bracket is doing exactly that, kudos!<p>This has been a thoroughly interesting post, and I’ll keep my eye on Bracket. You are however out of budget for my client, we had to achieve syncing on a shoestring ;)
评论 #38627915 未加载
hhthrowaway1230over 1 year ago
Nice i can see the need for this.<p>&gt; 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.<p>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&#x27;s side?
评论 #38615731 未加载
bambaxover 1 year ago
Neat! How specific is your solution to Postgres? Could it be ported to another db engine?<p>(And, how are conflicts resolved? In a huge system with millions of records coming from everywhere it can fast become nightmarish?)
评论 #38619664 未加载
评论 #38620543 未加载
couchandover 1 year ago
This looks great! The UI and docs look very nice. Of course long-term reliability is what really matters in this space. I can definitely see incorporating this into client proposals.<p>A few things I can&#x27;t immediately see from the docs: do you support subsetting a data source -- only sync records matching criteria? Do you support to&#x2F;from different instances of the same connector (e.g. Salesforce to Salesforce)? Can you perform any transformations like map over the data, normalize or denormalize tables, etc?<p>Many clients I can think of this being most useful for would rather host it themselves, is that an option?<p>One critique: I can&#x27;t imagine recommending this to a client without SSL support. I&#x27;d highly recommend just baking that in to every tier. It would demonstrate that you&#x27;re serious about keeping your customers&#x27; data secure.
评论 #38618619 未加载
评论 #38618875 未加载
waltboszover 1 year ago
Neat. I once wrote a Salesforce to Oracle sync app. I think the goal was to bulk pull data out of Salesforce for processing in Oracle to avoid Salesforce API costs. This was years ago. It was a fun and aggravating project.
评论 #38619763 未加载
_bry-guyover 1 year ago
I&#x27;m currently on a team tasked with thinning out our Salesforce App Exchange app. Bracket looks very cool.<p>1. Do you have any plans to release an API rather than utilizing a webapp for defining the sync? 2. Does your Salesforce integration support syncing metadata, including custom metadata? 3. Do you have data on the impact Bracket has on platform events and other Salesforce limits? 4. Can you share any information on pricing?<p>Thanks!
评论 #38621898 未加载
njudahover 1 year ago
As the founder of what would become Heroku Connect (aka Cloudconnect), this thread warms my heart. Love to see the innovation - good luck!
评论 #38634128 未加载
matchagauchoover 1 year ago
Even if this only accomplished one-way directional sync with backup and disaster recovery capabilities, it&#x27;d probably find a 10x wider audience.
评论 #38618249 未加载
ilrwbwrkhvover 1 year ago
I really admire the dedication and motivation to be able to work on such incredibly boring things (for me).
评论 #38615709 未加载
dshahover 1 year ago
Looking forward to the HubSpot + MySQL integration.<p>Disclosure: I&#x27;m one of the HubSpot founders.
评论 #38632334 未加载
HorizonXPover 1 year ago
I wish you had built this in 2021 but congrats!!<p>Message me, might have a use-case with a Fortune 100.
评论 #38617799 未加载
foobarbaz333over 1 year ago
Doesn&#x27;t fivetran&#x2F;hightouch do this?
评论 #38615520 未加载
评论 #38615524 未加载
评论 #38615506 未加载
boundlessdreamzover 1 year ago
Congratulations on not giving up and solving a boring but hard problem.<p>What&#x27;s the tech stack?
评论 #38616967 未加载
trolliedover 1 year ago
Get in touch if you want to expand to NetSuite. We can have a chat...
评论 #38668651 未加载
评论 #38630044 未加载
评论 #38619715 未加载
评论 #38617218 未加载
评论 #38617192 未加载
isuckatcodingover 1 year ago
Love the focus. How did you find the people to talk to?
评论 #38616449 未加载
cpursleyover 1 year ago
Is bracket using Postgres CDC (via WAL)?
评论 #38617773 未加载
moneywoesover 1 year ago
most difficult part building this?
评论 #38634242 未加载
nextworddevover 1 year ago
Meta observation: lots of YC companies basically build their startups around some workload (e.g. salesforce &lt;-&gt; db) and sell some managed service around it. This game is quite difficult to scale and sell to enterprise. But it&#x27;s understandable that many technical founders are most familiar with these types of &quot;painpoints&quot; and thus have their startup thesis around them.
评论 #38619197 未加载
评论 #38618000 未加载