I think the difference between a junior and senior front-end developer isn’t in their understanding or familiarity with a particular tech stack, toolchain, or whether they can write flawless code. Instead, it all comes down to this: how they push back against bad ideas.
What I’ve learned this year is that web performance will suffer if you don’t say no to the marketing department because you’ll suddenly find yourself with eighteen different analytics scripts on your website. If you don’t say no to engineers, then you’ll have a codebase that’s half React, a quarter Vue and another quarter built in a language you don’t even recognize. If you don’t say no to designers, then you’ll have a ton of components that are very similar to one another and that will eventually end up confusing everyone in your organization. And if you don’t say no to project managers, then you’ll forfeit the time necessary to build an accessible, responsive, baseline experience.
The true beauty of web design is that you can pick up HTML, CSS, and the basics of JavaScript within a dedicated week or two. But over the past year, I’ve come to the conclusion that building a truly great website doesn’t require much skill and it certainly doesn’t require years to figure out how to perform the coding equivalent of a backflip.
What you need to build a great website is restraint.
But! The problem with working on large-scale projects with hundreds of people is that saying “no” can be political suicide. Instead, you have to learn how to say it without sounding like a jerk. You need to educate everyone about performance, responsive design, and accessibility. You’ll need to explain to folks what front-end development even is.
And that’s because the hard part is that saying “no” requires justification—even mentorship—as to why something is a bad idea when it comes to building a website.
The even harder part of all this is that front-end development is boring to everyone else, except us. No one cares about the three weird languages we have to write. And certainly, no one cares about performance or accessibility until things suddenly stop working for them. this is why the broken parts of the internet are felt by everyone but are mostly invisible to those who build it.
All of these lessons have reminded me of a piece by Robinson Meyer for The Atlantic about the threat of climate change and how the solutions are “boring as dirt”, or BAD for short:
The BAD problem recognizes that climate change is an interesting challenge. It is scary and massive and apocalyptic, and its attendant disasters (especially hurricanes, wildfires, and floods) make for good TV. But the policies that will address climate change do not pack the same punch. They are technical and technocratic and quite often dull. At the very least, they will never be as immediate as climate change itself. Floods are powerful, but stormwater management is arcane. Wildfires are ravenous, but electrical-grid upgrades are tedious. Climate change is frightening, but dirt is boring. That’s the BAD problem.
The “boring as dirt” problem exists in our industry and every organization we work with. For instance, the performance of a website is obviously a terrible problem for users when they’re trying to report a blackout in their area and the website can’t load because there are a dozen or more third-party scripts loading at any given time.
But fixing that problem? It requires going through each script, talking to the marketing department, finding out who owns what script, why they use it, what data is ultimately useful to the organization and what is not. Then, finally, you can delete the script. The solution to the problem is boring as dirt and trying to explain why the work is important—even vital—will get you nowhere in many organizations.
So, how do we avoid boredom when it comes to solving to front-end development problems?
We must realign it with the goals of the business. We must mention our customers and why they need responsive interfaces when we talk about CSS. We should start a newsletter when we do a ton of great work that no one can see.
And when someone has a bad idea that hurts the web? We should, as politely as we can, say no.
What has me really excited about building websites recently is the fact that we, as front-end developers, have the power to do so much more. Only a few years ago, I would need a whole team of developers to accomplish what can now be done with just a few amazing tools.
Although the projects/tools/technologies are almost endless, in this article I’d like to talk about the top three that have me the most excited about building websites today, and for the future.
Serverless and the JAMstack
Serverless functions, which are really just server-side functions that you don’t host yourself, have been around for a few years, but they’ve really picked up in the past year or so. They allow us to host simple node functions that don’t require a permanent state and can be called from a frontend website the way we would call any other server-side API.
Serverless functions have really changed the game for me and I like to think that they did for frontend developers what sites like Squarespace did for non-developers. For the latter group, they no longer need a developer to build something simple like a portfolio website. For us frontend developers, we no longer need a backend developer to accomplish tasks like creating a contact form on a website. Things that really we should never have needed a whole API to do in the first place!
The popularity of serverless functions has led to the creation of a new tech stack: JavaScript, APIs, and Markup (JAMstack). I really love the concept of the JAMstack because it’s a move to more static, performant, websites, which I’m a big fan of. If you want to learn more about this stack, JAMstack_conf is a great conference to attend. I spoke at this year’s conference in San Francisco about using headless Chrome and Cloudinary to create progressively enhanced dynamic content (long title, I know). You can watch my talk below.
Project Fugu
Project Fugu is an initiative started by the Chromium team to bring to the web as many capabilities that are available to native applications as possible. A lot of these features are small and incremental, but the sum of the parts is going to make a huge change in the way we build progressive web applications.
One of the APIs I’m really looking forward to is the Native File System API, which will allow users of websites the ability to grant access to files on their system. A great use case for this would be Figma, the online interface design tool. Instead of having files “saved” online-only, they could directly work with files on your machine, the same way that native applications do!
Some other APIs I think are interesting are:
Wake Lock API – will allow websites to prevent the device from dimming or falling asleep
Contacts Picker API – will allow websites to access contacts from the user’s device
Get Installed Related Apps API – will allow websites to check if a native application is ins
Although Houdini isn’t exactly ready yet, it’s probably the technology I am most excited for as a lover of CSS because I believe it will be a true game-changer in how we build websites.
Houdini is a collection of APIs that exposes “hooks” into certain parts of the browser’s rendering engine. This gives us low-level access to the different stages that which CSS is applied, allowing us to essentially create our own CSS!
A great example of this is using the Layout Houdini API to create the infamous masonry layout as a new value for the display property. Once these APIs are out, the possibilities for what we will be able to create will be endless!
I tend to be pretty vocal about the problems client-side JavaScript cause from a performance perspective. We’re shipping more JavaScript than ever to our user’s devices and the result is increasingly brittle and resource-intensive experiences. It’s… not great.
But that doesn’t mean I don’t like JavaScript. On the contrary, I enjoy working in JavaScript quite a bit. I just wish we were a little more selective about where we use it.
What excites me is when JavaScript starts reaching into parts of the technical stack where it didn’t live before. Both server-side programming and the build tool process weren’t exactly off-limits to front-end developers, but before Node.js and tools like Grunt, Gulp, webpack, and Parcel came along, they required different languages to be used. There are a lot of improvements (asset optimizations, test running, server-side adjustments necessary for improved front-end performance, etc) that required server-side languages, which meant most front-end developers tended not to go there. Now that those tools are powered by JavaScript, it’s far more likely that front-end developers can make those changes themselves.
Whenever we take a part of the technology stack and make it more approachable to a wider audience, we’ll start to see an explosion of creativity and innovation. That’s exactly what’s happened with build processes and bundlers. There’s been an explosion of innovation in no small part thanks to extending where front-end developers can reach.
That’s why I’m really excited about edge computing solutions.
Using a CDN is one of the most valuable things you can do to improve performance and extend your reach. But configuring that CDN and getting the maximum amount of value has been out of reach for most front-end teams.
That’s changing.
Cloudflare has Cloudflare Workers, powered by JavaScript. Akamai has EdgeWorkers, powered by JavaScript. Amazon has Lambda@Edge, powered by JavaScript. Fastly just announced Compute@Edge which is powered by WebAssembly. You can’t write JavaScript at the moment for Compute@Edge (you can write TypeScript if that’s your thing), but I suspect it’s only a matter of time before that changes.
Each of these tools provides a programmable layer between your CDN and the people visiting your site, enabling you to transform your content at the edge before it ever gets to your users. Critically, all of these tools make doing these things much more approachable to front-end developers.
For example, instead of making the client do all the work for A/B testing, you can use any one of these tools to handle all the logic on the CDN instead, helping to make client-side A/B testing (an annoyance of every performance-minded engineer ever) a thing of the past. Optimizely’s already using this technology to do just that for their own A/B testing solution.
Using a third-party resource? Edge computing makes it much easier to proxy those requests through your own CDN, sparing you the extra connection cost and helping eliminate single point of failures.
Custom error messages? Sure. User authentication? You betcha. Personalization? Yup. There’s even been some pretty creative technical SEO work happening thanks to edge computing.
Some of this work was achievable before, but often it required digging through archaic user interfaces to find the right setting or using entirely different languages and tools like ESI or Varnish which don’t really exist outside of this little sliver of space they operate in.
Making these things approachable to anyone with a little JavaScript knowledge has the potential to help be a release valve of sorts, making it easier for folks to move some of that heavy work away from client devices and back to a part of the tech stack that is much more predictable and reliable. Like Node.js and JavaScript-driven build tools, they extend the reach of front-end developers further.
I can’t wait to see all the experimentation that happens.
Here’s what I’d like you to know upfront: this is a hard problem. If you’ve landed here because you’re hoping to be pointed at a tool you can run that tells you exactly what CSS you can delete from your project, well… there are tools out there, but I’m warning you to be very careful with them because none of them can ever tell you the complete story.
I know what you want. You want to run the tool, delete what it tells you, and you have a faster site in 2.2 minutes. I’m sorry, but I’m going to disappoint you.
I think you should have a healthy level of skepticism for any tool like that. None of them are exactly lying to you — they often just don’t have enough information to give you results that are safe and actionable. That’s not to say you can’t use them or it can’t be done. Let’s take a walk.
The motivation
I imagine the #1 driver for the desire to remove unused CSS is this:
You used a CSS framework (e.g. Bootstrap), included the framework’s entire CSS file, and you only used a handful of the patterns it provides.
I can empathize with that. CSS frameworks often don’t provide simple ways to opt-in to only what you are using, and customizing the source to work that way might require a level of expertise that your team doesn’t have. That might even be the reason you reached for a framework to begin with.
Say you’re loading 100 KB of CSS. I’d say that’s a lot. (As I write, this site has ~23 KB, and there are quite a lot of pages and templates. I don’t do anything special to reduce the size.) You have a suspicion, or some evidence, that you aren’t using a portion of those bytes. I can see the cause for alarm. If you had a 100 KB JPG that you could compress to 20 KB by dropping it onto some tool, that’s awesome and totally worth it. But the gain in doing that for CSS is even more important because CSS is loaded in the head and is render blocking. The JPG is not.
? Looking at “coverage”
Chrome’s DevTools has a “Coverage” tab that will tell you how much of your CSS and JavaScript is in use. For example, if I visit the homepage of CSS-Tricks right now…
It tells me that 70.7% of my style.css file is unused. I imagine it’s right, and that the rest of the CSS is used elsewhere. I didn’t just dump a big style library onto this site; I wrote each line of that by hand, so I have my doubts that more than 2/3 of it is unused globally.
I assumed I could start “recording” then click around different areas of the site and watch that unused number go down as different pages with different HTML are rendered, but alas, when the page refreshes, so does the Coverage tab. It’s not very useful in getting a multi-page look at CSS coverage, unless you have a Single Page App I guess?
I hate to say it but I find looking at code coverage pretty useless. For me, it paints a dire picture of all this unused code on the site, which preys upon my doubts, but all I can do is worry about it.
This might be the very thing that’s given you the idea that unused CSS needs to be discovered and deleted in the first place.
My primary concern
My biggest concern is that you look at something like code coverage and see your unused lines:
And you go, Perfect! I’ll delete that CSS! And you do, only to find out it wasn’t unused at all and you caused big styling problems throughout the site. Here’s the thing: you don’t actually know if a CSS selector is unused unless you:
check coverage on every single page of your entire site…
while executing all JavaScript…
under every possible combination of state…
in every possible combination of media queries you’ve used.
Checking your homepage doesn’t count. Checking all your top-level pages doesn’t count. You gotta dig through every page, including states that aren’t always top-of-mind, not to mention all of the edge-case scenarios. Otherwise, you might end up deleting the dropdown styling for the credit card choice dropdown in the pop-up modal that appears for users with a disabled account who’ve logged in during their grace period that also have a gift card to apply.
This is too complex for automated tooling to promise their approach works perfectly, particularly when factoring in the unknowns of browser context (different screen sizes, different capabilities, different browsers) and third parties.
Here’s an example of my concern playing out:
PurifyCSS Online takes some URLs and instantly provides a copy-pasteable chunk of CSS to use
Here’s me dropping my css-tricks.com into PurifyCSS Online and getting new CSS.
Oooops!
It gave me the opportunity to put in other URLs (which is nice) but there are tens of thousands of URLs on CSS-Tricks. Many of them are fairly similar, but all of them have the potential of having selectors that are used. I get the impression it didn’t execute JavaScript, because anything that came onto the page via JavaScript was left unstyled. It even deleted my :hover states.
Perhaps you can see why my trust in these tools is so low.
Part of a build process
PurifyCSS is probably more regularly used as a build process tool rather than the online interface. Their docs have instructions for Grunt, Gulp, and webpack. For example, globbing files to check and process them:
var content = ['**/src/js/*.js', '**/src/html/*.html'];
var css = ['**/src/css/*.css'];
var options = {
// Will write purified CSS to this file.
output: './dist/purified.css'
};
purify(content, css, options);
This gives you a lot more opportunity for accuracy. That content blob could be a list of every single template, partial, and JavaScript file that builds your site. That might be a pain to maintain, but you’ll certainly get more accuracy. It doesn’t account for content in data stores (e.g. this blog post that lives in a database) and third-party JavaScript, but maybe that doesn’t matter to you or you can account for it some other way.
PurgeCSS, a competitor to PurifyCSS, warns about its comparison technique:
PurifyCSS can work with any file type, not just HTML or JavaScript. PurifyCSS works by looking at all of the words in your files and comparing them with the selectors in your CSS. Every word is considered a selector, which means that a lot of selectors can be erroneously consider used. For example, you may happen to have a word in a paragraph that matches a selector in your CSS.
So keep that in mind as well. It’s dumb in the way it compares potential selector matches, which is both clever and dangerous.
UnusedCSS is an online service that crawls your site for you
Manually configuring a tool to look at every page on your site from every angle is certainly a chore and something that will need to be kept in sync day-to-day as your codebase evolves. Interestingly, the online service UnusedCSS tries to overcome this burden by crawling the site itself based on a single URL you give it.
I signed up for the paid service and pointed it at CSS-Tricks. I admit, with just a glance at the results, it feels a lot more accurate to me:
It also lets you download the cleaned file and offers lots of customization, like checking/unchecking selectors you actually want/don’t want (e.g. you see a class name it doesn’t think you need, but you know for sure you actually do need it) as well as prefixing and removing duplicate selectors.
I enjoyed the increased accuracy of the online crawling service, but there was a lot of noise, and I also can’t see how I’d incorporate it practically into a day-to-day build and release process.
Tooling is generally used post-processing
Say your CSS is built with Less or Sass, then uses a postprocessor to compile it into CSS. You’d probably incorporate automated unused CSS cleaning at the very end of whatever other CSS preprocessing you do. Like…
Sass
PostCSS / Autoprefixer
[ Clean Unsued CSS ]
Production CSS
That both makes sense and is slightly funny to me. You don’t actually fix the styling that generates unused CSS. Instead, you just wipe it away at the end of the build. I suppose JavaScript has been doing that kind of thing with tree shaking for a while, so there is a precedent, but it still feels weird to me because a CSS codebase is so directly hands-on. This setup almost encourages you to dump CSS wherever because there is no penalty for overdoing. It removes any incentive to understand how CSS is applied and used.
PurgeCSS is another tool that takes explicit input and gives you the results
PurgeCSS is another player in the unused CSS market. One tangential thing I like about it is that it clearly explains how it differs from other tools. For example, compared to PurifyCSS:
The biggest flaw with PurifyCSS is its lack of modularity. However, this is also its biggest benefit. PurifyCSS can work with any file type, not just HTML or JavaScript. PurifyCSS works by looking at all of the words in your files and comparing them with the selectors in your CSS. Every word is considered a selector, which means that a lot of selectors can be erroneously consider used. For example, you may happen to have a word in a paragraph that matches a selector in your CSS.
PurgeCSS fixes this problem by providing the possibility to create an extractor. An extractor is a function that takes the content of a file and extracts the list of CSS selectors used in it. It allows a perfect removal of unused CSS.
PurgeCSS seems like the big dog at the moment. Lots of people are using it and writing about it.
Despite PurgeCSS needing special configuration to work with Tailwind, it seems like Tailwind and PurgeCSS are two peas in a pod. In fact, their docs recommend using them together and provides a CLI for using it in a build process.
I believe the gist of it is this: Tailwind produces this big CSS file full of utility selectors. But they don’t intend for you to use the entire thing. You use these utility selectors in your HTML to do all your styling, then use PurgeCSS to look at all your HTML and shake out the unused utility selectors in your production CSS.
Still, it will be an ongoing maintenance issue to teach it about every single template on your site — JavaScript, HTML, or otherwise — while manually configuring anything that relies on third-party resources and knowing that any data that comes from a data store probably cannot be looked at during a build process, making it something to account for manually.
My favorite technique: have someone who is really familiar with your CSS codebase be aware of the problem and aim to fix it over time
Perhaps this feels like the approach of an old-timer who needs to get with the times, but hey, this just feels like the most practical approach to me. Since this problem is so hard, I think hard work is the answer to it. It’s understanding the problem and working toward a solution over time. A front-end developer that is intimately involved in your front end will have an understanding about what is used and usused in CSS-land after time and can whittle it down.
An extreme testing approach I’ve seen is using a (i.e. background-image: url(/is-this-being-used.gif?selector);) in the CSS block and then checking server logs over time to see if that image has been accessed. If it is accessed, it was used; if not, it wasn’t.
But perhaps my favorite tool in the potential toolbox is this:
Visual regression testing
You screenshot as much of your site as possible — like all of the most important pages and those pages manipulated into different states — plus across different browsers and screen sizes. Those screenshots are created from your master branch on Git.
Then, before any branches gets merged into Master, you take all those screenshots of them and compare those to the screenshots in master. Not manually, but programmatically.
There have been other stabs at visual regression testing tools over the years, but Percy is the only one I’ve seen that makes clear sense to me. I don’t just need to take screenshots; I want them compared so I can see visual differences between them. I don’t just want to see the differences; I want to approve or disapprove them. I also want that approval to block or allow merges and I want to be able to control the browser before the screenshot is taken. I don’t want to manually update the comparison images. That’s all bread-and-butter Percy stuff.
Full disclosure: Percy has sponsored things here on CSS-Tricks here before — including that video above — but not this post.
The relation to Atomic CSS and CSS-in-JS
I’m sure there are lots of people reading this that would say: I don’t have unused CSS because the tooling I use generates the exact CSS it needs and nothing more.
Hey, that’s kinda cool.
Maybe that’s Atomizer. Maybe that’s Tachyons that you also run through UnCSS and you are super careful about it. Maybe it’s the Tailwind + PurgeCSS combo that’s all the rage right now.
Maybe you tackle styles some other way. If you’re tightly coupling JavaScript components and styles, like React and Emotion, or even just using CSS modules with whatever, less unused CSS is an advantage of CSS-in-JS. And because tree-shaking and code-splitting come along for the ride in many JavaScript-based build processes, you not only have less CSS but only load what you need at the moment. There are tradeoffs to all this though.
How do you avoid unused CSS in future projects?
I think the future of styling is an intentional split between global and componentized styles. Most styles are scoped to components, but there are global styling choices that are made that take clear advantage of the cascade (e.g. global typography defaults).
If most styling is left scoped to components, I think there is less opportunity for unused styles to build up as it’s much easier to wrap your mind around a small block of HTML and a small block of CSS that directly relate to each other. And when components die or evolve, the styling dies or evolves with it. CSS bundles are made from components that are actually used.
CSS-in-JS solutions naturally head in this direction as styles are bound to components. That’s the main point, really. But it’s not required. I like the generic approach of CSS modules, which is pretty much entirely for style scoping and doesn’t mandate that you use some particular JavaScript framework.
If all that seems theoretical or out-of-reach, and you just have a Bootstrap site where you’re trying to reduce the size of all that Bootstrap CSS, I’d recommend starting by using Bootstrap from the source instead of the final default distributed bundle. The source is SCSS and built from a bunch of high-level includes, so if you don’t need particular parts of Bootstrap, you can remove them.
I don’t really think of Firebase as a performance monitoring tool (all I ever think about is auth and real-time data storage), but nevertheless, it totally has that feature.
[A] tool to track what real users in the wild are experiencing with an easy setup? Yes, please. […] I’ve been using Firebase web perf tracking since June on this very blog. Let’s take a look at the good, the bad, and the downright confusing portions of the Firebase web performance monitoring.
Justin talks about the good and bad of this particular product, but what I think is notable about this kind of performance tooling is that it is reflective of real users using your production site. A lot of performance tooling tests is just fancied up WebPageTest that runs your site once on probably-simulated browser conditions. I don’t see as much happening in the real user performance monitoring space.
I think I’d rank performance testing by type like this:
Run simulated performance metrics in CI. Stop merge requests that break metrics/budgets.
Is it your job to keep an eye on your company’s search engine placement? Or your clients? Or are you building a tool to do just that? Manually Googling stuff isn’t going to scale particularly well there. Wouldn’t it be nice if you could hit an API and it would return you nicely formatted data with this information?
That’s what serpstack is. A “serp” being a “Search Engine Results Page.” You hit it with a search query and it hits you back with a JSON representation of those search results. Simple and handy.
Everything on the search results pages maps to JSON quite logically:
Here’s a basic idea. Say your startup occupies a wonderfully nice #1 position for a particular search result that is very important to your startup. You could set up a little service that hits this API once a day for that search term to verify that you’re still at that #1 spot — and if you’re not, trigger a notification so you find out right away, rather than a month later when you randomly check.
With 100 searches you get on the free plan, that’s enough to make this happen right away. If you need to check more terms or more often, you’ll need to bump up to a paid plan, none of which are particularly pricey for what might be a seriously butt-saving API.
Heading into 2020, it occurs to me that I’ve now been making websites for 20 years. Looking back on that time, it seems as though our practices have been in near-constant churn, and that our progress did not always seem linear. But ultimately, even the missteps and tangents along the way have contributed to a pattern of refinement, and now for the first time, it feels like we’ll have a standard pattern for most of the technical challenges we face. I think 2020 looks to be a stabilizing moment for web standards.
Given that delivery is inherent to our medium, many of our challenges have come from network constraints. Early on, networks offered limited bandwidth, so we developed tools and practices to reduce the physical size of our files. Soon enough, bandwidth er… widened, and latency–the time spent making trips between servers and devices–became our next bottleneck. To mitigate latency, we developed techniques to deliver more code in fewer trips, like combining like-files, splitting our resources across many domains to allow more downloads at a given time, and inlining unlike-files into our HTML to avoid waiting for additional requests. We also learned to distribute our code around the world on CDNs, as physical proximity always helps. But latency itself is improving now, especially with the arrival of 5G, and advancements in how browsers communicate with servers now allow us to request any number of files at a time, or even push files to the browser before it asks for them. All of this has simplified our ability to deliver quickly and reliably, and it’s only just recently become available without complicated workarounds.
Device differences used to confound us as well. In the early years of the mobile web, we had to find creative and often clumsy workarounds to deliver contextually appropriate features and assets, but nowadays we have fantastic tools to deliver device-appropriate experiences. We can use media queries to fluidly adapt our visual layouts across screen sizes, and we can build those layouts using proper design tools like grid and flexbox. We can use standard feature queries to test if we can rely on a particular tool before using it, or even to decide whether to load costly files in the first place. For media delivery, we now have powerful options for delivering appropriately sized images and videos to any device. All of this required less-ideal or non-standard practices only a few years ago, but things have changed for the better.
Accessibility has become simpler to achieve too, which is timely since awareness of its importance has likely never been greater. Standards have given us tools to better communicate the meaning and state of our components to assistive technology, and browsers and OSs have dramatically improved their interaction with those standards.
I don’t mean to suggest that we don’t still face hard technical problems, but I think it is increasingly our own practices and assumptions that create those problems, rather than any forces beyond our control. For example, we still see a few sites that smoothly reconcile fast delivery with smooth responsiveness during runtime, particularly in the average devices that people are using worldwide. But problems like that aren’t absolute–they’re caused by faults in our own priorities, or in over-relying on patterns we already know to be costly.
In short, the tools we need to do our jobs well are here.Except for container queries. We still really need container queries to do our jobs well, and it’s frankly ridiculous that in 2020 we—ahem. Where was I? Oh, right.
So heading into 2020, it feels like we finally have a well-rounded standard toolset for building and analyzing our sites. Nowadays, if a site is slow or expensive to deliver, or slow to respond to user interaction, or inaccessible to assistive technology, or poorly designed on a particular screen, we can take comfort in knowing that it’s probably our own fault and that we can fix it. And that’s great because the web has much bigger, more pressing, non-technical problems that need our attention much more.
What is CRM? CRM software is a modular technology system that includes sales automation, analytics, and marketing automation tools to gather customer data and empower sales teams to work at peak efficiency.
Customer relationship management solutions have become a mainstream part of the business world. CRM systems let organizations track customer data across channels, keep team members informed of user activities, and eliminate excessive manual work gathering information from clients.
With the rise of cloud-based CRM solutions, the technology has become more accessible, even for small businesses, and advanced functionality is becoming the new normal across a wide range of industries.
Grand View Research found that businesses are moving toward increased use of cloud CRM solutions in order to improve customer retention. The technology accomplishes this by
Improving data management throughout the customer lifecycle
Providing greater visibility into customer behaviors
Allowing for better, more efficient service
Supporting geolocation functions that enable organizations to provide location-specific services
Incorporating marketing and sales force automation to streamline operations
Making data available across organizational channels to keep everybody on the same page
These capabilities make CRM systems invaluable in the increasingly digital business world. According to Grand View Market Research’s study, companies from a diverse array of industries are increasing their use of CRM platforms to keep pace with emerging customer and operational demands.
How CRMs are evolving for the digital age
Digital transformation is the big buzzword for businesses today. The term refers to the process of moving from the use of disparate digital technologies to embracing a digital identity that optimizes data, processes, and human interactions around digital capabilities.
To a great extent, this transition is taking place because consumers have embraced digital solutions as a major part of their day-to-day lives. As consumers interact with brands across digital channels, businesses need to respond quickly and efficiently. CRMs lay the groundwork for positive customer experiences in a digitally transformed world, giving businesses access to the data and backend capabilities they need.
A CXO Today report explained that CRM functionality continues to evolve in response to this digital revolution. The technology is shifting to support deeper use of data mining, built-in social functionality to drive collaboration, and dedicated customer-facing tool integration to allow for faster response. These types of solutions will continue to drive CRM adoption moving forward and further entrench CRMs as critical technologies in the modern enterprise world.
What to expect from a CRM implementation
In practice, a CRM system has the potential to transform your operations by giving your employees the tools they need to engage with customers and one another as efficiently as possible. However, getting there involves a potentially tricky implementation process. We’ll go into more detail about what actual CRM use looks like later on, but in the simplest terms, you’ll need to consider the following when implementing a CRM:
Expect a complex purchasing process during which you compare multiple solutions with similar features to identify the best option based on price and specific capabilities.
Be prepared to deal with service-level agreements and pricing structures built around resource consumption and the number of users accessing the system, not one-time purchasing costs.
Ensure you account for time to train employees and get them on board with the new solution.
Implementing a CRM is a big decision. You can expect the transition to be demanding. Keep reading to learn more about CRMs and what they can do for you so you can simplify the process and get your project off on the right foot.
Why CRMs are important for businesses
If you’re running a business or managing a team today, you’ve probably seen the effects of digital technologies. We’re all used to instant access to apps, data, and similar services on our phones at all times. We now expect businesses to be just as accessible. As a result, organizations are left scrambling trying to update their processes to keep up with today’s demands.
In a 2018 McKinsey & Company survey, approximately 80 percent of businesses said they’re working on digital transformation. However, less than a third of those businesses report that their efforts have improved operations and that they are sustainable over time.
CRM technologies are at the center of this movement. They’re among the first technologies to emerge as accessible options for digital transformation, and they’ve become essential as companies try to adapt to today’s digital demands.
So who uses CRMs? Just about any business can find value from the software.
Data: The bedrock of CRM value
Consumers are asking for custom, personalized interactions with businesses. A Forbes report highlighted how retail giants like Amazon are using data analytics to create strong, personalized experiences that give customers what they want in convenient, accessible ways.
The move to custom, individualized experiences isn’t exclusive to retailers, and it isn’t simply a matter of recommending products or services like Amazon does. If you want to offer personalization, you’ll need your business to get better at gathering, communicating, and analyzing data.
Improving support processes
Imagine one of your customers emails your business for help and then calls. Unfortunately the person they talk to is unable to access the email they sent. They talk with your support representative and provide a bunch of information, only to be passed on to a higher-level support engineer who proceeds to ask them to repeat all of the same information over again.
This kind of negative customer experience happens all the time in both B2B and B2C settings. Team members don’t always have access to the same data, and they often have trouble communicating with one another.
CRM systems overcome this challenge by creating a single source of data that can automatically send updates and notifications to stakeholders, saving employees from missed updates that lead to negative experiences.
Driving better sales recommendations by tracking pitches made over time
Have you ever been in an awkward meeting where a new member of your team spends five minutes going through a detailed product pitch to a client only to have the customer respond that they heard the pitch two weeks ago and, while they like the idea, they simply don’t have the budget for it?
These types of experiences can leave clients feeling that they weren’t important enough for you to properly prepare for the meeting. This makes your organization look disorganized and unprofessional.
A CRM deals with these issues by tracking all meetings, who was at the sessions, and what was discussed. A new stakeholder can hop into the CRM and get a quick update on what products have been pitched, how the client prefers to interact, and other key data points that allow for better experiences.
Creating end-to-end visibility into customer-related operations
How easily can you track how a lead was generated? What about the cost of acquiring customers? Can you quickly assess the average time from initial contact to sale?
Sales and marketing teams in today’s digital-focused businesses depend on complex, multilayered metrics more than ever before. That’s why it’s vital to gather information in near real time, communicate it to relevant sources, maintain data quality, and create custom reports.
CRM solutions can do this through a blend of database systems, automation tools, and reporting capabilities that provide more valuable data and help you better understand how your operations play out in the customer relationship.
In practice, digital transformation is all about creating better customer experiences. You need data to do that.
Without the right information in the right place at the right time, your workers can’t meet the needs of customers who may email you one hour, call you the next, and complete a transaction on a mobile app later in the day.
If all of this data is spread out in different databases and content management systems, your teams will be unable to respond to customer demands as they arise. If the information is funneled into the CRM software, your teams can manage customer interactions from a single place.
Key CRM software value propositions
Today, companies can’t get by without the ability to leverage data in everyday operations. But CRM software isn’t just a database. By delivering information in line with specific workflows, the technology is a natural fit for various tasks and teams. A few prime areas where CRM platforms are particularly valuable include
Lead generation. Data gathered within the CRM system can identify how customers heard about a brand in the first place, why they initiated a relationship, when they moved from exploring options to seriously considering a purchase, how they interacted with sales (the number of meetings, website sessions, etc.), and what they actually purchased.
CRM software is the bedrock for tracking lead generation, qualification, and conversion in a cohesive way.
Marketing automation. A CRM platform can integrate with popular marketing automation solutions to create a holistic option for deeper marketing penetration, process automation, and efficiency gains across your teams.
Reporting. CRM systems typically provide a number of preconfigured, easy-to-create reports that you can quickly distribute to stakeholders. Most CRMs also feature custom report generation tools that let you easily gather custom data sets, often sorted by date or other parameters based on your needs.
The technology allows you to create visualizations that make the data more digestible and actionable. In most cases, this includes incorporating personalized data visualizations on user dashboards so that users can see key metrics at a glance based on their job role.
Clerical automation. How much time do your sales, marketing, and support teams spend notifying one another of account updates, reporting to each other during meetings, and dealing with data quality across departmental lines?
A CRM system eliminates these problems: Once data is entered, it is automatically communicated to relevant stakeholders or logged into the right systems, all without duplicate manual data entry. CRM software can also automatically pull data from emails, messaging apps, and similar systems to further reduce the amount of clerical work businesses must do.
While these are the essential benefits of CRMs, many businesses find that CRMs can solve specific problems that are unique to their sales and marketing processes.
3 key types of CRM technology
CRM software typically falls into one of three broad categories, which often overlap.
1. Operational CRM
An operational CRM system’s features and capabilities improve operations to drive better customer experiences. They emphasize automation and similar capabilities that help employees get the job done better and more efficiently.
2. Analytical CRM
Analytical CRM systems are primarily devoted to data analysis. They gather information from diverse sources, offering backend analytics functionality, and delivering information to relevant users. These systems are ideal for businesses looking to gain greater insight into their sales and marketing units.
3. Collaborative CRM
A collaborative CRM system, as you’d guess from the name, helps employees work together more effectively. The software’s applications and tools are designed to help siloed business units break down long-standing operational barriers and drive better communication.
Most CRM platforms in use today will incorporate a blend of all three capabilities. A solution may emphasize one or another, but few lack features from these categories.
Common CRM system features
Specific capabilities can vary substantially between CRM platforms. However, a few of the most common features in CRM platforms include
Contact management
Quote and order management
Social media integration
Reporting
Email integration
Sales analytics
Mobile accessibility
File and document management
Marketing and support automation
Interaction tracking
These core capabilities come together to provide a holistic view of sales and marketing operations, letting teams track customer interactions across the pipeline, both before and after the sale. While this is not an exhaustive list of what any CRM platform can do, it provides an idea of how deeply ingrained the technology can be in any business.
CRM systems aren’t just lofty analytics solutions. Instead, they offer real, tactical capabilities that align with key operational pain points teams face every day.
Now that you have a clearer idea of why CRM solutions matter and what they do, it’s important to find the right solution for your needs.
How to find the right CRM
There are a lot of CRM providers fighting for market share right now. Look at some of the best CRM software options on the market, and you’ll quickly find a blend of longtime players promising powerful tools and emerging players claiming to disrupt the status quo and give businesses what they really need.
In many cases, these solutions share many standard features. It’s important to explore the technology’s specific functions and the industry it was designed for. This can make it easier to narrow down options to a reasonable list. However, before you get there, you’ll need to be sure you understand cloud-based CRM systems.
The benefits and pitfalls of cloud CRMs
At this point, the cloud is mainstream, making traditional CRMs all but extinct. With that in mind, it’s vital to understand key benefits and pitfalls that come with using this technology. (We’ll do a deep dive into the cloud later on in this guide.)
Benefits of cloud CRMs
Flexibility to add new features or scale your use of the technology with ease
Lower capital costs with the initial purchase
No need to manage or maintain servers and other data center hardware to support the system
Easier integration with other cloud apps and services through modern APIs
Simpler transitions between solutions as you don’t have to deal with data center disruptions or installation on end-user machines
Accessible to users logging into the CRM from locations outside the office
Pitfalls of cloud CRMs
Potentially higher long-term costs as you pay for subscriptions and deal with possible fees if your usage needs exceeds the limits of your service level agreement
The need to trust a third-party service provider with vital data that must be available to employees at all times
Extra stress on your network as all data involved in the CRM moves through the internet instead of being stored on end-user devices
Reliance on the CRM provider’s development road map for new features and capabilities
These pros and cons are an unavoidable part of cloud CRMs. You’ll need to keep these issues in mind when choosing a platform and look into how the solution provider enhances the advantages of the cloud while addressing the potential problems.
Major players in the CRM sector
There are a variety of CRM options out there; here’s a look at five of the most prominent players in the sector:
Salesforce.Salesforce dubs itself the top CRM in the world, claiming to be used at more than 150,000 businesses of all sizes. The solution focuses on ease of use, giving organizations a streamlined road map to implement the technology, customizing with varied cloud apps and services, and empowering employees to collaborate effectively.
Oracle. As one of the world’s leaders in database development and analytics, Oracle delivers a CRM backed by deep data ecosystems and access to a variety of its cross-channel commerce solutions.
SAP. Like Oracle, SAP brings a long history of analytics excellence and streamlined integration with diverse cloud tools to the CRM space.
Microsoft. The Microsoft Dynamics 365 platform provides core CRM functionality in a package that integrates with Office 365 and the rest of the Microsoft cloud. This powerful integration allows for easy scalability within the platform and brings the familiarity of Microsoft interfaces to the CRM space.
HubSpot. While HubSpot is especially well known for its dedicated sales and marketing software, it also offers free CRM tools that make the technology particularly accessible to businesses of any size.
This is just a snapshot of some of the industry leaders in the CRM space, but exploring each can give you a general idea of what the technology does and how it does it.
Key tools and features in contemporary CRM systems
Each CRM is going to offer different features and methods to complete a task. But core CRM functionality ultimately boils down to three key ideas:
Automation. Modern CRMs automatically compile data and perform deduplication to ensure the information you have about customers is accurate and up to date at all times. The technology can also be configured to send users alerts or provide dashboards that automatically notify team members when there’s a task they need to complete.
CRMs don’t just manage key data in the backend; they capture it from various sources and deliver it to the other apps and services you use.
Integration. Today’s CRMs are built in the cloud and typically designed to work easily with other apps and services in a cloud provider’s ecosystem.
Whether it’s direct CRM integration within a cloud platform or one that uses APIs to grab data from a source like social media, integration tools let the CRM access customer data or process updates and log them in near real time to ease the operational burden on end users.
Reporting. Gathering information from diverse sources and integrating that data with end-user apps is great for day-to-day operations.
Built-in reporting tools make CRMs invaluable from a strategic standpoint. The technology uses the customer and operational data it manages to compile reports on key metrics and benchmarks you want to track.
You can typically use CRMs to create custom reports as well. The software can prove vital in helping you gain deeper transparency into your business without a great deal of manual data gathering and analysis.
These three pillars of modern CRM technologies lay the groundwork for smaller features that you’ll want to explore as you dive into the specific solutions on the market. Understanding the core functions available can make it easier to investigate how different vendors achieve these capabilities and assess their fit for your needs.
Accounting for scalability and flexibility
How much do you expect your business to change in the coming years? Cloud-based CRM software should be able to scale based on your resource needs.
Adding new users to the subscription or handling more data isn’t a huge hurdle. But if you have unpredictable needs, you should explore the billing models used by different vendors.
Some solutions may allow for more flexibility without high costs. On the other hand, some vendors may increase their prices when you unexpectedly need more resources. As you weigh your vendor options, think about where your business stands in terms of the predictability of data storage, analytics needs, and the number of users in the system.
In terms of flexibility, talk with solution providers about their development road maps and how they prioritize adding or tweaking features based on feedback. Chances are there won’t be a system that has every single feature you want out of the box. You’ll probably either need some customization or have to look out for capabilities that the provider doesn’t offer. It’s important to understand the vendor’s approach to ongoing development so you aren’t surprised after making a purchase.
Choosing the right CRM for your needs is ultimately going to come down to identifying must-have features, capabilities you’d like, and functionality you don’t care about. From there, you can blend those specifications with your budget requirements to create a short list. Once you have a base, you can start going through sales demos and getting to know vendors to further explore your options.
The importance of CRM integrations
Integration is central to CRM value
Serving as a single source of data is the key purpose of a CRM system. If you’re considering the technology, you need to think about how it integrates with your existing systems to make sure it can function as your data hub.
You can’t have a dedicated marketing automation platform with its own set of customer data while your customer support team has separate account tracking software and your financial teams have yet another distinct record of customer information.
Think about trying to get by with customer data located in three distinct places. Your teams would all enter information manually in disparate systems, duplicating data on the same clients and storing that information separately. The result would not only be potential confusion, but also difficulty in tracking customer interactions across channels.
With a CRM platform that serves as a central warehouse for customer information, you can log relevant information once, and then it’s automatically visible to users on relevant teams. Generally speaking, you can add notes and use separate data fields for customers to clarify any key points of distinction, such as a client who wants to receive billing information at a different email address than marketing content.
The big-picture integration offered by CRM tools — gathering data from various apps, centralizing that information, and making it available to users in relevant ways — is central to getting value from the technology. However, more nuanced integration capabilities have emerged as CRM software has matured, adding a greater degree of convenience, data transparency, and operational efficiency.
Beyond basic integration: App integration and APIs
Before exploring the opportunities of CRM software created through app integrations and APIs, let’s focus on distinguishing what we’re talking about when we use these terms. Though they aren’t quite interchangeable, they have many similarities.
App integration. Application integration is when a CRM system and an application are able to work directly alongside one another, taking elements of the CRM solution or the discrete app and displaying them directly in the user interface.
APIs. An application programming interface is a prebuilt set of tools that allow a portion of an existing app to be used within another system.
App integration and APIs deliver value in the same way — by bringing functionality from various apps and services into the CRM system or bringing CRM capabilities into another application. This leads to huge efficiency gains, as it saves users from having to switch between multiple applications to complete a task.
Earlier in this guide we talked about how CRM software is a key component of digital transformation programs. These integrations are an essential part of this process. They ensure that users can get multiple tasks done through a single interface, making it much easier for them to meet customer demands.
The list of integration options could go on and on, but there are a few common ones that stand out.
Common CRM integrations and APIs
Let’s look at some of the options you should expect from a modern CRM system and a few specific examples to show the types of things a CRM integration can accomplish.
Email integration
Integrating your CRM with your email system is one of the most useful integrations. Imagine you’re a salesperson trying to set up a meeting in response to an email from a prospect. You open the email and get the request for the meeting, then have to jump into the CRM system to explore the prospective customer’s history and a record of how you’ve marketed to them.
From there, you go back to your email and write a message that is personalized based on that history, and you try to schedule a session. Then, you go into your calendar and block out time. Finally, you open your conference call application to schedule the call.
Now imagine going through that same process with email integration. You get the email, and a CRM interface built into the email either automatically links to the prospect’s record or displays key information on your screen. You can send the reply from there, and the CRM solution can grab the data for call scheduling and automatically create calendar holds and conference lines.
A task that would require a bunch of manual steps involving multiple apps is handled through a single interface, automating the bulk of the clerical work. This allows you to focus more of your time on personalizing your message to the client, not on worrying about the details.
Of course, this is just one example of how email integration can work. Building this kind of CRM functionality into your email results in several key capabilities:
Setting reminders to contact customers on certain days in the CRM, based on your sales process or client requests, and getting notifications in your inbox
Displaying key sales and marketing data within the email interface so you can avoid faux pas, such as trying to sell a customer something you recently pitched or assuming a client is using one of your products when they aren’t
Automating updates to team members to ensure relevant stakeholders are always informed
Logging email communications in the CRM system so all parties involved in managing the client relationship can see a history of interactions
Email is a hub for enterprise communication, and CRM software integration with email, calendar, and conferencing solutions will help you get even more value from messaging.
Analytics integration
CRM systems provide reporting and basic analytics, which helps you gain a stronger understanding of your day-to-day sales, marketing, and customer support efforts.
However, deeper analytics capabilities, such as machine learning, artificial intelligence, and similar capabilities that require larger amounts of information, are often separate from CRM solutions.
Some tools will provide a few features that qualify as advanced analytics, but the real value comes when the CRM software integrates with other databases to create large, valuable data caches that you can use to get to know your customers.
Integrating with various databases and dedicated analytics solutions lets you dive deep into using data as a competitive differentiator.
Support platform integration
Customer support teams spend most of their time interacting with your clients, often trying to make them happy when they start out frustrated by something that isn’t working the way they expect it to.
Your support team frequently gathers large amounts of customer information during these interactions. If a client speaks with multiple support representatives and has to repeat the same information at each checkpoint, they can grow understandably frustrated.
Integrating your CRM solution with your customer support platform eliminates this problem.
Contact center representatives can get key customer data, such as which products the customer is using, how long they’ve been a customer, and key notes on demeanor, right on their screen when a customer calls.
The data is automatically displayed because the CRM solution recognizes the customer’s phone number and grabs the right information. Your support rep can take notes on the call and pass those notes on to higher-level support workers as the call is escalated.
All told, the integration between the CRM solution and support platform transforms how you interact with customers, driving efficient, positive experiences that fuel engagement.
App integration
There are a plethora of apps that can potentially integrate with a CRM system, either through an API or a direct integration. They can be social media apps, dedicated productivity solutions, or entire cloud platforms. Here’s a look at how JotForm integrates with CRM systems so you can get a feel for how app integration can add value to CRM platforms.
JotForm is an online form creation tool. You can use it to create customer surveys, registration and contact forms, payment invoices, booking documents, and just about any type of form you can think of.
JotForm features a variety of templates and lets you customize your forms. On its own, the solution is powerful because it lets you gather information intuitively via web and mobile interfaces, allowing for smoother customer interactions.
If a customer fills out a registration form, the CRM software grabs the relevant data, notifies stakeholders, and updates backend systems with the customer data. Likewise, if you send out a customer survey, the CRM platform can pull customer responses into a central sheet and give you reporting tools so you can view that information in a cohesive way.
Though just one app that integrates with CRM software, JotForm is a prime example of the value that comes through automation and reporting with CRM databases.
How integration is handled
Traditional integration methods were limited. Before many CRM solutions were hosted in the cloud, you had to come up with your own solution, often writing custom code and going through complex development projects to get different systems to interact with one another.
In today’s cloud-driven world, app designers are increasingly using API tools or streamlined development capabilities to ensure their apps can integrate with major cloud platforms. A CRM solution that integrates with a cloud platform can also integrate with those apps, making it much easier to get data to relevant users in a streamlined way.
Why choose a cloud-based CRM?
What is cloud computing, and how does it work?
The cloud isn’t new, so you’ve probably heard a lot about it. The problem is that there’s a lot of hype and misinformation surrounding the cloud. Let’s get real.
Many small business owners see the cloud mentioned in tech commercials and hear about it on blogs, but they don’t necessarily have a concrete idea of what the technology actually is.
For practical purposes, “the cloud” is a term that the tech industry started using to describe where data goes when it is sent through the internet. The internet itself is simply a network of servers, all hosted in various data centers, that users can access by sending a message to the device’s host address, or web address.
When you’re using the cloud, you send your data through the internet to a server in a data center somewhere, and an application on that server processes and stores that information. This is a bit of a simplification, as there are other variables involved, but it’s a basic rundown of how the cloud works.
The main difference between this method of managing technology and traditional business software is in how applications and data are hosted. Instead of setting up a server in your office and connecting it to your local network, the application is hosted on a third-party server.
The cloud completely transforms how software is delivered to businesses. The benefits are evident in three key areas:
Cost benefits of the cloud
Imagine someone comes to you and asks you to purchase a year’s supply of groceries all at once to be delivered to you at regular intervals. Sure, you’d get the work of planning and managing weekly trips to the store out of the way, but you’d probably find it difficult to make such a large purchase.
This is what used to happen to small businesses when it came to robust technologies, like CRM systems. Organizations saw the value of the technology but couldn’t afford to buy servers, hire IT staff, install network equipment, purchase software licenses, and get everything running. It simply wasn’t realistic from a financial perspective.
Now imagine someone comes to you with the same grocery plan, but instead of paying in a lump sum, you pay a monthly fee. That’s a much more accessible solution, and it’s what cloud computing offers.
You don’t have to buy the hardware. You don’t have to hire IT staff. You don’t have to make data center upgrades in your office. All you do is subscribe to the software, and it’s delivered to you through the internet.
Cloud computing is the reason technologies like CRM software are even possible for smaller businesses. But this doesn’t mean the cloud is cheap.
In fact, cloud CRM solutions may be more expensive in the long run because an ongoing subscription can add up to more than a one-time purchase for technology that lasts for several years. However, the subscription model makes the costs manageable and creates the added benefit of flexibility.
CRM system flexibility and scalability in the cloud
Imagine what your business’ IT setup looked like in the past. You probably had dedicated servers to host software and paid for licenses on an individual basis.
What would it have taken to expand your CRM system, add new functionality, or transition to a new solution in such a setting? The cost and time commitment for that kind of change would have been huge. That’s a major reason why businesses were somewhat slow to innovate in the past.
In the cloud, all of these barriers are gone. If you need to add users to your cloud-based CRM system, you simply change your subscription. If your current solution isn’t meeting your needs, you can migrate to a new one.
It isn’t always an easy transition, but it’s much more manageable than it used to be. The challenges come in training and user engagement, not making a huge, expensive technology overhaul.
Flexibility is where the cloud can be somewhat daunting. It’s possible to customize your experience with a CRM system in the cloud, but the extent to which you can do so relies on what the solution provider allows.
You could end up waiting for the cloud CRM vendor to make updates and changes; however, a provider should give you a road map of feature additions and development goals prior to selling you a subscription.
While you lose some control with a cloud system, you gain the ability to more easily switch between solutions, something that pressures vendors to make frequent upgrades and add modules.
When push comes to shove, the cloud is much more flexible and scalable than traditional CRM setups, but the loss of control is particularly notable when it comes to integration.
CRM integration in the cloud
Since we mentioned this earlier, we won’t go into it in depth here.
Integration can be easier to manage when dealing with cloud CRM solutions because apps and APIs need only integrate with the cloud setup, not with the CRM software and the hardware configuration where the system is physically hosted.
This allows for greater integration. Because businesses often have vastly different data center setups, integration used to require significant customization. In the cloud-computing world, those differences disappear, and integration is much more manageable.
The new cloud reality
It’s understandable if you’re worried about sacrificing control to take advantage of the cloud. But the technology has become pervasive in the CRM sector. In fact, it’s nearly impossible to find solutions that aren’t housed in the cloud. Even longstanding industry giants like SAP and Oracle offer cloud CRM options, and Salesforce gained prominence in large part due to its cloud offerings.
Concerns about hosting critical customer data in the cloud are common, but the technology has evolved to the point where most providers offer far greater security than small businesses can on their own. What’s more, service providers are often certified to comply with key regulatory standards.
Digital technologies are pushing organizations to change quickly and maintain a culture of constant improvement. A cloud CRM system makes that possible through continual updates and feature additions backed by an infrastructure that promotes scalability. These benefits create opportunities for business owners to innovate in ways that weren’t possible in the past.
How CRM automation transforms your business
What is CRM automation?
How many of the tasks involved in your workplace operations are completed the same way every time as long as you meet certain conditions?
For example, if a prospect reaches out in response to an ad campaign, a member of your sales or marketing team probably uses a response template to follow up and determine if the lead is qualified. If a user fills out a form on your website, you probably add them to a newsletter list. If a salesperson holds a meeting with a prospect, chances are you want them to log that meeting.
These are all repeatable and predictable tasks. They are also processes that require clerical work. Whether a sales employee is manually logging details of a meeting and updating a database or a marketing team member is adding an email to a marketing automation list, the manual task, even if it only takes a moment, is another thing your team members have to worry about. CRM automation tools eliminate much of that clerical work.
A lot of this automation stems from the integration mentioned earlier. For instance, if a salesperson sends a prospect a post-meeting recap email, the employee can log that email as an event recap in the CRM platform with just the click of a mouse — assuming the CRM system in use offers email integration.
A CRM solution can also pull data from calendars, productivity apps, conferencing apps, and similar systems to automatically update key data that is valuable to users but too time-consuming to gather and track manually. When all of that clerical work is automated, your employees can spend less time on monotonous work and more time focused on increasing sales.
How do CRM systems typically handle automation?
Most CRM solutions
Analyze data from integrated sources in near real time
Identify any notifications, documentation, or similar clerical tasks triggered by that data
Automatically initiate the process or alert users of the need to take action
It’s a fairly simple workflow, but in terms of keeping up with the day-to-day demands sales teams face today, the benefits are significant.
Contextualizing automation for a digital world
You need to automate if you’re going to keep up with digital-focused consumers. There are now more points of contact with prospective and existing customers, creating new opportunities to strengthen relationships and create revenue.
The opportunities are great, but there’s also more pressure to stay in touch with more customers across more channels. That can leave employees struggling to keep up with the scale and complexity of everyday work. When that happens, documentation, data management, and other operational best practices vital to everyday operations can fall by the wayside.
When your CRM software automatically identifies duplicate data, your users spend less time logging customer details. When the CRM solution tracks calendar details to record when meetings took place and who attended them, sales team members can log recaps faster. These types of efficiency gains help employees spend less time focused on clerical work and more time working with customers and prospects.
CRM software and marketing automation
Is the automation offered by a CRM platform the same as what marketing automation software provides? Not necessarily. In most instances, CRM automation software offers some marketing automation tools, but these tools are not as robust as a full marketing automation platform.
Marketing automation solutions can manage entire campaigns automatically. Users set parameters and targets, and then let the system distribute content, track engagement, and report on progress.
A CRM marketing automation system can do some of these things through its marketing modules, but a CRM platform won’t replace marketing automation if you’re already using it. Instead, it lets you dip your toes into what the technology can offer.
You can get the best value when your CRM system integrates with your marketing automation platform. In this case, the automation platform does the heavy lifting of running the campaign, but the CRM solution serves as a central repository for that data and communicates it to relevant parties further down the sales and marketing funnel.
Automating security and compliance
Centralizing data can boost security and make it easier to comply with the regulatory standards for your industry.
On most sales teams, employees gather customer data, process payments, pass on details about clients to various team members, and take documents with them on the road as they go on sales visits.
The fast pace and frequent disruption in these tasks creates many opportunities for data theft and loss. All it takes is one employee to leave sensitive customer records at an airport, and you could have a major data breach.
CRM solutions store data in the cloud, so you don’t have to worry about employees accidentally exposing data. The only risk comes if their account is breached, which can happen, but is less likely to result from a simple, everyday error.
Plus, IT teams can configure permissions and workflows within the CRM system to ensure users follow best practices in accessing and managing data. It’s even possible to build compliance into your process through a blend of alerts, reminders, and mandatory processes.
In essence, CRM systems can automate security and compliance by letting you set best practices and then operating with those rules in the background.
Automating the customer experience
We previously covered how CRM software can integrate with customer support platforms to streamline communication between contact center workers. But as customer experiences become more complex and dependent on interactions across channels, businesses need tools that automate a wider range of support tasks, such as
Allowing users to complete self-service tasks that solve their problems without input from support workers
Managing content that helps users troubleshoot problems
Creating virtual assistants that can search content and offer guidance on entry-level topics
Enabling customer support employees to interact with users across devices and channels
Giving customer support personnel constant access to the same customer data
The CRM platform is the central element of these capabilities. It provides the essential data infrastructure for automated services and enables users to share information.
Sales automation
Getting your sales team to work at its best is central to a CRM platform. These systems automate key sales processes by tracking deals in real time, automatically logging data at various points in a transaction, providing the background details needed to configure products and offer quotes, and tracking interactions at all stages of the pipeline.
CRM technology is built primarily for sales processes, and it frequently automates tasks performed on the backend. These gains may seem small on their own, but for sales teams at the office or in the field, automated data management is instrumental.
CRM basics and tutorial for beginners
How to use a CRM system
When it comes to actually using the technology, CRM software isn’t all that different than other apps out there today. You can expect it to be pretty intuitive, with dashboards that give you the key info you need and clear links to specific modules.
Here are some basic entry-level tips for what to expect when using a CRM system and how to interact with it:
You’ll typically log into a CRM through a website or by opening a mobile app. It’s critical to set a strong password or alternative authentication mode. If an unauthorized user got into the system, they could steal data, mess with your information, and otherwise sabotage your sales team. Most attackers that target a business are looking for information they can sell, and the results of a breach can be expensive.
Once you log in, you’ll see a user dashboard. Most CRM solutions will let you customize these dashboards based on the user’s role, but they commonly include a few key data visualizations to showcase key performance indicators, a list of tasks that need to be completed, key notifications, and a toolbar that lets you step into specific modules to get various tasks done.
In the dashboard, you can click on data visualizations to get more information about the report. Clicking on reminders or notifications will take you to the relevant systems, and selecting modules will bring you to a dashboard for that module where you can take further action and see more nuanced data.
Each module includes links to other parts of the application where you can take direct action, whether that’s simply reading information or updating data.
In practice, a CRM solution is fairly easy to use on a day-to-day basis. Much of the challenge actually stems from configuring the solution.
For example, you can use a CRM system to build a new sales automation workflow. Doing so typically requires that you select tasks, users, and data sources to trigger specific reactions. You can set up a workflow where every time a salesperson on your East Coast team responds to an email from a certain client, the manager is notified. This lets you maintain visibility into key accounts with less clerical work.
While you can run into some complexity setting up custom workflows and capabilities, how you do it varies substantially from one solution to another. Most CRM providers will offer training to help you get comfortable with the technology.
Core CRM modules and what they do
CRM software is generally built to be modular in nature, featuring different elements that focus on a specific team or process. This makes it easier to organize your data and operations within the CRM system and can allow you to pick and choose modules based on your needs and budget.
Most CRMs feature three primary modules:
Sales automation
The sales automation module focuses on empowering the sales team to work as efficiently as possible, gathering relevant data and communicating that information at relevant points in a user’s day. This can include everything from managing KPIs for greater visibility to ensuring transparency into product portfolios and pricing. The goal is to give sales teams the information they need to close deals with relevant information all in one place.
Marketing
The marketing component of a CMS system is similar to the sales module, but it focuses on the capabilities marketers need to manage interactions throughout the funnel. Working alongside dedicated marketing automation solutions, the CRM can expand its core capabilities, helping employees assess campaigns on an ongoing basis and keep prospects engaged.
Support
Creating a cohesive customer experience hinges on getting support team members the right data at the right time. CRM solutions make that possible by integrating with various contact center systems to provide key data during interactions and make it easier for team members to log the results of conversations with clients.
These modules aren’t the only options CRM platforms offer. Some include e-commerce-specific solutions, industry-specific functionality, or similar nuanced tools, but these three core modules are the essential components of most modern CRM automation tools.
Tech considerations for a CRM deployment
There’s some good news when it comes to preparing for a CRM system rollout: The CRM service provider meets the bulk of the requirements, leaving you with little to worry about.
That doesn’t mean you don’t have to do anything, but if you have visions of configuring servers, managing data center infrastructure, and dealing with complex system integrations, that isn’t likely. Here’s a look at a few things you must consider before implementing a CRM system.
Network capacity
Sending and receiving information from a data-rich cloud application like a CRM system is going to put a significant strain on your network. Most office LANs will be fine in this situation; the problem might be your internet service.
Getting more bandwidth is essential to support a CRM software rollout. There isn’t a hard and fast rule about data throughput requirements, as they can vary based on user count and other considerations, but you should pay close attention to application performance once the CRM system is deployed and be ready to upgrade your internet service plan if your network isn’t up to par.
Security considerations
While your CRM service provider will handle many security issues, it’s still up to you to determine best practices for user authentication, set standards for internal data sharing, and create a baseline for secure operations within the system. It’s not as much of a burden as hosting your own solution, but neglecting the part you play in securing data can have disastrous consequences.
Training for the new CRM software
CRM training can be tricky. On one hand, CRM solutions are fairly intuitive, and many users won’t need too much help. On the other hand, CRM systems offer broad functionality and may require specific methods to complete certain tasks. This makes strategic training critical.
Failing to get your users on board with a new platform can lead to declines in usage after launch, backlash resulting from the change, and diminished value of the system as a whole.
Successful CRM system adoption actually begins before you make a purchase. Get the employees who will actually use the system each day involved in the process to get their feedback on priorities. This will get them on board with the transition, and they’ll be willing to take time for training.
You can probably handle most basic user education with your own team, but CRM providers may also offer to bring in their own training support for some of the more nuanced capabilities of the system.
The key for training is to never consider it complete. The learning mindset should start before the sale and continue as updates and changes are made.
Conclusion
CRM software has changed the business world. As one of the first cloud-based technologies to be widely implemented, CRM systems have helped usher in an era of constant innovation. What’s more, you can get the technology more easily now because of subscriptions to cloud solutions. CRM systems aren’t just for big businesses anymore. The flexibility and efficiency that you get from CRM software is available to companies of any size, in any industry.
CRM platforms are accessible, but they’re still a big commitment. The technology is becoming a necessary component of operations as organizations work to embrace digital transformation. What’s more, a CRM solution isn’t just valuable for its core functionality. Integrations with digital apps like JotForm expand the functionality across your apps and services.
The business world is going through a digital revolution. Organizations need a solid foundation to provide data stability and organization as they work to adjust their processes. CRM solutions offer this foundation for your sales and marketing efforts, letting you gather and use data as effectively as possible.
Implementing a CRM solution may be a big change for your business. It will require some training and help to get used to a new way of working, but the benefits are too great to ignore.
The CRM sector is continually growing and evolving as business demands change, making the technology uniquely suited to help organizations respond to customer demands. At JotForm, we bring that same culture of constant improvement to digital form creation and management.
These technologies make digital transformation a real option for small businesses. They give you the flexibility you need to customize based on your needs and the functionality necessary to bring your company into the future.
We’ve called them an ‘opening and closing panel’ so far, but they are also described as expansion panels, or more simply, expanding panels.
To clarify exactly what we’re talking about, head on over to this example on CodePen:
That is what we’ll be building in this short tutorial.
From a functionality point of view, there are a few ways to achieve the animated open and close that we are looking for. Each approach with its own benefits and trade-offs. I’m going to share the details of my ‘go-to’ method in detail in this article. Let’s consider possible approaches first.
Approaches
There are variations on these techniques, but broadly speaking, the approaches fall into one of three categories:
Animate/transition the height or max-height of content.
Use transform: translateY to move elements into a new position, giving the illusion of a panel closing and then re-render the DOM once the transform is complete with the elements in their finishing position.
Use a library that does some combination/variation of 1 or 2!
Considerations Of Each Approach
From a performance perspective, using a transform is more effective than animating or transitioning the height/max-height. With a transform, the moving elements are rasterized and get shifted around by the GPU. This is a cheap and easy operation for a GPU so performance tends to be much better.
The basic steps when using a transform approach are:
Get the height of the content to be collapsed.
Move the content and everything after by the height of the content to be collapsed using transform: translateY(Xpx). Operate the transform with the transition of choice to give a pleasing visual effect.
Use JavaScript to listen to the transitionend event. When it fires, display: none the content and remove the transform and everything should be in the right place.
Doesn’t sound too bad, right?
However, there are a number of considerations with this technique so I tend to avoid it for casual implementations unless performance is absolutely crucial.
For example, with the transform: translateY approach you need to consider the z-index of the elements. By default, the elements that transform up are after the trigger element in the DOM and therefore appear on-top of the things before them when translated up.
You also need to consider how many things appear after the content you want to collapse in the DOM. If you don’t want a big hole in your layout, you might find it easier to use JavaScript to wrap everything you want to move in a container element and just move that. Manageable but we have just introduced more complexity! This is, however, the kind of approach I went for when moving players up and down in In/Out. You can see how that was done here.
For more casual needs, I tend to go with transitioning the max-height of the content. This approach doesn’t perform as well as a transform. The reason being that the browser is tweening the height of the collapsing element throughout the transition; that causes a lot of layout calculations which are not as cheap for the host computer.
However, this approach wins from a simplicity point of view. The pay-off of suffering the afore-mentioned computational hit is that the DOM re-flow takes care of the position and geometry of everything. We have very little in the way of calculations to write plus the JavaScript needed to pull it off well is comparatively simple.
The Elephant In The Room: Details And Summary Elements
Those with an intimate knowledge of HTML’s elements will know there is a native HTML solution to this problem in the form of the details and summary elements. Here’s some example markup:
<details>
<summary>Click to open/close</summary>
Here is the content that is revealed when clicking the summary...
</details>
By default, browsers provide a little disclosure triangle next to the summary element; click the summary and the contents below the summary is revealed.
Great, hey? Details even support the toggle event in JavaScript so you can do this kind of thing to perform different things based upon whether it is open or closed (don’t worry if that kind of JavaScript expression seems odd; we’ll get to that in more detail shortly):
OK, I’m going to halt your excitement right there. The details and summary elements don’t animate. Not by default and it is not currently possible to get them animating/transitioning open and closed with additional CSS and JavaScript.
If you know otherwise, I’d love to be proved wrong.
Sadly, as we need an opening and closing aesthetic we’ll have to roll up our sleeves and do the best and most accessible job we can with the other tools at our disposal.
Right, with the depressing news out of the way, let’s get on with making this thing happen.
Markup Pattern
The basic markup is going to look like this:
<div class="container">
<button type="button" class="trigger">Show/Hide content</button>
<div class="content">
All the content here
</div>
</div>
We have an outer container to wrap the expander and the first element is the button which serves as a trigger to the action. Notice the type attribute in the button? I always include that as by default a button inside a form will perform a submit. If you find yourself wasting a couple of hours wondering why your form isn’t working and buttons are involved in your form; make sure you check the type attribute!
The next element after the button is the content drawer itself; everything you want to be hiding and showing.
To bring things to life, we will make use of CSS custom properties, CSS transitions, and a little JavaScript.
Basic Logic
The basic logic is this:
Let the page load, measure the height of the content.
Set the height of the content onto the container as the value of a CSS Custom Property.
Immediately hide the content by adding an aria-hidden: "true" attribute to it. Using aria-hidden ensures assistive technology knows that content is hidden too.
Wire up the CSS so that the max-height of the content class is the value of the custom property.
Pressing our trigger button toggles the aria-hidden property from true to false which in turn toggles the max-height of the content between 0 and the height set in the custom property. A transition on that property provides the visual flair — adjust to taste!
Note:Now, this would be a simple case of toggling a class or attribute if max-height: auto equalled the height of the content. Sadly it doesn’t. Go and shout about that to the W3C here.
Let’s have a look how that approach manifests in code. Numbered comments show the equivalent logic steps from above in code.
Here is the JavaScript:
// Get the containing element
const container = document.querySelector(".container");
// Get content
const content = document.querySelector(".content");
// 1. Get height of content you want to show/hide
const heightOfContent = content.getBoundingClientRect().height;
// Get the trigger element
const btn = document.querySelector(".trigger");
// 2. Set a CSS custom property with the height of content
container.style.setProperty("--containerHeight", `${heightOfContent}px`);
// Once height is read and set
setTimeout(e => {
document.documentElement.classList.add("height-is-set");
3. content.setAttribute("aria-hidden", "true");
}, 0);
btn.addEventListener("click", function(e) {
container.setAttribute("data-drawer-showing", container.getAttribute("data-drawer-showing") === "true" ? "false" : "true");
// 5. Toggle aria-hidden
content.setAttribute("aria-hidden", content.getAttribute("aria-hidden") === "true" ? "false" : "true");
})
The CSS:
.content {
transition: max-height 0.2s;
overflow: hidden;
}
.content[aria-hidden="true"] {
max-height: 0;
}
// 4. Set height to value of custom property
.content[aria-hidden="false"] {
max-height: var(--containerHeight, 1000px);
}
Points Of Note
What about multiple drawers?
When you have a number of open-and-hide drawers on a page you’ll need to loop through them all as they will likely be differing sizes.
To handle that we will need to do a querySelectorAll to get all the containers and then re-run your setting of custom variables for each content inside a forEach.
That setTimeout
I have a setTimeout with 0 duration before setting the container to be hidden. This is arguably unneeded but I use it as a ‘belt and braces’ approach to ensure the page has rendered first so the heights for the content are available to be read.
Only fire this when the page is ready
If you have other stuff going on, you might choose to wrap your drawer code up in a function that gets initialised on page load. For example, suppose the drawer function was wrapped up in a function called initDrawers we could do this:
window.addEventListener("load", initDrawers);
In fact, we will add that in shortly.
Additional data-* attributes on the container
There is a data attribute on the outer container that also gets toggled. This is added in case there is anything that needs to change with the trigger or container as the drawer opens/closes. For example, perhaps we want to change the color of something or reveal or toggle an icon.
Default value on the custom property
There’s a default value set on the custom property in CSS of 1000px. That’s the bit after the comma inside the value: var(--containerHeight, 1000px). This means if the --containerHeight gets screwed up in some way, you should still have a decent transition. You can obviously set that to whatever is suitable to your use case.
Why Not Just Use A Default Value Of 100000px?
Given that max-height: auto doesn’t transition, you may be wondering why you don’t just opt for a set height of a value greater than you would ever need. For example, 10000000px?
The problem with that approach is that it will always transition from that height. If your transition duration is set to 1 second, the transition will ‘travel’ 10000000px in a second. If your content is only 50px high, you’ll get quite a quick opening/closing effect!
Ternary operator for toggles
We’ve made use of a ternary operator a couple of times to toggle attributes. Some folks hate them but I, and others, love them. They might seem a bit weird and a little ‘code golf’ at first but once you get used to the syntax, I think they are a more straightforward read than a standard if/else.
For the uninitiated, a ternary operator is a condensed form of if/else. They are written so that the thing to check is first, then the ? separates what to execute if the check is true, and then the : to distinguish what should run if the check if false.
isThisTrue ? doYesCode() : doNoCode();
Our attribute toggles work by checking if an attribute is set to "true" and if so, set it to "false", otherwise, set it to "true".
What happens on page resize?
If a user resizes the browser window, there’s a high probability the heights of our content will change. Therefore you might want to re-run setting the height for containers in that scenario. Now we are considering such eventualities, it seems like a good time to refactor things a little.
We can make one function to set the heights and another function to deal with the interactions. Then add two listeners on the window; one for when the document loads, as mentioned above, and then another to listen for the resize event.
All Together
With the page load, multiple drawers, and handling resize events, our JavaScript code looks like this:
var containers;
function initDrawers() {
// Get the containing elements
containers = document.querySelectorAll(".container");
setHeights();
wireUpTriggers();
window.addEventListener("resize", setHeights);
}
window.addEventListener("load", initDrawers);
function setHeights() {
containers.forEach(container => {
// Get content
let content = container.querySelector(".content");
content.removeAttribute("aria-hidden");
// Height of content to show/hide
let heightOfContent = content.getBoundingClientRect().height;
// Set a CSS custom property with the height of content
container.style.setProperty("--containerHeight", `${heightOfContent}px`);
// Once height is read and set
setTimeout(e => {
container.classList.add("height-is-set");
content.setAttribute("aria-hidden", "true");
}, 0);
});
}
function wireUpTriggers() {
containers.forEach(container => {
// Get each trigger element
let btn = container.querySelector(".trigger");
// Get content
let content = container.querySelector(".content");
btn.addEventListener("click", function(e) {
container.setAttribute("data-drawer-showing", container.getAttribute("data-drawer-showing") === "true" ? "false" : "true");
content.setAttribute("aria-hidden", content.getAttribute("aria-hidden") === "true" ? "false" : "true");
});
});
}
You can also play with it on CodePen over here:
Summary
It’s possible to go on for some time further refining and catering for more and more situations but the basic mechanics of creating a reliable opening and closing drawer for your content should now be within your reach. Hopefully, you are also aware of some of the hazards. The details element can’t be animated, max-height: auto doesn’t do what you hoped, you can’t reliably add a massive max-height value and expect all content panels to open as expected.
To re-iterate our approach here: measure the container, store it’s height as a CSS custom property, hide the content and then use a simple toggle to switch between max-height of 0 and the height you stored in the custom property.
It might not be the absolute best performing method but I have found for most situations it is perfectly adequate and benefits from being comparatively straightforward to implement.
Data is the lifeblood of the web. We often say “content is king”, but what we mean is “data is king”.
All good user experiences are crafted after careful data analysis. It’s why we’re all here, from the articles we read, to the products we buy, to the ideas we post, data is everything.
Finding data, particularly for smaller businesses can be a daunting prospect. How can you generate so much data, when your competitors have been pushing, and collecting data for months, or even years? How do you manage and analyse data from millions of sites, without a dedicated research team?
We often say ‘content is king’, but what we mean is ‘data is king’
The answer, as with so many things on the modern web, is automation.
Automating data collection, analysing it, and responding accordingly is easier than you might think thanks to web scraping.
Web scraping is, in essence, what your browser is doing right now: retrieving data from a server, and making use of it by formatting it for you to read. But that’s not all you can do with web scraping. Once you have the data, it can be processed, stored, or republished.
Web scraping is a fantastic way of working with web data, without having to do any heavy lifting.
When to Use Web Scraping
Imagine you’re running a design conference in Manhattan. You want to help your customers by suggesting hotels they might stay in, places to eat out, and the best prices on flights so they can afford your top-tier ticket price. But it’s simply not possible for you to try out every hotel in NYC, let alone every eatery, and pricing for flights from thousands of points of origin changes hourly.
if you were going to build your own, niche search engine this is exactly how you’d do it
So you deploy a web scraping API to search hotel websites for room rates and contact details. You deploy the same API to search review sites for restaurants within walking distance of your venue. You can even deploy the same API to regularly check pricing on the most popular travel sites to help your customers snag the best deal.
Of course, we wouldn’t recommend scraping content and simply reposting it unaltered. Duplicating another site’s content doesn’t help your users, and will see you fall foul of Google, if not the law.
Web scraping works best when you use it to grab the data that other sites want you to find, and make use of — if you were going to build your own, niche search engine this is exactly how you’d do it.
Web Scraping with scrapestack
One of the best web scraping APIs available is scrapestack, a real-time, scaleable, REST API. With scrapestack you can retrieve data from billions of web pages, hosted anywhere on the web, in milliseconds.
scrapestack provides a simple 3-step quickstart guide, which is easy to follow, and will have you up and running in five minutes. You can access the API however you please, and example code is provided for PHP, Python, Nodejs, jQuery, Go, and Ruby.
Boasting an uptime of 99.9%, and a widespread, mature infrastructure means that scrapestack can handle bot-blocking, captchas, and even sites rendered with JavaScript. scrapestack allows you to search from numerous cities, or dozens of different countries, so that even localized data is available to you.
Best of all, scrapestack is free to get started; all you have to do is register to get your API key and you’re all set. The free-forever plan allows you to make up to 10,000 requests per month.
you don’t need to be an expert developer to take advantage of the scrapestack API
If you decide scrapestack is the right solution for you, then you might want to delve into the premium offerings. Starting at just $15.99 per month, you can increase your requests into the millions, as well as adding features like HTTPS encryption, concurrent requests, and JavaScript rendering.
scrapestack is delivered by apilayer, one the the most reliable names in the field. apilayer products are known for their shallow learning curves, which means you don’t need to be an expert developer to take advantage of the scrapestack API. The excellent documentation will guide you step by step, and there’s always technical support if you need it — even free customers get access to limited support.
Should You Use Web Scraping?
Everything that you can do with web scraping, can be done by a human being with a web browser, painstakingly traversing search engine results, copying and pasting. But for those who think life is too short for that, a web scraping API is ideal.
The web is packed with semantic data, data that wants to be found and used; scrapestack is an excellent solution that will help you do just that.
To grab your free API key, and start harvesting data from the web, head over to scrapestack.com today.
[– This is a sponsored post on behalf of scrapestack –]