HubDB vs. Custom Objects - Harnessing HubSpot CRM Data on Websites | HubSpot Developer Workshop

HubSpot developers Micah, Ramona Henry, Zach Wolfson, and John Hogg compare HubDB and custom objects for pulling CRM data onto websites. The workshop covers when to use each tool, includes live coding examples, and answers questions about dynamic rendering and platform integrations.
Hello everyone and welcome to HubSpot's first Developer Workshop of 2021. Let's wait a few seconds as everyone joins and during this time I'll give a quick introduction and cover some housekeeping. If you haven't found it yet, look for the chat window should be on the right side of your interface. There you and you'll be able to interact with our team and other participants throughout this workshop. So if you found that, go and drop in a comment on where you're calling in from. Awesome. Well, it's great to have everybody. If you find this type of event useful, make sure that you subscribe to our dev content that includes our developer newsletter and then announcements about special events like this workshop, hackathons, and other things that are relevant to developers. I'll drop a link in the chat, but we'll also send out a link in a follow up email after this event. Today we're going to be hearing a couple of awesome presentations. First, Ramona Henry from our Dev Relations team is going to give an overview of how HubSpot, CMS and CRM work together. She'll cover a history of how this interplay developed and a few examples of what's possible today. Then we'll hand it over to Zach Wolfson who's going to dive into the difference between Custom objects and HubDB, which when you should use one or the other, or both. After that, we'll have a few quick teaser demos of CMS apps that were built on top of HubSpot, CRM and CMS by devs in our community as part of our App Accelerator program. This is a program where developers work closely with our App Partner team to identify areas of opportunity and then build solutions with support along the way. If you're interested in joining a future edition of the App Accelerator program, check out the link that we're just about to drop in the chat here and then it'll also be in the email that you'll get as a follow up. All right, we're just about to get started. As we go along, feel free to leave any questions you have in the chat, but keep in mind that we'll have a Q and A at the end, so the speakers may wait until the end to answer your questions live on camera. All right, and with that, I'll hand it over to Ramona.
Hello everybody and welcome to today's workshop where we're going to talk about why is there CRM in my cms? My name is Ramona Henry and I'm a developer advocate here at HubSpot on the developer relations team. So what does CRM and my CMS actually mean? Let's break it down. We'll be taking a look at how the HubSpot CRM and the CMS interact together and how you can use CRM data to make powerful personalized HubSpot hosted content like websites, landing pages, blogs and marketing emails. Our agenda today looks a little bit like this. We're going to start off with a brief history of the CRM and the CMS and then we're going to go through what CRM objects are supported in the CMS today, followed by a look at custom objects. And then we're going to walk through the CRM object functions that you can use to actually get CRM data in your cms. And then we're going to wrap it all up with a short demonstration. So if we think about the HubSpot platform today, we have distinct hubs that are interconnected by a powerful CRM. We have the Marketing Hub, Sales Hub, Service Hub and CMS Hub. The CRM is the connective tissue that connects the hubs together to make HubSpot a very powerful platform for businesses. The CRM contains data about contacts, companies, deals, tickets, products, quotes, custom objects and marketing events. And to object so we can see contact first name or contact location. Over the years HubSpot has expanded its list of CRM objects that can be queried and rendered on hosted content. This is an example of the products from the product library being used to render an E Commerce abandoned cart email. So we can see the abandoned cart summary CMS module here on the left using Hubble and personalization tokens to display abandoned cart product details and images which appear on the right in the body of the email. Next up we have an example of custom CRM object. So in this case we can see that it is a website page that's listing property details. So we can see an image of the house that's been listed and some details like price and beds and bath over there on the right hand side. And we can see that it's pulling in data from the HubSpot CRM. So we can see the property listings table view here on the left hand side. This is huge because we're not just personalizing contact data anymore from the CRM. We're using all of these CRM objects across content. So we've got contacts, products, company deal, tickets, marketing events, details, we've got quotes, custom objects and integrator custom object types. One thing to note here that for security reasons only Instances of custom objects and built in product and marketing event types can be retrieved on a public web page. Any other built in object types like Contacts must be hosted on a page that's either password protected or requires CMS membership login. Let's take a deeper look at custom objects. This is our newest CRM object. So what is it? You may want to store other types of data in HubSpot, data that doesn't fit into the standard CRM objects like Contacts or companies. So it makes sense to create a custom object store this data. Custom objects give you the power to store many types of data in HubSpot. Some examples of this are perhaps shipping data associated with deals and products, customer subscriptions for a SaaS company, or physical assets like real estate listings like we just saw, or job listings for a recruiting company. So that's great that we can store lots of CRM data in HubSpot, but what tools do we have to help make CRM data appear in cms generally? Content the good news is that we've got three very powerful Hubble functions to help you display and control logic for CRM data in the cms. So first up is the CRM object function. So if you want to display a single CRM object's properties on a page, then this will help you do that using either a query or a CRM object id. In this example here we're getting event data, in particular the event name. So in the function you can see that we're asking for the event event data and then we're adding the ID and then using the chaining method again to get event name to get the actual name of the event. And we can see the name being outputted here in the output section. Next up is the CRM objects function. Just note the s at the end of the word object. So if you want to display properties for multiple CRM objects, you can use this function to do so. Again, you can use query or you can use the CRM object ID to do this. So in the example we're again using the events object and we're asking for all of the events in the CRM. Once the results come back, we're going to use a for loop to loop through those results to display the total number of events and the name of each event in the rendered output. We can see the total number of events and the name of each event that's coming from the CRM. So if you want to display CRM objects associated with your custom object, you can use this associations function to do so. So if you look at the example, we want to get any contacts that are associated associated with the events object in HubSpot. So again, we're going to use the event ID in the association function and then we're going to use a for loop to loop through the results to get the first name and the last name of each CRM contact associated with this event. So we can see here in the rendered outputs that Brine, Dharmesh and Yamini have all been associated with this event. We also have a CRM module field that's worth calling out here. This provides a way for content editors to select an instance of a CRM object to display or execute logic on its value. And it's very, very useful. So, for example, if you want to display information about a specific custom object, product, contact, company or other supported CRM objects, you can use this module field to do so. Let's take a look at a demo. Today we're going to use an example with cars and an online dealership to sell cars. So we have created a custom object here in the UI called Cars. We've created properties to store data about each car. So things like make and model, VIN or license number, body type, mileage year and cost are all stored as properties to provide further details about the car. And when we click into each instance, like I've just done now, we can see all of those properties in detail. So you can see here we've got two cars in our CRM. I've used the custom object API to create the car object and its properties. Right now the custom objects can only be created programmatically with the API. They cannot be created in the UI. So I've used Postman, a tool for testing APIs, to create this car object in the CRM for this demo. And but our API documentation is highly interactive and you can even create custom objects direct from the documentation, so it's worth checking it out. So my colleague Zach has been busy and has created this website to help sell the cars in our CRM. So here we can see that the cars listed in the CRM are actually being listed here on our website page. And it's pulling in all of the car details. So we can see images, we can see all of those properties that we saw in the CRM, we can see price, body, etc. And we can see both cards being displayed here on this website page. So how does this all work? Let's head over to the design manager to take a look. So to do this, we've created a CMS Module for cars. This module is then added to a Hubble and HTML web page template and that's the website that you see online today. So if you have a look through the module, we can see that it has Hubble and HTML up here on the top. And then we followed by a CSS section down here to add some styling, and then followed by a JavaScript section to add any JavaScript that we need. So let's take a quick look at the Hubble and the HTML code on top here. We can see some logic that is that if an image is missing for a car, it'll add a placeholder image to say, coming soon. And below that we can see the CRM objects function that we went through earlier today. So we can see that function here. And we're using a for loop to loop through the car results that are coming from the CRM. And then we're going to dynamically render those results to the web page. And that's a really crucial, important thing that we're dynamically rendering results from the CRM onto web pages. So we can see here that we've got some HTML, so we've got some divs creating the structure for the listings on the web page. We can see we're using our chaining method to add the image, the year and all those properties that we saw. So we can see model and cost, etc. And that's what our module is made up of. So marketing teams can. What does this look like for marketing teams? So if we head over to the content editor, this is what it looks like for marketing teams. So they can actually take the module that we've created and drop it into any template that they're working on. So next we're going to create a new car and see it dynamically appear in the UI and on the web page. So let's head over to Postman where I have a car all set up and we are going to run through what we're doing here. So it's a post request and I'm using one of the custom object endpoints up here. And we are going to be posting details of a new car. So we're going to see it appear in the CRM and we're going to see it appear on our car website. So in this request we've got the object ID for the car here, we've got the hub account or the portal ID for the the account that we're working on. And we also have a happy key here as well. I'm using happy key for authentication today. But we also have options for OAuth, which uses access tokens. So let's take a look at the JSON body that we're using and we're going to send this. So this is the car properties that will add all the detail about the car. So we can see here we've got things like condition, body, type, year model. So we're going to create a Volkswagen Atlas and it's going to be gray and we've got an image URL here and we've got some notes. So let's hit send. Good news is we get a 201 response and we get some response data that's sent back here and let's head over to our online dealership website and see if it's there. So let's refresh the page and there it is, dynamically rendered just like that CRM in my cms. Let's go and check the UI and check if the car is there too. So we just give this a refresh. We can see the atlas has been added and it's joining the Tiguan and the Gulf. So yeah, just like that you can create object instances and have them dynamically appear on websites and it's as easy as that. So what about for clients and non developers that you may be working about? No problem at all. They can create new object instances straight in the UI just like this. And they'll also dynamically appear on any HubSpot hosted content that that they're being directed to. So there it is. That is CRM in my cms dynamically rendered. This was just a small snippet of how powerful the HubSpot CRM and the CMS can be together. Remember, this is just using one of those clever CRM object functions I mentioned earlier, the HubSpot, CRM and CMS working in sync together. So go forth, create and innovate and have some fun. We can't wait to see what you build. Dream big. Thank you for your time today and thanks for listening.
All right, thanks a lot, Ramona. Next, we're going to be handing it over to Zach, who's going to dig into HubDB versus custom objects when you should use one or the other or both. Take it away, Zach.
Hi everybody. Welcome to Decisions, Decisions, Decisions, where we're looking at using custom objects versus HubDB to power your website. So here's a quick agenda of what we'll be talking about today. I'll introduce myself, define the systems we're going to be talking about, take a look at what's unique to HubDB. Take a look at what you need to custom objects and then go through a demo to show where the choice is yours and the implication of using one system versus the other. So who am I? I'm Zach Wolfson. I'm a senior developer advocate on the developer relations team here at HubSpot and my job is to give you all the information you need to make the right decision to use which APIs to build your app on top of HubSpot, as well as to take your feedback to our engineering teams to make sure we're building the best APIs for you. So what are we talking about? HubDB, a spreadsheet like database made specifically for displaying website content versus custom objects. An extension of the CRM to fit right in, integrated with reporting automation and other CRM features. So what's unique to HubDB? What does it mean to be built for the web first? Well, the first thing is its handling of rich media. You have field types as columns in the HubDB tables to display rich text, content, URLs, image, video fields to allow your content creators to input exactly what they want, format it how they want, and still give you the developer control of how it's laid out on the page. Geo sorting now this is a very specific functionality, but a very powerful1 of HubDB. This allows you to input data as latitude and longitude data and then use specialized Hub D filters to sort by location, showing things like where the nearest franchise is for your users. Finally, and this one gets a little esoteric, but foreign lookups. It's a very powerful feature of HubDB, allows you to establish a parent child relationship between two tables in a way that's just not possible with CRM. Today we're going to be using that in our cars database to show how we can sort of makes models separate from our listing as well. So what's unique to custom objects? What does it actually mean to be a natural extension of the CRM? First, it's built into the reporting engine, so when you create a new object you can immediately report on it. In our cars example, this will allow you to easily create a graph of how many cars you have in your inventory, by make, model, year, mileage, whatever you want. It allows you to very easily spin up reports since it's already built into the report builder automation. So now you'll have a car specific workflow type that will allow you to, when there is a new car created, take some automation on it. Or for example, when the price changes on a car, you can take Some action. One of those might be email those who are interested in the car so they can then make a purchasing decision to say aha. Now it's in the right price range for me. Finally, and most importantly are the people. Let's not forget that visitors to our website are also contacts in our database or the very least potential contacts in our database. Now you can personalize your website like never before. This allows you to build a very rich profile around somebody and truly customize their experience building out app like functionality in your HubSpot website. So what does this actually mean? Let's take a look at the code behind all of this to show you how this is all put together. So I've created two tables, two pages here where we have custom objects and we have HubDB so they look pretty much identical. There's a good reason for that. I use the same CSS and all that good stuff for here. No problem. Now hubdb here we can list each one and we can click into each. So now we can go here, show. Okay, We've got the 1985 Volkswagen Golf which was actually my very first car and it was very special to me. And I'm showing off the rich text functionality here by kind of bolding the vari. We're going to show a distance from the HubSpot Cambridge office as well as kind of how long it was. So some things we're calculating, some things we're displaying raw. All this powered by HubDB Custom Objects here. Well we created basically the same thing, no problem. So let's click in. Same thing. So this here is brand new functionality to HubSpot. The ability to dynamically generate pages based off of CRM object instances. So in this case I have defined the VIN of every car and that's going to be my, you know, page slug. Not particularly human friendly, but it is something a unique value that we can rely on here to create pages. So it works for this design. We've got the same kind of information. We've got price, body type here, distance from Cambridge, time since listing all this stuff as well as a favoriting capability. Now we're going to look at how we pull that off a little more detail at the end. So let's take a look at the code to pull this all together. So here if we start with the detail page, here's what you know, if we're looking at a single hub DB row, what that looks like here we're pulling in the model from the related models HubSpot table. So this is the secondary field and we can pull that in. This allows us to create a list of models much longer than any dropdown field would allow us to do, help eliminate the need for and validate that models are correct rather than just relying on a free text input. Nice advantage of HubDB there. Here we've got prices, here's our rich text card description. And then here we use that lat long feature that we were talking about where we pull in location, calculate, calculate the distance from my particular location. In this case I hard coded in the HubSpot Cambridge office and we'll do some rounding. Pretty straightforward. Similar idea for the listing date we want to do. You know how long has it been since this car was listed on our website? We're going to use the between times feature and this will take advantage of how HubDB handles daytime objects. We're going to have a very similar set of features here on our listing page. The biggest thing here we want to draw your attention to is we can use order by location and that will use the lat long feature to say, okay, what are the cars that are nearest to you? I don't want to be driving, you know, 10 hours out of my way when there was something in my neighborhood that fits my needs. So same idea here. Oh, okay, that's exactly the same thing. Here is no JavaScript required. That's pretty nice. And I like JavaScript as much as the next guy, but if I can avoid it, I will. So what does this look like on the custom object side over here we can take a look at the model and here's our dynamic page. So this is a brand new feature, it's in beta right now where we can see dynamically created pages of a car. So we're on here. We're going to save these variables for our JavaScript in here. Since we can't have Hubble inside of our JavaScript then we're going to query for CRM associations. Now this is a really, really powerful feature and that's what's going to let us use that favorited feature. We're going to see if the person viewing this has favorited this particular car and here's what that looks like on the front end. So here I haven't, I have favorited it. Now if I refresh that favorite will save because I've stored that now as an association. I'm going to come back to the how in a little bit. So here we have kind of the car image. The thing to note here is this is not an image field. This is actually just A text field. So I don't know what this is. You know, ideally I'd have some validation here that this is in fact, you know, a URL that's a reference to an image file. You know, these are things that the CRM just doesn't handle quite yet. That Hub DB is really good at price. That's pretty straightforward. You know, we've got the style, all that good stuff. Description, again, this is just pure text, not rich text in here. So it doesn't limit some of the creative possibilities for content editors. And here we don't have anything built in for location or date received. We're gonna have to handle that with JavaScript down below. And here is, you know, where we're checking out, you know, if that car has been favorited. So let's take a look at the JavaScript that we have. So it takes all of this JavaScript to calculate, you know, how long it's been since listing where, if we remember on Hub db, all it took was between times. Now that's because the CRM doesn't fully support daytime objects. Now, to do lat long, we're going to use the Google Maps GeoMatrix API, which if that doesn't sound esoteric to you, you probably spend too much time in the Google Maps API and again, not a trivial amount of JavaScript to write. And then finally we get to, I think, what is really my favorite part, which is the ability to let your website visitors, in this case, save their favorite car. So how are we doing this? So here's the Car id, the contact ID that we saved up here in our Hubble area, so we can reference that down in our JavaScript and then whenever that part icon is clicked, what we can do is we can go and call a serverless function. So this is very cool. Now we can have server side code executed right from within HubSpot. This was never possible for a long, long time. Hugely beneficial feature of CMS Hub Enterprise. So we also have a similar service function for removing favorites, should somebody click and want to remove that. So let's take a look at what that serverless function looks like. So first thing we're going to do is we're going to use the HubSpot API client that's built in as a dependency to pull in here. Then we're going to reference our secret so we have our happy key and then we can create an instance of the client and it handles authentication for us. So don't worry about that. Nice and easy. We're going to pull out that car, that contact that we're going to look at here and first thing we do is check if that visitor is a contact. So we're going to call the Contacts API and see if we get a response for the contact id. If it is, it'll have a created date that isn't the epoch start time. Otherwise it'll have something after January 1, 1970. And if it's not, we're going to send a message back to the UI saying, hey, go create an account. We can have a screen for doing that. I didn't wire that up for this demo, but you can imagine what that might look like if it does, then we're going to go ahead and create that association, creating the car to my custom object called car with the association type car to contact. Pretty straightforward. And then we're going to just kind of let our UI know that that was okay. And we have a very similar function here to remove Favorites where instead of, you know, create, we have, you know, archive the association so we can remove that. And the CRM no longer shows that relationship between the car and the contact, so we don't display it in their Favorites profile. Now, one feature I didn't mention here, that is something to keep in mind as you're designing your modules for both hubdb and custom objects. It's possible to create a field type that will let you select a particular CRM object or a particular hub DB table row so this is great for a featured use case, for example, where you can go and power your marketer to say, okay, that loop is great. You know, you say it's a loop, I don't care, you know, for loops beyond most marketers. But what you might be able to do is say, okay, now select something you want to feature from this dropdown, no code for them required. It'll just be basically exactly the same as the individual portion here where we're looking at a particular car. In this case, you can reuse all the same code. It'll just display one. You can build that into the same module or create a different module, whatever you want. So that's a newly released feature that I do want to draw your attention to. Didn't put it in this demo just because it makes sense in the flow that I was talking about. But you can imagine where you might want to build kind of a featured module, things like that. So, that being said, let's wrap things up here. So custom objects, you can build reports around them. You connect your website directly to the super powerful automation engine that's inside of HubSpot and it's truly a part of your CRM. So all the other things you expect a CRM object to do, a custom object can do. When you want to build Hub DB that was built for the web first, so it's got some great fields for displaying content. You can use parent child relationships today, but it is limited to 10,000 rows versus CRM objects which can scale into the millions. So I hope this helps you choose when to use custom objects and when to use HubDB to power your websites on HubSpot. Thank you.
All right, thank you Zach. At this time we're going to go ahead and play a few teaser demos for apps that were built using the tools mentioned in today's workshop. Unfortunately, these demos don't go into too many details, but feel free to ask any follow up questions you have during the Q and A that will come at the end. The goal of showing these demos is really just to show the breadth of what's possible when you combine HubSpot CRM with the CMS.
Hey there, John Hogg here. I'm the Managing director of Enlighten IC and we're the certified HubSpot partner responsible for building EZO. EZO is designed to be simple to set up and easy to use. All your data lives inside HubSpot so no data syncing issues. All you need to get going is HubSpot CMS Professional. EEZO also comes with two Ezo Lite for people who already have a CMS website and simply want to add their products and a shopping cart and EZO Essentials for people who want to build their entire ecommerce website with eazo. For today's demonstration we will be using EZO Premium as we'd like to showcase all that EZO has to offer. However, I should also point out that if you're using Ezo Starter or Pro, you may see features that are not available in your own plan. So with no further ado let's jump in. So here we are inside the Eazo Dashboard and this will be the first screen that you arrive at whenever you install Ezo and log into your admin portal. As you can see on the left hand side there are a number of different pages you can navigate to such as your orders page, products, customers, discounts, settings and lastly you can click here to view your shop online. Across the top we have a number of tiles that will take you to see your orders, sales, abandoned, orders and customers and then we have a graphical representation of this information. In the middle you can Click here to filter this information by this week, this month, this year and all time. And then we have a handy note section which shows the last four or five notes you may have added to orders in your system. Along the bottom we've got the five most recent orders. And as you can see, this is just a new portal that I've set up for this demonstration and I've already put one order through that we can look at a later stage before we go any further. I think it's probably a good point now to jump into products. We'll look at how we add products to ezo. Then we'll maybe go into the store, buy a product, and then we'll follow the order process through. So here we are. There's the product page inside easo. I've already added four coffee products to it, each with a range of pricing. If I want to add a new product, what I will do is I'll go here, a modal will open, I can add a title, I can decide whether I want to make this product featured or not. Add a short description and a long description. Moving down, we get the choice of being able to configure our product options. For example, are we selling an ordinary product or subscription? Do we want to track inventory or do we want to offer various product options? So now we've seen how to add products to ezo. Let's come across to our dummy store, Beanbag, and let's look at some of the products that are here. We can see all the relevant products that we've added to the store. So here I am and let's say I want to go across and purchase some Jamaican Blue Mountain. And here's the product page and I can see, oh, there's a range of pricing here. So if I select small, the price will update medium. Let's take large and let's take two of those and we'll add them to our cart. And there's the products there. If I had a discount code, I could apply it here. But let's go straight through to the checkout. There you go. Success. We just made an order. So let's skip back into Ezo and let's see the order in our portal. So here we are. We can see that's the order I just placed. A handy little thing is that if you mouse over the details, you actually get a bit of a quick view of the order. It's the Jamaican Blue Mountain. Small, there was five items. Costa Rican Rocket.
Large.
I ordered two. So you can see that's a very handy way for somebody who's coming into the portal and sees a number of orders and they can very quickly see what's there. Thank you for watching. I hope you've enjoyed today's demonstration. I know it's been a whistle stop tour, but there's a lot in EASO and I've tried to squeeze as much in as possible. Our plans are to continue developing EZO even more so if you have any suggestion or any advice on what you'd like to see, please do reach out.
Bye.
We hate to say it, but it's getting hard out here for a real estate professional. You've got companies that rhyme with Willow trying to kick you out of the transaction. COVID583 has been throwing a wrench into showings and when you try to come control your destiny in house, you're forced to send clients listing updates that look like they're from the 80s. Where are all the modern tools to personalize your web presence and help grow the business? Enter Real City. Real City is a suite of tools for agents and brokerages that harness the power of HubSpot and take back control of the real estate game. Here's how this year will be your biggest yet. Real City Basic adds an MLS standard custom object to your HubSpot instance in a few clicks. Yep, all 291 properties from number of bedrooms to yard size are available to use however you'd like. Associate clients with their favorite properties or just have a better way to keep your listings organized. Everything now lives in HubSpot. Sure, you can use our free app build it to create this object and the almost 300 fields manually, but have fun. We'll see in a few hours. For those that care about their time, a few clicks is all it takes. Real City plus adds the ability to build landing pages and entire websites in CMS Hub. We've crafted a dozen drag and drop modules and a few starter templates to elegantly display your listings and your clients can save their favorite properties and searches in their own own portal. Take that Willow. Finally, our Enterprise package gives you the ability to build a brokerage in a box web presence that is synced directly with the mls. Easily set your filters to import the properties that you need and let it ride. Coming soon to a near you, it's time to shine. Try Real City for free for 14 days. We won't ask for your credit card or bitcoin address or anything. Stop letting the big dogs push you around. Take control of your real estate empire with Real City. Just another HubSpot Power up from appcamist.
Well this was great. Thanks everybody for for tuning in. A lot of excitement here in the chat. Lorenzo, I see you have a question here about where can you see the association between your custom object and your context companies like when you click on the heart on the car where it'll be visible in HubSpot, that's going to be in the right hand sidebar of the CRM detail page. So it'll show all your related objects of whatever types you define. So you know, this is where you know when you have a contact you'll see the related company, you know any deals that are related. It works the exact same way for custom objects. Be able to see the related company contact in there. So when I make that call from the serverless function, that's where it's actually being shown in the ui. Next one here is for the John of Ezo. Anything you want to add on here? I know there's some excitement around the admin UI and then also saw some excitement around inventory management which has been a challenge for our customers for a while. Can you touch on kind of how.
You first off I'd like to comment on the new developer comment that was us building for non developers. So no offense. Plus developers in the room how to lose a room in one swift go there's another comment about back end versus front end. Yet whenever we install Ezo we put in four pages. We put in a product page, product listing page, a cart, and then the admin portal. So those four pages are entirely CMS pages, even admin portal which is password protected. Somebody asked a question about the front nice interface in the back end. The front end we give two themes. One is the Ezo Lite theme. Ezo Light theme is designed for people with an existing CMS website and just want to bolt in their product pages and a cart. And then people want to build an entire website with an Ezo Essentials theme as well so they can build their entire one. We actually haven't finished that one yet, but we're close. Close. This is all new stuff and we're just building every day on this and trying to add as much as possible. So there was a question about inventory. Yeah, whenever you add your product, you add your inventory for that product. But then we very much realized if you had a big list of products there, you don't want to go in and edit each product. So we have a tab in the settings section where you can go in and edit. There's a table and you can Edit every product one at a time, set an order limit, set a stock level, set a sku. And yeah, so it's all handled there and big use of Pub DB tables. So, so we have. We. I think I can preempt a question here that a lot of questions are we using hubdb or custom objects? There it goes, there's the question. And we decided from the very start we wanted and yeah, so it's all handled there and big use of Pub DB tables. So we have, we. I think I can preempt a question here that a lot of questions are we using hubdb or custom objects? There it goes, there's the question. And we decided from the very start we wanted to make our use case.
As wide as possible.
So we actually stayed away from custom objects because that was enterprise only and we felt that we didn't want to limit the size of the market we were going after. So we worked very hard to use Hub DB. All the APIs. I think we're using nearly every API bar the service. So sorry for the ramble. I came in late and tried to answer everyone go.
That's perfect. Great. Let me see what we have next. So question from Chad about CRM custom objects being available for anyone that isn't on enterprise. So right now it is related to enterprise only. You know there's a pretty strong history of HubSpot products eventually moving down the stack when they become a little more mature and a little more standard. No concrete plans for that at this time, but I'll definitely pass your feedback along to the pricing and packaging team. But people know are looking for that. Okay. And Jason, are we able to use CRM object calls on our own website like on a LAMP stack or is it only for the CMS? That is only for the CMS. It's a special feature of the HubSpot Content Management System. So if I have a LAMP stack and I try and call PHP CRM object, it won't work. What you can do is make an API call to HubSpot APIs to get the custom object data and associations, anything like that. So you have to make a REST based call, but that's that. Great. Let's see how many custom objects can we create in terms of definitions? You can create up to 10 different types of custom objects and then there's capacity packs for how many instances of those objects you can, you can build. Okay, let's see. Will there be a video on how to initially set up the custom object as the initial work was already completed? We have this in our docs, but we haven't put that in video form yet. But if that's something that kind of folks are looking for and would be useful, we can definitely look into kind of creating a video either in Postman or just some script to do that.
I think we have a comprehensive blog post on that as well, step by step. So yeah, we can add that to the chat too.
Great. Thorsten, your question here about can you explain why what is not working with Hubble for emails? Most Hubble should be working in emails these days, at least for a beta. But that email is a bit of a special beast in the world. So we're taking that approach very, very carefully.
Cool.
And then how many contacts Haley can connect with your or how can contact custom objects? So we use the CRM Associations API just like everyone else. Hopefully what you saw in the video there made sense. Only available marketing enterprise Philip. Yes, Hub DB is limited to a thousand tables and 2,000 rows per table. Customers have similar limitations. No, they're gonna have different limitations, you know, and this is where we can scale into kind of the millions of instances of custom objects. You know, for example, you know, with contacts you can go out to 15 million for a paid portal. So, you know, the sky is a little bit closer to the limit there. So I'm gonna add a dynamic page from Brian here. Will the data create a new entry in HubDB? You could you have a serverless function to kind of proxy that back through and you know, create a new entry. You absolutely could do that. How can I address that? Okay. Matthew is asking about kind of engagements and how they're different from in custom objects and contacts and deals. So engagements are in the process of being split out instead of kind of one monolithic object of engagements to, you know, a call and meeting a note, each being their own CRM object. So the last piece of that is the associations that the team is working on. But yeah, so you will see some differences. But look for on our changelog a rollout of that hopefully relatively soon. But still waiting on the exact TBD in there. Jonathan asked about the slug is simply an ID for the object. Can it be modified to a pretty URL? You can use any property that is has unique values to. True. It's a special field on CRM properties where HubSpot will enforce the uniqueness. You can have two of these types of properties for a custom object or believe it's 10 for a standard object minus contacts. You just have the one there which is email address. So I chose the VIN there as the id but you don't have to. That was easier for me to think about uniqueness but you can certainly have a string that is a little bit friendlier to read in the URL but you can't like modify it to display something different as the URL. It will be the value of that field. I think John answered Diana's question here about two hubdb tables. It was one hubdb table. The second table I mentioned is the parent child just held the models, you know. So for every manufacturer of cars they have you know, 10 or 15 different modules and that grows over time as you look at the number of over the model years, excuse me, as models come in and out. So that that's where that was stored. Since that list is too big for a like a drop down field you can get. You can blow through a thousand pretty quickly. Thorsten asking about rich text property in the CRM. That idea that will posted in the chat definitely the right place to go and modify that date time field in CRM objects. Rohan so this is something I've been asking the team for a while. So again I think going to ideas.HubSpot.com and making sure the product team sees your ask for, you know, a time picker so we can display proper date times in the UI to go along with that. That's probably the best way to make your feedback be heard. I'll of course mention something to the Schemas team as well. Alex is it possible to use Hub DB for a listing and have more creative options like rich text and embed the use of custom objects inside a module or template? Theoretically you could, but you'd have to have some kind of linkage between the HubDB table row and an instance of the custom object. It'd be pretty hacky. You have to put like just the string of the ID in there so you could do it. I wouldn't recommend it though. Paul yes, you can upload custom objects from a CSV and then we're back here. Okay so John, similar to what we just talked about, leverage both custom objects and hubdb. There's not like a CRM object column or anything like that in HubDB so it's going to have to be just kind of a string or comma separated string of IDs depending on which direction you're going and it gets pretty breakable pretty quickly. So not something I would necessarily recommend going on. Neil, is there a how to guide tutorial to recreate what you've just shown us? Not exactly. Since this functionality of the dynamic CRM object pages are still in a very early beta stage, but that's definitely on our radar to create kind of take some of this content and repurpose it for our websites. Chris asks what tools are available to prevent PII or other sensitive data stored in custom objects being displayed on public facing websites or apps pages? Great question. So for any native HubSpot object that aren't products, we require you to put that behind a gated page. So whether this be CMS memberships or password protected, it won't render otherwise. For custom objects though, since we can't know what we're talking about there, we do allow you to display that information publicly. So it's kind of up to your good judgment to make sure that you're not exposing things. And then Lonnie asked a question for you John. Could you have a course that you sell with easo, such as a product that has a beginning and end dates as part of the product definition?
Trying to understand that question. Zach A course with what?
So I think instead of selling physical products, could you sell access to like educational content where there's a beginning and end date?
At the moment, EZO does align physical and digital products. So what we do is we sort of see EZO as taking the order, receiving the payment, and then handing off to whatever digital delivery is required. For ourselves we're using EZO for ourselves, we're actually putting out a SaaS theme. So whenever EZO Essentials is shipped we'll actually have a SaaS theme as well. And that will allow people to fulfill, hopefully all sorts, maybe even partners selling their own services. That would be a great way I think, for them to manage the selling of digital products from inside easo. So yeah, courses, absolutely.
Awesome. Very flexible. Kushul asks why do we always face issues, cors issues While accessing CRM APIs? Is there any solution to avoid other than using proxy? No, and this is very much intentional. Since all of these APIs are authenticated, we don't want you exposing your authentication method, whether it be API keys or access tokens on the front end of your website because anybody can grab that and just get whatever data they want out of your account or delete all the data out of your account so you will have to proxy things through. In this case I use a serverless function since it's already built into the HubSpot CRM or the HubSpot CMS, but you can use whatever service you like. Speaking of authentication, Justine asked about authentication using the API key How can you authenticate through OAuth? Jean just set up an app for that. So you create an app and then you can go through the OAuth flow. John, I don't know if you're still there, but somebody asked, Michael asked, what payment gateways is EZO compatible with? Great. Good to see you back with us, John, we did have a question for you. What. What payment gateways is currently.
Stripe. We're built with Stripe, but we're looking at whenever we get launched fully, I think that's one of the things we want to do is actually expand that to as many platforms as possible.
Awesome. Stripe does feel very popular. People use it. Yeah. All right. Joseph asks, do we get a link to the source code here of the demos? I'm happy to throw my source code up on GitHub here. I actually developed it all locally using the HubSpot CLI maybe hasn't used that before. Quick plug for that, made it super easy. Worked right in Visual Studio code. So it'd be pretty trivial to send that up to GitHub. So I'll take that as an action item after this. And then Thorsten here has a question. Do you have language groups in mind when building out the dynamic pages on custom objects? Could it be based dynamic pages? It feels like it's not working perfectly. I'm assuming this is referring to localization, so you want to have field values displayed in either Spanish, English, French, whatever it may be. It's not a use case that's really covered today, but is something that's worth thinking about. I'll definitely bring that up with our team. So I think that's all the questions and we have here right on time. So I just wanted to say a big thank you to John for hopping on here as a partner, my fellow presenters, Micah for organizing this, and of course you all for chiming in and asking such great questions and kind of being involved as we get here. So there is a quick poll if you don't mind answering that, but I am going to go ahead and turn off my camera and leave you all to it. Have a great day, everybody.
Bye, everyone.










