The Best CRM Software for 2020

Staying on top running a successful business means keeping tabs on a very wide range of tasks, and this includes CRM (Customer Relationship Management. The best way to handle this part of your business is to find the best CRM software, but which one do you choose? There are lots of options out there but worry not: we have selected a few of the best for you to choose from.

CRM software solutions come in all different kinds of shapes and sizes and tackle the issue in different ways. Some, for example, is geared toward product management and sales while others are focused on helping you build leads.

Here, we will be focusing on the best CRM software for 2020. We will be highlighting the more popular options to help you narrow down your options. Let’s get to it then, shall we?

The Best CRM Software for 2020

What should you be looking for when choosing the best CRM software? There is a lot of variety when it comes to functionality in CRM software, which is only logical when you consider that every business is unique. You may well have different priorities than other business owners, for instance.

All things considered, below are the best CRM software solutions and what aspect of them they are best at.

The Overall Best CRM Software for 2020: Agile

Agile CRM boasts a very robust feature set and extensive automation abilities. These make Agile CRM the best CRM software package for small businesses of all types. Agile’s starter plan is a rather competitive $8.99 per month, per user. This package offers a range of tools for marketing and sales teams.

Users can store the details of around 10k companies and there is also email tracking support included. In addition to this, you can also create custom milestones.

Agile CRM software offers marketing teams the ability to create forms, landing pages for websites and email templates. Users can also set up automated marketing tasks and easily monitor social media channels.

The varied services that are offered are rather useful, such as canned responses and these services can be enhanced further with the use of plugins.

Best Cloud-Based CRM System: Zoho

Zoho needs little introduction, is one of the best CRM software packages there is. The software stable of Zoho includes accounting and collaborative applications. Zoho could be the ideal option for you if you don’t fancy hosting your CRM software yourself as the product itself is entirely cloud-based.

The software can pull customer data from multiple sources, including social channels, live chat, phone calls and email. The sales signals feature provides Zoho users with a real-time look at customer actions and also provides notifications. Sales targets can be assigned to individual team members, and the owner can use the dashboard to monitor progress.

This CRM software package has features that enable to automate sales processes and it also allows for the creation of individual and distinct portals for customers.

In addition to all of the above, there are also hundreds of extensions that can be added to the central dashboard to increase functionality.

Best for Scalability abilities: HubSpot

Lots of businesses start small, but this doesn’t mean they will stay that way. You need an ability to scale up aspects of your business when you need to. The best CRM software for scalability is, without doubt, HubSpot. Growth is the goal of any business, obviously, so you are going to need a CRM system that is going to manage increased customer intake. HubSpot is the solution you need.

Thanks to the timeline view, HubSpot makes following up on lead interactions a rather simple affair. Personalised emails can be sent through the ether to a schedule and users can gain insights on them. HubSpot’s marketing hub has several optimisation tools that allow you to manage landing pages, email templates watch over SEO ROI.

Best CRM software for ease of use: Streak

The vast majority of CRM software systems are not that easy to get a handle on, not at the beginning – there are just too many moving parts to make it easy. Streak is an exception though, which is why it is one of the best CRM software packages around.

What makes Streak so easy to use is that it is based on an application that 1.5 billion people already have access to… Gmail.

Streak can turn Gmail into a beast of a CRM platform. All you have to do is install the extension and you are off. The service enables easy collaboration and it allows sharing with a single mouse click. Support queues, deals and task reminders using Google Calendar can be managed.

Because Streak is built on Gmail, it works with other Google products too. There are multiple templates available for use also, for specific tasks such as sales and product development.

Best Value CRM: Insightly

For the smaller business, budget is always a concern. When costs are a restraining factor, but you want or need one of the best CRM software solutions, then you want something that isn’t going to cost a spinetingling amount. In this instance, your best bet is Insightly.

With a starting rate of $29 per user, per month, Insightly is the best value CRM software package that there is. An upper limit of 100k records is insanely high and you also have 10Gb storage space. For record collation, you can import 25k records per single session.

Unlimited custom reports, API access and task management are included too. There are also detailed reports offered and connection opportunity to Microsoft’s Power BI – a business analytics service.

In terms of marketing, the product allows for mass emailing – 2,5k emails a day. Insightly is also able to sync with Google Contacts and Calendar. Project automation is made incredibly easy with Insightly.

CRM software is a vital tool that every business owner should have access to, regardless of how large or small the business happens to be. The best CRM software doesn’t have to be ridiculously expensive or flashy, but it must be good at what it does, and the few we have highlighted here are exceptional.

 

Nathan da Silva - Profile

Posted by: Nathan da Silva

Nathan is the Founder of Silva Web Designs. He is passionate about web development and web site design. His expertise is WordPress & Magento as well as many other frameworks. Would you like to work with Nathan? Send him an email on [email protected]

It’s good to share

Trello vs. Asana: Project Management Software for 2020

Cloud based office software has been around for a good while now, with the two most popular suites being Microsoft Office and Google Drive with all of the document creation software that comes with both. Both make collaboration possible when working with a document, but neither is suited for project work meaning that you would need project management software.

Project management software allows teams of all sizes to work together in a much more organised way than scribbled notes, text messages and emails can ever provide. Even if you and your team are in the same room, project workflow becomes much easier if you are all able to see the same lists, notes and progress at the same time. This becomes especially useful when something is amended and everybody’s work board updates in real time.

Two of the best project moment software solutions on the market right now are Trello and Asana.

Trello vs. Asana: clash of the project management software giants

It can feel pretty overwhelming, trying to decide which project management software is going to be right for you, there is just so choice out there we are, well, spoilt for choice. Two of the most popular options are Asana and Trello, so we’ve limited this comparison to just these two guys in an effort to make things a little easier for you.

Nobody likes setting up multiple accounts on multiple platforms just to try and figure out which one is right for them, who does? Let’s break these two down then, shall we?

Trello basics

According to Trello, the platform is “easy, free, flexible…”. Based on a system of cards, boards and lists it really is a super simple way to organise your workflow in a very visual way.

Boards are at the top of your organisational tree, the home of your individual projects. To these boards, you can add lists (To Do, Doing, and Done for example). To the lists, you can add cards which can contain all kinds of information such as due dates, descriptions, checklists, images, labels etc.

Elements can be moved around using a very simple drag and drop so that you can organise everything as you need to, or as team members need to as tasks are picked up, completed or added.

How it all works

Even the free project management software account, Trello allows for the creation of as many project boards, lists and cards as you need – as the project progresses, so does your collection of board items. Individual tasks can be assigned to different members of your team, and you are also able to tag them in comments. This tagging feature allows you to provide live feedback and you are also able to tag clients too, provided they themselves use the Trello platform too.

This method of communication keeps everything together, on topic and helps to keep your inbox free of unnecessary clutter.

You are also able to fully customise your boards, perhaps with the main colour of your brand, logo enriched image (not for the free account)? A wide selection of stock background photo’s are provided free from Unsplash. Labels can be customised too.

Introducing Power-Ups

Beyond the basic necessities, Trello also offers something they call Power-Ups. These add functionality to project boards that you create.

Beyond its native functionalities, Trello also has Power-Ups available that add different functionalities to your boards. When it comes to project management software, these additions make Trello stand out when compared to most of the other project management software packages. There are lots to choose from too allowing the user to add custom fields, calendars, task automation and a lot more besides.

Trello is also compatible with services you may already be using, such as Google Drive, and it even integrates with Asana.

These additions are available on all account plans but you can only have one per project board if you are on the free plan.

Accessing Trello

No project management software package would be worthy of a second glance if it didn’t allow access from more than a browser. Trello for instance, I am happy to report, is accessible via:

  • Web browser
  • Desktop app – PC & Mac
  • Mobile app – Android & iOS

This means that whatever your preference, wherever you happen to be, you are able to access the platform whenever you need to. Total access like this means you can review changes, requests, progress and respond to client tags as well as update with your own ideas or tasks for yourself or your team.

Pricing

The free account is likely enough for smaller teams and you as many project boards as you like which includes unlimited cards and lists as well as the ability to add as many team members as you need. Your only real limitations, in terms of getting things done, is attachments are limited to 10mb and you can only have one Power-Up per board.

Gold is $5 a month and includes everything the free plan does plus 3 Power-Ups per project board and customisable backgrounds. Gold can also be gained for free if you share with others.

Business Class is $9.99 month and includes everything the Gold plan does plus 250mb attachments and unlimited Power-Ups.

Here is an example of how a typical Trello board may look (there are so many ways to use it; yours could be quite different):

Asana basics

Asana is a project management software tool that, according to Asana, “helps you coordinate all the work your team does together”. You are able to build up project boards using lists, tasks and calendars at every step of the project progression.

This package works in a very similar way to Trello, however, where it differs from Trello is that Asana has extra built-in sections for each of your project boards… including separate projects, calendars and file collation.

How it all works

Projects give you the ability to organise tasks that are related to a specific initiative, goal or work ideas into board or lists. Each project can be set up as either a board or a list and you can add specific tasks, subtasks and assign these to individual team members or groups. You are also able to assign descriptions, attachments and also due dates.

It is entirely your choice whether you opt for a task list or board, it’s a personal preference more than anything but it can also partly depend on the type of project you and your team are engaged with. For example, if there are different steps in different parts of a project then a board may work better for you than a task list.

Integration possibilities

No project management software package is an all in one solution by itself, and as Trello has Power-Ups and can integrate with other applications, so Asana provides users with over 100 separate integrations. These allow you to collate files, emails, tickets and much more in one place. This makes it much easier to track tasks, projects and everything associated with much easier.

Accessing Asana

Just Trello, and most other reputable project management software packages, Asana is accessible no matter where you are – which is obviously a huge plus. You can access it via:

  • Mobile – Android & iOS
  • Web browser – PC & Mac
  • Tablet – Android, iOS & Windows (via the browser on Windows tablets)

A native desktop app is not available yet though, but the web app is still very versatile.

Pricing

Asana has a free plan available. With this option, you have access to unlimited tasks, conversations and projects. You only have basic search, dashboards and a maximum of 15 team members.

Asana’s Premium plan is more costly than Trello, costing $9.99 a month per team member. This gets you everything in the free plan, of course, plus task dependencies, custom fields, a timeline feature, as many dashboards as you need, private projects and teams, admin controls and start dates.

Below, you can see an example of how we use Asana to manage some of our workloads:

Which one should you choose?

When all is said and done, whichever project management software package you choose, much of it is just personal preference.

Trello is very much a visual system while Asana is geared more toward a text-based environment. In terms of actual functionality, Trello offers much more on the free plan that Asana, while Asana’s more useful features are only available on the premium plan.

However, Asana does provide more functionality for its boards while Trello’s project boards are more basic. Depending on your actual needs, these different approaches could either be too basic, just enough, too much or just right. As I say, much of it personal preference.

It could be said that if you prefer a more post-it note approach and you don’t need anything much beyond that type of layout, then Trello is for you. Should lists and slightly more complex project board are your things then Asana is for you.

Here at Silva Web Design, when it comes to project management software, we prefer Asana. Don’t let that cloud your judgement though, each option is an excellent one. Use this comparison as a guide however and you won’t go wrong.

 

Nathan da Silva - Profile

Posted by: Nathan da Silva

Nathan is the Founder of Silva Web Designs. He is passionate about web development and web site design. His expertise is WordPress & Magento as well as many other frameworks. Would you like to work with Nathan? Send him an email on [email protected]

It’s good to share

Should you choose a freelance team over a digital agency?

If you are a project manager, or you are responsible for finding talent for the company that you work for, you may be tempted to turn to large digital agencies for your project. Sometimes, though, it makes more sense to choose a freelance team over a digital agency.

Looking to a large agency is a perfectly natural response and it does make a certain amount of sense: established reputation, larger teams to work on your project, etc.

The trouble is that the two reliability signals mentioned above are largely perception based. Reviews can be faked, for example, leading to false signals in terms of reliability and professionalism. When choosing a freelance team over a digital agency, you are more likely to head for a freelance network such as PeoplePerHour.

Reputation signals here, such as reviews and ranking, are near impossible to spoof which makes them much more reliable and trustworthy. If the numbers say a freelance team is of very high quality, you can take that to the bank.

Of course, an established reputation is not the only consideration.

Cost versus quality when you choose a freelance team over a digital agency

Contrary to popular belief, the cost does not always reflect quality. For professional freelance teams, the quality is always going to be on a par with their much more expensive digital agency counterparts. In fact, very often, the quality coming out of a freelance studio is even better.

It may well seem like the opposite would be true, but let’s take a closer look at this. Agencies have lots of staff, in terms of the creatives and the behind-the-scenes staff that keep everything else ticking over.

All of this is very expensive, as you can imagine, and this isn’t taking other running costs into consideration either. Things like office space for all those people, equipment, IT departments, exorbitant advertising costs to stay ahead of other agencies… it’s a very expensive business.

This, of course, is reflected in the cost to the purchaser, the client, but in order to keep even those rates down, so they actually sell services, to begin with, they have to do something else too.

Digital agencies are under immense pressure to make sales, keep the revenue coming in and keep the business going. To this end, each creative department is under a massive workload weight. With strict output targets to meet, so they serve as many clients as possible, quality is obviously going to suffer.

In the instances where quality is maintained, there is going to be other areas that are lacking: delivery times, customer support, query responses, time taken for edits to be performed… everything is affected when companies put staff under undue pressure.

Why choose a freelance team over a digital agency? What’s the difference, surely freelance teams are under similar pressure to stay afloat? Not so. Let me explain.

Freelance teams are often the better option

A bold claim, right? Maybe, but it’s entirely justified. Depending on your actual needs, you may be much better off if you choose a freelance team over a digital agency. Here are just a few reasons why that statement is true.

Freelance teams are cost-effective

Because freelance teams have much lower overheads (they rarely have multi-user studios, with members of their team often working remotely) there is much less pressure on them to stack clients like an air traffic controller in order to pay their bills. In fact, a freelance team can take fewer clients at one time and still meet financial requirements.

What does all of this add up to? The quality of work that is produced remains the same, and very often it is actually increased as pressure is reduced, but the cost of the creative work is brought down and sometimes dramatically.

Cost does not equal quality, and freelance teams have been proving exactly that for years.

You know exactly who is working on your project

When deciding whether you should choose a freelance team over a digital agency, you need to decide how much you value accountability. Sure, the agency as a whole takes ultimate responsibility but are you entirely comfortable not knowing who did what, why and when?

Agencies are pretty well known for their inherent lack of transparency, which is not something many companies are comfortable with.

With a freelance team of creatives, you always know who is working on what, as teams are usually comprised of people with very specific skillsets and the teams are, by their very nature, quite small. Many freelance teams will also brief you on who will be working on which part of the project for you.

All of this helps to instil a level of trust that just isn’t possible with a digital agency.

Freelance teams are heavily invested in your success

A freelance team wants your business to succeed… Scratch that, they need your business to succeed. If their own business is to survive, they need to be sure that they do the very best possible job for you. A customer that is dissatisfied is very likely a customer that they will never see again. Worse, they could actively damage overall reputation.

Freelance teams are by nature heavily invested in the success of their customer’s business, particularly where the work they have done has a direct influence on their success or failure. It’s because of this, above all other reasons, that the question “should you choose a freelance team over a digital agency” stops being a question.

A digital agency, unless they are totally useless, will survive a customer’s failed project or business. A freelance team has much more to lose, so you can be sure they are going to put every effort into making sure your project is everything that it can be.

Digital agencies are not usually as responsive as freelance teams

Digital agencies typically only operate between the hours of 9 am and 5 pm, sometimes a little later but not usually. Outside of these hours, they are not normally contactable, so if you need to get in touch with them regarding your project you will almost always have to wait until the next business day.

Many freelance teams are comprised of creatives in several different countries. Silva Web Designs, for example, has freelancers in the United Kingdom, the United States, Australia and Portugal. What these varied time zones mean for our clients is that we are contactable 24 hours a day, 7 days a week.

Ask yourself “how quickly do I need an answer to something that is time-critical?”.

The answer is pretty obvious, but if you are responsible as to the answer is pretty obvious, but if you are responsible as to whether or not your company is to choose a freelance team over a digital agency then you should know that freelancers are much more responsive. Their business depends on it, and if yours does too then you already have the answer to the overall question… you choose the freelance team. whether or not your company is to choose a freelance team over a digital agency then you should know that freelancers are much more responsive. Their business depends on it, and if yours does too then you already have the answer to the overall question… you choose the freelance team.

 

Nathan da Silva - Profile

Posted by: Nathan da Silva

Nathan is the Founder of Silva Web Designs. He is passionate about web development and web site design. His expertise is WordPress & Magento as well as many other frameworks. Would you like to work with Nathan? Send him an email on [email protected]

It’s good to share

The 4 best SEO practices for 2020 and beyond

Let’s face it, most businesses are looking to get their websites ranked higher on search engines. In fact, many companies spend small fortunes doing exactly that. But what if you don’t have a budget that could rival the GDP of a small country? There are tonnes of articles on the web that are geared toward telling people what the best SEO practices for 2020 are, just as there were last year and just as there will be next year. The truth is best practices are not year dependant – search engine algorithms don’t really care what the date is.

Why did we choose this title for the piece, then? Well, because it does happen to be 2020 and the best practices we will outline here are going to be just as valid next year too… and the year after, and… you get the idea.

The SEO best practices that we will be detailing here are proven to work and are used by the majority of successful businesses. With the shuttering of Google Plus by Google (who else?), one of these practices has suffered something of a body blow (more on that a little further down) but is still extremely useful.

Let’s get to it then with our, tested and proven, 4 best SEO practices for 2020 and beyond!

Be sure to create and publish epic content

At the core of all successful SEO campaigns is, of course, content. Even in the early days, when sites were garish and content filled with poorly crafted spam, content has always been the cornerstone of every campaign. These days internet searchers and indeed search engines are much more finely attuned to what makes great content, and nothing but engaging and well-created content is going to cut the mustard.

For that reason, as far as SEO best practices go, well-written content that engages users and encourages them to take action, without screaming it at them, is one of the best things that a business of any size could start with.

The skyscraper content methodology is one way for businesses to rank better in search, and to do it legitimately. What this involves is finding the best piece of content on a particular subject, then substantially improving it. For instance, if a really high ranked piece had ten ideas or points for/on a subject, double it. Add infographics, video, research and cite sources, use relevant quotes on the subject from recognised experts in the field.

As mentioned, this is a perfectly legitimate method of improving site authority and rankings. When you become proficient in creating powerful, leading content, you will find that you yourself will begin to be cited and quoted as an industry expert.

Get used to keyword research

While this one does seem rather obvious, keyword research has been the backbone of SEO practices ever since content creators became aware that search engines were starting to ‘evolve’ to look for and rank them in terms of importance, or strength.

Which keywords or phrases are you going after, and are the keywords even relevant? Great keywords and phrases are the very foundations upon which successful campaigns using SEO best practices lean on. If you are not taking aim at the right keywords then more likely than not, your SEO campaign is going to fall flat on its face. What you need to do is assessing competing businesses for the correct keywords and phrases.

If your niche is particularly tough to get ranked in, marketing companies, for example, are everywhere and it is notoriously difficult to rank without spending an exorbitant amount on paid ads, then you should be focused on key phrases. Many call those long-tail keywords, but whichever terminology you use, the result is the same.

Searchers generally use whole phrases when they are further along in the purchasing decision and know exactly what they want: “medium sized dog collar for sale near me” types of search, as opposed to “dog collars”. The first is the kind of specificity that you should be gearing your key phrases toward, keeping in mind that search engines are smart enough to interpret intent. If you happen to sell dog collars there is no need to aim for exactly that kind of search, so be creative.

There are lots of keyword and key phrases research tools available on the web, including the one provided by Google (Google Keyword Planner).

Make use of on-page optimisation techniques

What should be next on your to-do-list is making sure that your website itself is optimised for your targeted keywords and or key phrases. SEO experts and others ‘in the know’ all agree that on-page SEO best practices, properly executed, influence website rankings by 40%. This means paid ads aside, all you need to do in order to find your website on the first two pages of search results is to get your on-page optimisation done correctly.

“that’s great, but how do I do that?”. Good question. The first element that you should begin with is title tags. Only shoot for one keyword or key phrase per page and insert that right into the title tag and in the first 30 words of the page content.

Use it again somewhere near the centre and in the final paragraph. Depending on the length of the page, you should also sprinkle it elsewhere on the page to really hit the SEO best practices sweet spot. How many? It’s generally accepted that between 3 and five occurrences per 500 words is enough, just be wary of using it too much. If it doesn’t read naturally, you have probably overdone it.

Content syndication

Just writing awesome content is not enough, search engines have to collate it first. Known as indexing, the process can take much longer than it used to (there’s a lot of pages on the web these days, far more than even just a few short years ago).

Content syndication is one of those SEO best practices techniques that make some people think “huh, why didn’t I think of that?”. It not only helps get your content indexed faster, but it also helps it rank higher by having it appear in multiple places with much more traffic generation. Facebook and LinkedIn are great for content syndication as they are crawled by search engine ‘spiders’ on a regular basis.

Simply put, you copy your content in its entirety to these sites, and if you add a link at the bottom like “originally published at yoursite.com”, then there’s a handy backlink for you too. Now, this DOES NOT mean that it is ‘duplicate content’. It’s not the same thing, at all. Duplicate content is where the same content appears more than once on the same website.

To conclude

Following SEO best practices for 2020, or any other year, does not have to mean hiring an SEO specialist, especially if your budget does not allow for it. It is relatively straightforward and can be done by anybody that is responsible for creating your content. Help move your business forward by taking care of these details.

 

Vanessa M - Profile

Posted by: Vanessa M

Vanessa Marcos is a writer and social media manager whose passion is copywriting and getting words together to create new stuff. #creativewriting #copywriting Love her writing? Find out more at Calma Copywriting.

It’s good to share

10 Frontend Web Development Tools for 2020

Web development is constantly evolving, with so many libraries and frameworks available and appearing all the time and replacing other less efficient tools. As developers, we must always keep up-to-date with the latest trends and find out the best solutions for your digital projects. Today, we will go through the best tools to use for Frontend Development in 2020.

1. Chrome Developer Tools

This is a set of tools which helps developers get easy access using the browser, which saves devs a lot of time. It makes things super easy by showing you errors in the code directly through the console. When it comes to styling, you get a real-time preview of the changes you make on the fly saving a lot of time. It’s super easy to use and it includes so many additional features. You can even audit your website through the console using PageSpeed Insights. If this is a new tool for you, just know it is perfect to ensure that your website is fully optimised for speed, giving recommendations on how you can make your site faster which in turn will improve your SEO.

The Google browser updates every 6 weeks, so you need to check its web portal to continue developing at an advanced level and to keep up-to-date with the new features. These tools allow you to perform a wide variety of tests in your browser, which helps you save a huge amount of time. Using ‘Device mode’ for example, you can work and test your site to ensure it’s responsive and works across several devices. The ‘sources panel’ allows JavaScript debugging with breakpoints which makes life a lot easier when it comes to debugging. ‘Timeline assists’ helps you find performance issues during running time. It’s essential to have a super-fast website and this tool is extremely helpful.

2. TypeScript

TypeScript is an open-source programming language. It is a strict syntactical superset of JavaScript and it adds optional static typing to the language. TypeScript can be used to develop JavaScript applications for both client-side and server-side execution just like Node.JS or Deno.

TypeScript is designed for development of large applications and transcompiles to JavaScript. As TypeScript is a superset of JavaScript, existing JavaScript programs are also valid TypeScript programs.

TypeScript creates a great web development environment for front-end developers.

TypeScript is a very modern front-end development tool that accepts many integrations. One of the key features is that it accepts other JS libraries, making it possible to use TypeScript on any environment running JavaScript. It accepts definition files that can contain type information of existing JavaScript libraries, such as C, C ++ header files and it is portable in browsers, devices and operating systems.

3. GitHub

GitHub is a Git repository hosting service and it includes many features. Git is a command-line tool which provides a Web-based graphical interface. It also provides access control and several collaboration features, such as wikis and basic task management tools for every project.

The key features of GitHub are allowing all the code in one place, coordinating use, staying aligned, and, after each GitHub project management tool, the developers can host the direct documentation through the repositories.

4. Sass / SCSS

Sass/SCSS is the most reliable and robust CSS extension language. This web development tool helps to extend the functionality of an existing CSS such as variables, inheritance, and nesting with ease. Sass is an open-source project that attracts updated CSS preprocessors. This tool gives you a hand in writing a code that can be easily maintained, thus reducing the amount of CSS you need to code.

Usually, with this, you have a ‘mixins’ file which contains code to simplify coding. As a brief example, let’s say you execute the following code to work cross-browser:


    -webkit-transition: all .3s linear;
    -moz-transition: all .3s linear;
    -o-transition: all .3s linear;
    transition: all .3s linear;

Well, the awesome thing with Sass/SCSS is that we can condense this to a single line of code as follows:-


    @include transition(all 0.3s linear);

It’s a massive time-saver!

Before you can use Sass/SCSS, it needs to be configured on your project. Sass allows you to nest your CSS sectors using a technique that follows the visual hierarchy of your HTML. There are also several applications that will help you use Sass for Mac, Linux and Windows platforms. Some of the key features are that it is simple and easy to use this front-end tool to write any code, it accepts language extensions such as variables, inheritance, and nesting, it has many useful functions for manipulating colours and other values and it has advanced functions such as library control directives.

To get started, I would recommend reading this post that will give you a starter template to use mixins and save a lot of time when it comes to writing CSS code.

5. jQuery

jQuery is one of the most popular JavaScript libraries that is widely used for front-end development. This large library allows developers to focus on the functionality of different aspects. Through this JavaScript library, development can become very easy, such as handling HTML documents, traversing and Ajax. The key features are that it facilitates the creation of highly interactive web applications, offers a powerful theme mechanism, is very friendly and stable, offers extensive support for the browser. On top of this, it’s free and it’s always updating.

In a nutshell, jQuery is a very lightweight (write less, do more”) based on the JavaScript library. The purpose of jQuery is to make it much easier to use JavaScript on your website. jQuery takes a lot of common tasks that require many lines of JavaScript code to accomplish and wraps them into methods that you can call with a single line of code. Simplicity and giving devs the ability to code faster is always a bonus!

6. Sublime Text

Sublime Text is a sophisticated text editor which is widely used among developers. It includes wide features such as Syntax Highlighting, Auto Indentation, File Type Recognition, a wicked sidebar, Macros, Plug-in and Packages that make it easy for working with codebase.

The key features of Sublime Text are that it is compatible with many programming languages, offers Python-based plugin API and it has simultaneous editing which allows for the same interactive changes across multiple domains. We 100% recommend you checking this out, once we started using it, we never looked back!

7. CodePen

CodePen is a web development environment for front-end designers and developers. It enables faster and smoother development. It allows you to add HTML, CSS and JS code to create test cases before implementing it on websites. Another cool feature is that it has a massive library of functions that could be applicable to your site. What does this mean? Well, it’s going to save you a lot of time coding something from scratch when an already implemented code may just need a few edits to make it applicable to your website.

The key features are that it includes great features for faster CSS writing, allows live viewing and live synchronisation and the API prefill feature allows you to add links and demo pages, without having to code anything. A similar website we tend to use is JSFiddle, which offers all the same features. However, the preference is dependant to each user.

8. AngularJS

AngularJS is a structural framework for dynamic web applications. It lets you use HTML as your template language and lets you extend HTML’s syntax to express your application components clearly and succinctly. Its data binding and dependency injection eliminate much of the code you currently have to write. It is an open-source web application framework that allows you to simplify the front-end development process by creating an expressive environment that is legible and accessible. Some of its key advantages are that it is free, it’s open-source and widely used by thousands of developers, allowing you to create RICH Internet Applications, it automatically manages the appropriate JavaScript code for each browser and offers the option to write the application from the client using JavaScript and MVC. AngularJS is quite commonly used today so it’s an important framework to learn moving forward. There have been many times where we have had to take over websites that utilise AngularJS, so stay ahead of the game and learn something new, this is definitely worthwhile!

9. Grunt

Grunt is one of the best front-end development tools when it comes to automating tasks. It is quite commonly used with NodeJs, which offers plugins for common tasks and is very flexible and widely adopted. It offers an alternative to writing down all kinds of tasks that go well with your requirements.

The key features of Grunt are allowing automation of repetitive tasks without a great deal of effort, creating the workflow simply by writing a configuration file, including activities for extending the functionality of plugins/scripts, it speeds up the development process, it also increases the performance of your projects and reduces the chance of errors while you are performing repetitive tasks.

10. Npm

Another great tool is Npm which represents the Node package manager for JavaScript. With Npm, you are able to discover reusable code packages and assemble them in powerful and new ways. It is a command-line utility used for interacting with a named repository than helps in a package.

Some of its key features include the ability to publish and control access to a namespace, you can reuse and discover a massive library of free code packages in the registry, manage public and private code using the same workflow and find out where you have reused code within your teams.

Conclusion

So why is it so important to keep up to date with the latest technologies? Well, as we already mentioned, the world wide web is always evolving and new tools are always being created to make it easier for developers to code. Quite a lot of these tools mentioned help developers by enabling them to create the same functionalities a lot quicker; delivering a project in a shorter time-frame is highly cost-effective and it saves you the time you can use for other tasks. In addition to this, you may have to take over a project that uses a framework that you are not familiar with. That being said, it’s always best to keep up-to-date with the latest technologies to prepare you to complete any given task which in turn will allow you to complete more jobs more quickly and effectively.

Well, we sure hope you loved this post, leave us a comment and let us know your thoughts. If we missed anything you might think that should be in this post, let us know in the comments!

 

Nathan da Silva - Profile

Posted by: Nathan da Silva

Nathan is the Founder of Silva Web Designs. He is passionate about web development and web site design. His expertise is WordPress & Magento as well as many other frameworks. Would you like to work with Nathan? Send him an email on [email protected]

It’s good to share

5 Reasons Consistent Business Branding is Important

Web design, believe it or not, is much more than the elements that visitors are actually able to see. The design of a website has a significant impact on many elements of your business. This is because of the fact that an online presence is one of the more important things that a business needs to keep in mind. If you take consistent business branding seriously, you will be helping to keep your visitors happy.

Consistent business branding creates a familiarity between your brand and website, one that allows users and customers to feel more comfortable with doing business with you. This is because your business will become to look and feel more ‘legit’. It will also make it easier for you to create a distinct ‘personality’ for your brand.

When we talk about design being associated with both a ‘real’ world and digital presence, it is important to understand that when we talk about consistent business branding, we are talking about colours, logos, fonts, your brand message… and it all has to be the same, be consistent, between your online and physical business branding.

The more consistent your brand is, the easier it is going to be for you to build trust for your brand. Why? It’s because people search for companies that they can rely on. As mentioned already, consistent business branding is not just about the visual elements of your website or your bricks and mortar location, it is also about making sure that there is a comfortable interaction between customer, brand and website.

The importance of consistent business branding

Business brand consistency also includes all of your methods of expression, such as video or image content, that will affect how people form opinions about your brand and whether those opinions will be positive or not. Of course, the overall brand consistency is going to depend on the consistency of your messaging, what do you offer exactly, and design.

In the digital world, creating and publishing web content is relatively easy. An idea is very quickly developed from concept to finished product. When it is this easy, is it really all that surprising that lots of brands fail to check for consistency, while some others simply ignore it in favour of speed and getting content ‘out there’.

Your business should not allow itself to fall prey to quantity over quality. There shouldn’t be any variation in things like presentation or interpretation. Any brand that keeps changing is not going to build trust, nor is it going to be perceived as reliable. Large brands rarely change their branding, and that’s because they know how potentially damaging that can be.

Consistency becomes especially crucial when it comes to web design, given just how central the internet to people’s lives the internet has become. Firstly, working toward consistent business branding, make sure that the basics like nav icons, images etc. are in the same place on each page of your website. This way, your site visitors will not be wasting time trying to work out something as simple as how to use your website.

In addition to this, consistent business branding can actually help to lower costs. With a consistent layout, developers can get to work with pre-existing templates meaning that new ones don’t have to be created. This cuts development time, which in turn cuts your costs. The first thing that should be taken care of is the colour scheme – make sure that it is consistent with headers, footers, logos, the background etc.

1. Branding

The single most important thing is to make a crystal-clear connection between your brand’s message, its name and the logo that you are using. This type of connection is extremely helpful. It can even help where the brand name has zero to do with the product being sold. For example, nobody would reasonably connect the name of a planet with a chocolate bar, would they? It does, however, become that much more memorable.

Reinforcing connections between very different elements show to visitors that the details matter to you and this, in turn, makes your look more trustworthy in the eyes of the customer.

2. User interface & User experience

These two aspects of the design have many features of their own, but the main goal that the majority of designers wish to achieve is a sense of predictability and convenience. Take buttons, as an example. Buttons should be immediately recognisable as being buttons, they should also be actually clickable. Not only should they be usable and identifiable, but they should also look and act the same way on all of your pages.

In this way, site visitors will very quickly get used to how your website works, and they will be able to enjoy a relatively seamless experience without distraction. Consistent business branding such as this is well worth investing in.

3. Information communication

It is also very important to keep consistency in mind when it comes to communicating information to site visitors and customers. Your users are going to find it very difficult to find the information that they need if it has been placed in random places around your website. You should be aiming to keep things as simple as possible.

Care should also be taken with font elements such as bold and italics. These can very easily lead to distraction, so be sure that such text is on the same level of importance. Another way to draw attention to a certain piece of text is by using a larger font. That being said, you should take care here too so as not to create confusion with too many sub-headers.

4. Messaging

The right colours and striking logos are important in making your branding visually appealing, however, it is also very important to consider the message of your brand and how it contributes to constructing a strong and consistent business branding. Very often brands will leverage websites to demonstrate how their services or products are superior.

While the above is true, and it is advantageous to demonstrate expertise and accomplishments, it is also true that you don’t neglect the other way you can leverage your website to get your message across: by using it to explain to potential new customers just how you can them too.

5. Logical flow of consistent business branding

The logical flow of design is also something you need to be keeping in mind. For instance, if you have a medium-sized image in the middle of a page and you follow on from there with, say, a 60-word description, then logical design flow would dictate that you do the same with the next image.

Visitors will very quickly pick up on the logical flow of the content, making it easier for them to read and to understand. Logical flow is in use on the sites of all major brands, as they tend to follow best design practices to make things easier for people to move from browsing to purchasing.

In conclusion

Consistent business branding allows visitors to feel more familiar with your brand and your website. Consistency across platforms also helps in the exercise of building trust and creating an image of a brand of being reliable. Web design, done consistently, serves several other purposes including helping to cut costs and make the entire visitation process more convenient for your customers.

 

Nathan da Silva - Profile

Posted by: Nathan da Silva

Nathan is the Founder of Silva Web Designs. He is passionate about web development and web site design. His expertise is WordPress & Magento as well as many other frameworks. Would you like to work with Nathan? Send him an email on [email protected]

It’s good to share

5 Best Web Design Practices To Follow In 2020

In today’s highly competitive business scenario, owning a business website is absolutely essential. In order to make your brand stand out, you need to have an exceptional website.

Who doesn’t want to take their business to the next step? Well, if you wish your brand to grow, then there is a huge list of efforts to make. Any business that wishes to be competitive in this high paced world should definitely opt for a business website.

From getting a highly responsive website designed to maintain your website page speed, everything needs to be taken care of.

But making your business successful isn’t a matter of days. It takes a lot of dedication and efforts during a long time to rise and shine. Have a look at my personal post I posted here, you will see the journey I made in making a business a success.

A website is the exact reflection of your business, so make sure that it’s perfectly designed and portrays your business in the best possible way.

This complete guide is dedicated to some of the best web design practices to follow and about how you can get an exceptional website designed for your business:

Here, we will be discussing some of the best web design practices to follow in 2020:

Have a plan

The most important thing before getting started with designing a website is to have an exceptional plan. You can’t just get started with random ideas with no concrete foundation.

Make sure to have a clear idea of the website requirements and then plan out things accordingly. Ensure that your plan meets the needs of your website’s visitors.

Designing a creative website needs a lot of research, planning and efforts.

Moreover, it’s highly important to think beyond web design. Well, only a professional web designer can offer much more than just design and coding.

Rather, they can help with overall development as well as the maintenance of the website. It’s something that will definitely help your website to get ranked easily and efficiently.

Well-planned website design will in turn gift you with the best ROI that you are looking for. So, make sure to hire an experienced professional for getting an exceptional website designed for your business.

So, have a clear idea of your own set of goals and challenges that you and your business website are going to face in the long run. This way, you can be quite prepared for it.

So, before you go any further, it’s important to have a sorted plan to work accordingly.

SEO Savvy

Your website does need to be optimised according to the browser, but according to SEO guidelines as well. Having a website that isn’t SEO friendly won’t offer you any benefits in the long term.

Don’t ever overlook the power of optimising your website according to Google’s algorithms. It will definitely help you make your business website rank better in search engines.

If your goal is not only creating a website but creating an online presence that leaves a mark, then SEO is something you should definitely consider.

SEO strategy contains creating quality content, creating backlinks, getting your website ranked well on Google, attracting prospects and converting them into happy customers.
SEO plays a major role in helping your business rank well and reach the top.

Mobile ready

You might be thinking: what does being mobile-ready even mean?

Well, to be very precise, being mobile-ready is about how well a website can be accessed on mobile phones and on different browsers, for that matter.

In this digital age, people are using their mobile phones to search for everything, so your business website needs to be mobile-friendly.

Well, having an experienced designer by your side ensures that your website can be easily accessed on desktops, laptops, tablets as well as mobile phones.

There’s no denying the fact that a responsive web design can work wonders for your business. Responsive websites simply mean that your website can adapt to multiple screen sizes easily.

So, make sure that your website is mobile-ready!

Responsive design

Most people out there are using their smartphones and tablets to browse through different websites. So, you need to make sure that your website is responsive and that it fits the screen of different smart devices properly.

Your website needs to be mobile-friendly, or else visitors who use their smartphones to view your site are just going to bounce back. That’s something you don’t want for your website.

So, make sure to have a professional by your side who can help you create a responsive web design that will work on every device that your prospects are using.

A user-friendly website is something that can make a difference when it comes to your business’ ROI. A professional web designer not only makes your website look amazing but also ensures that it’s responsive, adapting to every device.

So, ensure your website is highly responsive and user-friendly to get the most out of it.

A responsive and optimised mobile site provides a great user experience to visitors. In such cases, visitors are more likely to stay on your website for a longer period. This way, you can keep a hold on the bounce rate of your website and gradually get to decrease it.

Having a responsive website definitely offers your visitors with better user experience. So, if your primary objective is the client experience, then you should definitely consider hiring a well-rated web developer rather than using self-service solutions.

Fast loading

A website should load in less than five seconds or less. So, make sure that your website has the shortest loading time possible.

Make sure to track your website loading speed and work on it if it’s showing any issues.

With fast-loading web pages, the bounce rate of the website gradually decreases. Your website needs to have a low bounce rate.

Having a responsive web design can help you to quickly convert your website visitors or prospects into happy customers.

Fast loading web pages are a plus point for your business website and it’s something that can help your business grow organically.

With all these best web design practices to follow in 2020, we’ll also be discussing some of the good reasons to hire experienced web designers:

Uniqueness

By hiring a professional web designer you can expect to get a unique and exceptional website designed. So, make sure to hire professionals that can match your specific needs.

Customisation

Professional web designers are there to offer customised designs that match your set of specific needs and desires. So, if you have a clear idea of how your website should look then you should consider hiring a professional web designer who can bring your dream website into reality.

Responsive web design

In order to get a responsive web design, you need to hire experienced professionals. A responsive website is well designed to work on a mobile device and a computer screen effectively.

Browser compatibility

There are a handful of browsers out there and your website needs to be prepared for all of them. You just can’t deny the fact that not all browsers are created equally. So, your business website must be friendly enough for all the browsers. Make sure to properly test your website on different browsers to get a clear idea of the browser compatibility of your website.

A reliable website

Professional web designers can offer their clients a reliable website. So, make sure to do some research and hunt for someone who can offer you a reliable and error-free website.

Creative minds

Professional web designers are creative in their approach. So, make sure to hunt for creative developers who can get an amazing as well as a responsive website designed. Someone who loves experimenting with new web design trends will provide you with the web design that you really need.

Know market trends

Experienced professionals have deep knowledge of the market and are well aware of the current market trends. So, look for professionals that have up-to-date details about their particular field.

Save your time and efforts

A professional web design agency can definitely save enough of your time and efforts. You no longer have to worry about how your website will look and how it can be optimised. So, leave it all to the professionals.

Launching your business online can prove itself to be one of the best marketing strategies. But before that, you need to get the best web development services for your project to make it a huge success.

For a business that is looking forward to leaving its mark in the online world, getting the perfect website designed can make an immense difference.

Smart business owners invest in their websites to bring their online business to the next level. Being the best marketing tool to grow your business, you should consider investing in your business website.

So, take some time, take a step ahead and get your perfect business website prepared.

Hire Silva Web Designs

Are you looking for professional Web Designs / Web Developers? Look no further, we take care of every single step to get your website to tip-top-shape and have an advantage over your competitors. From planning, creating, building and launching your amazing new website, we can assure you that you won’t be disappointed with our services.

We offer the full package, such as:

  • Brand design
  • Responsive design
  • CMS systems
  • E-commerce
  • Social Media Marketing
  • Email campaigns
  • SEO (Search Engine Optimisation)
  • App development
  • Hosting
  • Copywriting

and much much more!

We have experts that are fluent in various CMS systems such as…

  • WordPress
  • Shopify
  • Magento
  • PrestaShop
  • WooCommerce
  • SquareSpace
  • Laravel
  • CodeIgnitor

 

and again, various other CMS systems on top of this!

Interested? Why not start the process and send an email to [email protected] with your requirements and we’ll get back to you with a quote and deliver nothing but the best.

We love working with new customers and we strive through delivering the best quality of work. We’re pretty sure we won’t disappoint 😉

Loved this article? Drop us a message in the comments. \m/ Happy Coding all \m/

∆ SILVA TEAM ∆

 

Nathan da Silva - Profile

Posted by: Nathan da Silva

Nathan is the Founder of Silva Web Designs. He is passionate about web development and web site design. His expertise is WordPress & Magento as well as many other frameworks. Would you like to work with Nathan? Send him an email on [email protected]

It’s good to share

Diving Further Into WordPress Website Accessibility

So you know a bit about WordPress accessibility, but still, you want to learn. Great!

The WordPress community is dedicated to Core Accessibility.

Accessibility Coding Standards Promise: Any new or revised code released in WordPress will conform with WCAG 2.0 guidelines at Level AA.

The accessibility of a WordPress website depends on 3 factors:

  • Theme
  • Plugins
  • Content

 

Designers, creators, and site owners also influence if the end product is accessible.

Developers play a significant part in the accessibility mix. The issues can not be found until someone reports they can’t see or do anything on the website.

What Can WordPress Developers Do To Make The Sites They Build More Accessible?

The right method is improving accessibility from the start. Rectifying accessibility problems with a site is often more time-consuming and difficult to do (though it might happen often).

So, this is what you should do:

  • 1. Choose An Accessibility Ready Theme
  • 2. Use Plugins to produce Accessible Content
  • 3. Teach Customers to Add Accessible Content

 

Tota11y, a Khan Academy developed usability visualisation toolkit, is an awesome developer tool. Simply attach their JS file to your site to allow the accessibility feature, which appears in the shape of a tiny glasses icon tab.

1. Choosing an Accessible Theme for WordPress

The first step on a fully accessible website is to select an accessible theme. Many theme developers take the time to implement the instructions in the WordPress theme accessibility guide, so it is best to ask the author whether a particular topic is accessible or not.

WordPress also includes free themes. Find the submenu under the “Function Filter” heading and click on the cog icon.

There are many options you can choose to filter your search. In the Features section, click the feature above that is reliable readiness.

You can then select any number of filters. On the left, you will see a Filter button that shows the number of filters applied. Click Apply filters. Then, select a topic.

It is important to note that the fact that a theme is labelled Accessibility Ready does not mean that it is “fully” accessible. However, if a theme developer marks their theme as accessible, they probably made some effort into making it accessible. If you encounter any issues, let them know so they can update it for other users.

2. WordPress Free Plugin Solutions For Accessibility

You may be creating your own WordPress theme, or you using any theme you want. One of the amazing things in WordPress is the availability of tens of thousands of add-ons. Whenever you need something, there is usually an add-on that can fit into your website.

My personal choice is WP Publishing, which comes with a variety of tools to help you find and fix the most common problems you find when using WordPress. It requires very little expertise and minimal setup.

WP Accessibility Helper (WHA) is another option in a range of options that include several useful features for skipping links, changing font size, scanning domains, contrast mode, and more. The features you want to include can meet more specific accessibility requirements.

Fonts: Create a font size widget for your sidebars. This makes it easy for readers on your site to resize text according to their needs.

Another easy-to-read option is the Zeno Font Resizer. The plugin allows webmasters to set the font size as well as the font size options. So when users return to your site, they’ll see the font size as they specified before.

Text-to-speech: For readers with visual impairment, text-to-speech features offer audio options for the blind. 190 WordPress add-ons offer a voice of human quality, support over 30 languages, and work with most topics.

G-speech text-to-speech solution is a free alternative for accessible audio. It works with any text on your site and adds an audio block to your site. You can then use these options to change the colour, speaker sound, and more.

Forms: You can easily access your contact forms through the Contact Form 7 plugin. This allows you to set default values for forms and formations, such as WCAG form fields, or readily available forms, such as add-ons.

3. Testing Your Website Accessibility

Once you’ve created your website, it’s a good idea to review your changes. There are many methods and software that you can use to make the experience enjoyable, but there are a few that make testing easier.

One that we mentioned earlier in this article is the Tota11y. Along with this, you can use WAVE Web Accessibility Diagnostic Chrome extension. This auxiliary device displays all errors, warnings, features, structural features, ARIA labels so that you can edit them accordingly.

Once you’ve created your website, it’s a good idea to review your changes. There are many methods and software that you can use to make the experience enjoyable, but there are a few that make testing easier.

Apart from Tota11y, the WAVE Web Accessibility Diagnostic Chrome Extension helps auxiliary device displays all errors, warnings, features, structural features and ARIA labels so that you can edit them accordingly.

Conclusion

Website accessibility is just as important, if not more essential than directing traffic to your website. You should make sure anyone who lands at your website will completely understand and navigate through all the information available there.

That’s why we recommend these accessibility features and the right plug-ins to make them work. If you want to make your website fully accessible, these tips should give you a head start.

If you want us to look at your website and suggest/implement ways in which we can improve your accessibility, feel free to drop us an email at [email protected] and we’d love to help you! Alternatively, you can get in touch with MangoMatter Media and they would be very happy to assist you.

 

Nathan da Silva - Profile

Posted by: Nathan da Silva

Nathan is the Founder of Silva Web Designs. He is passionate about web development and web site design. His expertise is WordPress & Magento as well as many other frameworks. Would you like to work with Nathan? Send him an email on [email protected]

It’s good to share

Web Design Trends that are going to Rule 2020

Well, you just can’t deny the fact that the web has dramatically changed the world over the years since its inception. Giving us the power to craft some fantastic experiences, the web has turned out to change our reality.

A well-designed professional website is an asset for business owners. Apart from being an important part of online marketing, a website acts like a mirror of the brand.
It creates the first impression in the minds of potential customers, so make sure to make the most out of it.

So, in this complete guide, we’ll be focusing on the trends that are going to dominate the web design industry.

It is a common saying that change is the only constant. Design trends prove that in many ways.

Web design trends never stop evolving and in this article, we’re going to discuss the ones that can help businesses grow and thrive.

So let’s shed some light on a few of the innovative web design trends that are going to rule 2020:

Dark Mode

The dark mode trend took 2019 by storm and it’s all set to rule 2020.

The clear bold fonts on the dark themes improve all designs. Not only does it look stunning, but it also makes different elements of the design more appealing. The right kind of colour combination plays an important role in making your website catch your users’ eye.

This low light user interface helps to reduce eye-strain by adjusting the brightness as well.

“Designing the Truth”

You might be thinking, what does this even mean? Well, our present reality has introduced the concept of “post-truth” into mainstream culture, making us doubt ourselves and our perceptions. Framing and portraying unrealistic lifestyles for gaining viral traction is something that many internet users are doing in this highly competitive world.

But that’s not how it should be. The real beauty lies in true life, in all its ugliness. True life might not be as perfect as it is portrayed on your Instagram timeline, but it is the only thing we can hold on to.

In 2020, one of the most interesting trends is that post-truth is crumbling. People are interested in those who “serve realness”, not some other fake fairytale life.

3D Elements

There is no doubt that 3-D visuals can delight the viewers. But the only thing that was holding this trend from taking the market by storm was its costly price tag. But that’s not an issue anymore. Web devs can now easily employ 3-D rendering design to improve effects and to make the whole look more appealing and satisfying.

This makes complete sense, especially in the era of virtual reality. Stepping away from traditional design and landing into the land of 3-D illustrated artwork is something that can help brands stand out in a reality in which 300 new websites are created every minute.

The year 2020 is expected to witness even more immersive 3-D design.

The Spark of Split Content

This split design technique looks quite clear and has the power to showcase the message in a well-organised way.

Mix-matching the image along with text in a smart way can make a strictly business website look appealing.

Being a traditional yet smart way of portraying a message, this design trend is going to continue to draw attention. Splitting the screen by separating text and image can work wonders for you.

The Beauty of Abstract Illustrations

It is certainly true that illustrations bring life to any website design.

Smart and interactive illustrations are now basking in the spotlight. Along with having the power to showcase emotions, abstract illusions never fail to wow users.

In 2019 we’ve experienced a boom of illustrations and in the near future, it’s definitely going to stay in the up and coming design trends.

Personalisation is KEY

Personalisation is the main key to success! Anything that works well for a particular website can ruin another one. Well, that’s why customisation is something you should always consider.

From customising graphics to picking up smart colour schemes, the “one size fits all” approach is going to dissipate in 2020 and this new year is going to be all about bringing a personalised experience to every single website.

The effect of Parallax scrolling

With time, the Parallax scrolling effect is becoming quite famous among web designers and developers.

Under this design, a particular animation is adjusted in multiple layers, but with some smart variations in speed. To develop a pleasing visual experience, the image in the background moves a little slower than the front image. Combined with the other trends, parallax scrolling is going to make beautiful websites happen in 2020.

MASSIVE FONT SIZE

This typography-based trend is not something to be overlooked. Over-sized lettering gathers all the attention that your brand deserves.

Bold typography is going to help your business message to be reflected in the best possible way. Font size and style definitely plays an important role in grabbing the ever-slipping user attention.

Conclusion

Well, the bottom line is that with all these smart trends, diversity will fully take web design to the next level.

Web design is now embracing futurism at a much higher pace. And there is more to come in the near future as tastes, expectations, and preferences of web users slowly change over time. But, for now, these are our predictions about what is going to dominate the web design landscape in 2020.

 

Nathan da Silva - Profile

Posted by: Nathan da Silva

Nathan is the Founder of Silva Web Designs. He is passionate about web development and web site design. His expertise is WordPress & Magento as well as many other frameworks. Would you like to work with Nathan? Send him an email on [email protected]

It’s good to share

How to create an Advanced AdWords Budget Script

Why use an AdWords Script to solve the problem with a budget?

So you’ve set up AdWords to gain more traffic to your website but you want to limit how much you spend on your campaigns per day/month/year, well this is exactly what we are going to show you today. We’ve heard a fair few horror stories where incorrect setup have caused businesses to pay high fees to Google AdWords simply because it wasn’t set up correctly. We are going to show you three case scenarios in which scripts can monitor exactly how much you spend and not exceed your budget.

The advanced budget script that we will be showing you today can be used to address several use cases:

1. Enforce Account Budgets

Firstly, budgets in AdWords are set at the campaign level. You can use a shared budget and assign all campaigns to it to get an account-level budget, but then you lose the ability to dedicate more money to higher performing campaigns.

We think shared budgets are useful because many advertisers don’t have time to manage things as granularly as they should. However, for those who want to get the very best results it’s better to manage the budget for each campaign separately.

So the first use case is simple, the script pauses all active campaigns when an account’s cost goes above a certain threshold for the month. You still set campaign level daily budgets but as soon as the total cost for the account gets too high, everything is paused.

2. Maintain Monthly Budgets

It could be argued that simply dividing a monthly budget evenly between all days is a fine way to turn the daily budgets AdWords uses into the monthly budgets that a typical business thinks about. But just like shared budgets are not great because you give up granularity, daily budgets that are the same every day don’t give you the control to spend money when it will lead to the best returns.

A great example of this in which we’ll use today is the month of December, since, with this particular month, we may not want to share the budget equally between every day of the month. Retailers know that the biggest opportunity for moving merchandise will come before Christmas. That being said, you might set higher daily budgets for Dec 1-24 than for Dec 25-31. That creates the risk that you could spend more than intended for the entire month. This script lets advertisers enforce a budget for a date range other than daily so that a campaign can automatically be paused when the cost starts to exceed the maximum allowed for the month, regardless of the daily budget.

The script can also be set to check budgets daily, weekly from Sunday through today, or weekly from Monday through today.

3. Apply Small Budgets To Tests

Let’s say you have a campaign that’s working really well and for which you’ve set a high budget, you might be worried that testing new ads or keywords could lead to accidentally spending a lot of money on something that performs worse than your expectations. Here’s a simple example that illustrates this issue. Let’s say you have a campaign with a £500 budget with all exact match keywords that usually produce a ROAS of about 10. Then you add a pretty generic broad match keyword and before you know it this new keyword has spent 90% of that campaign’s budget and is losing money. It stole the budget from what you knew was going to perform well and now you’re left with a loss for the day.

With this script, you can enforce small budgets down to the keyword or ad level. These experimental items can still go into your existing campaigns so you don’t need to maintain separate campaigns for testing.

The script can check budgets at the keyword, ad, ad group, campaign or account level.

The Script & Script Settings

Awesome, we’ve told you all about the script and the benefits and now you want to implement it right? Okay, great, first we are going to show you the code snippet to run on AdWords but make sure to check the script settings after the code script to ensure you have set it up correctly to your expectations!


DEBUG = 0;
 

function main() {

  Logger.log("");
  
//var SETTINGS = new Object();
  currentSetting = new Object();
  currentSetting.scope = "Account";	
  currentSetting.maxCost = getFloat("1000");
  currentSetting.budgetPeriod = "Monthly";
  currentSetting.labelName = "";
  currentSetting.labelToAdd = "stopped by budget script";
  currentSetting.email = "[email protected]";
  currentSetting.pauseItems = "yes";
  currentSetting.reEnableItems = "yes";
  
  currentSetting.logText = "";
  
  currentSetting.currencyCode = AdWordsApp.currentAccount().getCurrencyCode();
  
  switch(currentSetting.reEnableItems.toLowerCase()) {
    case "no":
      currentSetting.reEnableAtStartOfNewPeriod = 0;
      break;
    case "yes":
      currentSetting.reEnableAtStartOfNewPeriod = 1;
      break;
  }
  
  switch(currentSetting.pauseItems.toLowerCase()) {
    case "no":
      currentSetting.pauseWhenExceeds = 0;
      break;
    case "yes":
      currentSetting.pauseWhenExceeds = 1;
      break;
  }
  
  switch(currentSetting.budgetPeriod) {
	  case "Daily":
	  	//Logger.log("daily");
      currentSetting.dateRange = "TODAY";
	  	break;
	  case "Weekly Sun-Sat":
        //Logger.log("weekly sun");
        currentSetting.dateRange = "THIS_WEEK_SUN_TODAY";
	  	break;
      case "Weekly Mon-Sun":
        //Logger.log("weekly mon");
        currentSetting.dateRange = "THIS_WEEK_MON_TODAY";
	  	break;
	  case "Monthly":
        //Logger.log("monthly"); 
	  	currentSetting.dateRange = "THIS_MONTH";
        break;
  }
  
  
    
  var thenAction = "Pause"; // Alert
  var condition1 = "Cost > " + currentSetting.maxCost;
  var labelCondition = "Status = ENABLED";
  if(currentSetting.labelName) {
    labelCondition = "LabelNames CONTAINS_ANY ['" + currentSetting.labelName + "']";
  }
  if(DEBUG == 1) Logger.log("labelCondition: " + labelCondition);

  currentSetting.enabledCounter = 0;
  currentSetting.deletedCounter = 0;
  currentSetting.pausedCounter = 0;
  currentSetting.enabledList = new Array();
  currentSetting.pausedList = new Array();
  currentSetting.deletedList = new Array();
  
  
  // Set up labels
  var labelToAddText = currentSetting.labelToAdd + " (" + currentSetting.budgetPeriod + ")";
  Logger.log("labelToAddText: " + labelToAddText);
  currentSetting.labelToAdd = labelToAddText;
  if(currentSetting.labelToAdd) {
    createLabel(currentSetting.labelToAdd, "This label is used by an account automation. Its name should not be changed.");
  }
  
  
  if(currentSetting.reEnableAtStartOfNewPeriod) {
    // Check current date, day and time
    currentSetting.thisAccountTime = getTimeInThisAccount();
    var currentHour = currentSetting.thisAccountTime.HH;
    //Logger.log("currentHour: " + currentHour);
    var dayOfWeek = currentSetting.thisAccountTime.dayOfWeek;
    //Logger.log("dayOfWeek: " + dayOfWeek);
    var dd = currentSetting.thisAccountTime.dd;
    //Logger.log("dd: " + dd);
    
    //Re-activate paused items when start of a new period
    var pluralText = "";
    if(currentSetting.budgetPeriod.toLowerCase().indexOf("daily") != -1) {
      if(currentHour == 0) {
        reEnable();
        var emailType = "Notification";
        var body = 'Resetting daily budgets';
        if(currentSetting.enabledList.length > 0) {
          body += "<br/>";
          body += "Re-Enabled Because We Started a New Daily Budget Period:<br/><ul>";
          
          for(var itemCounter = 0; itemCounter < currentSetting.enabledList.length; itemCounter++) {
            var item = currentSetting.enabledList[itemCounter];
            body += "<li>" + item + "</li>";
          }
          body += "</ul>";
        }
        sendEmailNotifications(currentSetting.email, "Daily Budgets Reset", body, emailType );
        if(currentSetting.enabledList.length > 1) pluralText = "s";
        currentSetting.logText += currentSetting.enabledList.length + " " + currentSetting.scope + pluralText + " enabled. ";
      }
    } else if(currentSetting.budgetPeriod.toLowerCase().indexOf("weekly sun-mon") != -1) {
      if(dayOfWeek == 7 && currentHour == 0) {
        reEnable();
        var emailType = "Notification";
        var body = 'Resetting weekly budgets<br/>';
        if(currentSetting.enabledList.length > 0) {
          body += "<br/>";
          body += "Re-Enabled Because We Started a New Weekly Budget Period:<br/><ul>";
          
          for(var itemCounter = 0; itemCounter < currentSetting.enabledList.length; itemCounter++) {
            var item = currentSetting.enabledList[itemCounter];
            body += "<li>" + item + "</li>";;
          }
          body += "</ul>";
        }
        sendEmailNotifications(currentSetting.email, "Weekly Budgets Reset", body, emailType );
        if(currentSetting.enabledList.length > 1) pluralText = "s";
        currentSetting.logText += currentSetting.enabledList.length + " " + currentSetting.scope + pluralText + " enabled. ";
      }
    } else if(currentSetting.budgetPeriod.toLowerCase().indexOf("weekly mon-sun") != -1) {
      if(dayOfWeek == 1 && currentHour == 0) {
        reEnable();
        var emailType = "Notification";
        var body = 'Resetting weekly budgets<br/>';
        if(currentSetting.enabledList.length > 0) {
          body += "<br/>";
          body += "Re-Enabled Because We Started a New Weekly Budget Period:<br/><ul>";
          
          for(var itemCounter = 0; itemCounter < currentSetting.enabledList.length; itemCounter++) {
            var item = currentSetting.enabledList[itemCounter];
            body += "<li>" + item + "</li>";;
          }
          body += "</ul>";
        }
        sendEmailNotifications(currentSetting.email, "Weekly Budgets Reset", body, emailType );
        if(currentSetting.enabledList.length > 1) pluralText = "s";
        currentSetting.logText += currentSetting.enabledList.length + " " + currentSetting.scope + pluralText + " enabled. ";
      }
    } else if(currentSetting.budgetPeriod.toLowerCase().indexOf("monthly") != -1) {
      if(dd == 1 && currentHour == 0) {
        reEnable();
        var emailType = "Notification";
        var body = 'Resetting monthly budgets on the ' + dd + 'st of the month at ' + currentHour + "h<br/>";
        if(currentSetting.enabledList.length > 0) {
          body += "<br/>";
          body += "Re-Enabled Because We Started a New Monthly Budget Period:<br/><ul>";
          
          for(var itemCounter = 0; itemCounter < currentSetting.enabledList.length; itemCounter++) {
            var item = currentSetting.enabledList[itemCounter];
            body += "<li>" + item + "</li>";;
          }
          body += "</ul>";
        }
        sendEmailNotifications(currentSetting.email, "Monthly Budgets Reset", body, emailType );
        if(currentSetting.enabledList.length > 1) pluralText = "s";
        currentSetting.logText += currentSetting.enabledList.length + " " + currentSetting.scope + pluralText + " enabled. ";
      }
    }
  }
  
  // ------------------------------
  // CHECK IF BUDGETS HAVE EXCEEDED
  // ------------------------------
  
  // Account
  if(currentSetting.scope.toLowerCase().indexOf("account") != -1) {
    var fields = "Cost";
    var reportIterator = AdWordsApp.report('SELECT ' + fields +
      ' FROM ACCOUNT_PERFORMANCE_REPORT DURING ' + currentSetting.dateRange).rows();
    
    while(reportIterator.hasNext()) {
    var row = reportIterator.next();
    var cost = getFloat(row["Cost"]).toFixed(2);
      if(DEBUG == 1) Logger.log("Cost: " + cost + " currentSetting.maxCost: " + currentSetting.maxCost);
    }
    if(cost > currentSetting.maxCost) {
      // check if all campaigns are paused
      var campaignIterator = AdWordsApp.campaigns()
      .withCondition("Status = ENABLED")
      .get();
      
      var numActiveCampaigns = campaignIterator.totalNumEntities();
      
      if(numActiveCampaigns > 0) {
        var body = "The total cost for the account '" + AdWordsApp.currentAccount().getName() + "' (" + AdWordsApp.currentAccount().getCustomerId() + ") was " + currentSetting.currencyCode + " " + cost
                   + " as of the time of this email. The maximum allowed cost is " + currentSetting.currencyCode + " " + currentSetting.maxCost.toFixed(2) + " " + currentSetting.budgetPeriod + "." +
                     "<br/><br/>The account will continue to accrue more cost unless you take action like pausing all campaigns.";
        var emailType = "warning";
        sendEmailNotifications(currentSetting.email, "Account Budget Exceeded", body, emailType );
        //Logger.log("email sent");
        currentSetting.logText = "Account cost of " + currentSetting.currencyCode + " " + cost + " exceeds the maximum " + currentSetting.budgetPeriod + " cost of " + currentSetting.currencyCode + " " + currentSetting.maxCost.toFixed(2);
        
        if(currentSetting.pauseWhenExceeds) {
          while (campaignIterator.hasNext()) {
            var campaign = campaignIterator.next();
            var name = campaign.getName();
            campaign.pause();
            campaign.applyLabel(currentSetting.labelToAdd);
            currentSetting.pausedCounter++;
            currentSetting.pausedList.push(name);
          }
        }
      }
    } else {
      Logger.log("Account cost is currently " + currentSetting.currencyCode + cost + " and this does not exceed the allowed budget for the account.");
    }
  }
  
  // Campaigns
  else if(currentSetting.scope.toLowerCase().indexOf("campaign") != -1) {
    
    if(currentSetting.labelName != "") {
      var isLabelUsed = checkIfLabelIsUsed(currentSetting.scope, currentSetting.labelName);
    } 
    
    
    if(DEBUG == 1) Logger.log(condition1);
    if(DEBUG == 1) Logger.log(labelCondition);
    if(DEBUG == 1) Logger.log(currentSetting.dateRange);
    
    // SEARCH AND DISPLAY CAMPAIGNS
    var iterator = AdWordsApp.campaigns()
    .withCondition(condition1)
    .withCondition("Status = ENABLED")
    .withCondition(labelCondition)
    .forDateRange(currentSetting.dateRange)
    .get();
    
    while(iterator.hasNext()){
      var item = iterator.next();
      var name = item.getName();
      var cost = item.getStatsFor(currentSetting.dateRange).getCost();
      item.applyLabel(currentSetting.labelToAdd);
      Logger.log("Match found: '" + name + "' cost: " + currentSetting.currencyCode + " " + cost);
      if(currentSetting.pauseWhenExceeds) item.pause();
      currentSetting.pausedCounter++;
      currentSetting.pausedList.push(name + " cost: " + currentSetting.currencyCode + " " + cost);
    } 
    
    
    
    if(currentSetting.pausedCounter == 0) {
      Logger.log("No campaigns exceeded their allowed budgets for the budget period.");
    } else {
      //Logger.log("something else");
    }
    
    
  } else
  
    
  // Ad Groups
  if(currentSetting.scope.toLowerCase().indexOf("ad group") != -1) {
    
    if(currentSetting.labelName != "") {
      var isLabelUsed = checkIfLabelIsUsed(currentSetting.scope, currentSetting.labelName);
    } 
    
    // SEARCH AND DISPLAY CAMPAIGNS
    var iterator = AdWordsApp.adGroups()
     .withCondition(condition1)
     .withCondition("Status = ENABLED")
     .withCondition(labelCondition)
     .forDateRange(currentSetting.dateRange)
     .get();
    
    while(iterator.hasNext()){
      var item = iterator.next();
      var name = item.getName();
      var cost = item.getStatsFor(currentSetting.dateRange).getCost();
      var campaignName = item.getCampaign().getName();
      Logger.log("Match found: " + "campaign: '" + campaignName + "' ad group: '" + name + "' cost: " + currentSetting.currencyCode + " " + cost);
      item.applyLabel(currentSetting.labelToAdd);
      if(currentSetting.pauseWhenExceeds) item.pause();
      currentSetting.pausedCounter++;
      currentSetting.pausedList.push("campaign: '" + campaignName + "' ad group: '" + name + "'" + " cost: " + currentSetting.currencyCode + " " + cost);
    } 
    
    
    
    if(currentSetting.pausedCounter == 0) {
      Logger.log("No ad groups exceeded their allowed budgets for the budget period.");
    }
    
    
    // Ads
  } else if(currentSetting.scope.toLowerCase().indexOf("ad text") != -1) {
    
    if(currentSetting.labelName != "") {
      var isLabelUsed = checkIfLabelIsUsed(currentSetting.scope, currentSetting.labelName);
    } 
    
    var adIterator = AdWordsApp.ads()
     .withCondition(condition1)
     .withCondition("Status = ENABLED")
     .withCondition(labelCondition)
     .forDateRange(currentSetting.dateRange)
     .get();
    
    
    while(adIterator.hasNext()) {
      
      var ad = adIterator.next();
      var adHeadline = ad.getHeadline();
      var description1 = ad.getDescription1();
      var description2 = ad.getDescription2();
      var displayUrl = ad.getDisplayUrl();
      var cost = ad.getStatsFor(currentSetting.dateRange).getCost();
      ad.applyLabel(currentSetting.labelToAdd);
      
      Logger.log("Match found: " + adHeadline + " " + description1 + " " + description2 + " " + displayUrl  + " -- cost: " + currentSetting.currencyCode + " " + cost);
      var fullAdText = adHeadline + " " + description1 + " " + description2 + " " + displayUrl;
      if(currentSetting.pauseWhenExceeds) ad.pause();
      currentSetting.pausedCounter++;
      currentSetting.pausedList.push(fullAdText + " -- cost: " + currentSetting.currencyCode + " " + cost);
    } // while(adIterator.hasNext())
    
    if(currentSetting.pausedCounter == 0) {
      Logger.log("No ads exceeded their allowed budgets for the budget period.");
    }
    
    
    // Keywords
  } else if(currentSetting.scope.toLowerCase().indexOf("keyword") != -1) {
    
    if(currentSetting.labelName != "") {
      var isLabelUsed = checkIfLabelIsUsed(currentSetting.scope, currentSetting.labelName);
    } 
    
    var iterator = AdWordsApp.keywords()
     .withCondition(condition1)
     .withCondition("Status = ENABLED")
     .withCondition(labelCondition)
     .forDateRange(currentSetting.dateRange)
     .get();
    
    while(iterator.hasNext()){
      var item = iterator.next();
      var name = item.getText();
      var cost = item.getStatsFor(currentSetting.dateRange).getCost();
      var campaignName = item.getCampaign().getName();
      var adGroupName = item.getAdGroup().getName();
      Logger.log("Match found: " + "campaign: '" + campaignName + "' ad group: '" + adGroupName + "' kw: '" + name + "' cost: " + currentSetting.currencyCode + " " + cost);
      item.applyLabel(currentSetting.labelToAdd);
      if(currentSetting.pauseWhenExceeds) item.pause();
      currentSetting.pausedList.push("campaign: '" + campaignName + "' ad group: '" + adGroupName + "' kw: '" + name + "'" + " cost: " + currentSetting.currencyCode + " " + cost);
      currentSetting.pausedCounter++;
    } // while iterator hasnext
    
    if(currentSetting.pausedCounter == 0) {
      Logger.log("No keywords exceeded their allowed budgets for the budget period.");
    }
    
    
  } // if scope == keyword
  
  
  currentSetting.pausedList.sort();
  if(currentSetting.pausedCounter > 1) {
    var pluralText = "s";
  } else {
    var pluralText = "";
  }
  var body = currentSetting.pausedCounter + " " + currentSetting.scope + pluralText + " exceeded the " + currentSetting.budgetPeriod + " maximum cost of " + currentSetting.currencyCode + " " + currentSetting.maxCost.toFixed(2) + ". ";
  if(currentSetting.pauseWhenExceeds) body += "They were paused by the script.";
  body += "<br/><ul>";
  
  if(DEBUG == 1) Logger.log("currentSetting.email: " + currentSetting.email + " currentSetting.pausedCounter: " + currentSetting.pausedCounter);
  if(currentSetting.email && currentSetting.pausedCounter > 0) {
    
    var changesMadeOrSuggestedText = "suggested";
    if(currentSetting.pauseWhenExceeds) changesMadeOrSuggestedText = "made";
    
    var pausedOrSuggestedText = "exceeded budget";
    if(currentSetting.pauseWhenExceeds) pausedOrSuggestedText = "paused";
    
    var subject = "Automated Rules for " + AdWordsApp.currentAccount().getName() + ": " + currentSetting.pausedCounter + " change" + pluralText + " " + changesMadeOrSuggestedText;
    currentSetting.logText += currentSetting.pausedCounter + " " + currentSetting.scope + pluralText + " " + pausedOrSuggestedText;
    for(var itemCounter = 0; itemCounter < currentSetting.pausedList.length; itemCounter++) {
      var item = currentSetting.pausedList[itemCounter];
      body += "<li>" + item + "</li>";
    }
    body += "</ul><br/>";
    body += "These items were labeled '" + currentSetting.labelToAdd + "' for easy identification.<br/><br/>";
    body += "Thanks for using a free Optmyzr.com script. Try our Enhanced Scripts for AdWords which have several benefits:<ul><li>automatically updated when AdWords changes</li><li>works with MCC or individual accounts</li><li>change settings without touching a single line of code</li></ul>";
    body += "Get a 2 week free trial at <a href='https://www.optmyzr.com?utm_campaign=free_scripts'>optmyzr.com</a>";
    
    
    var emailType = "notification";
    if(DEBUG == 1) Logger.log("sending email...");
    sendEmailNotifications(currentSetting.email, subject, body, emailType )
  }
}

  

  
  function reEnable(){
  // Campaigns or Account
  if(currentSetting.scope.toLowerCase().indexOf("campaign") != -1 || currentSetting.scope.toLowerCase().indexOf("account") != -1) {
    var iterator = AdWordsApp.campaigns()
     .withCondition("LabelNames CONTAINS_ANY ['" + currentSetting.labelToAdd + "']")
     .get();
    
    while(iterator.hasNext()){
      var item = iterator.next();
      var name = item.getName();
      item.removeLabel(currentSetting.labelToAdd)
      Logger.log("Enabling campaign: " + name);
      item.enable();
      currentSetting.enabledCounter++;
      currentSetting.enabledList.push(name); 
    } 
    
    // SHOPPING CAMPAIGNS
    var iterator = AdWordsApp.shoppingCampaigns()
     .withCondition("LabelNames CONTAINS_ANY ['" + currentSetting.labelToAdd + "']")
     .get();
    
    while(iterator.hasNext()){
      var item = iterator.next();
      var name = item.getName();
      item.removeLabel(currentSetting.labelToAdd)
      Logger.log("Enabling campaign: " + name);
      item.enable();
      currentSetting.enabledCounter++;
      currentSetting.enabledList.push(name); 
    } 
    
  } else
  
    
  // Ad Groups
  if(currentSetting.scope.toLowerCase().indexOf("ad group") != -1) {

    var iterator = AdWordsApp.adGroups()
    .withCondition("LabelNames CONTAINS_ANY ['" + currentSetting.labelToAdd + "']")
    .get();
    
    while(iterator.hasNext()){
      var item = iterator.next();
      var name = item.getName();
      var campaignName = item.getCampaign().getName();
      Logger.log("Enabling campaign: '" + campaignName + "' ad group: '" + name + "'");
      item.removeLabel(currentSetting.labelToAdd);
      
      item.enable();
      currentSetting.enabledCounter++;
      currentSetting.enabledList.push("campaign: '" + campaignName + "' ad group: '" + name + "'");
    }
    
    // SHOPPING AD GROUPS
    var iterator = AdWordsApp.shoppingAdGroups()
    .withCondition("LabelNames CONTAINS_ANY ['" + currentSetting.labelToAdd + "']")
    .get();
    
    while(iterator.hasNext()){
      var item = iterator.next();
      var name = item.getName();
      var campaignName = item.getCampaign().getName();
      Logger.log("Enabling campaign: '" + campaignName + "' ad group: '" + name + "'");
      item.removeLabel(currentSetting.labelToAdd);
      
      item.enable();
      currentSetting.enabledCounter++;
      currentSetting.enabledList.push("campaign: '" + campaignName + "' ad group: '" + name + "'");
    }
    
    
    
    
    // Ads
  } else if(currentSetting.scope.toLowerCase().indexOf("ad text") != -1) {
    
    var adIterator = AdWordsApp.ads()
    .withCondition("LabelNames CONTAINS_ANY ['" + currentSetting.labelToAdd + "']")
    .get();
    
    
    while(adIterator.hasNext()) {
      
      var ad = adIterator.next();
      var adHeadline = ad.getHeadline();
      var description1 = ad.getDescription1();
      var description2 = ad.getDescription2();
      var displayUrl = ad.getDisplayUrl();
      ad.removeLabel(currentSetting.labelToAdd);
      
      Logger.log("Enabling ad: " + adHeadline + " " + description1 + " " + description2 + " " + displayUrl);
      var fullAdText = adHeadline + " " + description1 + " " + description2 + " " + displayUrl;
      
      
      ad.enable();
      currentSetting.enabledCounter++;
      currentSetting.enabledList.push(fullAdText);
      
    } // while(adIterator.hasNext())
    
    
    
    // Keywords
  } else if(currentSetting.scope.toLowerCase().indexOf("keyword") != -1) {
    
    var iterator = AdWordsApp.keywords()
    .withCondition("LabelNames CONTAINS_ANY ['" + currentSetting.labelToAdd + "']")
    .get();
     
    
    while(iterator.hasNext()){
      var item = iterator.next();
      var name = item.getText();
      var campaignName = item.getCampaign().getName();
      var adGroupName = item.getAdGroup().getName();
      Logger.log("Enabling campaign: '" + campaignName + "' ad group: '" + adGroupName + "' kw: '" + name + "'");
      item.removeLabel(currentSetting.labelToAdd);
      
      
      item.enable();
      currentSetting.enabledCounter++;
      currentSetting.enabledList.push("campaign: '" + campaignName + "' ad group: '" + adGroupName + "' kw: '" + name + "'");
      
    } // while iterator hasnext
  } // if scope == keyword
}

/* getTimeInThisAccount
// ----------------------
// Deals with getting the current time and date in this account
// using the timezone settings of the account.

// returns all values in currentSetting.thisAccountTime object
*/
function getTimeInThisAccount() {
  var weekday = new Array(7);
  weekday[0]=  "Sunday";
  weekday[1] = "Monday";
  weekday[2] = "Tuesday";
  weekday[3] = "Wednesday";
  weekday[4] = "Thursday";
  weekday[5] = "Friday";
  weekday[6] = "Saturday";
  
  var timeZone = AdWordsApp.currentAccount().getTimeZone();
  //Logger.log("time zone: " + timeZone);
  var date = new Date();
  
  var thisAccountTime = new Object();
  thisAccountTime.dayOfWeek = parseInt(Utilities.formatDate(date, timeZone, "uu"));
  thisAccountTime.dd =parseInt(Utilities.formatDate(date, timeZone, "dd"));
  thisAccountTime.weekday = weekday[thisAccountTime.dayOfWeek];
  thisAccountTime.HH = parseInt(Utilities.formatDate(date, timeZone, "HH"));
  thisAccountTime.timeZone = timeZone;
  
  
  return(thisAccountTime);
}

/* createLabel(name, description, backgroundColor)
// ------------
// Makes sure the label doesn't already exists before creating it
// 
*/
function createLabel(name, description, backgroundColor) {
    
    var labelIterator = AdWordsApp.labels()
     .withCondition("Name CONTAINS '" + name + "'")
     .get();
    
    if(labelIterator.hasNext()) {
      Logger.log("Label already exists");
    } else {
      Logger.log("Label needs to be created: " + name + " desc: " + description + " color: " + backgroundColor);
      if(description && backgroundColor) {
        AdWordsApp.createLabel(name, description, backgroundColor);
        Logger.log("Label created");
      } else if (description) {
        AdWordsApp.createLabel(name, description);
        Logger.log("Label created");
      } else {
        AdWordsApp.createLabel(name);
        Logger.log("Label created");
      }
    }
  }	  
  /* checkIfLabelIsUsed(scope, labelName)
// --------------------------------------
// Check is a label that will be used to search for entities is actually used by at
// least 1 of those entities.
//
// This prevents weird cases where the script fails without error due to a missing label
// 
*/
  function checkIfLabelIsUsed(scope, labelName) {
    var entitiesWithLabel = 0;
    var labelIterator = AdWordsApp.labels()
    .withCondition('Name = "' + labelName + '"')
    .get();
    if (labelIterator.hasNext()) {
      var label = labelIterator.next();
      if(scope.toLowerCase().indexOf("campaign") != -1) entitiesWithLabel = label.campaigns().get().totalNumEntities();
      if(scope.toLowerCase().indexOf("ad group") != -1) entitiesWithLabel = label.adGroups().get().totalNumEntities();
      if(scope.toLowerCase().indexOf("ad text") != -1) entitiesWithLabel = label.ads().get().totalNumEntities();
      if(scope.toLowerCase().indexOf("keyword") != -1) entitiesWithLabel = label.keywords().get().totalNumEntities();
      return(entitiesWithLabel);
    }
    
    if(!entitiesWithLabel) {
      Logger.log("No campaigns use the label '" + currentSetting.labelName + "' so this script won't do anything. Update your settings on optmyzr.com with the name of a label that is used for at least 1 campaign.");
    } 
  }
  
  /*
  // emailType can be: notification or warning
  */
  function sendEmailNotifications(emailAddresses, subject, body, emailType ) {
	
    if(emailType.toLowerCase().indexOf("warning") != -1) {
      var finalSubject = "[Warning] " + subject + " - " + AdWordsApp.currentAccount().getName() + " (" + AdWordsApp.currentAccount().getCustomerId() + ")"
    } else if(emailType.toLowerCase().indexOf("notification") != -1) {
      var finalSubject = "[Notification] " + subject + " - " + AdWordsApp.currentAccount().getName() + " (" + AdWordsApp.currentAccount().getCustomerId() + ")"
    }
    
    if(AdWordsApp.getExecutionInfo().isPreview()) {
      var finalBody = "<b>This script ran in preview mode. No changes were made to your account.</b><br/>" + body;
    } else {
      var finalBody = body;
    }
    
	MailApp.sendEmail({
        to:emailAddresses, 
        subject:  finalSubject,
        htmlBody: finalBody
      });
    
    if(DEBUG == 1) Logger.log("email sent to " + emailAddresses + ": " + finalSubject);

  }
  
  function getFloat (input) {
    if(!input || input == "" || typeof(input) === 'undefined') var input = "0.0";
    input = input.toString();
    var output = parseFloat(input.replace(/,/g, ""));
    return output;
  }

Wooooah, that’s a crazy long script, right? Fortunately there are only a few parameters at the top in which you have to tailor to your specific needs.

Okay, so first things first, install the above code to an individual AdWords account (NOT an MCC account).

Here are the lines you’ll need to update in the script to make it work:


<strong>currentSetting.scope = "Account";</strong>

Enter a value of either: Account, Campaign, Ad Group, Keyword, or Ad
This is the level at which the maximum budget will be enforced.


<strong>currentSetting.maxCost = parseFloat("1");</strong>

Enter a decimal value that represents the maximum cost each item is allowed to have.


currentSetting.budgetPeriod = "Daily";

Enter a value of either: Daily, Monthly, Weekly Sun-Sat, Weekly Mon-Sun
This is the time frame for the budget, i.e. the period during which the maximum cost can be accrued.


currentSetting.labelName = "Label name to check";

Enter the name of the label that you’ve added to the items you want the script to check. If you want to check all items of your selected scope (e.g. all keywords), then leave this blank.


currentSetting.labelToAdd = "stopped by budget script";

Enter the name of the label you want the script to add to all items that exceed the allowed budget. This will make it easy for you to find these items in an account, and it is also needed for the script to know what should be re-enabled at the start of a new period.


currentSetting.email = "[email protected]";

Enter the email address of the person to notify whenever a budget has been exceeded or whenever the script makes any changes to the account.


currentSetting.pauseItems = "yes";

Enter a value of either: yes, no
This says if the script should pause items that exceeded the budget (yes) or not (no).


currentSetting.reEnableItems = "yes";

Enter a value of either: yes, no
This says if the script should re-enable any items that were paused by the script when a new budget period commences. The script must be set to run hourly for this to work.

Conculusion

This is a fairly simple script, to be honest, but hopefully, it will help you overcome some of the issues related to how AdWords treats budgets. We recently started using Google AdWords and have used the above script to combat our daily/monthly and yearly budgets in which we spent on Google AdWords, we’ve tested it for quite a while now and it seems pretty solid!

As always, we love to help others… and we hope this helps you too!

Let us know in the comments if this has helped you… If you have any pointers for further improvements… awesome! let us know and we’ll update this blog post to help future users.

 

Nathan da Silva - Profile

Posted by: Nathan da Silva

Nathan is the Founder of Silva Web Designs. He is passionate about web development and web site design. His expertise is WordPress & Magento as well as many other frameworks. Would you like to work with Nathan? Send him an email on [email protected]

It’s good to share