{"componentChunkName":"component---src-templates-blog-list-template-js","path":"/103","result":{"data":{"allMarkdownRemark":{"edges":[{"node":{"excerpt":"An infrastructure layer that allows you to manage communication between the microservices of your application is a service mesh. As more…","fields":{"slug":"/engineering/istio-installation-and-service-configuration/"},"html":"<p>An infrastructure layer that allows you to manage communication between the microservices of your application is a service mesh. As more developers work with microservices, by consolidating common management and administrative tasks in a distributed setup, service meshes have developed to make the job easier and more effective.</p>\n<p>To know more about Istio, you can read this article on <a href=\"https://www.loginradius.com/blog/engineering/istio-service-mesh\">Istio service mesh</a> to understand the basic terminology, In this tutorial, will explain how to install and configure Istio. Let's get started.</p>\n<h2 id=\"installing-istio\" style=\"position:relative;\"><a href=\"#installing-istio\" aria-label=\"installing istio permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Installing Istio</h2>\n<p>Get the latest Istio release:</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">curl -L https://istio.io/downloadIstio | sh -</span></code></pre>\n<p>Extract the archive and export the bin directory in the environment path.</p>\n<p>This will also install istioctl, a command-line tool to manage Istio service mesh.</p>\n<h3 id=\"configuration-profiles\" style=\"position:relative;\"><a href=\"#configuration-profiles\" aria-label=\"configuration profiles permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Configuration Profiles</h3>\n<p>Istio provides various built-in configuration profiles, a set of pre-defined configs related to data and control plane. We can customize the configs according to our needs.</p>\n<p>For testing locally or trying it ou, you can use a demo profile. For dev and other environments, we will be using the default configuration profile.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">istioctl install --set profile=demo</span></code></pre>\n<h3 id=\"customizing-configs\" style=\"position:relative;\"><a href=\"#customizing-configs\" aria-label=\"customizing configs permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Customizing configs</h3>\n<p>Run:</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">istioctl profile dump default</span></code></pre>\n<p>to see the various configurations. We can change those flag using istioctl commands and --set flag.</p>\n<p>For development purpose, we can enabled/changes following flags:</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"3\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">istioctl install --set addonComponents.kiali.enabled=true \\ </span>\n<span class=\"grvsc-line\">--set components.telemetry.enabled=true \\ </span>\n<span class=\"grvsc-line\">--set components.citadel.enabled=true \\ </span>\n<span class=\"grvsc-line\">--set values.global.proxy.privileged=true \\ </span>\n<span class=\"grvsc-line\">--set addonComponents.tracing.enabled=true \\ </span>\n<span class=\"grvsc-line\">--set values.pilot.traceSampling=100.0 \\ </span>\n<span class=\"grvsc-line\">--set values.global.proxy.tracer=datadog</span></code></pre>\n<p>The path value of <code>--set</code> flag is the YAML path, which you can see in the profile dump command.</p>\n<blockquote>\n<p>While changing any config, make sure to pass all the previous flags with the new ones. For example, if first time, you enabled istioctl install --set addonComponents.kiali.enabled=true and now let’s say, you want to enable citadel, then you have to pass both flags like this: istioctl install --set addonComponents.kiali.enabled=true --set components.telemetry.enabled=true.\nFailing to add any previously enabled variable will revert the config to its default values.\nOne way to store the dump in a file and do istioctl apply or use helm charts for Istio.</p>\n</blockquote>\n<h3 id=\"sidecar-injection\" style=\"position:relative;\"><a href=\"#sidecar-injection\" aria-label=\"sidecar injection permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Sidecar injection</h3>\n<p>For Istio to work properly, a sidecar Envoy proxy needs to be enabled for the services. By default, the Istio control plane will not enable any sidecar to any services. To enable sidecar, we have to add labels at the namespace level.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"4\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">kubectl label namespace dsl-test istio-injection=enabled</span></code></pre>\n<p>You need to have this label even if you do not want to add a sidecar to all your services.</p>\n<p>You need to restart the pods.</p>\n<p>For services, which do not require sidecar, we need to add the following annotation in the deployment template:</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"5\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"># Pod Annotations </span>\n<span class=\"grvsc-line\">podAnnotations: </span>\n<span class=\"grvsc-line\">\tsidecar.istio.io/inject: &quot;false&quot;</span></code></pre>\n<h2 id=\"configuring-services\" style=\"position:relative;\"><a href=\"#configuring-services\" aria-label=\"configuring services permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Configuring Services</h2>\n<p>For demonstration, we will take two demo services demo-1 and demo-2, and configure both services with Istio, and will try to call demo-2 service from demo-1. Make sure there is an env variable in demo-1, which we will configure with demo-2 internal DNS url. The programming language for the two services does not matter here.</p>\n<p>A service configuration requires a VirtualService, DestinationRule, PeerAuthentication, and optionally a Gateway configuration.</p>\n<h3 id=\"gateway\" style=\"position:relative;\"><a href=\"#gateway\" aria-label=\"gateway permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Gateway</h3>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"6\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">apiVersion: networking.istio.io/v1alpha3 </span>\n<span class=\"grvsc-line\">kind: Gateway </span>\n<span class=\"grvsc-line\">metadata: </span>\n<span class=\"grvsc-line\">\tname: demo-1</span>\n<span class=\"grvsc-line\">spec: </span>\n<span class=\"grvsc-line\">\tselector: </span>\n<span class=\"grvsc-line\">\t\tistio: ingressgateway </span>\n<span class=\"grvsc-line\">\tservers: </span>\n<span class=\"grvsc-line\">\t- port: </span>\n<span class=\"grvsc-line\">\t\tnumber: 80 </span>\n<span class=\"grvsc-line\">\t\tname: http </span>\n<span class=\"grvsc-line\">\t\tprotocol: HTTP </span>\n<span class=\"grvsc-line\">\t- hosts: </span>\n<span class=\"grvsc-line\">\t\t- &quot;demo-1.example.com&quot;</span></code></pre>\n<p>Gateway is used when we want to access the services from the public network.</p>\n<p>Here we are using the default gateway provided by the Istio. We can also create multiple gateways and assign the proper name here.</p>\n<p>The above gateway configuration enables both HTTP and HTTPS communication. In the case of HTTPS, we have to supply the secret containing the CA certs and key.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"7\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">spec:</span>\n<span class=\"grvsc-line\">\tservers: </span>\n<span class=\"grvsc-line\">\t- port: </span>\n<span class=\"grvsc-line\">\t\tnumber: 443</span>\n<span class=\"grvsc-line\">\t\tname: http </span>\n<span class=\"grvsc-line\">\t\tprotocol: HTTP</span>\n<span class=\"grvsc-line\">\t  tls: </span>\n<span class=\"grvsc-line\">\t\tmode: SIMPLE </span>\n<span class=\"grvsc-line\">\t\tcredentialName: div4-dev-certs</span>\n<span class=\"grvsc-line\">\t  hosts: </span>\n<span class=\"grvsc-line\">\t\t- &quot;demo-1.example.com&quot;</span></code></pre>\n<p>We can apply the same gateway for demo-2. We just have to update the hosts and metadata name. Since we will demo-2 internally from demo-1, there is no need for an external gateway for demo-2 here.</p>\n<h3 id=\"virtualservices\" style=\"position:relative;\"><a href=\"#virtualservices\" aria-label=\"virtualservices permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>VirtualServices</h3>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"8\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">---</span>\n<span class=\"grvsc-line\">apiVersion: networking.istio.io/v1alpha3</span>\n<span class=\"grvsc-line\">kind: VirtualService</span>\n<span class=\"grvsc-line\">metadata:</span>\n<span class=\"grvsc-line\">  name: demo-1</span>\n<span class=\"grvsc-line\">spec:</span>\n<span class=\"grvsc-line\">  hosts:</span>\n<span class=\"grvsc-line\">  - &quot;demo-1.test.svc.cluster.local&quot;</span>\n<span class=\"grvsc-line\">  - &quot;demo-1.example.com&quot;</span>\n<span class=\"grvsc-line\">  gateways:</span>\n<span class=\"grvsc-line\">    - demo-1</span>\n<span class=\"grvsc-line\">  http:</span>\n<span class=\"grvsc-line\">  - route:</span>\n<span class=\"grvsc-line\">    - destination:</span>\n<span class=\"grvsc-line\">        host: demo-1.test.svc.cluster.local</span>\n<span class=\"grvsc-line\">        port:</span>\n<span class=\"grvsc-line\">          number: 80</span></code></pre>\n<p><strong>spec.hosts:</strong> Specifies the URL which the caller of the service will use. Here, dsl-es.pbdp.svc.cluster.local will be used by the services calling internally. The endpoint demo-1.example.com will be exposed publicly, and it should match the <strong>spec.servers.hosts</strong> value in Gateway config.</p>\n<p><strong>spec.gateways:</strong> In order for the gateways configured above to reach the service, we need to define the gateway metadata name here.</p>\n<p><strong>http.route.destination.host:</strong> This value should be the actual service FQDN.</p>\n<h3 id=\"destinationrule\" style=\"position:relative;\"><a href=\"#destinationrule\" aria-label=\"destinationrule permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>DestinationRule</h3>\n<p>After the virtualservice decides the destination hosts, DestinationRule defines the configuration on the actual service. DestinationRule is optional and is needed only in case we want to override the default behavior.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"9\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">---</span>\n<span class=\"grvsc-line\">apiVersion: networking.istio.io/v1alpha3</span>\n<span class=\"grvsc-line\">kind: DestinationRule</span>\n<span class=\"grvsc-line\">metadata:</span>\n<span class=\"grvsc-line\">  name: demo-1</span>\n<span class=\"grvsc-line\">spec:</span>\n<span class=\"grvsc-line\">  host: &quot;demo-1.test.svc.cluster.local&quot;</span>\n<span class=\"grvsc-line\">  trafficPolicy:</span>\n<span class=\"grvsc-line\">    loadBalancer:</span>\n<span class=\"grvsc-line\">      simple: ROUND_ROBIN</span>\n<span class=\"grvsc-line\">    tls:</span>\n<span class=\"grvsc-line\">      mode: ISTIO_MUTUAL</span></code></pre>\n<p><strong>spec.host:</strong> specifies service FQDN</p>\n<p><strong>spec.trafficPolicy:</strong> Specifies policy on the traffic. Here we can specify load balancing algorithms, TLS mode, circuit breaking policies.</p>\n<p><strong>spec.trafficPolicy.tls.mode:</strong> ISTIO_MUTUAL mode is a TLS mode where we will use the certificates generated by the Istio.</p>\n<p>A configuration like circuit breakers, outlier detection comes under the Destination Rule.</p>\n<h3 id=\"peerauthentication\" style=\"position:relative;\"><a href=\"#peerauthentication\" aria-label=\"peerauthentication permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>PeerAuthentication</h3>\n<p>This configuration defines how the other services will connect.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"10\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">---</span>\n<span class=\"grvsc-line\">apiVersion: security.istio.io/v1beta1</span>\n<span class=\"grvsc-line\">kind: PeerAuthentication</span>\n<span class=\"grvsc-line\">metadata:</span>\n<span class=\"grvsc-line\">  name: demo-1</span>\n<span class=\"grvsc-line\">spec:</span>\n<span class=\"grvsc-line\">  selector:</span>\n<span class=\"grvsc-line\">    matchLabels:</span>\n<span class=\"grvsc-line\">      app: demo-1</span>\n<span class=\"grvsc-line\">  mtls:</span>\n<span class=\"grvsc-line\">    mode: STRICT</span></code></pre>\n<p><strong>spec.selector.matchLabels.app:</strong> Specify the deployment label on which this configuration will be applied.</p>\n<p><strong>spec.mtls.mode:</strong> TLS mode. STRICT being the connection will always be mutual tls.</p>\n<p>PeerAuthentication can be applied to a whole namespace. This is useful when all the services in the namespace are part of the mesh.</p>\n<blockquote>\n<p>Apply the same configuration for virutalservice, destination, and peerauthentication by replacing demo-1 with demo-2 assuming both services are in the same namespace.</p>\n</blockquote>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"11\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">kubectl apply -f &lt;file&gt;.yaml -n test</span></code></pre>\n<p>Access the objects:</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"12\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">kubectl get virtualservices -n pbdp</span>\n<span class=\"grvsc-line\">kubectl get gateways -n pbdp</span>\n<span class=\"grvsc-line\">kubectl get destinationrule -n pbdp</span>\n<span class=\"grvsc-line\">kubectl get peerauthentication -n pbdp</span></code></pre>\n<p>Now update the env for demo-2 with <code>demo-2.test.svc.cluster.local</code> in demo-1 service.</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n  .dark-default-dark {\n    background-color: #1E1E1E;\n    color: #D4D4D4;\n  }\n</style>","frontmatter":{"date":"January 22, 2021","updated_date":null,"description":"This article will provide a step by step process on how to install and configure services using Istio.","title":"How to Install and Configure Istio","tags":["Istio","Service Mesh"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5037593984962405,"src":"/static/452f4d9f7cb358e3d6224ed3aba3d5d6/ee604/Istio.png","srcSet":"/static/452f4d9f7cb358e3d6224ed3aba3d5d6/69585/Istio.png 200w,\n/static/452f4d9f7cb358e3d6224ed3aba3d5d6/497c6/Istio.png 400w,\n/static/452f4d9f7cb358e3d6224ed3aba3d5d6/ee604/Istio.png 800w,\n/static/452f4d9f7cb358e3d6224ed3aba3d5d6/db955/Istio.png 900w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Piyush Kumar","github":"kpiyush17","avatar":null}}}},{"node":{"excerpt":"The present-day internet is a hotbed of spammers and hackers, and you need to secure your email address. Hackers often scan websites and web…","fields":{"slug":"/identity/secure-email-address-website/"},"html":"<p>The present-day internet is a hotbed of spammers and hackers, and you need to secure your email address. Hackers often scan websites and web pages to extract genuine email addresses and exploit them to attack users with spam messages. </p>\n<p>This should really concern you because many of these spam emails carry potential malware. When you open your mail or click on a link that contains it, the malware gets naturally downloaded to your system.</p>\n<p>For example, let's assume you have entered your email address on a website's contact page, then there's a big chance the email harvesting bots have found it. Thereafter, they start flooding your mail-box with spam emails. </p>\n<p>Luckily, there are a few ways to hide your email address from such spammers and hackers who constantly mine for the same. One way is through <a href=\"https://www.loginradius.com/blog/identity/2020/12/what-to-do-when-email-hacked/\">email harvesting</a>.  </p>\n<p>Let's talk about what it is and then explore the various ways to secure your email address.</p>\n<h2 id=\"what-is-email-harvesting\" style=\"position:relative;\"><a href=\"#what-is-email-harvesting\" aria-label=\"what is email harvesting permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is Email Harvesting</h2>\n<p>Email harvesting is the process of collecting lists of email addresses via different methods. Generally, it is used for bulk emails or spam. Hackers use \"harvesting bots,\" which crawl multiple sites, chat rooms, web forms, etc., in a few seconds to extract a list of email addresses. </p>\n<p>Other techniques include:</p>\n<ul>\n<li>Posting into UseNet with email addresses.</li>\n<li>Gathering data from white and yellow pages.</li>\n<li>Accessing the same computer used by valid users.</li>\n<li>Accessing emails and address books on another user's computer.</li>\n<li>Spamming through social engineering. </li>\n<li>Buying lists from other spammers.</li>\n<li>Hacking websites.</li>\n<li>Using the method of guessing and cleaning.</li>\n<li>Hacking mailing lists, webpages, web browsers, Internet relay chats, domain contact points, etc. </li>\n</ul>\n<p>These methods allow spammers to gather email addresses and use them to send unsolicited bulk messages to the recipient's inbox. </p>\n<h2 id=\"6-tips-to-secure-your-email-address-on-a-website\" style=\"position:relative;\"><a href=\"#6-tips-to-secure-your-email-address-on-a-website\" aria-label=\"6 tips to secure your email address on a website permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6 Tips to Secure Your Email Address on a Website</h2>\n<h3 id=\"1-hide-your-email-address-while-logging-in\" style=\"position:relative;\"><a href=\"#1-hide-your-email-address-while-logging-in\" aria-label=\"1 hide your email address while logging in permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. Hide your email address while logging in.</h3>\n<p>One of the major mistakes committed by beginners is that they display their email address. If you are tensed and stressed about online hackers and threats, there is one solution you can always opt for. </p>\n<p>You can always avoid listing your email address on various vague websites. Instead, you can use contact information through which genuine users can contact you.</p>\n<h3 id=\"2-obfuscate-your-email-address\" style=\"position:relative;\"><a href=\"#2-obfuscate-your-email-address\" aria-label=\"2 obfuscate your email address permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. Obfuscate your email address.</h3>\n<p>Add an obfuscate plugin puzzle to your email address so hackers cannot identify it. With the help of such plugins, you can replace your email address with codes. These plugins secure your email address from hackers and do not affect the user's usability.  </p>\n<h3 id=\"3-use-a-password-manager\" style=\"position:relative;\"><a href=\"#3-use-a-password-manager\" aria-label=\"3 use a password manager permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. Use a password manager.</h3>\n<p>Use a reliable password manager to change and replace all your passwords with solid, unique ones. We cannot sufficiently stress the importance of using strong passwords to secure your email address.</p>\n<p>Hackers use <a href=\"https://www.loginradius.com/blog/identity/2019/09/prevent-credential-stuffing-attacks/\">credential stuffing</a> where they literally jam previously stolen usernames and passwords to break into accounts on various services. </p>\n<p>This is possible because a huge proportion of online users still use the same username and passwords across multiple accounts.</p>\n<p><a href=\"https://www.loginradius.com/resource/ebook/buyers-guide-to-multi-factor-authentication/\"><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAABaElEQVQY002QTUsCYRSFJUjHd8Y0TSpkFMaPzG/wY2Yc09TRIi2oFkUWBO0KrE07c9OqX1KbFrWJIoJo5aZlixb9ldOdMbXFgct77vvce67FHinBEFtaAR8tQyDxVDPj7c8biQsVweI1zCnb8KTqsCd0cNEKuLAGzvBJlhHMHa/AEVbBpAIckSK8aR3uRBWu+Kr5wQSGi+CTDYjVfcT1PTB5B7ZkE2zsa0OgUUhKC/JGB6naLgK5NQTy6+BDCmaWy+QPe4wEotyCL7cOb6YBX5b6lDbcKX081DIq5tN1iNkm/NTsiZUxGy1BCCpwxirjyNagSp/r8KubBG5DJNgC9ZuR/wONyY6IhmkxC0Z3sgbyECgek2QTKNCWlsUMzno3+Pr+wf3TG24fnnH3+IL3wSdePwZw0XmsweIE6KSNbJIKe0gjqAqOYEyabDgVKEDeOsYpQQ/P+zjo9tDpXuHk8hpHF31zqI1Yv+SkwLSl98KVAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"buyer-guide-to-multi-factor-authentication-ebook\"\n        title=\"buyer-guide-to-multi-factor-authentication-ebook\"\n        src=\"/static/dce0b5caab393383c0c906c5653faa64/e5715/buyer-guide-to-multi-factor-authentication-ebook.png\"\n        srcset=\"/static/dce0b5caab393383c0c906c5653faa64/a6d36/buyer-guide-to-multi-factor-authentication-ebook.png 650w,\n/static/dce0b5caab393383c0c906c5653faa64/e5715/buyer-guide-to-multi-factor-authentication-ebook.png 768w,\n/static/dce0b5caab393383c0c906c5653faa64/63ff0/buyer-guide-to-multi-factor-authentication-ebook.png 2887w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></a></p>\n<h3 id=\"4-use-two-factor-authentication-or-mfa-wherever-possible\" style=\"position:relative;\"><a href=\"#4-use-two-factor-authentication-or-mfa-wherever-possible\" aria-label=\"4 use two factor authentication or mfa wherever possible permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. Use two-factor authentication or MFA, wherever possible.</h3>\n<p>When you set up your account passwords, look out for <a href=\"https://www.loginradius.com/blog/identity/2021/01/how-to-setup-2fa-in-online-accounts/\">two-factor authentication (2FA)</a>/ MFA as well. They are additional security layers that you can apply to prevent resets of unauthorized passwords significantly. </p>\n<p>Whenever a hacker attempts to break into your email, you are notified and control the authority to accept or reject such attempts. </p>\n<h3 id=\"5-replace-your-email-address\" style=\"position:relative;\"><a href=\"#5-replace-your-email-address\" aria-label=\"5 replace your email address permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. Replace your email address.</h3>\n<p>If you are not satisfied with any of the above solutions to secure your email address, you can always replace it with \"\". This would take the user directly to your contact page when they click on the email. This not only prevents tons of spam but also protects you from hackers. </p>\n<h3 id=\"6-prevent-email-harvesting\" style=\"position:relative;\"><a href=\"#6-prevent-email-harvesting\" aria-label=\"6 prevent email harvesting permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. Prevent email harvesting.</h3>\n<p>The following techniques can be used to prevent email harvesting:</p>\n<ul>\n<li>Convert your email address into an image. </li>\n<li>Merge your email address by changing the \"@\" sign to \"at\" and the \".\" sign to \"dot.\"</li>\n<li>Use the email contact form wherever possible.</li>\n<li>Use email obfuscation in JavaScript. The email address will appear scrambled, encoded, or obfuscated in the source code. </li>\n<li>Use HTML for email address obfuscation. </li>\n<li>Prompt users to enter the correct CAPTCHA before revealing the email address. </li>\n<li>Using a spider trap to combat email harvesting spiders.</li>\n<li>Conduct mail server monitoring. This approach can be applied to the email server of the recipient. It dismisses all email addresses from any sender that specifies more than one invalid recipient address as invalid.</li>\n</ul>\n<h2 id=\"conclusion\" style=\"position:relative;\"><a href=\"#conclusion\" aria-label=\"conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Conclusion</h2>\n<p><a href=\"https://www.loginradius.com/blog/identity/2020/12/bot-attacks/\">Harvesting bots</a> are here to stay; thus, you must take appropriate measures to secure your email address. You can implement the above methods so that you don't become a victim of spammers and hackers in the long run. </p>\n<p>Although it may take a while to get the hang of them, the results are worth spending time on. </p>\n<p><a href=\"https://www.loginradius.com/book-a-demo/\"><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAABdElEQVQY002RO0/CUBzFG6PtbZWHCAmRmBB5P8vDII9SSC0omog4oAEGjZMO6OKEuLjoJ2Fx0cSBwUQnXZxcHPwux38LJA7nNvfec8+5v1tOCCiwpbbhye2BxbYgBMtgIRVioDRRsARGXxZUzLlEHmehBaesQ4rrEMPViYf2DR9nDGKkChbVICVqsMt1WJI1sHCFwhUsUIFohJH49TxECvRUjhDW2mAbB5iP6hB8hUkhiRPN5KIZYJdrsEYrcCSpmQqMm6/m9ylUhSulY7N5ivROB3L9GOlGF3Ktbc4zuz341UPw/uIk0ESbBjoSGlYIx8BfzjSwVmyCEYEUUmCPa3Bnd+hwC75yC95S05SxbolU/iEbOCFCpDexEfIioTNCNd6Tp6IlMnNuGeeDe3z//OLx5RWj5zFGT2O8fXxh/P4Ja6w6vSEFCnTIlW2YiDzhzX7ATFKojDlvjpBPcDF4QPdyiG5/iE7/BmfXd+hd3VKpCoG8fzxWw2+c+yTpAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"book-a-demo-loginradius\"\n        title=\"book-a-demo-loginradius\"\n        src=\"/static/fcc4c4b5dc38cc4528f99d09480f4eb2/e5715/book-a-demo-loginradius.png\"\n        srcset=\"/static/fcc4c4b5dc38cc4528f99d09480f4eb2/a6d36/book-a-demo-loginradius.png 650w,\n/static/fcc4c4b5dc38cc4528f99d09480f4eb2/e5715/book-a-demo-loginradius.png 768w,\n/static/fcc4c4b5dc38cc4528f99d09480f4eb2/63ff0/book-a-demo-loginradius.png 2887w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></a></p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"January 22, 2021","updated_date":null,"description":"Harvesting bots are here to stay. Luckily, there are a few ways to hide your email address from spammers and hackers who constantly mine for the same. One way is through email harvesting. Let's talk about what it is and then explore the various ways to secure your email address.","title":"How to secure an email address on your website","tags":["all, Security"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.7857142857142858,"src":"/static/b6b491c10267c056d5f47298092a1c5b/14b42/secure-email-address-website.jpg","srcSet":"/static/b6b491c10267c056d5f47298092a1c5b/f836f/secure-email-address-website.jpg 200w,\n/static/b6b491c10267c056d5f47298092a1c5b/2244e/secure-email-address-website.jpg 400w,\n/static/b6b491c10267c056d5f47298092a1c5b/14b42/secure-email-address-website.jpg 800w,\n/static/b6b491c10267c056d5f47298092a1c5b/47498/secure-email-address-website.jpg 1200w,\n/static/b6b491c10267c056d5f47298092a1c5b/ec6c5/secure-email-address-website.jpg 1280w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Rakesh Soni","github":"oyesoni","avatar":"rakesh-soni.jpg"}}}},{"node":{"excerpt":"In this article, we will address how to perform basic query operations in MongoDB. We are producing data at an unparalleled pace now…","fields":{"slug":"/engineering/basic-query-operations-in-mongodb/"},"html":"<p>In this article, we will address how to perform basic query operations in MongoDB. We are producing data at an unparalleled pace now following the global spread of the internet. Since it will require us to collect/request the required data from the database to conduct some kind of analysis, it is of utmost importance that we choose the right tool to query the data.</p>\n<p>This is where MongoDB comes in, specifically. MongoDB is an unstructured database which, in the form of documents, stores data. In addition, MongoDB is very effective in <a href=\"https://www.loginradius.com/blog/engineering/live-data-migration-mongodb/\">handling enormous amounts of data</a> and is the most commonly used NoSQL database as it provides rich query language and versatile and easy data access.</p>\n<h2 id=\"create-a-sample-database\" style=\"position:relative;\"><a href=\"#create-a-sample-database\" aria-label=\"create a sample database permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Create a Sample Database</h2>\n<p>Before the start, we will create a sample DB with some sample data to perform all operations.</p>\n<p>We will create a database with name <em>myDB</em> and will create a collection with name <em>orders</em>. For this, the statement would be as follows.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt; use myDB</span>\n<span class=\"grvsc-line\">&gt; db.createCollection(&quot;orders&quot;)</span>\n<span class=\"grvsc-line\">&gt;</span></code></pre>\n<p><em>MongoDB doesn't use the rows and columns. It stores the data in a document format. A collection is a group of documents.</em></p>\n<p>You can check all collections in a database by using the following statement.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt; use myDB</span>\n<span class=\"grvsc-line\">&gt;show collections</span>\n<span class=\"grvsc-line\">orders</span>\n<span class=\"grvsc-line\">system.indexes</span>\n<span class=\"grvsc-line\">&gt;</span></code></pre>\n<p>Let's insert some documents by using the following statement.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt; db.orders.insert([</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;abc&quot;,</span>\n<span class=\"grvsc-line\">\t\tAddress:{&quot;City&quot;:&quot;Jaipur&quot;,&quot;Country&quot;:&quot;India&quot;},</span>\n<span class=\"grvsc-line\">\t\tPaymentMode&quot;:&quot;Card&quot;,</span>\n<span class=\"grvsc-line\">\t\tEmail:&quot;abc@mail.in&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderTotal: 1000.00,</span>\n<span class=\"grvsc-line\">\t\tOrderItems:[</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;notebook&quot;,&quot;Price&quot;:&quot;150.00&quot;,&quot;Qty&quot;:10},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;paper&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;journal&quot;,&quot;Price&quot;:&quot;200.00&quot;,&quot;Qty&quot;:2},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;postcard&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:500}</span>\n<span class=\"grvsc-line\">\t\t]\t\t</span>\n<span class=\"grvsc-line\">\t},</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;xyz&quot;,</span>\n<span class=\"grvsc-line\">\t\tAddress:{&quot;City&quot;:&quot;Delhi&quot;,&quot;Country&quot;:&quot;India&quot;},</span>\n<span class=\"grvsc-line\">\t\tPaymentMode&quot;:&quot;Cash&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderTotal: 800.00,</span>\n<span class=\"grvsc-line\">\t\tOrderItems:[</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;notebook&quot;,&quot;Price&quot;:&quot;150.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;paper&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;postcard&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:500}</span>\n<span class=\"grvsc-line\">\t\t]\t\t</span>\n<span class=\"grvsc-line\">\t},</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;ron&quot;,</span>\n<span class=\"grvsc-line\">\t\tAddress:{&quot;City&quot;:&quot;New York&quot;,&quot;Country&quot;:&quot;USA&quot;},</span>\n<span class=\"grvsc-line\">\t\tPaymentMode&quot;:&quot;Card&quot;,</span>\n<span class=\"grvsc-line\">\t\tEmail:&quot;ron@mail.com&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderTotal: 800.00,</span>\n<span class=\"grvsc-line\">\t\tOrderItems:[</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;notebook&quot;,&quot;Price&quot;:&quot;150.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;postcard&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:00}</span>\n<span class=\"grvsc-line\">\t\t]\t\t</span>\n<span class=\"grvsc-line\">\t}</span>\n<span class=\"grvsc-line\">])</span></code></pre>\n<p><em>A document is the equivalent of an RDBMS row. It doesn't need to have the same schema in each document. It means a document might not have any field that doesn't have any value.</em></p>\n<h2 id=\"query-documents\" style=\"position:relative;\"><a href=\"#query-documents\" aria-label=\"query documents permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Query Documents</h2>\n<h3 id=\"find-method\" style=\"position:relative;\"><a href=\"#find-method\" aria-label=\"find method permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>find() method</h3>\n<p>You need to use the find() method to query documents from MongoDB collections. The following statement will retrieve all documents from the collection.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"3\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt; db.orders.find()</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607534c&quot;)</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;abc&quot;,</span>\n<span class=\"grvsc-line\">\t\tAddress:{&quot;City&quot;:&quot;Jaipur&quot;,&quot;Country&quot;:&quot;India&quot;},</span>\n<span class=\"grvsc-line\">\t\tPaymentMode&quot;:&quot;Card&quot;,</span>\n<span class=\"grvsc-line\">\t\tEmail:&quot;abc@mail.com&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderTotal: 1000.00,</span>\n<span class=\"grvsc-line\">\t\tOrderItems:[</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;notebook&quot;,&quot;Price&quot;:&quot;150.00&quot;,&quot;Qty&quot;:10},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;paper&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;journal&quot;,&quot;Price&quot;:&quot;200.00&quot;,&quot;Qty&quot;:2},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;postcard&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:500}</span>\n<span class=\"grvsc-line\">\t\t]\t\t</span>\n<span class=\"grvsc-line\">\t},</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607544c&quot;),</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;xyz&quot;,</span>\n<span class=\"grvsc-line\">\t\tAddress:{&quot;City&quot;:&quot;Delhi&quot;,&quot;Country&quot;:&quot;India&quot;},</span>\n<span class=\"grvsc-line\">\t\tPaymentMode&quot;:&quot;Cash&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderTotal: 800.00,</span>\n<span class=\"grvsc-line\">\t\tOrderItems:[</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;notebook&quot;,&quot;Price&quot;:&quot;150.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;paper&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;postcard&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:500}</span>\n<span class=\"grvsc-line\">\t\t]</span>\n<span class=\"grvsc-line\">\t},</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607644c&quot;),</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;ron&quot;,</span>\n<span class=\"grvsc-line\">\t\tAddress:{&quot;City&quot;:&quot;New York&quot;,&quot;Country&quot;:&quot;USA&quot;},</span>\n<span class=\"grvsc-line\">\t\tPaymentMode&quot;:&quot;Card&quot;,</span>\n<span class=\"grvsc-line\">\t\tEmail:&quot;ron@mail.com&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderTotal: 600.00,</span>\n<span class=\"grvsc-line\">\t\tOrderItems:[</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;notebook&quot;,&quot;Price&quot;:&quot;150.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;postcard&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:00}</span>\n<span class=\"grvsc-line\">\t\t]</span>\n<span class=\"grvsc-line\">\t}</span>\n<span class=\"grvsc-line\">&gt;</span></code></pre>\n<h3 id=\"projection\" style=\"position:relative;\"><a href=\"#projection\" aria-label=\"projection permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Projection</h3>\n<p>If you want to fetch only selected fields then you can use the projection. Following statement will fetch only <em>Customer</em> and <em>Email</em> field.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"4\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt; db.orders.find( { }, { Customer: 1, Email: 1 })</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607534c&quot;)</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;abc&quot;,</span>\n<span class=\"grvsc-line\">\t\tEmail:&quot;abc@mail.com&quot;</span>\n<span class=\"grvsc-line\">\t},</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607544c&quot;),</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;xyz&quot;\t\t</span>\n<span class=\"grvsc-line\">\t},</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607644c&quot;),</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;ron&quot;,</span>\n<span class=\"grvsc-line\">\t\tEmail:&quot;ron@mail.com&quot;\t\t</span>\n<span class=\"grvsc-line\">\t}</span>\n<span class=\"grvsc-line\">&gt;</span></code></pre>\n<h3 id=\"filter-the-documents-by-specifying-a-condition\" style=\"position:relative;\"><a href=\"#filter-the-documents-by-specifying-a-condition\" aria-label=\"filter the documents by specifying a condition permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Filter the Documents by Specifying a Condition</h3>\n<p>Now we will learn how we can fetch the documents that match a specified condition. MongoDB provides many comparison operators for this.</p>\n<h4 id=\"1-eq-operator\" style=\"position:relative;\"><a href=\"#1-eq-operator\" aria-label=\"1 eq operator permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. $eq Operator</h4>\n<p>The $eq operator checks the equality of the field value with the specified value. To fetch the order where <em>PaymentMode</em> is 'Card' you can use the following statement</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"5\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.orders.find( { PaymentMode: { $eq: &quot;Card&quot; } } )</span></code></pre>\n<p><em>This query can be written also like below</em></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"6\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.orders.find( { PaymentMode: &quot;Card&quot; } )</span></code></pre>\n<p><em>A similar SQL statement would be as follows</em></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"7\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">SELECT * FROM orders WHERE PaymentMode=&quot;Card&quot;</span></code></pre>\n<p><strong>Example</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"8\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.orders.find( { PaymentMode: &quot;Card&quot; }, { Customer: 1, PaymentMode: 1 } )</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607534c&quot;)</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;abc&quot;,</span>\n<span class=\"grvsc-line\">\t\tPaymentMode&quot;:&quot;Card&quot;\t\t\t\t</span>\n<span class=\"grvsc-line\">\t},</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607644c&quot;),</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;ron&quot;,</span>\n<span class=\"grvsc-line\">\t\tPaymentMode&quot;:&quot;Card&quot;</span>\n<span class=\"grvsc-line\">\t}</span>\n<span class=\"grvsc-line\">&gt;</span></code></pre>\n<p><strong>$eq Operator with embedded document</strong></p>\n<p>You may have noticed that we inserted an embedded document <em>Address</em> in the <em>Orders</em> collection. If you want to fetch the order where <em>Country</em> is 'India' you can use a dot notation like the following statement.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"9\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.Orders.find( { &quot;Address.Country&quot;: { $eq: &quot;India&quot; } } )</span></code></pre>\n<p><em>This query can be written also like below</em></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"10\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.Orders.find( { &quot;Address.Country&quot;:&quot;India&quot; } )</span></code></pre>\n<p><strong>Example</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"11\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.Orders.find( { &quot;Address.Country&quot;: { $eq: &quot;India&quot; } } , { Customer: 1, Address: 1 })</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607534c&quot;)</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;abc&quot;,</span>\n<span class=\"grvsc-line\">\t\tAddress:{&quot;City&quot;:&quot;Jaipur&quot;,&quot;Country&quot;:&quot;India&quot;}</span>\n<span class=\"grvsc-line\">\t},</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607544c&quot;),</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;xyz&quot;,</span>\n<span class=\"grvsc-line\">\t\tAddress:{&quot;City&quot;:&quot;Delhi&quot;,&quot;Country&quot;:&quot;India&quot;}</span>\n<span class=\"grvsc-line\">\t}</span>\n<span class=\"grvsc-line\">&gt;</span></code></pre>\n<p><strong>$eq Operator with array</strong></p>\n<p>$eq operator will retrieve all the documents if the specified condition is true for any item in an array. We have an <em>OrderItems</em> array in the document. If you want to filter the documents where 'paper' were also ordered then the statement would be as follows.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"12\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.Orders.find( { &quot;OrderItems.ItemName&quot;: { $eq: &quot;paper&quot; } } )</span></code></pre>\n<p><em>This query can be written also like below</em></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"13\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.Orders.find( { &quot;OrderItems.ItemName&quot;: &quot;paper&quot;  } )</span></code></pre>\n<p><strong>Example</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"14\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.Orders.find( { &quot;OrderItems.ItemName&quot;: { $eq: &quot;paper&quot; } } , { Customer: 1, OrderItems: 1 })</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607534c&quot;)</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;abc&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderItems:[</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;notebook&quot;,&quot;Price&quot;:&quot;150.00&quot;,&quot;Qty&quot;:10},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;paper&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;journal&quot;,&quot;Price&quot;:&quot;200.00&quot;,&quot;Qty&quot;:2},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;postcard&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:500}</span>\n<span class=\"grvsc-line\">\t\t]\t\t</span>\n<span class=\"grvsc-line\">\t},</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607544c&quot;),</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;xyz&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderItems:[</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;notebook&quot;,&quot;Price&quot;:&quot;150.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;paper&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;postcard&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:500}</span>\n<span class=\"grvsc-line\">\t\t]</span>\n<span class=\"grvsc-line\">\t}</span>\n<span class=\"grvsc-line\">&gt;</span></code></pre>\n<h4 id=\"2-gt-operator\" style=\"position:relative;\"><a href=\"#2-gt-operator\" aria-label=\"2 gt operator permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. $gt Operator</h4>\n<p>You can use the $gt operator to retrieve the documents where a field’s value is greater than the specified value. The following statement will fetch the documents where <em>OrderTotal</em> is greater than 800.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"15\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.orders.find( { OrderTotal: { $gt: 800.00 } } )</span></code></pre>\n<p><em>A similar SQL statement would be as follows</em></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"16\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">SELECT * FROM orders WHERE OrderTotal&gt;800.00</span></code></pre>\n<p><strong>Example</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"17\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.Orders.find( { &quot;OrderTotal&quot;: { $gt: 800.00 } } , { Customer: 1, OrderTotal: 1 })</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607534c&quot;)</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;abc&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderTotal: 1000.00</span>\n<span class=\"grvsc-line\">\t}</span>\n<span class=\"grvsc-line\">&gt;</span></code></pre>\n<h4 id=\"3-gte-operator\" style=\"position:relative;\"><a href=\"#3-gte-operator\" aria-label=\"3 gte operator permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. $gte Operator</h4>\n<p>You can use the $gte operator to retrieve the documents where a field’s value is greater than or equal to the specified value. The following statement will fetch the documents where <em>OrderTotal</em> is greater than or equal to 800.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"18\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.orders.find( { OrderTotal: { $gte: 800.00 } } )</span></code></pre>\n<p><em>A similar SQL statement would be as follows</em></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"19\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">SELECT * FROM orders WHERE OrderTotal&gt;=800.00</span></code></pre>\n<p><strong>Example</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"20\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.Orders.find( { &quot;OrderTotal&quot;: { $gte: 800.00 } } , { Customer: 1, OrderTotal: 1 })</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607534c&quot;)</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;abc&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderTotal: 1000.00</span>\n<span class=\"grvsc-line\">\t},</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607544c&quot;),</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;xyz&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderTotal: 800.00</span>\n<span class=\"grvsc-line\">\t}</span>\n<span class=\"grvsc-line\">&gt;</span></code></pre>\n<h4 id=\"4-lt-operator\" style=\"position:relative;\"><a href=\"#4-lt-operator\" aria-label=\"4 lt operator permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. $lt Operator</h4>\n<p>You can use the $lt operator to retrieve the documents where a field’s value is less than the specified value. The following statement will fetch the documents where <em>OrderTotal</em> is less than 800.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"21\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.orders.find( { OrderTotal: { $lt: 800.00 } } )</span></code></pre>\n<p><em>A similar SQL statement would be as follows</em></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"22\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">SELECT * FROM orders WHERE OrderTotal&lt;800.00</span></code></pre>\n<p><strong>Example</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"23\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.Orders.find( { &quot;OrderTotal&quot;: { $lt: 800.00 } } , { Customer: 1, OrderTotal: 1 })</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607644c&quot;),</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;ron&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderTotal: 600.00</span>\n<span class=\"grvsc-line\">\t}</span>\n<span class=\"grvsc-line\">&gt;</span></code></pre>\n<h4 id=\"4-lte-operator\" style=\"position:relative;\"><a href=\"#4-lte-operator\" aria-label=\"4 lte operator permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. $lte Operator</h4>\n<p>You can use the $lte operator to retrieve the documents where a field’s value is less than or equal to the specified value. Following statement will fetch the documents where <em>OrderTotal</em> is less than or equal to 800.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"24\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.orders.find( { OrderTotal: { $lte: 800.00 } } )</span></code></pre>\n<p><em>A similar SQL statement would be as follows</em></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"25\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">SELECT * FROM orders WHERE OrderTotal&lt;=800.00</span></code></pre>\n<p><strong>Example</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"26\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.Orders.find( { &quot;OrderTotal&quot;: { $lte: 800.00 } } , { Customer: 1, OrderTotal: 1 })</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607544c&quot;),</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;xyz&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderTotal: 800.00</span>\n<span class=\"grvsc-line\">\t},</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607644c&quot;),</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;ron&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderTotal: 600.00</span>\n<span class=\"grvsc-line\">\t}</span>\n<span class=\"grvsc-line\">&gt;</span></code></pre>\n<h4 id=\"5-ne-operator\" style=\"position:relative;\"><a href=\"#5-ne-operator\" aria-label=\"5 ne operator permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. $ne Operator</h4>\n<p>You can use the $ne operator to retrieve the documents where a field’s value is not equal to the specified value.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"27\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.orders.find( { PaymentMode: { $ne: &quot;Card&quot; } } )</span></code></pre>\n<p><em>A similar SQL statement would be as follows</em></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"28\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">SELECT * FROM orders WHERE PaymentMode != &quot;Card&quot;</span></code></pre>\n<p><strong>Example</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"29\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.Orders.find( { &quot;PaymentMode&quot;: { $ne: &quot;Card&quot; } } , { Customer: 1, PaymentMode: 1 })</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607544c&quot;),</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;xyz&quot;,</span>\n<span class=\"grvsc-line\">\t\tPaymentMode&quot;:&quot;Cash&quot;</span>\n<span class=\"grvsc-line\">\t}</span>\n<span class=\"grvsc-line\">&gt;</span></code></pre>\n<h4 id=\"6-in-operator\" style=\"position:relative;\"><a href=\"#6-in-operator\" aria-label=\"6 in operator permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. $in Operator</h4>\n<p>You can use the $in operator to retrieve the documents where a field’s value is equal to any value in the specified array.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"30\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.orders.find( { OrderItems.ItemName: { $in: [&quot;journal&quot;,&quot;paper&quot;] } } )</span></code></pre>\n<p><strong>Example</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"31\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.Orders.find( { OrderItems.ItemName: { $in: [&quot;journal&quot;,&quot;paper&quot;] } } , { Customer: 1, OrderItems: 1 })</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607534c&quot;)</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;abc&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderItems:[</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;notebook&quot;,&quot;Price&quot;:&quot;150.00&quot;,&quot;Qty&quot;:10},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;paper&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;journal&quot;,&quot;Price&quot;:&quot;200.00&quot;,&quot;Qty&quot;:2},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;postcard&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:500}</span>\n<span class=\"grvsc-line\">\t\t]\t\t</span>\n<span class=\"grvsc-line\">\t},</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607544c&quot;),</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;xyz&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderItems:[</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;notebook&quot;,&quot;Price&quot;:&quot;150.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;paper&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;postcard&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:500}</span>\n<span class=\"grvsc-line\">\t\t]</span>\n<span class=\"grvsc-line\">\t}</span>\n<span class=\"grvsc-line\">&gt;</span></code></pre>\n<h4 id=\"7-nin-operator\" style=\"position:relative;\"><a href=\"#7-nin-operator\" aria-label=\"7 nin operator permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7. $nin Operator</h4>\n<p>You can use the $nin operator to retrieve the documents where a field’s value is not equal to any value in the specified array. It will also select the documents where the field does not exist.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"32\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.orders.find( { OrderItems.ItemName: { $nin: [&quot;journal&quot;,&quot;paper&quot;] } } )</span></code></pre>\n<p><strong>Example</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"33\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.Orders.find( { OrderItems.ItemName: { $nin: [&quot;journal&quot;,&quot;paper&quot;] } } , { Customer: 1, OrderItems: 1 })</span>\n<span class=\"grvsc-line\">\t{</span>\n<span class=\"grvsc-line\">\t\t&quot;_id&quot; : ObjectId(&quot;5dd4e2cc0821d3b44607644c&quot;),</span>\n<span class=\"grvsc-line\">\t\tCustomer: &quot;ron&quot;,</span>\n<span class=\"grvsc-line\">\t\tOrderItems:[</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;notebook&quot;,&quot;Price&quot;:&quot;150.00&quot;,&quot;Qty&quot;:5},</span>\n<span class=\"grvsc-line\">\t\t\t{&quot;ItemName&quot;:&quot;postcard&quot;,&quot;Price&quot;:&quot;10.00&quot;,&quot;Qty&quot;:00}</span>\n<span class=\"grvsc-line\">\t\t]</span>\n<span class=\"grvsc-line\">\t}</span>\n<span class=\"grvsc-line\">&gt;</span></code></pre>\n<h3 id=\"indexing\" style=\"position:relative;\"><a href=\"#indexing\" aria-label=\"indexing permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Indexing</h3>\n<p>We know that <a href=\"https://www.loginradius.com/blog/engineering/index-in-mongodb/\">indexing is very important</a> if we are performing the queries on a large database. Without indexing execution of a query can be expensive. We can add a simple ascending index on a single field by using the following statement.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"34\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">&gt;db.Orders.createIndex({&quot;Customer&quot;:1})</span></code></pre>\n<p>MongoDB creates a unique index on ‘_id’ field by default. A unique index will prevent insertion of two documents with the same value for that field. If you want to create a unique index then the statement would be as follows.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"35\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">db.Orders.createIndex( { &quot;OrderId&quot;: 1 }, { unique: true } )</span></code></pre>\n<h2 id=\"conclusion\" style=\"position:relative;\"><a href=\"#conclusion\" aria-label=\"conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Conclusion</h2>\n<p>I hope you learned something new today, If you want to learn few more stuff on MongoDB, here is an interesting article on <a href=\"https://www.loginradius.com/blog/engineering/self-hosted-mongo/\">Self-Hosted MongoDB</a> I also invite you to try stuff on your own and share your experience in the comment section. Furthermore, if you face any problems with any of the above definitions, please feel free to ask me in the comments below.</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n  .dark-default-dark {\n    background-color: #1E1E1E;\n    color: #D4D4D4;\n  }\n</style>","frontmatter":{"date":"January 20, 2021","updated_date":null,"description":null,"title":"How to Perform Basic Query Operations in MongoDB","tags":["MongoDB"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5037593984962405,"src":"/static/4baf4f017625700154de23531c7ef2a8/ee604/coverImage.png","srcSet":"/static/4baf4f017625700154de23531c7ef2a8/69585/coverImage.png 200w,\n/static/4baf4f017625700154de23531c7ef2a8/497c6/coverImage.png 400w,\n/static/4baf4f017625700154de23531c7ef2a8/ee604/coverImage.png 800w,\n/static/4baf4f017625700154de23531c7ef2a8/f3583/coverImage.png 1200w,\n/static/4baf4f017625700154de23531c7ef2a8/5707d/coverImage.png 1600w,\n/static/4baf4f017625700154de23531c7ef2a8/eeb1b/coverImage.png 1920w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Anil Gupta","github":"anilswm","avatar":null}}}},{"node":{"excerpt":"For your clients, a positive onboarding experience confirms that they have made the right choice. It often, finally, allows you to keep them…","fields":{"slug":"/growth/user-onboarding-tools/"},"html":"<p>For your clients, a positive onboarding experience confirms that they have made the right choice. It often, finally, allows you to keep them.</p>\n<p>The good thing is that your clients already love you, and they already trust your stuff, which is why they purchased it. Keeping it that way is your job.</p>\n<p>By ensuring that their experience with your product is as good as your sales process, you can do this and fulfill the promises made in your marketing activities. Basically, from the first interaction point through the post-purchase stage, you want to create a <a href=\"https://www.loginradius.com/customer-experience-solutions/\">smooth customer experience</a>.</p>\n<p>Thankfully, there are several tools to help you make the offer more convenient for consumers. Here are some of my favorite onboarding tools, ranging from email to demos, that span a range of uses:</p>\n<p><strong><em>You can find the top 27 user onboarding tools for your SaaS enterprise in this list.</em></strong></p>\n<h2 id=\"user-onboarding-tools\" style=\"position:relative;\"><a href=\"#user-onboarding-tools\" aria-label=\"user onboarding tools permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>User Onboarding Tools:</h2>\n<p>Tool #1: AppCues</p>\n<p>Tool #2: DIY with JavaScript</p>\n<p>Tool #3: LoginRadius Single sign-on</p>\n<p>Tool #4: Intercom</p>\n<p>Tool #5: Mailjet</p>\n<p>Tool #6: Drip</p>\n<p>Tool #7: Customer.io</p>\n<p>Tool #8: Optimizely</p>\n<p>Tool #9: Omniconvert </p>\n<p>Tool #10: Google Optimize</p>\n<p>Tool #11: VWO</p>\n<p>Tool #12: Amplitude</p>\n<p>Tool #13: Mixpanel</p>\n<p>Tool #14: Feedier</p>\n<p>Tool #15: Qualaroo</p>\n<p>Tool #16: Wootric</p>\n<p>Tool #17: Typeform</p>\n<p>Tool #18: Hotjar</p>\n<p>Tool #19: FullStory</p>\n<p>Tool #20: Freshdesk</p>\n<p>Tool #21: Olark</p>\n<p>Tool #22: Helpscout</p>\n<p>Tool #23: LiveChat</p>\n<p>Tool #24: Zendesk</p>\n<p>Tool #25: Loom</p>\n<p>Tool #26: Inline Manual</p>\n<p>Tool #27: Helpshelf </p>\n<h2 id=\"user-onboarding-tools-for-in-app-experiences\" style=\"position:relative;\"><a href=\"#user-onboarding-tools-for-in-app-experiences\" aria-label=\"user onboarding tools for in app experiences permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>User onboarding tools for in-app experiences</h2>\n<h2 id=\"1-appcues\" style=\"position:relative;\"><a href=\"#1-appcues\" aria-label=\"1 appcues permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. AppCues</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.61538461538461%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABvUlEQVQoz3VRzWsTQRzNn+bNU8GDB4UevPQgol5KCuqhPXhovXhJZUuNUCgUPQWMhSJpq2ijbdpNkyaS7EeSyWY32a/M7mYyOzu746xpaRV8h2HgzXu/93uTgTAyhpbvB4yx5Ar8HkURjeMJmnb7umaM9IGuD7QeAM2WbBgGwYSQJMP+g5kFf3fn3vyt23OPHy68yb3eLRb3Sgfnp8e+2eNshtJYUbt9baBpOuhr7basdoGsdCzb4bQsyWurr8pH5UajURFrYrXGEhr4vofwTEzrF83KafWkIlbPL/YPv3ELNOVIaUVRss9WULpB7I7hp8+l4cgcBwHEUSrm8Wxn7DrQgwGEnm27nhdghJM4mcVfzL74KdZk4JTKrZwgdJqiPSVDD12KwxCFBE0xCiYcKPAnvC3O8Wn8zK0LTxafv8+vL2cfPbh/t3V8oLoTYMNUjDHLb7DNVXZ2OOvp384syywUCu3SjvTu6XZuzcRUVPsDN/2dDHcHPdaRmGMyEjJC/uo8DEPbsmmc+M7w19YSkOpdL9z9Uq5LnVR8Yw6jlP1Jeg1C6Ghkmc7YAm1zX1C/fvheOXspvP149IOzvwE2ht/ShwtMiQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"appcues\"\n        title=\"appcues\"\n        src=\"/static/0c907499e5a5195c94cbb28e98407fbc/e5715/appcues.png\"\n        srcset=\"/static/0c907499e5a5195c94cbb28e98407fbc/a6d36/appcues.png 650w,\n/static/0c907499e5a5195c94cbb28e98407fbc/e5715/appcues.png 768w,\n/static/0c907499e5a5195c94cbb28e98407fbc/ea964/appcues.png 1312w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Without writing a single line of code, create customized user onboarding flows, and increase adoption and retention rates with <a href=\"https://www.appcues.com/\">appcues</a>. Within one dashboard, you can design, publish, and manage your onboarding experience, enabling your users to delve deeper into your platform. Patterns and templates are available, including easy tooltips, full-screen takeovers, slide outs, and in-app alerts.</p>\n<h2 id=\"2-diy-with-javascript\" style=\"position:relative;\"><a href=\"#2-diy-with-javascript\" aria-label=\"2 diy with javascript permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. DIY with JavaScript</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 41.84615384615385%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAAsTAAALEwEAmpwYAAABPElEQVQY0yWR224cIQyG5/1fpU/Qi0i9702vGm2kbKM0yWYOO7MM4DMmng18+mWDbQwMKeO245pgy5RzRWJiDv2GWEJZVdQqIBIBUmjExfKgiIxHEKBEISRFDoREITLDYBFr2po1D73jdncHUr9kuWI/z3KeeQH/3HUq9nGD9ym/TWnM9Yo8V0jC2SQ3KbqnML0NbL5UXcE37MFS25R1THS51p9/f/86/Rm3sgGDODavTaspyBUatO6Du7OYWtCCFn7vsdF7f15f/6dLGJnr0+3fDKtZC9cPIs4HZp6WdcuQCoYWFGmd7SDKqHkBeVnGH48Pp+Wl7iXnElNYospArOO6p8oZNbgVCo0mg0K6AxcyICPswjbNc6nHS6vqkRznrJm7H/3EAIAoLsJMFBLER0WHpRbiu6N6v9kxvgDO2M3zARWlCgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"diy-github\"\n        title=\"diy-github\"\n        src=\"/static/6b6245b1b5a93f218964de240635447a/e5715/diy-github.png\"\n        srcset=\"/static/6b6245b1b5a93f218964de240635447a/a6d36/diy-github.png 650w,\n/static/6b6245b1b5a93f218964de240635447a/e5715/diy-github.png 768w,\n/static/6b6245b1b5a93f218964de240635447a/60fa0/diy-github.png 1315w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Onboarding helps to familiarise new users with an interface. There are several different styles of this, and there is no perfect way of doing it. But you can pick up ideas for your work if you study <a href=\"https://speckyboy.com/onboarding-ui-css-javascript/\">how onboarding sites</a> and apps do.</p>\n<p>There is a wide range of tooltip plugins available to assist you in doing that if you have the time, development tools, and the ability to roll up your sleeves and code your user aboard.</p>\n<p><a href=\"https://github.com/LinkedInAttic/hopscotch\">Hopscotch is a flexible platform</a> that makes it simple for developers to add product tours to their websites, offering a PI to monitor the tour display's rendering and enabling you to track the time's progress. It includes callbacks for meetings, multi-page tours, support for several languages, and lightweight callouts.</p>\n<p>**Intro.js **- Intro.js, a JavaScript tutorial, helps you harness this idea by adding a progress bar into your onboarding flow and allowing users to cross the finish line.</p>\n<p>Just include the CSS and JS files on your page to get started, and you can start doing your tour. Target, placement, title, and content are the basic setup options.</p>\n<h2 id=\"3-seamless-sign-in-experience-with-single-sign-on\" style=\"position:relative;\"><a href=\"#3-seamless-sign-in-experience-with-single-sign-on\" aria-label=\"3 seamless sign in experience with single sign on permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. Seamless Sign-in Experience With Single Sign-On</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 41.53846153846153%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAAsTAAALEwEAmpwYAAABYklEQVQY02MQVNHnV9RlFJbnl1ISklUVklMDkoIyKoLSKoIyqgIyKgLSyiz8Esx84uzCsnzisuzKJiIJbbIpbbwhZQyMZWuAiAGISlYzFMNQCSoqhpEFKxjK1jO0HGRoOcTQuJeBYdIVCJKYc1N2/i2Zebck59wUmX1Dcu5N0dk3RGfdEJ9zAygFQQoLbkvOucHQfxGIGCdcYmDoPQtBKnOuGCy6rjHviub8KzIzL/uuux208Y7f+tvua24pz76sMPuS4pzL2guuqs65wtB7DooY+s5DUfc5lr7z3JMvcky6CCSFp12Sn3NVdtZVkemXOSZd4J0MEmQBK0NogbMY+8+zTrgAVME+8YLA1Eshm+95rrsDRCGb7wtPu8wx8SIXUPOE8wz957FohhrRe56h5xznpIvTL76ZcfH11Auv51x+KzT1EtBCkBSqYnTNUARU13mWofssyJFdwBA5xwg0F0MZAJqa0KO/wgX+AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"loginradius-sso\"\n        title=\"loginradius-sso\"\n        src=\"/static/5530727ec2e8acabac28164525e980b2/e5715/loginradius-sso.png\"\n        srcset=\"/static/5530727ec2e8acabac28164525e980b2/a6d36/loginradius-sso.png 650w,\n/static/5530727ec2e8acabac28164525e980b2/e5715/loginradius-sso.png 768w,\n/static/5530727ec2e8acabac28164525e980b2/e5ca1/loginradius-sso.png 1332w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><a href=\"https://www.loginradius.com/blog/identity/2019/05/what-is-single-sign-on/\">Single sign-on</a> (SSO) is an access control property of several related but independent software systems. To gain access to a linked device, a user logs in with a single ID and password with this house.</p>\n<p>It has always been tedious and time-consuming to fill out lengthy and thorough sign-up and registration forms that no one wants!</p>\n<p>You could add SSO when creating the in-app experience, so your users would have fewer forms to fill out.</p>\n<p><a href=\"https://www.loginradius.com/single-sign-on/\">LoginRadius SSO</a> will not only help you boost your sign-up conversions with easy Sign-on solutions when we talk about user onboarding, but it will also protect your APIs and avoid malicious logins.</p>\n<p>You will reduce the time taken for users to complete the registration process with LoginRadius and securely capture and retain their data.</p>\n<p>LoginRadius supports both programming languages, so it doesn't matter if you have developed your application in C#, Java, or Angular. Due to its simplicity and freemium model, LoginRadius is suitable for small &#x26; medium enterprises, start-up developers, and large enterprises.</p>\n<h2 id=\"user-onboarding-email-tools\" style=\"position:relative;\"><a href=\"#user-onboarding-email-tools\" aria-label=\"user onboarding email tools permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>User onboarding email tools</h2>\n<h2 id=\"4-intercom\" style=\"position:relative;\"><a href=\"#4-intercom\" aria-label=\"4 intercom permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. Intercom</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.76923076923077%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABZUlEQVQoz31QTWvCQBTMb+u9f6KnHr2V9tqTxYInITT2UI8tFCRSRbC0FNpLyCEqMTUG1JKgycZ8qjEfnWRF7KUD+5hd3uzMe4woirquB0GQHcH3fdu21zlCcM/zUC3LAlWUb47j7uv1TqfDoCmO4zRND0rwuECSJPERNptNFEWu56mqqiiKYRhM9hcQHH/0P5i0wMETdbFYjMfj+XyOcTRNm06nqHQu2pAnKjz2zknxutvtRqNRr9drt9utVqvZbHa7XRCe5wVBQNrtdnv4InfGWUcRvWExEMuyDFu0gs9ms8lkQq/D4RBrQ5vrBz+OuxfXBPGCf1FMi5hLYtuEEMdxTNPEeml1CuiG4TvOm9Q/68t3Sxvpc/H1+8fJTaWqalkYJlm2Wq0gQHVdF+uVBoNSqcSyLI1ardVOb6uNJdmL2cen88ur588vOjwGgwwbQsgwDC1CJElCfiqulMvcQ+PVyp1/ASYP6iFDblPjAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"intercom\"\n        title=\"intercom\"\n        src=\"/static/d38df6bf62a38a3fd79ddfb253688dde/e5715/intercom.png\"\n        srcset=\"/static/d38df6bf62a38a3fd79ddfb253688dde/a6d36/intercom.png 650w,\n/static/d38df6bf62a38a3fd79ddfb253688dde/e5715/intercom.png 768w,\n/static/d38df6bf62a38a3fd79ddfb253688dde/71b12/intercom.png 1308w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><a href=\"https://www.intercom.com/\">Intercom</a> tells you who your clients are and what your product is doing. You can also interact with them using in-app and email messages in real-time. Using Intercom implies making educated decisions by asking for input with event-triggered notes at the right time. </p>\n<p>It is simple to embed and convert new users to become active customers, and you can manage all queries in a team inbox with customized responses and timely support options.</p>\n<h2 id=\"5-mailjet\" style=\"position:relative;\"><a href=\"#5-mailjet\" aria-label=\"5 mailjet permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. MailJet</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 512px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 47.65625%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB1klEQVQoz5WRT08TQRjG9+QnMF6xKRUltEtZAQ3pEggkHPgGXo2eNDHqpyDhgCaCwsq2u235ICSFpLRu6Vp6sXHZP7Rdare7OzNbZ8fZ2hiMJ5+8yeSdmd+TZ95hyKCFUOB5HgDAdT0Aoe8D4PtBEJAbwhh7rosCjJsfwvIbt2diQhjyvwqHBI99mTAM6WJ37W632/sRybavNd0wTUvTtKuRTMPodDq2bbfb7d/3/4K175par6uq2mw21VpFVU4v6me0Pa+fV84qJ6XS10bjS7Wq1GoQQjwS+RN77BZGW+SySI43ifKKYHTz8F8xjuMMHIcMhwQhAiGhcwL9n30D9C1FqQmCmJPytCSpEJVcyBeODkWp0biIYARh61J/vnfwVMi+lI+eibkn+8Jbqej44NO+cDf24P70XGKKpRVPJCdi07H4zO07EweCOI6tfGvdevE6+W43cyhzux/jO+/jW9tXritLBW6BX13bXFndyPDr3HyGTT9Oc0vUKCcVR/AQ6de9qmnSZuC5EEXvLFuWg2AuK09OpWcX1lLccmqOn2EXk+wi5WmEvc95OgkmgDQgpICh66cnpUq5bFEj+gVhKGblxL3U7EM+gjk+lV5Kso/GsCD7hPwCQlrO0W+9uO4AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"mailjet\"\n        title=\"mailjet\"\n        src=\"/static/34903f940db22e85622867aaa5598c1d/01e7c/mailjet.png\"\n        srcset=\"/static/34903f940db22e85622867aaa5598c1d/01e7c/mailjet.png 512w\"\n        sizes=\"(max-width: 512px) 100vw, 512px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><a href=\"https://www.mailjet.com/\">Mailjet</a> is an easy-to-use and all-in-one email-sending network. It's excellent for research and cooperation with A/B.</p>\n<p>It enables you to collaborate, target specific users, and create personalized email campaigns with your team. With comprehensive and in-depth analytics and reports, you can also monitor the success of already sent emails.</p>\n<h2 id=\"6-drip\" style=\"position:relative;\"><a href=\"#6-drip\" aria-label=\"6 drip permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. Drip</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 48%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAACB0lEQVQoz22Ry2sTURTGLymoC9f+EWrxr9CFO1fFBy5ctHYjFG1woSJokFa6cKW7LiouIhSbUmihTSVpVbRNrTFpyKtN5pV55DGZyczNzD3nepPGheC3OHAv58f3nXOIaZr9ft/3fddxvF7P8zzXdXu9XhAE/F8x4KYddDToL3AvgZQzIpoYY2EYioqIw7ZhxRDU51CbROkhyo9QngU5ymoPoDwJe1Pw/R7aGVKr1SSpXqlUpLqk67rjOCKCMOFg+9lrjfKSY6QcY9ux9vzCBHwhsDMGWxH4RFCOk5Pj42q1qhuGiNpqtS2raRiG5wccuzR/o/h7s5RPNk6ShnLglqM8cxZ2x+DzGUgQVJaJwPRGw7bt01GFEGEQGyg7vEzTxD260y7HutVXNHfd3DjHdgkkI7BCQF4miqzouqGpmqIqqqlqhiacQeBI4XAcdwhrJgbbEh/Vm9X357WVGUjfZiK28pFQSk8XFtCQtRizB6+R88E4TxOztDgXW/ia+oGVW90EKb574W5t07UJJpybzabTdXzwrEzHvm/78/7oMgLevyJgNR+fn/uwtp7F0jRskk78grp4tb4U8+XyALaHarc6nUY79MK/sA/fLrINwnJ3ufU2qL+mqUu4SvhqhMXJ0Uui/Vwn/D8a3RmlN1h5jMWZMD8F+WleiGLhKeSehL+eefuzfSv7B1B29TSfTEcfAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"drip\"\n        title=\"drip\"\n        src=\"/static/02b46a6e8d3b0ba468e84e085a21cd6c/e5715/drip.png\"\n        srcset=\"/static/02b46a6e8d3b0ba468e84e085a21cd6c/a6d36/drip.png 650w,\n/static/02b46a6e8d3b0ba468e84e085a21cd6c/e5715/drip.png 768w,\n/static/02b46a6e8d3b0ba468e84e085a21cd6c/78958/drip.png 1320w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><a href=\"https://www.drip.com/\">Drip</a> is an onboarding email creation tool. Without going to the promotion channel (if the user uses Gmail), it will send trigger-based emails directly in the inbox.</p>\n<p>Drip helps you to go beyond simple emails and build multiple onboard processes for email automation, multi-channel marketing, and email promotions for users.</p>\n<h2 id=\"7-customerio-paid\" style=\"position:relative;\"><a href=\"#7-customerio-paid\" aria-label=\"7 customerio paid permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7. Customer.io (Paid)</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 42.15384615384615%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAAsTAAALEwEAmpwYAAABoUlEQVQY002Qv0sbcRiH728SLNIYa1ESIxI9E2t+mB9NtFUr0i0YTG2MmmhsTTQazzt78aLJlRxIlpYWHNqh7eDg4tSt0KFLh0IHIfEx382Xlw98Xnjg5ZGsF5hzlLwUR9G8qF7KMoed9FIaY1dmx03eRXaQnJOsC8VPc6n9ee+/Ot+Stp1sOdgZFqTmQRmj7KY0QtHF2yG2HWwNkn3Mej+rdlZspB7yysbSAxLdSIafio9qgNMQ5jMqEQ58aCH0qEglyP6EuBQ9FMZ5I7M2IOCUjWQPUuMpZkTAZ2GsRdQoe34Ow5zNYsxQneNdjOM4elxUJcKG4x5sxXkfpRbC8GEEOZqkKKOFMabRI5Qn2PegBlCnKIySHyJtJ93Hip1UL5IZpBagHqIWpjrFSQDdjxHlJCY+/6q1v5s3F4XbjpRNJzkHGwMCTnaT6EK6PuciQ2MG4wl6x5mM4uZoHHVSOD9fbjczN/XF29wj1u1kenltY3MY9TmfDpCAdot/f/h1yZXFl10+pmkmaLykvkAlJrY6j5XkQ55vNX7+4O9vgXTmDtMSPoetG1GsAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"customer-io\"\n        title=\"customer-io\"\n        src=\"/static/0ee7f8f9faaa22afe6da4b55d8fb228b/e5715/customer-io.png\"\n        srcset=\"/static/0ee7f8f9faaa22afe6da4b55d8fb228b/a6d36/customer-io.png 650w,\n/static/0ee7f8f9faaa22afe6da4b55d8fb228b/e5715/customer-io.png 768w,\n/static/0ee7f8f9faaa22afe6da4b55d8fb228b/0b79a/customer-io.png 1331w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>The <a href=\"https://customer.io/\">Customer.io</a> tool for submitting drip campaigns is a little more costly. It's nice to start onboarding, converting, and keeping your audience for your needs.</p>\n<p>What separates Customer.io from Mailjet and Drip is its ability for every customer to send notifications and messages, and real-time data.</p>\n<h2 id=\"enhance-user-onboarding-with-ab-testing-tools\" style=\"position:relative;\"><a href=\"#enhance-user-onboarding-with-ab-testing-tools\" aria-label=\"enhance user onboarding with ab testing tools permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Enhance user onboarding with A/B testing tools</h2>\n<h2 id=\"8-optimizely\" style=\"position:relative;\"><a href=\"#8-optimizely\" aria-label=\"8 optimizely permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8. Optimizely</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 512px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.67968750000001%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABfklEQVQoz31RXUsCURDdvx1EBEE9hD70IEZrKaJskoopKYRLT76oaa6uimCx+cGmrVvrft6v5ipJ9dA8DGfunRnOOSM4LtMmlmWZjDGEEIYgBNIWwQMhZIMxNNi2k83mxNhls9mEUmD/B6U7QH9U2xCgpoTyv80P/Y5dBzENalvbBQgBTez7BDAfBiaNeqPT6bTbbUVRID+2WqPRiGDoYF6taueT65s4URtLkx2F/cMQPjjF76vNsOd6vW6vr6qDwbCjKP2+2ut2l4sFt2Cm2YU0fpvjqRbU7mOhYbbsMfZ5W7HOk+iX5h1VcIhs7EHa2ClKdG3RD8Ou5NLhp/KDjd1xrqCdiQEfNoxVKpXKZDKyLEuSdC1Juq7zXYTTdqtFp5Jb51O0Lj9P2P6JF03QvWP0qvnQIizm82gkchVPlEp3ohi7EGOz6ZQPBwFwAD548oL1GeZeE8vCjTZambAX08AX4Ih/rwM3DRAhFMylvg9qMKHIh9NzQVuB3E6MvgAiMOxcPLQJ0AAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"optimizely\"\n        title=\"optimizely\"\n        src=\"/static/b52e7f7fcfed217cb69cb3c17e5787fe/01e7c/optimizely.png\"\n        srcset=\"/static/b52e7f7fcfed217cb69cb3c17e5787fe/01e7c/optimizely.png 512w\"\n        sizes=\"(max-width: 512px) 100vw, 512px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>One of the best-known and most common experimentation platforms for SaaS companies is <a href=\"https://www.optimizely.com/\">Optimizely</a>.</p>\n<p>It enables both product and marketing divisions to experiment with each other. You can monitor how many individuals each experiment can see. Then Optimizely can calculate their behavior as a type of different statistics, graphs, and analytics and present it to you.</p>\n<h2 id=\"9-omniconvert\" style=\"position:relative;\"><a href=\"#9-omniconvert\" aria-label=\"9 omniconvert permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9. Omniconvert</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.30769230769231%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABVElEQVQoz42RO0/DMBSF+8MZERIDEwsjC/+gFUgQ+gpV2xQhVagsFFUJTZtX3ZA4fvtiJypdOmDZR5at7/j43laUyx3KEcoJZbgywitKKWOMi1q5UaWUrgdoLZXufKiZL7QULfjHMJjlzZLW5e/cwps4+fKDYBOtozhOs6UfhFFSQ3ZSDpgDUyAbSoNSoNUB9ubvD4NRd+zd993+5DXYRgXGjXdF9Z7AYhm3n7xHd+4M34qS2AtlXeqXo9i8vArWn6vAD7fHYBr2WBcMeuPF2cXN5fXd+dXtd4wLArKOYeGScFTQsqJCCPMvLoSUqvkr41AJKKlMdiRBzJCYq6wEwg6xfxggY3aqTkbDMHF6k4HrdYezjjNtO16aC60PsU1HMC4RQlJK2x7GGk5x67/Zps+Dcf/Fs9OdGmVMHKttGUrTLDOZzYYQWxIleDAZ0XzfZDjZv18bJv0P4fOnmgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"omniconvert\"\n        title=\"omniconvert\"\n        src=\"/static/a75f2c936f9a788383e04187db580e78/e5715/omniconvert.png\"\n        srcset=\"/static/a75f2c936f9a788383e04187db580e78/a6d36/omniconvert.png 650w,\n/static/a75f2c936f9a788383e04187db580e78/e5715/omniconvert.png 768w,\n/static/a75f2c936f9a788383e04187db580e78/4cdc7/omniconvert.png 1327w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><a href=\"https://www.omniconvert.com/\">Omniconvert</a> is a platform for optimizing conversion rates that provides an A/B testing tool and tools for surveying, personalization, overlay, and segmentation. You can run desktop, mobile, and tablet A/B tests using their A/B testing tool. To validate your tests, you can convert winning versions of an A / B test into the control for a future trial and leverage Frequentist or Bayesian statistics.</p>\n<h2 id=\"10-google-optimize\" style=\"position:relative;\"><a href=\"#10-google-optimize\" aria-label=\"10 google optimize permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>10. Google Optimize</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 40.30769230769231%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAAsTAAALEwEAmpwYAAABF0lEQVQY022NPU/CUBSG79/SQambysDm5i9wdfcHuLopRSMkauLOQIxDiUqMk5NYkiLSln7ctPej99J7r1BKo60nT97hPc/JAb7JXCsKJnRmxeF3QnyxAvsidmX4JZEninIFDaQ9gnCagE4ddep4yT7KM6O9S+4Pwv4JvGuQ6z3UXvc52QnQt1CVSw01NTw8Gzi2cXEU6hu4pf2jAX0blanFzU1yexg8nZoPx4Pzhne1Q1u1uGoCy0hLjPtibMj3nvvWdT666rNHR4/JoqyaQP0dobhUnKXYgzZJPMYdD04g9qViQs1LMpBCFSipCKFxhDDClJDhlLyaFMZczFNKGWf8t7yg/FlKmeUynk1280JmkVg3+baYHzSkjcKf5lQLAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"google-optimize\"\n        title=\"google-optimize\"\n        src=\"/static/274e69f580218c17eab26fc5f3716ec4/e5715/google-optimize.png\"\n        srcset=\"/static/274e69f580218c17eab26fc5f3716ec4/a6d36/google-optimize.png 650w,\n/static/274e69f580218c17eab26fc5f3716ec4/e5715/google-optimize.png 768w,\n/static/274e69f580218c17eab26fc5f3716ec4/5f652/google-optimize.png 1302w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><a href=\"https://support.google.com/analytics/answer/12979939\">Google Optimize</a> can be an excellent way for you to A / B test various things if you're at your company's early stage. It's free, and it will meet all your needs at the start.</p>\n<p>Currently, Google Optimize's most extensive feature is its in-depth integration with Google Analytics. This is an essential thing because it helps you to do more detailed targeting, more detailed monitoring, and more advanced tracking of conversions.</p>\n<h2 id=\"11-vwo\" style=\"position:relative;\"><a href=\"#11-vwo\" aria-label=\"11 vwo permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>11. VWO</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 43.23076923076923%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABoklEQVQoz42QzUscMRjG89d48uq/UfAkXrS1IlhE/CrFIngQQXrwJPQkIiJeeiniQVC3aq0fLGvZb11XZ78GddzMTDKZTCYfY3bmsnjyISRPAr83z/sCD2IZ8jAMeSzGmOAiCFjioy5JIS3oPLee6vtp8zgnuQC+jfWhJaXUO+cdo8nk0g0rpUSkZMDbp0V4eauEBNE7pDQolTZPpvn3aC+UInkHCBOfBjo1DZjtorbtesSHjsvCsJsOiM4SpbbXNkd6bv4dxkEEOD7PXF0XUmfpy0y+ePuQK93dVGvp/0WjbiYgpfSxZVEUChEV9jZ2p/seDnYo0Q0IUK4YVaOZLVbua623aVUnarPROjpIPTYt7a1648dgbym1G/GI+QIghLFHEPJcD0OEHOy1oQNt13aQiHvTLVSM+ouFjGptbf3n5Fj/ysrcyZ8LTiKgSb08j7jPtg+RpEzFfybSsJ6ILuRjOru89Hl+YnxxYWxhamC4v1wqAMfBFnSJSyqrv/Pft5q/zjqB49kmEowrIsyG8WluauTrxOi36Y8zXz4MDebL2VcHF+Mixlo/agAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"vwo\"\n        title=\"vwo\"\n        src=\"/static/0834be5ca5798f84d4b034ca5ae66344/e5715/vwo.png\"\n        srcset=\"/static/0834be5ca5798f84d4b034ca5ae66344/a6d36/vwo.png 650w,\n/static/0834be5ca5798f84d4b034ca5ae66344/e5715/vwo.png 768w,\n/static/0834be5ca5798f84d4b034ca5ae66344/71b12/vwo.png 1308w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Trusted by over 4,500 enterprise brands, <a href=\"https://vwo.com/\">VWO</a> is a platform designed specifically for enterprise brands for A/B testing and conversion rate optimization. In their suit, with a drop-and-drop editor, you can create A / B tests, Split URL tests, and multivariate tests.</p>\n<h2 id=\"user-onboarding-tools-for-product-analytics\" style=\"position:relative;\"><a href=\"#user-onboarding-tools-for-product-analytics\" aria-label=\"user onboarding tools for product analytics permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>User Onboarding Tools for Product Analytics</h2>\n<h2 id=\"12-amplitude\" style=\"position:relative;\"><a href=\"#12-amplitude\" aria-label=\"12 amplitude permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>12. Amplitude</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 47.84615384615385%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB+0lEQVQoz01SS2sTURSeH+ePUDcufCx0IYqIUpBicWWxoBZxV0TbhVAIlmotaZI2neZB0qSxmkfjQJOMk8xk5s5937mTiScmCw8fZ3Hv+c757neu0fzp2wMaIiGkZFxwMQ+ZJMn0vyCUSSUJEZ8+dN6+anzduYRDQ0VxpGOt4zieSBVBCZcRX+QZKJcy0lAqlWZCYaoQFphKuDKSfyMgTZIk0hMuNYByBSBMEi6B5rhoK5XpOWMZxVQoaAEZCgzXDzw/QBhTLrwAuT52/RC6MhFxpUHUx+30lWuPV99t9uxgHDLoOGfOyHuZ/Lf00d5BPntcSh+e7OfMrFn2AuwjOvLxrUcvr99byRRbW0fa8gLG2WhMQsoX5EKlli9WC5V6vlg5b3ZyZrl8epY1S5njEkg4qf46rAfNwbR66ZhuoWVTIWPHQx6iIM1wXYoxF+CQkAAwnDIOnjMhwMNIa6sf1C207+128MVpm1t/vBFCi8khQSEJCEcI+z3bGboeJhRhEmICT+YyvujTZpefD2zTag/c0HKGAZ2NJUBeXirfv5u/cyP7Zu1sOp0osCiZzEPpuNvnO7nh8/XWi/fNLwf9jWxlI2M2el3MYKfaWH9de/a09ORhYfvzb1gZ6ISVzwF9QFKt7a6s/bj64Pvtpd2by5urqVS13yCSwb/4C/jOFA3Dr4peAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"amplitude\"\n        title=\"amplitude\"\n        src=\"/static/ea8f24ea463257a3dec4d403ec71a0b1/e5715/amplitude.png\"\n        srcset=\"/static/ea8f24ea463257a3dec4d403ec71a0b1/a6d36/amplitude.png 650w,\n/static/ea8f24ea463257a3dec4d403ec71a0b1/e5715/amplitude.png 768w,\n/static/ea8f24ea463257a3dec4d403ec71a0b1/77abb/amplitude.png 1305w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>With a simple-to-use analytics app and dashboard, <a href=\"https://amplitude.com/\">Amplitude</a> enables you to monitor your data and metrics. The real-time platform tracks the use of your product and statistics from second to second, letting you know when your app crashes, or checkout flows break down.</p>\n<h2 id=\"13-mixpanel\" style=\"position:relative;\"><a href=\"#13-mixpanel\" aria-label=\"13 mixpanel permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>13. Mixpanel</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 512px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 39.6484375%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAAsTAAALEwEAmpwYAAABLUlEQVQY021RTU8CMRDtH/fm0RjjvzDEqPFgJB6MB2PWBQTXr3iASCASdpdtt51+7NQ6uxAEYvMObafz3ptXNs1xkiFoNLYGaCdKIEhlSqnXMNZzaYVyC65KadMCC4mMS5SA2q6ad6BNtUTN22yIHUzdojQyu3r0p0yaCuzynXV+TbFJahuw5uBpUdlVP/M0v3+I4+4g7vSj+Cl5eR88v0aPvSR509rt+GKVc+d305tujogFV4WgaUkXNIAQIss5F0BoSoqXsGmBfXwOx9/89HacLSSZdA6/5tgbYn+Eg5HhpaPZFNDA/8TBKIYoitvXbfRB6SoEvOzgXgv3z/Doys8LP1tgyut4tjotusozh+Hg8PikdRFCgGYqCo9+jqSIFxqTdKPNlmaFYTKd/QIeyMPyLB5LewAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"mixpanel\"\n        title=\"mixpanel\"\n        src=\"/static/997ad1ca2fd2f330228029d84f7d90ea/01e7c/mixpanel.png\"\n        srcset=\"/static/997ad1ca2fd2f330228029d84f7d90ea/01e7c/mixpanel.png 512w\"\n        sizes=\"(max-width: 512px) 100vw, 512px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>A behavioral analytics framework such as <a href=\"https://mixpanel.com/\">Mixpanel</a> can be used to run tests, such as slideouts and tooltips, on the performance of individual UI elements in your user onboarding.</p>\n<p>You can gather accurate information about your product use with Mixpanel, recognize various patterns in the in-app interactions of your customer, set targets, and take steps based on your product analytics.</p>\n<h2 id=\"user-onboarding-tools-for-qualitative-feedback\" style=\"position:relative;\"><a href=\"#user-onboarding-tools-for-qualitative-feedback\" aria-label=\"user onboarding tools for qualitative feedback permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>User Onboarding tools for qualitative feedback</h2>\n<h2 id=\"14-feedier\" style=\"position:relative;\"><a href=\"#14-feedier\" aria-label=\"14 feedier permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>14. Feedier</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 42.76923076923077%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB90lEQVQoz2N4/OTp16/f3r//8PPXr8+fP797//7Xr1+fPn/++fPXhw+fvnz5CpQFgj9//vz68e3X9y9fv3+5cPLZ/i2P////z/Dn77//OMDfv3+A5I0b1wK8XNNjgzwDwu38kqpyE+f118/qbWirLWLYtfLcttX3gYr+AI0Bg79/QQyw5r9Acu++fc4ONq315Sl9xxj8NxSW1h7fuaymNLswK4nh6b23zx5+Byr69w/TZpDmNes32to7TuqftH3G5AQ3j9KazuuXTi5fNHvKpB6GazduXL5y5dKlq+fPXwKiEyfPnDp99tbtu2C3gJw9a+4ifmHJ/q62Tf31ibYGvZ1tN65f3LBm6eQJ3QyvX715/uzF8xcvX758A0TPn7988eLlu/cf4O5obu/RNraZv/nUouXbvf2iuiZOv3TxdG93e11NJcPXb6AA/fHz+9//3//9//Hn708g//OXL79//wbqfP32XVVj56pth9Ycute56FBc8eTpKw4dOHK8pb2joqqG4fOnnz++/371/OvWVfe2rrp/+vALsG///QWHweMnz1p7ppy7dm/TkWud83aGZbXN3nBu6Zrt7V29NQ0tDN++/P758++7Nz8O7Xx6aMeTq+feQgLvH1Tz09rmzkMnz5+69aZj5kZ739S05NzmopL69okp6ZkA9nSl+ViH2s4AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"feedier\"\n        title=\"feedier\"\n        src=\"/static/61306000a55652a75977265d1f5117c2/e5715/feedier.png\"\n        srcset=\"/static/61306000a55652a75977265d1f5117c2/a6d36/feedier.png 650w,\n/static/61306000a55652a75977265d1f5117c2/e5715/feedier.png 768w,\n/static/61306000a55652a75977265d1f5117c2/bb072/feedier.png 1318w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><a href=\"https://feedier.com/\">Feedier</a> is an all-in-one feedback collection platform for your application, product, in-app interactions, or even onboarding processes for a customer.</p>\n<p>It helps you with almost everything, from designing in-depth and informative surveys to resourceful analytics and studies to giving your recipients incentives.</p>\n<p>Feedier has incorporated incentive management to make the survey enjoyable and straightforward for the customers to fill in.</p>\n<h2 id=\"15-qualaroo\" style=\"position:relative;\"><a href=\"#15-qualaroo\" aria-label=\"15 qualaroo permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>15. Qualaroo</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 512px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.484375%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABnElEQVQoz12RS2vbQBDHffItOYem5GP0mEtTauihuLZXsrx6hDokhrz7LWrwvb32EvdxbMi5PUQGySdZMcTkElIIIW6CpNU+9OisDG7dP8PuLMx/f8NM6Z6Iq98s4imIccGYECKljHMuuEiyLIOMUgpPypM8TS9vw0/2zZl3J9KslBfKMnlOp1PXHXqeNx6PR/7owveHruO4ru+PHMeZTCb5okoSyCgrFJEoDMMgCKLijGPCFiUxeZ5mMqTZHbo7nc7B4ZGM/cPdPbiPj47fbe90vp+eQgX8Pkdlsw7n5HPbriEFG2Zd016ial1R1RZu6cbr6puT/meoSNIkpnFUCPqCEfw12/YAqU3T2lR1/EpvIsPCOrbetpGqfvn6bUaG8RFCYGyQ/wsv2YMBQsg0TR3jlrmlWW0V1Wr1RqVSOen3Z2bOaEwiQiLwL7QN5nqjYRgGAJuaZlrW8xcbT1dXl5aWe70eVMD+HiP6EMSEMsH5/2RFUYAs/RgrFn62sb7yZK1cLr/vdqFicht8/HH94ef16Fcg5PLl/JJCfwDHV6Nbh3mcDgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"qualaroo\"\n        title=\"qualaroo\"\n        src=\"/static/8402bdf375d0db58cf9395b4e0e88825/01e7c/qualaroo.png\"\n        srcset=\"/static/8402bdf375d0db58cf9395b4e0e88825/01e7c/qualaroo.png 512w\"\n        sizes=\"(max-width: 512px) 100vw, 512px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><a href=\"https://qualaroo.com/\">Qualaroo</a> user research and feedback tools promise the capacity to do precisely that. At each point of the onboarding process, you can segment your clients by attribute, plan the timing or action exactly when you want questions to pop up, and get the hot take.</p>\n<h2 id=\"16-wootric\" style=\"position:relative;\"><a href=\"#16-wootric\" aria-label=\"16 wootric permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>16. Wootric</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 44.15384615384615%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB/0lEQVQozzWRW2sTQRTH9wOIX8DLq+CD0C+gb75IQfBBUQQfREEr6INKLSpBa6RB6wUtSktArKiUEhQTjAHjRowxSTebze7O3ua2O3vJJl1EIiQKcYL0cDicGc7v/2fOCCqsR2GcJMl4PB5txZ+tGI5GwyEvk8oHhn9/l+GLnJoJftn8KHQDGkd+FHj9bpBs9pJ+HDE38Gg3ZLzjl93Ij+PuYDCw9U6zKro+xMzGxIEWEEIKAw+72GbECRkJPIJtgGzgYcenMPQQRWbci+X69+snDz08M90orrMwBkBtbdQEQ21bQDW0tkcdRiFXgaZOoOm7mGuFDCNL6yebj2bPLV88ar9/9nbhwuVLMxWx3G5NYFnvtIAqU2Rhx6COaYIOtDQ2scU8oalGvf7jm1eWzh9pv1xYuXYinZ6vViuyVBUYJB5EDtAcgxtahMOaAk3NRVbgotBF2NKA9KX09PSH+VMb2au59LT0oyKWCq+XFwVRXm/on2xbwUhjrsWtOIZtLmRMzF1odKRm9ngzte1bal/tzlTr9nYjd7ZQKGbmZoS89FxU3mCiIqoQqnKYM/zNFBr+xBlrjUr9yQF9caf6YJec2dG6uxusHl57lb13a1b4yX8nCBlFoUf4KM//y+cr4Co+gUqtLC3t/5raW7t/8PONPaW5KW31WDG/9jH/7h80Za6VtzCVZgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"wootric\"\n        title=\"wootric\"\n        src=\"/static/f2461a025ab8464dcf1be2b287d71146/e5715/wootric.png\"\n        srcset=\"/static/f2461a025ab8464dcf1be2b287d71146/a6d36/wootric.png 650w,\n/static/f2461a025ab8464dcf1be2b287d71146/e5715/wootric.png 768w,\n/static/f2461a025ab8464dcf1be2b287d71146/f2763/wootric.png 1291w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><a href=\"https://www.wootric.com/\">Wootric</a> is one of the best onboarding methods for customer loyalty and happiness tracking.</p>\n<p>With Wootric, you can build custom micro surveys, ask the right questions on the right spots (across various channels), and skyrocket valuable consumer input to your user onboarding.</p>\n<p>You can monitor the satisfaction of your customers in real time and even generate automatic customer sentiment measurements.</p>\n<h2 id=\"17-typeform\" style=\"position:relative;\"><a href=\"#17-typeform\" aria-label=\"17 typeform permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>17. Typeform</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 512px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 49.8046875%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAACM0lEQVQozzWR2W8SURTG5w9p4kNffDHp/2F8aCqVKhVD21CtUixtXBPcH7rE6osptNGksVhTmzTErY1rhCIlUkurzLAMIjAD3IFhhuHOwjAeRG9+ufnOzfnOTc5HqKqKMTb+Hyg1TVMUBW5ZljsaHqFWRUGm4rqu03TG5XKlUilCwZLSAOptsCRL4l8EWarjuiBwbK2cF1ChhgoiYsRSXuTYajHHZtNCmSFwXYQmFUtqo939b0pb11QZG1jShYouVgGZYxocAyNUuSHwVaGcJ+q1Kp2k0kkqRZGF379SCZJOJTLppKE3aZp8tDzrfTq/sDy3uDIfioVj6TjN5D/sfMrk0rhaIkQezIlE/Cf4QYAToOIHiGV3ooGB8WO2SyesU8eHrpjXvrzd3Au/jgRnnj18t/1S4xHREGtFJt+ByWW5EltiC4VclkcouheyX7c479gdN4cn7o5uffscpA7exyJjNy6+2txoChyhSKKuyrqmqLjBc6iKSly5WCkXjVYrGguNXD3pvD3iuDV83m0zWwZ6+0y9/f22ibP+N+taDRF8Ba36fItez6pvBRUZga/AFgAIbTf2deiyecx9Bhi9Nnikp6e7+3BX1yH3/ZmPgS1YHsFz5SWvZ3Z62utZgA8lgYedA0ZTi3wP9l84ap0ynZ7ss06azrnG7Q6nZfDUvbkHJJmQUJ6AVIymCrQ0pRMV5AyiKeNshvSte9b8j59vLL3wP6HI/XSSTFI/wtsBcn8XV9g/HzvhFrbe0CgAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"typeform\"\n        title=\"typeform\"\n        src=\"/static/8aa37f94ab45f749cee6eb5480c8caaf/01e7c/typeform.png\"\n        srcset=\"/static/8aa37f94ab45f749cee6eb5480c8caaf/01e7c/typeform.png 512w\"\n        sizes=\"(max-width: 512px) 100vw, 512px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Use a simple form development tool like <a href=\"https://www.typeform.com/\">Typeform</a> if you're strapped for cash but still need to get the answers you need. Its conversational, collaborative survey style is one benefit of Typeform. The simplicity of producing a survey is another advantage; it is similar to typing in a notepad, with no coding necessary.</p>\n<h2 id=\"user-behaviour-tools-for-seamless-onboarding\" style=\"position:relative;\"><a href=\"#user-behaviour-tools-for-seamless-onboarding\" aria-label=\"user behaviour tools for seamless onboarding permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>User Behaviour Tools For Seamless Onboarding</h2>\n<h2 id=\"18-hotjar\" style=\"position:relative;\"><a href=\"#18-hotjar\" aria-label=\"18 hotjar permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>18. Hotjar</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 47.53846153846153%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAABjklEQVQoz4VSXWvbMBT1Tx+MQdnDygiF/oHBlpZCH/ewQsu6j6RNUtthTVhpuzr+UBTLimx9S+510j1sK+xwJa6udC+HcxT8iCKlVPsb1ho4Oue00sYYKaX3XnDu4K7/0b/c9z/vZeus1lAIVoJTo5g1zJlSCsTWELhmUMe8WUIueF6zglHCOVWCalkZRa1mzgYwwG8C4J7Cu03Ftt63zwPqxvsgTdO729t0sUiSpFtJskSoyPMsyyjC3/CvN4vR7t3gLbrqPVz2ssleOnl98/WkvO9oN00zm83CMJxOp3EcR1E0GAy2SRSGF3F4OP7SH58fX1/2h2fvx5+P4u+fFvNrhrtm0IYQghAqyxIDljjNC7TEeFXmeQEsSN5FsyIVwsBljbBTZks+EBtoraUQoLNUXItKcWIkbepqzRihlNCKS6E0OKDhUc252qr9lxAIsYu5HM3FcCazlQbjhICxwlr7r2x/Nnt1MkpffWh2DtYv3tHTSIqaFB13VNf1/5rbzhz/9FusswZ2v8Gzhj0CwYQxDT5PeXMAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"hotjar\"\n        title=\"hotjar\"\n        src=\"/static/7c77e2d2ac9557e735611398403544c9/e5715/hotjar.png\"\n        srcset=\"/static/7c77e2d2ac9557e735611398403544c9/a6d36/hotjar.png 650w,\n/static/7c77e2d2ac9557e735611398403544c9/e5715/hotjar.png 768w,\n/static/7c77e2d2ac9557e735611398403544c9/62da8/hotjar.png 1262w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Through heatmaps, session recordings, and conversion funnels, <a href=\"https://www.hotjar.com/\">Hotjar</a> offers invaluable insights into the behavior of your users.</p>\n<p>In a visual dashboard, you can track all the feedback and monitor sentiment across your onboarding process.</p>\n<p>Knowing what your customers already do on your website will help you build smoother in-app interactions and onboarding processes for customers while unleashing the \"aha moment\" more quickly.</p>\n<h2 id=\"19-fullstory\" style=\"position:relative;\"><a href=\"#19-fullstory\" aria-label=\"19 fullstory permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>19. FullStory</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.61538461538461%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABbUlEQVQoz3VRz0sCQRSeP7Vr4KlDh6BLdIroopTYJbCTgRESZaFQS5YlZqa1uutqCOruuq62u+7s7OxsD6dsCXq8ebz3vV8z3yBd12VZJoSEC/F93/MIhkPA9TH2yMIGQQBZSgMAqdAgZw/BcIIApZSGP8IYi/o8XIJQC8oczGYO8ykKGOPNMCVSxMLfIf8K0sZGvSHKygdoS+5KnW67062+NAcjbbmT20/bad5m+rVrmBwuEDQcafWm2O70QEVJgR7DnI4Nc+66f94yVI3dtZXEZsyZexxElmWrqmaaU7iCqo+d+RxQTs9SeCgrvWQyfZLN25bFgETXRZhRKyC2D3xSvgVjbNv2dxjpz13d2C4hLsmnD8+PU9rYRHRgeGWRiP3H59fLonBRECSlF2UY+A18T5akcvUNQvhC4a5yX65DGtFyi8Rzfra0d3AU29heXd86vShwwnl/sVSJ7+9kUgljhsPFH0yms6faOzhfCn7zfOMSq3kAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"fullstory\"\n        title=\"fullstory\"\n        src=\"/static/01c08e77487776e7a9a26e80588d75d1/e5715/fullstory.png\"\n        srcset=\"/static/01c08e77487776e7a9a26e80588d75d1/a6d36/fullstory.png 650w,\n/static/01c08e77487776e7a9a26e80588d75d1/e5715/fullstory.png 768w,\n/static/01c08e77487776e7a9a26e80588d75d1/7960f/fullstory.png 1274w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Another tool for analyzing heat maps and digital experiences is <a href=\"https://www.fullstory.com/\">FullStory</a>.</p>\n<p>It probably captures more data than any other similar software. The unique value propositions of FullStory make it easy to solve various problems, capture more data, find answers, and optimize onboarding experiences for users.</p>\n<p>Almost every session made on your website or application can be looked at. Your needs and processes can funnel and segment all sessions.</p>\n<h2 id=\"chat--support-tools-for-user-onboarding\" style=\"position:relative;\"><a href=\"#chat--support-tools-for-user-onboarding\" aria-label=\"chat  support tools for user onboarding permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Chat &#x26; Support tools for user onboarding</h2>\n<h2 id=\"20-freshdesk\" style=\"position:relative;\"><a href=\"#20-freshdesk\" aria-label=\"20 freshdesk permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>20. Freshdesk</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 512px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 49.8046875%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAABw0lEQVQozz2Ry47TMBSG89qw5AlYgMQSNqgsRkKzGc0I9ogRKp3pbdKmbdLc7djx8TWxE3BThPTp6Ne5/OfIDmSnsjqnwPrB2Yne2c7ZfkJoJY2WRv1DKzAyZhUzYhiHAHUsA5RxjHqoO+YpNc1lU0hSXOJF5IJkwscGa1jx9H388NhGpBcB7gFbgXuOOrji9cRVAHGCDkKMEhmfgabnzKpmKgU+hQzzfcSKC040ll/w5e7ikjTl9/357lTWHGoF/319Q1Dy5tfm6efzfHUK1/F+sVs/RZvlMVwdw00SsUF/vL+bv0S3i+hIMLXC4w+emIaX0Xa+fV6Eq028/71dZi2qVVtJ6mGDevf55pAkpCHHcxEVBdJArbzOB9jACWcJKWNSpLTCmiFFa0mRR1EY9YcvX8NTVhJmTEda2CVpyWnrlLcItiJ7Fc7e7G9eh7MXVeix99tg0OC0fxg+6refZvtDUuOGc9H/6SiDnDbMqdYP++1bmoUs37VZCnXKUDr9XMpRpSgfzbcfj3GWFzVmIJXVIGTFWnDKWwfMynWeHEgZtemOnGNWnjkqNMlVU5mWW21GB70mANp0zmsha2jFYLjTfwGzJiegggeOiAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"freshdesk\"\n        title=\"freshdesk\"\n        src=\"/static/abd9405304330f2f6e7a2d9ef7735fcc/01e7c/freshdesk.png\"\n        srcset=\"/static/abd9405304330f2f6e7a2d9ef7735fcc/01e7c/freshdesk.png 512w\"\n        sizes=\"(max-width: 512px) 100vw, 512px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Live chat is an excellent platform for onboarding your new users and gathering feedback for your product.</p>\n<p>In your user onboarding processes, <a href=\"https://freshdesk.com/\">Freshdesk</a> is an excellent tool for implementing chat support.</p>\n<p>With Freshdesk, you can keep track of all the discussions quickly. Through team coordination, all tickets can be prioritized and segmented, thus assigning them to some of your team members.</p>\n<p>It has a fantastic dashboard that supports all of your tickets on multiple platforms. All your tickets, whether they come from email, chatbot, live chat support, website, social media, or even a phone, can be easily managed on a single platform.</p>\n<h2 id=\"21-olark\" style=\"position:relative;\"><a href=\"#21-olark\" aria-label=\"21 olark permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>21. Olark</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 47.07692307692308%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB/UlEQVQoz2OIDJwSHzHDw6HDz63X1abNx6XbwbwZguzNmtzs2oEifm49vq49gZ59vi49nq6dER1dkZ3ddlaNDB72HVYG9ZYG9Rb6dea6tVBSr87KsMFcrw6ILPSBUvVANRBxoIiVfoOdcZODWTNDsPcEe/NmoOWxYdOSY2YByfjw6VHBU4D2RIdMjQmdGhs6LSZkarj/pPSEuSmxs4EqfVy67MyabIwbGQqzFlsZ1tdXrulo3jSpd8fUCbu6WzfPmbG/pWH91Ik7Z0/fO6lvR2fL5pa6DTOn7m2oXNPeuDEhcoaxVnVk4GSGDWvOGGlW2Zk0GWpUFecunTZxV07agt7mbXMnHpjYvrMyb1VT2Ya2hg1AQ+vKVwM9BbTJTLfWw6Hz5vVnDL9+/ga6FugZZ6tWoBAoqEyanf2bgss6Q4q7Q8u6fTPb7C2bHC1aPB07na3bgCqB4Xfl0uP///8zADHQDG/nbmB4AD3vaNVia9DkndWSsqY/ZUl/6soJ0dO6HO2aHc1brI3qTbSqM5PmPXzwGqjrz5+/DH///gOy7tx+ERc2zUC90liz2tqowVa/yUqjwVKzwVKjwVSlzlC9ylCj0t+9d8WSY0CXQnRCbf796w+QnNK/Kz58WknuUi8nUGDaW4CQo1VzsO+EouzFwKD58OErUBnQMoh9QAAAAzoFNMWH1/YAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"olark\"\n        title=\"olark\"\n        src=\"/static/f3736e1b02c868e808d47a8d5879b7bc/e5715/olark.png\"\n        srcset=\"/static/f3736e1b02c868e808d47a8d5879b7bc/a6d36/olark.png 650w,\n/static/f3736e1b02c868e808d47a8d5879b7bc/e5715/olark.png 768w,\n/static/f3736e1b02c868e808d47a8d5879b7bc/07e9f/olark.png 1301w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>A simple way to frustrate them and create unnecessary pressure is to disturb the users and sign in as they go through onboarding or complete vital tasks. With a live chat tool like Olark, you can do this. Using a chat box that suits your branding, <a href=\"https://www.olark.com/\">Olark</a> allows you to live chat with clients that run into an issue.</p>\n<h2 id=\"22-helpscout\" style=\"position:relative;\"><a href=\"#22-helpscout\" aria-label=\"22 helpscout permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>22. Helpscout</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 43.53846153846154%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABcElEQVQoz1WRS2/UMBDH8635FpyRKvEFOPSAOPTEFUSlLvskW/pAu2KbNomTOB7Pwx7jsGW1jCx5PJ7fjP2foqxwe3+oajtCGH0YQZACILNElpDOTPWfF8Pbb/7dDAuLyfoElJATh2mFmKIeszX9b18e0q9murGkIFo0HdadNwP1I3XW9xYd0AjoEU+9jvvVVt58hGrQYySXLuY/Hr/ebGar21X5cD3b3CzLdXk/W5SLzZaYT/2R4nMfPMUcyEeiYDpXHGq3O5j9U7evzO6prdueCP5mk4hkEEgpaAgTE2NyGF+cPjdgOigGJxYolwSUEOPyZ3PxYfP+slzfmZwtEud7asYgrJlESsLpcgHzHXtHRWext975DE/aru5MJvNa3rbTm6Mya2Y8KvZ10yqBfl6bT9+xHrR4Mb5qoGq5GwPJq87nFkLK2hEngDBfc1XF/JthlCxI4fB1Tigpw9khVhbNAzsb8SQvcfx9AOfiKfgHZjEBOJUd9c0AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"helpscout\"\n        title=\"image_tooltip\"\n        src=\"/static/be9f721070e0ea3ad28ce9ec214f84d0/e5715/helpscout.png\"\n        srcset=\"/static/be9f721070e0ea3ad28ce9ec214f84d0/a6d36/helpscout.png 650w,\n/static/be9f721070e0ea3ad28ce9ec214f84d0/e5715/helpscout.png 768w,\n/static/be9f721070e0ea3ad28ce9ec214f84d0/4cdc7/helpscout.png 1327w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><a href=\"https://www.helpscout.com/\">Helpscout</a> is another perfect solution to incorporate live chat support in your user onboarding.</p>\n<p>Helpscout's mission is to empower human driving and customizable support for live chat and email.</p>\n<p>with this tool you can create more personalized ticket emails for every user. Together with your team, with articles that address all your client's questions, you will be able to build help docs quickly.</p>\n<h2 id=\"23-livechat\" style=\"position:relative;\"><a href=\"#23-livechat\" aria-label=\"23 livechat permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>23. LiveChat</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 43.53846153846154%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB3ElEQVQoz2VRS2gTURS9KlibKtjMJIrUVbNQYujCoiAUEVQQ/OxU3NYPLd27kbaCC2kEFyIupCDagorUSp0Yf9CNgqAUBbGQ1CptSJrPTN68N583n3d9mYgKHi6HB5dzzuNc+Lm8bBhN3/cZY5Jt2+aua1IzDEOTUs45YojCjyZARM/zLItWq2XbYoD/QQghlW2W+HclfRml8uELaYlQrem6Qas1ouvNUqlUKBT/mEQUYmMa17JYGQ/LY9qt0ezQ4OrncawMC+MZzDy6/XjqxsN7Yy9zT+bmXmhaLgiCdn4kdvHrLvEB8CPQ+Y03B09eGDioZbvxC4Tfz8Ob11o+9/Ttq9l8XisWl/7Kfid7uNgnPgEubdDfd145c+Ts/gPz9+NYhODHENTqDUKobhAJQ1ZHSJNSLwqPjDz8lsEFmL7edeJQ7Oi+dDqVOnW4a3EGsHwRTEIYo3KoKdulVNfJyopnmm2x73u4uufBNYB1ic5Yondnz/akCqBmUmAXLoHjOK3zcB5y7iDW706yzF5n9GoU2yqYLmSOD8TTvbt7diS3dse3JZKqom6Jwbvnw2BZlh3pXdexHIfVG0FlTRCZLPzW3/nkRH+sY/OdkXOXTx9TFEVVWrSpY/3s1Mgvw4CYQRG0n2wAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"livechat\"\n        title=\"livechat\"\n        src=\"/static/ae6e43140b80e098446629dd19409322/e5715/livechat.png\"\n        srcset=\"/static/ae6e43140b80e098446629dd19409322/a6d36/livechat.png 650w,\n/static/ae6e43140b80e098446629dd19409322/e5715/livechat.png 768w,\n/static/ae6e43140b80e098446629dd19409322/4719e/livechat.png 1330w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Another great software tool for talking to clients and solving their problems in real-time is <a href=\"https://www.livechat.com/\">LiveChat</a>. Use it to speak with your users and address their issues as they happen. LiveChat's rich analytics show you where your users face most roadblocks during their onboarding (or elsewhere in their journey). Using LiveChat to monitor the onboarding process and recognize the moments of friction that your clients encounter.</p>\n<h2 id=\"24-zendesk\" style=\"position:relative;\"><a href=\"#24-zendesk\" aria-label=\"24 zendesk permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>24. Zendesk</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 512px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 47.0703125%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABaklEQVQoz32O207CQBCGeVTfwEsvjZeCYIiIAUQOBcq2CF4YNUKQgEBEAWvaQjXiAZQEKAktp0LpOtAb8JR8mezO/N/OGiaDbqv51hObmiIpfXEodRRZhMNI7oxlEYAANMdyV5G7jXrNgQhfDIntBp7IhimHVI5SOTRlkcIiXKVnPKXyFFznFfoc0ioUFiJahVZ5Gj/FAH1kwHxY48N4wSW5DcSRMRO15E92czFL8dR6HTUnkJF0bSUp05QNzTgS0PMGbSHrDJmgeOutZw7TxyCYrugdIB0xf2TdzynnZ9atcuRyfkWePymgIRNgLmzMuU1IHFTj9krcLpUI/EhpVbQcXpFxBbVvPLWU4z3jEgseqejrFLyt/FEz54bOa9oJU/yXDExZUir55TLxknYJSYdY8MLOXomQS/5+mZiwIe0fWd8PWPc31zbWC2d7IybQu/Nr/Lz5LfmLPFvU0UNwcB+EVfAXlSV/ajpfvaayvVMW3hcAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"zendesk\"\n        title=\"zendesk\"\n        src=\"/static/19370233b3e7efe839a3edb573b44e79/01e7c/zendesk.png\"\n        srcset=\"/static/19370233b3e7efe839a3edb573b44e79/01e7c/zendesk.png 512w\"\n        sizes=\"(max-width: 512px) 100vw, 512px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Knowledge base tools such as <a href=\"https://www.zendesk.com/\">Zendesk</a> allow you to build an online support center where customers can access FAQs, fixes for prevalent problems, step-by-step posts, and community-cured solutions. Before it's too late, help the clients help themselves.</p>\n<h2 id=\"bonus-user-onboarding-tools\" style=\"position:relative;\"><a href=\"#bonus-user-onboarding-tools\" aria-label=\"bonus user onboarding tools permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Bonus User Onboarding Tools</h2>\n<h2 id=\"25-loom\" style=\"position:relative;\"><a href=\"#25-loom\" aria-label=\"25 loom permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>25. Loom</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 512px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 45.3125%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAACHUlEQVQoz2O4ePHh2bOXnj979fTJCxT0+MXzZy/fv//w9s2b9+/fv3v77u2bdz9/fpg3631pwdvS/LfbN39gcLCPdLCPtrWJtLWJACMQw8420sI81Nc3fdrcNTt2Hrxz+8ajR4+ePnn29PGTJw+fPLz/5PGDp8+fPGMwMvQ30PczMgwwNgIhIBeEjALMTIOsbMLcfcJWLFr49evHL5/evnv1/P/////+/fsPAwxRkQXRUYW+Pmn+fhlA0tcnNcA/Iygwy8Ym0t46UF9TZ/qkCf///3n35uXd27fevf/44sXrN2/f/f3z7+/fPwypyVVlJR0lxW052Q3JiRX5eU15OY1pKVUuzvGWFgHyCspt7e3////99PH9w4cPnz69/+DB3UePHn//8evn738MifFlZaUdaak1uTkNTo4xQC+YGAcCEdDP9nah0rKKzU2NQM0fv3y58vTLhp1fzt7++ffL3T8vjv19vpfBzzc1JDgrMBDkVD/fDB/vVF+fdDfXBEuLMAuLAHFpxfaOTqCz33/5tOv8p6aOT9tOfv/waN+fq33/r7QzODokuLqkurumebqD9Li6JHi4J7k4xwE1W1oFK2gb906cBAybX79+vHr/+dX7Lx+///zx9cOvLy///nzPEBK4Izv9fXba29DAfaYmfuZmIeZmwUBkZRFmZh6gpGXo7eXTUJzbWpbbW5nXW5azfWnnw+urH1xdff3UYgB+pTtsxt7CJQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"loom\"\n        title=\"loom\"\n        src=\"/static/58bb26f142f5fb763d67c20dec7bfcdd/01e7c/loom.png\"\n        srcset=\"/static/58bb26f142f5fb763d67c20dec7bfcdd/01e7c/loom.png 512w\"\n        sizes=\"(max-width: 512px) 100vw, 512px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>One of the helpful onboarding video tools for customers is <a href=\"https://www.loom.com/\">Loom</a>. Video user onboarding is the next best thing to offer you a competitive advantage if you do not have the time or the workers to hold in-person training or training seminars.</p>\n<p>Loom helps you, the screen, or both, to record yourself.</p>\n<p>By encouraging your future clients to watch a short video rather than read an entire manual, this onboarding tool will make the process simpler and faster.</p>\n<h2 id=\"26-inline-manual\" style=\"position:relative;\"><a href=\"#26-inline-manual\" aria-label=\"26 inline manual permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>26. Inline Manual</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.76923076923077%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAACGUlEQVQozxWPW1MSYQCGPwa+A1mTjJbWXReZKTgmmU4XxiHdhdiFxTXJ1AhcVGAROa2Au4AannZocUaRsQu5sGkmm/oJNeMPa515Lt736n1e0D1XGRTUJ+GDwZh6L6igYIUEFTJbIZxC9MzJesWcjLmKmS/baoKjmRiuxLBfQkwJQFccvU3gGdFMpQm1aaYyxJPDdAHROcyUMbNN2DJhSrf4itgrIboAqRyeSaPpJIAOATlXTY51MBU3OESDUwTujIndREwB+8rErxjflYGnCKgtA62Th54c0plOI2ccYFccupKP+O3R1WOrcGxdazyLnQyI6rDYfC5oT1caAzFtQNCG1k6s6yfDq837warJu3Xr5U4BXcBEZftDu7TSsaXag+LFWP7SIf9wyVcT2YupYoeqfh9JtV9mvo1utEfElmW+jnwy9hXRzCZA3gJhZchWAF0yzh3D+UafcO6s/RyTruz5S0/9l73QubugQv7AGNw3+PcQt2sO7GBG1seB/orw+ySkEq7WtdjsjZw9jLa6w6eW8Jll+WtP+Lz3c7s/0ur5pHWFVPP7QzK7R7gdzG4jOguwv4oDNeTJE71Q0lDiTPtzc3T9r/H7Rr3+++Ywa6/HbEr0TmgH80eY/0KCeyRQRbfaGQBfL8HJBTgRgpMfja8+WNwr9kXpxVJpPKmNp1uPo+W+SOHBcpawW8grYTqnX0XTG8idhM61/xmIp/B9Hk+bAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"inline-manual\"\n        title=\"inline-manual\"\n        src=\"/static/0c1f0231f62efa624bf42d038283bdb7/e5715/inline-manual.png\"\n        srcset=\"/static/0c1f0231f62efa624bf42d038283bdb7/a6d36/inline-manual.png 650w,\n/static/0c1f0231f62efa624bf42d038283bdb7/e5715/inline-manual.png 768w,\n/static/0c1f0231f62efa624bf42d038283bdb7/54c3a/inline-manual.png 1257w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>The <a href=\"https://inlinemanual.com/\">Inline Manual</a> is an advanced method for onboarding users, inline documentation, and quicker adoption of greater conversions applications. To engage and help your customers, you can quickly produce walkthroughs, onboarding guides, videos, and product documentation by presenting a new layer on top of your website or application that enables your customers to learn on the go.</p>\n<h2 id=\"27-helpshelf\" style=\"position:relative;\"><a href=\"#27-helpshelf\" aria-label=\"27 helpshelf permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>27. Helpshelf</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 512px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 45.5078125%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABR0lEQVQoz22RbUvDMBDH9/1f+s6P4BsFQUHwpcyhDN1DV9ttVadIYcymeWqTyyVeUycDd4SQO+5397/LIKCHj21ZlkII7wMieu8xnt5CNHq0xjjnAMAC9PEBhYMBioZ93nGjchY8OI/4V3RAWJqv5+ny9f0zWeTTJCteN+TOkixfFdmycIgdiwiqcY3x7gAmnUWxeZosFlkxepzOkny1fhs/J9N5+lVuMZK9bC6kkFLrpmlaah9lhyCVqgU3jVB8p5WSsjtCKsqyFqy1PWyMIYxcgK57P3NQleZbbZiCuuFMfTNWMc5qMl5VjPbUw9pCLQS5UU6E6VKAvAVBt3Q7gZUGpqk6DYuHsltwnL5EKhd39is7nN+Hk6twehNq1SceWzbBKJWmYdy+YoSHqb8YheuxV62P7H/aWwiXD/524ocv/uwusK7ND3cFBRgBXUSeAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"helpshelf\"\n        title=\"helpshelf\"\n        src=\"/static/846c0cc10132f1ebb57af45129f03341/01e7c/helpshelf.png\"\n        srcset=\"/static/846c0cc10132f1ebb57af45129f03341/01e7c/helpshelf.png 512w\"\n        sizes=\"(max-width: 512px) 100vw, 512px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p><a href=\"https://helpshelf.co/\">Helpshelf</a> is a fantastic user-onboarding knowledge base application.</p>\n<p>It is necessary to surface the right content at the right time for user onboarding. Helpshelf helps you do this by showing guides, articles, and \"how-to\" to your clients when they need them and when your user is onboarding in various stages.</p>\n<h3 id=\"conclusion\" style=\"position:relative;\"><a href=\"#conclusion\" aria-label=\"conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><strong>Conclusion</strong></h3>\n<p>You would need more than one or two user onboarding resources to create ideal and superior user onboarding procedures and in-app experiences.</p>\n<p>Luckily, the market gives us an overwhelming range of different resources. We have covered 27 of the best user onboarding tools. Some of them are free, some are free, and some are paid for.</p>\n<p>Customer Onboarding is a critical step that forms the entire lifecycle of the user. The best onboarding experiences help users quickly achieve their magic moment; they also set up new users for long-term success.</p>\n<p><a href=\"https://www.loginradius.com/book-a-demo/\"><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAABdElEQVQY002RO0/CUBzFG6PtbZWHCAmRmBB5P8vDII9SSC0omog4oAEGjZMO6OKEuLjoJ2Fx0cSBwUQnXZxcHPwux38LJA7nNvfec8+5v1tOCCiwpbbhye2BxbYgBMtgIRVioDRRsARGXxZUzLlEHmehBaesQ4rrEMPViYf2DR9nDGKkChbVICVqsMt1WJI1sHCFwhUsUIFohJH49TxECvRUjhDW2mAbB5iP6hB8hUkhiRPN5KIZYJdrsEYrcCSpmQqMm6/m9ylUhSulY7N5ivROB3L9GOlGF3Ktbc4zuz341UPw/uIk0ESbBjoSGlYIx8BfzjSwVmyCEYEUUmCPa3Bnd+hwC75yC95S05SxbolU/iEbOCFCpDexEfIioTNCNd6Tp6IlMnNuGeeDe3z//OLx5RWj5zFGT2O8fXxh/P4Ja6w6vSEFCnTIlW2YiDzhzX7ATFKojDlvjpBPcDF4QPdyiG5/iE7/BmfXd+hd3VKpCoG8fzxWw2+c+yTpAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"book-a-demo-loginradius\"\n        title=\"book-a-demo-loginradius\"\n        src=\"/static/fcc4c4b5dc38cc4528f99d09480f4eb2/e5715/book-a-demo-loginradius.png\"\n        srcset=\"/static/fcc4c4b5dc38cc4528f99d09480f4eb2/a6d36/book-a-demo-loginradius.png 650w,\n/static/fcc4c4b5dc38cc4528f99d09480f4eb2/e5715/book-a-demo-loginradius.png 768w,\n/static/fcc4c4b5dc38cc4528f99d09480f4eb2/63ff0/book-a-demo-loginradius.png 2887w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></a></p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"January 20, 2021","updated_date":null,"description":"Customer Onboarding is a crucial phase that comprises the user's entire lifecycle. The best onboarding experiences allow users to reach their magic moment quickly; for long-term success, they even set up new users.","title":"Top 27 User Onboarding Tools: Highly Recommended for Businesses","tags":null,"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5037593984962405,"src":"/static/6e58298f7f4472ec71ff83d568f33cff/14b42/user-onboarding.jpg","srcSet":"/static/6e58298f7f4472ec71ff83d568f33cff/f836f/user-onboarding.jpg 200w,\n/static/6e58298f7f4472ec71ff83d568f33cff/2244e/user-onboarding.jpg 400w,\n/static/6e58298f7f4472ec71ff83d568f33cff/14b42/user-onboarding.jpg 800w,\n/static/6e58298f7f4472ec71ff83d568f33cff/47498/user-onboarding.jpg 1200w,\n/static/6e58298f7f4472ec71ff83d568f33cff/0e329/user-onboarding.jpg 1600w,\n/static/6e58298f7f4472ec71ff83d568f33cff/d8255/user-onboarding.jpg 1920w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Navanita Devi","github":null,"avatar":null}}}},{"node":{"excerpt":"As we all know, JSON Web Tokens are a way of sending information between parties in a way where the sender's authenticity can be verified…","fields":{"slug":"/engineering/invalidating-jwt/"},"html":"<p>As we all know, JSON Web Tokens are a way of sending information between parties in a way where the sender's authenticity can be verified. It is essentially a JSON object with a signature. Using this signature, services that issue these tokens can verify that they are the ones who issued this token and thus can trust the claims which are contained within. </p>\n<p>The trustworthiness of these tokens make them popular for use in authorization and authentication scenarios:</p>\n<ul>\n<li>In authorization workflows, JSON Web Tokens are distributed to users with claims containing the resources and services that are allowed for that user. The issuing service can perform its database lookups to determine the user's authorization levels when the token is being generated and issued. Since the signature can be used to verify that the token is authentic and issued by a trusted source, for subsequent transactions using the token, the service can safely take the token at its word. This saves the service from needing to check its database for the user's relevant permissions every time a transaction is performed.</li>\n<li>In authentication workflows such as OAuth2, JSON Web Tokens are often used as part of a larger workflow, where they are useful to securely transmit information between parties. Since the resource server and authenticating server are different, these tokens ensure that the information being received by these parties is valid and authentic.</li>\n</ul>\n<p>For this post, we'll be focusing on the former use case. So having a token with trustworthy claims is great; we can take the token at its word, and trust all of the information that it has contained within as gospel. Our server is unburdened from having to potentially make database calls to verify the user's role, their permissions, their existence, or even if they're logged in. Once the server has generated the token, as far as it is concerned, no state has to be maintained regarding the validity of the token. It will expire once its expiration time included in its claim has passed.</p>\n<p>But before we go ahead and use this for all of our authorization needs, we have to remember that while JSON Web Tokens themselves are stateless, to have a robust, feasible, and controllable authorization workflow, we'll have to maintain some state one way or another.</p>\n<p>You can think of an authorization token as an elementary school hall pass. The teacher (resource server) knows that it is a legitimate hall pass because it is green, 6 cm x 12 cm and has a signature from another member of the faculty. Now imagine that you've issued a hall pass, but now you need to take it back (you've changed your mind, or the kid did something bad). Your options are:</p>\n<ul>\n<li>Go to the kid and take the pass back (browser deletes the token from its storage). However, the kid made a photocopy, and can still roam the halls with relative ease.</li>\n<li>Wait till the hall pass expires (wait till the token expiry claim passes). Green hall passes are only valid on Mondays. He can still roam the halls freely for the remainder of Monday (the horror).</li>\n<li>Change the entire format of the hall pass (change the secret used to sign the token). The crisis has been averted, but now you'll need to handicraft another 5 whole hall passes for the class.</li>\n</ul>\n<p>Other than the 3rd option which may or may not be feasible depending on your use case (most likely not), we can see that it is not possible to reliably remove or revoke a token without maintaining state. The solutions that I've looked upon Stack Overflow for invalidating these tokens boil down to relying on some form of state, one way or another. Don't get me wrong however, this is not a bad thing in my opinion. Using JSON Web Tokens can and do allow us to minimize the state that we do have to maintain, with minimal added complexity.</p>\n<p>So let's look at some ways that we can couple state and JSON Web Tokens that allow us to invalidate these tokens effectively.</p>\n<h3 id=\"token-whitelist\" style=\"position:relative;\"><a href=\"#token-whitelist\" aria-label=\"token whitelist permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Token Whitelist</h3>\n<p>We can maintain a database table containing all of the tokens issued by our server that we would like to accept as valid. This would be a 1:1 session store, with every transaction occurring requiring this table to be checked to prevent an invalidated token from being accepted. While we would not be able to reduce the amount of state being maintained on our server, JSON Web Tokens still provide us with the utility of its trusted claims (and the performance benefits of not needing to check those).</p>\n<h3 id=\"token-blacklist\" style=\"position:relative;\"><a href=\"#token-blacklist\" aria-label=\"token blacklist permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Token Blacklist</h3>\n<p>We can maintain a database table containing all of the tokens issued by our server that we do NOT want to accept as valid. Every transaction that occurs will require this table to be checked, to prevent an invalidated token from being accepted. Each record would only have to be maintained until the token itself expires. I can't think of any use case where a table of invalidated tokens would regularly be larger than a table of active tokens, so I'd imagine that the table maintained would almost always be smaller than maintaining a table of active tokens.</p>\n<h3 id=\"using-a-dynamic-secret-to-sign\" style=\"position:relative;\"><a href=\"#using-a-dynamic-secret-to-sign\" aria-label=\"using a dynamic secret to sign permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Using a Dynamic Secret to Sign</h3>\n<p>This solution still needs a database lookup, but interestingly requires no state. For this, we can use the hash of a piece of data to sign the token itself. For example, by using the hash of a user's password, when the user changes their password, subsequent transactions involving an old token will fail, as the signature will fail to be verified. The effectiveness of this, however, would depend on your requirements, as this would be limited to invalidating tokens based on changing data (such as changing roles, passwords, etc.). It would not allow you to invalidate a token whenever you want.</p>\n<h3 id=\"concluding-remarks\" style=\"position:relative;\"><a href=\"#concluding-remarks\" aria-label=\"concluding remarks permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Concluding Remarks</h3>\n<p>I think that JSON Web Tokens coupled with a token blacklist is a fantastic way to manage authorization in web applications. This allows you to leverage the benefits of these tokens in reducing the network calls needed to secure your application, reduce the amount of data you need to store to manage sessions, and do so in a reliable way without introducing too much complexity.</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"January 18, 2021","updated_date":null,"description":"A discussion on invalidating JSON Web Tokens.","title":"Invalidating JSON Web Tokens","tags":["JSON Web Tokens","JWT"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5037593984962405,"src":"/static/79aa8bd08d0b463cb8261d80f51fa641/ee604/unsplash.png","srcSet":"/static/79aa8bd08d0b463cb8261d80f51fa641/69585/unsplash.png 200w,\n/static/79aa8bd08d0b463cb8261d80f51fa641/497c6/unsplash.png 400w,\n/static/79aa8bd08d0b463cb8261d80f51fa641/ee604/unsplash.png 800w,\n/static/79aa8bd08d0b463cb8261d80f51fa641/f3583/unsplash.png 1200w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Nick Chim","github":"nickc95","avatar":null}}}},{"node":{"excerpt":"Last five years have witnessed a sudden influx of marketing practices, sales processes, and data teams in enterprise-level B2B SaaS…","fields":{"slug":"/growth/consumer-experience-b2b-saas/"},"html":"<p>Last five years have witnessed a sudden influx of marketing practices, sales processes, and data teams in enterprise-level B2B SaaS companies. They have been investing in consumer data to enhance purchasers’ journey or amplify their pre-sales process. </p>\n<p>It shouldn't come as a surprise that they are acknowledging the need to provide a full view of their accounts (including branches and divisions), global account addresses, consumer contacts, and sales and marketing performance prospects.</p>\n<p>Consumer experience assessment and development is not only acceptable for consumers; it is good for the company. An emphasis on CX produces a competitive advantage that drives consumer retention, sales growth, and company valuation over time.</p>\n<p>With the right business growth, technology, and training, you allow your support agents to tackle even the biggest product problems and provide your <a href=\"https://www.loginradius.com/customer-experience-solutions/\">consumers with excellent and reliable service</a>. </p>\n<p>Here are five ways to motivate your B2B SaaS consumer support team to deliver outstanding experiences:</p>\n<h2 id=\"1-create-impactful-touchpoints-for-clients\" style=\"position:relative;\"><a href=\"#1-create-impactful-touchpoints-for-clients\" aria-label=\"1 create impactful touchpoints for clients permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>#1. Create impactful touchpoints for clients.</h2>\n<p>Consumers retain a brand based on their experiences through touchpoints, interactions, and engagements. As a business, this allows you to ensure that you have a strategic and satisfying mechanism. You need to use efficient, optimistic brand marketing and a smooth way to connect with the brand.</p>\n<p>Therefore, ensure that your communication is valuable, smooth, and promising to your consumers. Enhancing the B2B consumer experience will eventually create faith and trust in them for the brand.</p>\n<h2 id=\"2-know-their-market-concerns-and-difficulties\" style=\"position:relative;\"><a href=\"#2-know-their-market-concerns-and-difficulties\" aria-label=\"2 know their market concerns and difficulties permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>#2. Know their market concerns and difficulties.</h2>\n<p>When you have so much information to pursue your consumers to purchase a product, you may sometimes confuse them with overwhelming information. </p>\n<p>So, here's what you need to do. Start by being all ears to your clients, their business issues, and concerns they are trying to eradicate with a solution. </p>\n<p>Be a polite listener, ask all the right questions, and explain your concerns about their business issues. Also, take time to learn about their strengths, appreciate their development and growth, and get the hang of their rivals. Assure them that you are here to solve their issues.  </p>\n<h2 id=\"3-concentrate-on-market-values-to-fulfill-their-kpis\" style=\"position:relative;\"><a href=\"#3-concentrate-on-market-values-to-fulfill-their-kpis\" aria-label=\"3 concentrate on market values to fulfill their kpis permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>#3. Concentrate on market values to fulfill their KPIs.</h2>\n<p>Speak to them about the business principles they would anticipate from using your product/solution at any stage when engaging with your clients. Do less bragging about your product's functionality and strengths and do more talking about what market advantages and values will drive for clients.</p>\n<p>In reality, companies should organize their teams to facilitate and carry out substantive consumer discussions about adding value to their businesses. It includes pre-sales, post-sales, marketing, and consumer/technology support.</p>\n<p><a href=\"https://www.loginradius.com/resource/omnichannel-retailer-customer-experience\"><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAGABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAMF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAID/9oADAMBAAIQAxAAAAHIuXnIH//EABgQAQEAAwAAAAAAAAAAAAAAAAIBAAMS/9oACAEBAAEFAs1iKOcr/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGBABAAMBAAAAAAAAAAAAAAAAAAERIaH/2gAIAQEABj8CTvFP/8QAFxABAQEBAAAAAAAAAAAAAAAAAREAQf/aAAgBAQABPyHmQFEZ1hUNDsm//9oADAMBAAIAAwAAABCP/wD/xAAWEQEBAQAAAAAAAAAAAAAAAAAAATH/2gAIAQMBAT8Qmq//xAAVEQEBAAAAAAAAAAAAAAAAAAAAAf/aAAgBAgEBPxCo/8QAGxABAAMAAwEAAAAAAAAAAAAAAQARIVFhcaH/2gAIAQEAAT8QOh7GzuAFvpGH1KWmcWz/2Q=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"omnichannel-retailer-whitepaper\"\n        title=\"omnichannel-retailer-whitepaper\"\n        src=\"/static/ca0e48a217d9e85a1d502ab012bdd3cb/212bf/omnichannel-retailer-whitepaper.jpg\"\n        srcset=\"/static/ca0e48a217d9e85a1d502ab012bdd3cb/6aca1/omnichannel-retailer-whitepaper.jpg 650w,\n/static/ca0e48a217d9e85a1d502ab012bdd3cb/212bf/omnichannel-retailer-whitepaper.jpg 768w,\n/static/ca0e48a217d9e85a1d502ab012bdd3cb/d9f85/omnichannel-retailer-whitepaper.jpg 2887w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></a></p>\n<h2 id=\"4-omnichannel-approach-for-b2b-saas\" style=\"position:relative;\"><a href=\"#4-omnichannel-approach-for-b2b-saas\" aria-label=\"4 omnichannel approach for b2b saas permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>#4. Omnichannel approach for B2B SaaS.</h2>\n<p>Know that buyers are everywhere, and they expect you to be the same. When they have queries for your support teams, they use all kinds of channels to contact your company. </p>\n<p>An <a href=\"https://www.loginradius.com/blog/fuel/2020/04/omnichannel-customer-experience/\">omnichannel approach</a> never fails to impress. Get software solutions for business growth designed to manage omnichannel consumer service strategies. They allow your helpdesk to respond decisively and efficiently to consumers, regardless of where they are around the world.</p>\n<p>A dedicated omnichannel approach in business enables the consumer support team to move seamlessly between common channels and respond to their consumers regardless of where they are and not miss a beat</p>\n<h2 id=\"5-make-your-consumers-feel-valued\" style=\"position:relative;\"><a href=\"#5-make-your-consumers-feel-valued\" aria-label=\"5 make your consumers feel valued permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>#5 Make your consumers feel valued.</h2>\n<p>Delighting and rewarding consumers across all kinds of experiences and engagements at all touchpoints is a must to start building the <a href=\"https://www.loginradius.com/blog/fuel/2019/11/improve-customer-experience-ecommerce/\">base of a good CX</a>. Let this be accompanied regularly by a streamlined method of reliable and satisfying contact with your clients by addressing their current requirements.</p>\n<p>This also helps them know that you respect their requirements and are there to address their difficulties. Your products should make their lives easier.</p>\n<p>Consumer-centricity should be taken as an overarching principle, under which every employee should strive to generate value for the consumers and reciprocate in their communications.</p>\n<h2 id=\"conclusion\" style=\"position:relative;\"><a href=\"#conclusion\" aria-label=\"conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Conclusion</h2>\n<p>To bring it all together, the basis of B2B SaaS consumer experience depends on how closely you communicate with your consumers through a smooth, straightforward, and impactful communication approach while facilitating their buying journey. </p>\n<p>It is essential to make sure that anything your client comes across from your business should turn out to be an enjoyable experience.</p>\n<p><a href=\"https://www.loginradius.com/book-a-demo/\"><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAABdElEQVQY002RO0/CUBzFG6PtbZWHCAmRmBB5P8vDII9SSC0omog4oAEGjZMO6OKEuLjoJ2Fx0cSBwUQnXZxcHPwux38LJA7nNvfec8+5v1tOCCiwpbbhye2BxbYgBMtgIRVioDRRsARGXxZUzLlEHmehBaesQ4rrEMPViYf2DR9nDGKkChbVICVqsMt1WJI1sHCFwhUsUIFohJH49TxECvRUjhDW2mAbB5iP6hB8hUkhiRPN5KIZYJdrsEYrcCSpmQqMm6/m9ylUhSulY7N5ivROB3L9GOlGF3Ktbc4zuz341UPw/uIk0ESbBjoSGlYIx8BfzjSwVmyCEYEUUmCPa3Bnd+hwC75yC95S05SxbolU/iEbOCFCpDexEfIioTNCNd6Tp6IlMnNuGeeDe3z//OLx5RWj5zFGT2O8fXxh/P4Ja6w6vSEFCnTIlW2YiDzhzX7ATFKojDlvjpBPcDF4QPdyiG5/iE7/BmfXd+hd3VKpCoG8fzxWw2+c+yTpAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"book-a-demo-loginradius\"\n        title=\"book-a-demo-loginradius\"\n        src=\"/static/fcc4c4b5dc38cc4528f99d09480f4eb2/e5715/book-a-demo-loginradius.png\"\n        srcset=\"/static/fcc4c4b5dc38cc4528f99d09480f4eb2/a6d36/book-a-demo-loginradius.png 650w,\n/static/fcc4c4b5dc38cc4528f99d09480f4eb2/e5715/book-a-demo-loginradius.png 768w,\n/static/fcc4c4b5dc38cc4528f99d09480f4eb2/63ff0/book-a-demo-loginradius.png 2887w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></a></p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"January 15, 2021","updated_date":null,"description":"Assessment and improvement of customer experience is not only appropriate to consumers; it is good for the business. A focus on CX provides a competitive advantage that over time drives customer retention, revenue growth, and business valuation.","title":"5 Tips to Enhance the Consumer Experience in B2B SaaS","tags":null,"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5037593984962405,"src":"/static/b517b573d28a8d1f11b9140c18b7c2ff/14b42/5-tips-consumer-experience-b2b-saas.jpg","srcSet":"/static/b517b573d28a8d1f11b9140c18b7c2ff/f836f/5-tips-consumer-experience-b2b-saas.jpg 200w,\n/static/b517b573d28a8d1f11b9140c18b7c2ff/2244e/5-tips-consumer-experience-b2b-saas.jpg 400w,\n/static/b517b573d28a8d1f11b9140c18b7c2ff/14b42/5-tips-consumer-experience-b2b-saas.jpg 800w,\n/static/b517b573d28a8d1f11b9140c18b7c2ff/47498/5-tips-consumer-experience-b2b-saas.jpg 1200w,\n/static/b517b573d28a8d1f11b9140c18b7c2ff/0e329/5-tips-consumer-experience-b2b-saas.jpg 1600w,\n/static/b517b573d28a8d1f11b9140c18b7c2ff/d8255/5-tips-consumer-experience-b2b-saas.jpg 1920w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Rakesh Soni","github":"oyesoni","avatar":"rakesh-soni.jpg"}}}}]},"markdownRemark":{"excerpt":"Identity is evolving, and developers are at the forefront of this transformation. Every day brings a new learning—adapting to new standards…","fields":{"slug":"/identity/developer-first-identity-provider-loginradius/"},"html":"<p>Identity is evolving, and developers are at the forefront of this transformation. Every day brings a new learning—adapting to new standards and refining approaches to building secure, seamless experiences.</p>\n<p>We’re here to support developers on that journey. We know how important simplicity, efficiency, and well-structured documentation are when working with identity and access management solutions. That’s why we’ve redesigned the <a href=\"https://www.loginradius.com/\">LoginRadius website</a>—to be faster, more intuitive, and developer-first in every way.</p>\n<p>The goal? Having them spend less time searching and more time building.</p>\n<h2 id=\"whats-new-and-improved-on-the-loginradius-website\" style=\"position:relative;\"><a href=\"#whats-new-and-improved-on-the-loginradius-website\" aria-label=\"whats new and improved on the loginradius website permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What’s New and Improved on the LoginRadius Website?</h2>\n<p>LoginRadius’ vision is to give developers a product that simplifies identity management so they can focus on building, deploying, and scaling their applications. To enhance this experience, we’ve spent the last few months redesigning our interface— making navigation more intuitive and reassuring that essential resources are easily accessible.</p>\n<p>Here’s a closer look at what’s new and why it’s important:</p>\n<h3 id=\"a-developer-friendly-dark-theme\" style=\"position:relative;\"><a href=\"#a-developer-friendly-dark-theme\" aria-label=\"a developer friendly dark theme permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>A Developer-Friendly Dark Theme</h3>\n<p><img src=\"/f46881583c7518a93bb24e94c32320de/a-developer-friendly-dark-theme.webp\" alt=\"This image shows how LoginRadius offers several authentication methods like traditional login, social login, passwordless login, passkeys and more in a dark mode.\">    </p>\n<p>Developers spend long hours working in dark-themed IDEs and terminals, so we’ve designed the LoginRadius experience to be developer-friendly and align with that preference.</p>\n<p>The new dark mode reduces eye strain, enhances readability, and provides a seamless transition between a coding environment and our platform. Our new design features a clean, modern aesthetic with a consistent color scheme and Barlow typography, ensuring better readability. High-quality graphics and icons are thoughtfully placed to enhance the content without adding visual clutter.</p>\n<p>So, whether you’re navigating our API docs or configuring authentication into your system, our improved interface will make those extended development hours more comfortable and efficient.</p>\n<h3 id=\"clear-categorization-for-loginradius-capabilities\" style=\"position:relative;\"><a href=\"#clear-categorization-for-loginradius-capabilities\" aria-label=\"clear categorization for loginradius capabilities permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Clear Categorization for LoginRadius Capabilities</h3>\n<p><img src=\"/e5358b82be414940f3fb146013845933/capabilities.webp\" alt=\"This image shows a breakdown of all the LoginRadius CIAM capabilities, including authentication, security, UX, scalability and multi-brand management.\"></p>\n<p>We’ve restructured our website to provide a straightforward breakdown of our customer identity and access management platform capabilities, helping you quickly find what you need:</p>\n<ul>\n<li>Authentication: Easily understand <a href=\"https://www.loginradius.com/blog/identity/authentication-option-for-your-product/\">how to choose the right login method</a>, from traditional passwords and OTPs to social login, federated SSO, and passkeys with few lines of code.</li>\n<li>Security: Implement no-code security features like bot detection, IP throttling, breached password alerts, DDoS protection, and adaptive MFA to safeguard user accounts.</li>\n<li>User Experience: Leverage AI builder, hosted pages, and drag-and-drop workflows to create smooth, branded sign-up and login experiences.</li>\n<li>High Performance &#x26; Scalability: Confidently scale with sub-100ms API response times, 100% uptime, 240K+ RPS, and 28+ global data center regions.</li>\n<li>Multi-Brand Management: Efficiently manage multiple identity apps, choosing isolated or shared data stores based on your brand’s unique needs.</li>\n</ul>\n<p>This structured layout ensures you can quickly understand each capability and how it integrates into your identity ecosystem.</p>\n<h3 id=\"developer-first-navigation\" style=\"position:relative;\"><a href=\"#developer-first-navigation\" aria-label=\"developer first navigation permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Developer-First Navigation</h3>\n<p><img src=\"/a8c155c2b6faf3d5f4b4de4e2b14d763/developers-menu.webp\" alt=\"This image shows the LoginRadius menu bar, highlighting the developer dropdown.\">   </p>\n<p>We’ve been analyzing developer workflows to identify how you access key resources. That’s why we redesigned our navigation with one goal in mind: to reduce clicks and make essential resources readily available.</p>\n<p>The new LoginRadius structure puts APIs, SDKs, and integration guides right at the menu bar under the Developers dropdown so you can get started faster. Our Products, Solutions, and Customer Services are also clearly categorized, helping development teams quickly find the right tools and make informed decisions.</p>\n<h3 id=\"quick-understanding-of-integration-benefits\" style=\"position:relative;\"><a href=\"#quick-understanding-of-integration-benefits\" aria-label=\"quick understanding of integration benefits permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Quick Understanding of Integration Benefits</h3>\n<p><img src=\"/b2f9a964a2da0ea83e2f8596b833bba7/we-support-your-tech-stack.webp\" alt=\"This image shows a list of popular programming languages and frameworks offered by LoginRadius.\"></p>\n<p>Developers now have a clear view of the tech stack available with LoginRadius, designed to support diverse business needs.</p>\n<p>Our platform offers pre-built SDKs for Node.js, Python, Java, and more, making CIAM integration seamless across popular programming languages and frameworks.</p>\n<h2 id=\"over-to-you-now\" style=\"position:relative;\"><a href=\"#over-to-you-now\" aria-label=\"over to you now permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Over to You Now!</h2>\n<p>Check out our <a href=\"https://www.loginradius.com/\">revamped LoginRadius website</a> and see how the improved experience makes it easier to build, scale, and secure your applications.</p>\n<p>Do not forget to explore the improved navigation and API documentation, and get started with our free trial today. We’re excited to see what you’ll build with LoginRadius!</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"February 21, 2025","updated_date":null,"description":"LoginRadius’ vision is to give developers a product that simplifies identity management so they can focus on building, deploying, and scaling their applications. To enhance this experience, we’ve redesigned our website interface, making navigation more intuitive and reassuring that essential resources are easily accessible.","title":"Revamped & Ready: Introducing the New Developer-First LoginRadius Website","tags":["Developer tools","API","Identity Management","User Authentication"],"pinned":true,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.7857142857142858,"src":"/static/80b4e4fbe176a10a327d273504607f32/58556/hero-section.webp","srcSet":"/static/80b4e4fbe176a10a327d273504607f32/61e93/hero-section.webp 200w,\n/static/80b4e4fbe176a10a327d273504607f32/1f5c5/hero-section.webp 400w,\n/static/80b4e4fbe176a10a327d273504607f32/58556/hero-section.webp 800w,\n/static/80b4e4fbe176a10a327d273504607f32/99238/hero-section.webp 1200w,\n/static/80b4e4fbe176a10a327d273504607f32/7c22d/hero-section.webp 1600w,\n/static/80b4e4fbe176a10a327d273504607f32/1258b/hero-section.webp 2732w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Rakesh Soni","github":"oyesoni","avatar":"rakesh-soni.jpg"}}}},"pageContext":{"limit":6,"skip":612,"currentPage":103,"type":"///","numPages":161,"pinned":"ee8a4479-3471-53b1-bf62-d0d8dc3faaeb"}},"staticQueryHashes":["1171199041","1384082988","2100481360","23180105","528864852"]}